使用NLTK统计语料库指定人名词频返回全量结果如何解决
错误原因
- 你在编写字典推导式时,错误将循环变量命名为和人名列表同名的
character_list,且没有添加过滤条件,相当于直接把FreqDist统计的所有词汇结果全部转成了字典,自然得不到仅角色人名的统计结果。 - 没有针对目标人名列表做筛选逻辑,只保留你需要统计的人名条目。
修正后的实现代码
from urllib.request import urlopen from nltk import FreqDist from nltk.tokenize import word_tokenize target_url0 = 'http://www.gutenberg.org/files/135/135-0.txt' book_raw = urlopen(target_url0).read().decode('utf-8') word_tokens = word_tokenize(book_raw) character_list = ['Myriel','Bishop','Baptistine','Magloire','Cravatte','Valjean','Gervais','Fantine','Tholomyès' ,'Blachevelle','Dahlia','Fameuil','Favourite','Listolier','Zéphine','Cosette','Thénardier', 'Éponine','Azelma','Javert','Fauchelevent','Bamatabois','Champmathieu', 'Brevet','Simplice','Chenildieu','Cochepaille','Innocente','Reverend','Ascension','Crucifixion', 'Gavroche','Magnon', 'Gillenormand','Marius','Colonel','Mabeuf','Enjolras','Combeferre','Prouvaire', 'Feuilly','Courfeyrac','Bahorel','Lesgle','Joly','Grantaire','Patron-Minette','Brujon', 'Toussaint'] fdist_mis = FreqDist(word_tokens) # 仅筛选人名列表内的条目生成最终字典 filtered_word_freq = {name: fdist_mis.get(name, 0) for name in character_list}
补充说明
- 上述代码用
dict.get方法取值,即使某个人名没有在语料中出现,也会返回出现次数为0,不会出现键缺失的问题。 - 如果需要忽略大小写统计,可以在分词后统一将词汇转为小写,同时人名列表也转小写匹配即可。
内容的提问来源于stack exchange,提问作者Jimmy K
相关产品推荐
相关产品推荐

