文本文件“红楼梦. txt”中包含了《红楼梦》小说前20章内容,“ 停用词. txt”包含了需要排除的词语。请修改模板,实现以下功能。1.对“红楼梦. txt”中文本进行分词,并对人物名称进行归-化处理,仅归一化以下内容:凤姐、凤姐儿、凤丫头归-为凤姐
宝玉、二爷、宝二爷归-为宝玉
黛玉、颦儿、林妹妹、黛玉道归-为黛玉
宝钗、宝丫头归一为宝钗
贾母、老祖宗归-为贾母
袭人、袭人道归一为袭人
贾政、贾政道归一为贾政
贾链、琏二爷归一为贾琏
2.不统计“停用词.txt"文件中包含词语的词频(名字必须大于一个字)。
3.提取出场次数不少于40次的人物名称,将人物名称及其出场次教按照递减排序,保存到result.csv文件中,出场次数相同的.则按照人物名称的字符顺序排序。
输出示例
宝玉,597
凤姐,296
一个,179
如今,132
黛玉,113
一面,112
f = "红楼梦.txt"
sf = "停用词.txt"
凤姐=['凤姐','凤姐儿','凤丫头']
宝玉=['宝玉','二爷','宝二爷']
黛玉=['黛玉','颦儿','林妹妹','黛玉道']
宝钗=['宝钗','宝丫头']
贾母=['贾母','老祖宗']
袭人=['袭人','袭人道']
贾政=['贾政','贾政道']
贾琏=['贾琏','琏二爷']
fi=open(f,'r',encoding='utf-8')
fi1=open(sf,'r',encoding='utf-8')
停用=fi1.read().strip('\n')
d={}
for line in fi:
words=jieba.lcut(line)
for word in words:
if len(word)<2:
continue
if word in 停用:
continue
if word in 凤姐:
d['凤姐']=d.get('凤姐',0)+1
continue
if word in 宝玉:
d['宝玉']=d.get('宝玉',0)+1
continue
if word in 黛玉:
d['黛玉']=d.get('黛玉',0)+1
continue
if word in 宝钗:
d['宝钗']=d.get('宝钗',0)+1
continue
if word in 贾母:
d['贾母']=d.get('贾母',0)+1
continue
if word in 袭人:
d['袭人']=d.get('袭人',0)+1
continue
if word in 贾政:
d['贾政']=d.get('贾政',0)+1
continue
if word in 贾琏:
d['贾琏']=d.get('贾琏',0)+1
continue
d[word]=d.get(word,0)+1
fi.close()
fi1.close()
fo=open('result.csv','w')
ls=list(d.items())
ls.sort(key=lambda x:x[1],reverse=True)
for k in ls[:40]:
fo.write("{},{}\n".format(k[0],k[1]))
fo.close()