运用jieba库解决词频分析问题
任务描述
本关任务:设计并调用函数word_analysis(FileName, m, topN),实现筛选出长度为m的词,并统计出出现频率最高的topN个长度为m的词。
这个函数有三个参数:FileName、m和topN。首先用文本方式打开FileName文件,编码是utf8,然后将文件内容用jieba库进行分词(使用精确模式),再筛选出长度为m的词,统计出出现频率最高的topN个长度为m的词。函数的返回值是由topN个二元组组成的列表,每个二元组是由(词, 频次)格式构成。
例如,topN=3,m=2表示出现频率最高的3个2字词分别是刘备(5次)、关羽(4次)、张飞(2次),那么函数的返回结果应该是[('刘备',5), ('关羽',4), ('张飞',2)]
编程要求
根据提示,在右侧编辑器补充函数word_analysis的实现及调用该函数完成最后的输出效果。不要修改函数名,不要修改参数声明。
测试说明
平台会对你编写的代码进行测试,它会向你的函数传递相应的参数,以测试函数的正确性。例如:
测试参数:
FileName='走到人生边上.txt'
m=4
topN=5
预期返回:
[('万物之灵', 15), ('不由自主', 12), ('爸爸妈妈', 11), ('自欺欺人', 10), ('爷爷奶奶', 9)]
关于测试的特别说明
这道题的测试时间比较长,约几秒到十几秒,请耐心等候。耐心等候。耐心等候。
本关的测试比对方法比较特殊,只判断输出的最后一行跟预期结果的最后一行相同即可。
import jieba
from collections import Counterdef word_analysis(FileName, m, topN):'''param FileName: 文件名param m: 词的长度param topN: 一个正整数return : 统计文件中出现频率最高的topN个长度为m的词。函数返回长度为topN的列表,列表的每个元素是一个二元组,由长度为m的词与词的频率组成。'''txt=open(FileName,"r",encoding="utf-8").read() #读取文件中的内容以字符串的形式存放在变量txt中,请不要修改,以保证能正确读取文件# 实现函数word_analysis功能# ************ begin ************* #words=jieba.lcut(txt)counter=Counter([word for word in words if len(word)==m])return counter.most_common(topN)# ************ end ************** #if __name__ == '__main__':# 调用函数word_analysis,输出文本文件中出现频率最高的topN个长度为m的词# ************ begin ************* #filename=input()m=int(input())topN=int(input())print(word_analysis(filename,m,topN))# ************ end ************** #
