NLP&Python笔记——列表/字符串基础操作与FreqDist类
一. 列表&字符串
1. 列表 list [ ]
列表是python中使用最频繁的数据类型。列表中元素的类型可以不相同,它支持数字,字符串甚至可以包含列表。
方法 |
描述 |
list.append(x) |
把一个元素添加到列表的结尾,相当于 a[len(a):] = [x]。 |
list.extend(L) |
通过添加指定列表的所有元素来扩充列表,相当于 a[len(a):] = L。 |
list.insert(i,x) |
在指定位置插入一个元素。第一个参数是准备插入到其前面的那个元素的索引,例如 a.insert(0, x) 会插入到整个列表之前,而 a.insert(len(a), x) 相当于 a.append(x)。 |
list.remove(x) |
删除列表中值为 x 的第一个元素。如果没有这样的元素,就会返回一个错误。 |
list.pop([i]) |
从列表的指定位置删除元素,并将其返回。如果没有指定索引,a.pop()返回最后一个元素。元素随即从列表中被删除。(方法中 i 两边的方括号表示这个参数是可选的,而不是要求你输入一对方括号,你会经常在 Python 库参考手册中遇到这样的标记。) |
list.clear() |
移除列表中的所有项,等于del a[:]。 |
list.index(x) |
返回列表中第一个值为 x 的元素的索引。如果没有匹配的元素就会返回一个错误。 |
list.count(x) |
返回 x 在列表中出现的次数。 |
list.sort() |
对列表中的元素进行排序。 |
list.reverse() |
倒排列表中的元素。 |
list.copy() |
返回列表的浅复制,等于a[:]。 |
List1 + List2 |
把后一个列表连接到前一个列表后面,返回一个列表。 |
List1 * n |
将列表复制n遍,返回一个列表。 |
‘sep’.join(List) |
以sep作为分隔符,将seq所有的元素合并成一个新的字符串 |
2. 字符串 String
符号:单引号(' )、双引号(" )、三引号(''' """)均可
一些对列表的操作也能用在字符串上。
分割:String.split(str) 通过指定分隔符str对字符串进行切片。
二. 频率分布类FreqDist
利用nltk统计频率分布,可以使用频率分布类FreqDist,其中常用函数如下:
例子 |
描述 |
fdist=FreqDist(samples) |
创建包含指定样本的频率分布 |
fdist.inc(sample) |
增加样本 |
fdist[‘monstrous’] |
计数给定样本出现的次数 |
fdist.freq(‘monstrous’) |
给定样本的频率 |
fdist.N() |
样本总数 |
fdist.keys() |
以频率递减顺序排序的样本链表 |
for sample in fdist: |
以频率递减的顺序遍历样本 |
fdist.max() |
数值最大的样本 |
fdist.tabulate() |
绘制频率分布表 |
fdist.plot() |
绘制频率分布图 |
fdist.plot(cumulative=True) |
绘制累计频率分布图 |
fdist < fdist2 |
测试样本在fdist中出现的频率是否小于fdist2 |
示例程序:
from nltk.book import *
fdist1 = FreqDist(text1)
print(fdist1)
v1 = list(fdist1.keys()) # 按词频排序的结果
print(v1[:50]) # 取前50的词
v2 = list(fdist1.hapaxes()) # 只出现1次的词
print(v2)
print(text1.collocations()) # 寻找搭配词
三. 数据的选择处理
Python中对数据的选择处理有一个通用模板: v = [f(w) for w in text if condition]
应用这个模板,可以对数据进行一些指定操作:
(1)取长度超过15的词
long_words = [w for w in set(text1) if len(w)>15]
(2)取长度超过15并且出现频次超过2的词
long_words = [w for w in set(text1) if len(w)>15 and fdist1[w]>2]
(3)去掉标点符号
english_punctuations = [',', '.', ':', ';', '?', '(', ')', '[', ']', '&', '!', '*', '@', '#', '$', '%']
text_list = [word for word in text_list if word not in english_punctuations]
(4)去掉停用词
stops = ['hi', 'ha', 'lol', 'oh']
text_list = [word for word in text_list if word not in stops]
(5)去掉非字母元素
text_list = [word.lower() for word in text_list if word.isalpha()]
(6)统计时不重复计算大小写不同的词
text_list = set([word.lower() for word in text_list])
选择处理时,可以借助以下词汇比较运算符:
函数 |
含义 |
s.startswith(t) |
测试s是否以t开头 |
s.endswith(t) |
测试是否以t结尾 |
t in s |
测试s中是否含有t |
s.islower() |
测试s中所有字符是否都是小写字母 |
s.isupper() |
测试s中所有字符是否都是大写字母 |
s.isalpha() |
测试s中所有字符是否都是字母 |
s.isalnum() |
测试s中是否都是字母或数字 |
s.isdigit() |
测试s中所有字符是否都是数字 |
s.istitle() |
测试s是否首字母大写(s中所有的词都首字母大写) |