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中所有的词都首字母大写)

posted @ 2018-07-18 21:15  yucen  阅读(551)  评论(0编辑  收藏  举报