用jieba.cut()
完成分词后统计各人物的出场次数.
import jieba
import pickle
import jieba.analyse
names = {}
all_names = []
sentence = []#用来保存分词结果
text_path = '/Users/XH/Desktop/bishe/longzu.txt'
jieba.load_userdict('/Users/XH/Desktop/bishe/name.txt')
jieba.analyse.set_stop_words('/Users/XH/Desktop/bishe/stopwords.txt')
使用load_userdict()
添加自定义词典,这里把人物名字加进去,再载入停用词,这样能使分词结果更加准确。
f = open(text_path,'r')
f1 = open('/Users/XH/Desktop/bishe/name.txt','r')
#读取各人物的名字
for line in f1.readlines():
all_names.append(line.strip())
#进行分词
for line in f.readlines():#逐行读取文本
seg_list = jieba.cut(line,cut_all=False)
unique_list = []
linenames.append([])
for i in seg_list:
if i not in STOPWORD:
unique_list.append(i)
if i in all_names:
if names.get(i) is None:
names[i] += 1
sentence.append(unique_list)
print(names)
jieba.cut
返回的是一个可迭代对象,用for循环遍历即可,经过这步操作,names[]
里面就统计出了各人物出场的次数。
看看运行结果:
/Users/XH/Desktop/lianxi/venv/bin/python /Users/XH/Desktop/bishe/sada.py
Building prefix dict from the default dictionary ...
Loading model from cache /var/folders/8n/5s94235n4_jgw7tzm316c4n80000gp/T/jieba.cache
Loading model cost 0.971 seconds.
Prefix dict has been built succesfully.
{'路明非': 1787, '康斯坦丁': 7, '路鸣泽': 131, '古德里安': 225, '诺玛': 58, '楚子航': 170, '陈雯雯': 144, '诺诺': 606, '昂热': 17, '陈墨瞳': 33, '芬格尔': 328, '富山雅史': 41, '曼施坦因': 197, '恺撒': 457, '诺顿': 70, '苏茜': 15}
从这里可以很明显看出路明非是主角,出场次数远高于其他人,女一是诺诺,这与这本书的设定也相符合,说明分词结统计结果基本没问题。
然后利用jieba分词的jieba.analyse.extract_tags(sentence, topK=20, withWeight=False, allowPOS=())
进行关键词的提取
text = f.read()
tags = jieba.analyse.extract_tags(text, topK=20, withWeight=True)
print('关键词:')
for k, v in tags:
print('关键词:{} 权重:{:.3f}'.format(k, v))
f.close()
运行结果:
关键词:
关键词:路明非 权重:0.272
关键词:诺诺 权重:0.088
关键词:恺撒 权重:0.062
关键词:芬格尔 权重:0.050
关键词:古德里安 权重:0.033
关键词:曼施坦因 权重:0.030
关键词:叶胜 权重:0.027
关键词:楚子航 权重:0.026
关键词:曼斯 权重:0.025
关键词:什么 权重:0.024
关键词:陈雯雯 权重:0.022
关键词:卡塞尔 权重:0.022
关键词:一个 权重:0.021
关键词:自己 权重:0.021
关键词:路鸣泽 权重:0.020
关键词:学院 权重:0.020
关键词:没有 权重:0.020
关键词:我们 权重:0.019
关键词:他们 权重:0.019
关键词:教授 权重:0.019
在这里可以看出主角路明非的权重很高。