操作词汇的库很多nltk,jieba等等,gensim处理语言步骤一般是先用gensim.utils工具包预处理,例如tokenize,gensim词典官网,功能是将规范化的词与其id建立对应关系
from gensim.corpora.dictionary import Dictionary
def print_dict(dic):
for key in dic:
print key,dic[key]
a = [[u'巴西',u'巴西',u'英格兰'],[u'巴西',u'西班牙',u'法国']]
b = [u'巴西',u'巴西',u'比利时',u'法国',u'法国']
# a用来构造词典
dic = Dictionary(a)
输出字典
print dic
print print_dict(dic)
可以发现,建立id与token一一映射
########dictionary信息##########
Dictionary(4 unique tokens: [u'\u6cd5\u56fd', u'\u5df4\u897f', u'\u897f\u73ed\u7259', u'\u82f1\u683c\u5170'])
2 法国
0 巴西
3 西班牙
1 英格兰
字典,{单词id,在多少文档中出现}
print dictionary.dfs #字典,{单词id,在多少文档中出现}
巴西出现2个文档中,法国、西班牙、英格兰只出现在一个文档中
{0: 2, 1: 1, 2: 1, 3: 1}
文档数目
print dic.num_docs #文档数目
print_dict(dict(dic.items()))
2
0 巴西
1 英格兰
2 法国
3 西班牙
字典,{单词id,对应的词}
print_dict(dic.id2token) #字典,{单词id,对应的词}
字典,{单词id,对应的词}
0 巴西
1 英格兰
2 法国
3 西班牙
字典,{词,对应的单词id}
print_dict(dic.token2id) #字典,{词,对应的单词id}
法国 2
巴西 0
西班牙 3
英格兰 1
所有词的个数
print dic.num_pos #所有词的个数
6
每个文件中不重复词个数的和(2+3)
print dic.num_nnz #每个文件中不重复词个数的和
5
result为b文章转换得到的词袋,列表[(单词id,词频)]
# allow_update:T or F,是否将b数据到字典中
# result返回b的词袋结果,list
# missing 丢失数据,字典类型
result, missing = dic.doc2bow(b, allow_update=False, return_missing=True)
print "词袋b,列表[(单词id,词频)]"
print result
print_dict(dic)
print_dict(missing)
词袋b,列表[(单词id,词频)]
[(0, 2), (2, 2)]
2 法国
0 巴西
3 西班牙
1 英格兰
比利时 1
输出词袋信息
print "########bow信息##########"
for _, freq in result:
print _, dic.id2token[_], freq
0 巴西 2
2 法国 2
过滤文档频率大于no_below,小于no_above*num_docs的词
print "########dictionary信息##########"
# 过滤文档频率大于no_below,小于no_above*num_docs的词
dic.filter_extremes(no_below=1, no_above=0.5, keep_n=10)