词频分析器
Mira 你好。我接到任务要从任务日志中提取见解,而日志有几百份。我需要一个程序,能读取一个文本文件、统计每个词出现的频率,并显示排名最高的结果。我想找出反复出现的话题,而不必手动阅读所有内容。
你要构建的内容
Enter text, or a filename to read from: sample.txt
Top 10 words:
the 42
and 31
python 18
is 16
you 14
...你需要用到
- 字符串 — 将文本拆分为单词、去除标点、转为小写
- 字典 — 统计每个词出现的次数
- 列表 — 对排名最高的结果进行排序和切片
- 文件与异常 — 从文本文件中读取
- Lambda、推导式与 zip — 列表推导式和带 key 的
sorted()在这里很合适
提示
计数前先归一化。 在构建计数前,将所有内容转为小写并去除标点。否则 "Python"、"python" 和 "Python," 会被视为不同的词。
用字典进行计数。 遍历词。如果词已经是键,则递增其计数;如果不是,则以计数 1 添加它。使用带默认值的 .get() 会让代码很整洁。
按值对字典排序。 sorted() 接受一个 key= 参数。传入一个返回每个键对应值的 lambda,即可按频率排序。
更进一步
当核心分析功能完成后:
- 停用词。 忽略常见词如 "the"、"and"、"is"。定义一个停用词集合,并跳过其中出现的任何词。
- 可配置的 Top N。 让用户指定要显示多少个结果,而不是总是显示 10 个。
- 可视化输出。 为每个词打印一个由重复字符组成的条形图,其长度与计数成比例。即使是简单的版本,也会让输出更易读。

