使用Python实现一个简单实用的文本词频统计分析工具
目录
- 前言
- 功能特点
- 代码实现
- 运行效果
- 应用场景
- 进阶改进方向
前言
文本分析是自然语言处理(NLP)中的基础任务,而词频统计则是文本分析的入门级应用。通过词频分析,我们可以快速了解文本的主题倾向、关键信息分布以及语言使用习惯。本文将带你实现一个简单而实用的文本词频统计工具,非常适合python初学者练手。
功能特点
支持任意.txt格式文本文件的词频分析
自动处理文本编码问题
使用正则表达式精确提取英文单词(包括带连字符和撇号的单词)
按频率排序并计算每个单词的出现比例
支持查看前N个高频词功能
代码实现
import re from collections import defaultdict def word_frequency(file_path, top_n=None): """ 统计文本文件中的单词频率 :param file_path: 编程文本文件路径 :param top_n: 显示前N个高频词,默认显示全部 :return: 排序后的单词频率列表 """ # 读取文件内容 try: with open(file_path, 'r', encoding='utf-8') as file: text = file.read().lower() # 转为小写 except FileNotFoundError: print(f"错误:文件 {file_path} 未找到") return [] except UnicodeDecodeError: print("错误:文件编码不支持,请尝试使用其他编码(如gbk)") 编程客栈 return [] # 使用正则表达式提QdJIc取单词(包括带连字符php的单词) words = re.findall(r"\b[a-zA-Z'-]+\b", text) # 统计词频 frequency = defaultdict(int) for word in words: frequency[word] += 1 # 按频率排序 sorted_words = sorted(frequency.items(), key=lambda x: x[1], reverse=True) # 输出结果 print(f"\n总共有 {len(words)} 个单词,其中唯一单词 {len(sorted_words)} 个") print("排名 | 单词\t\t频率\t占比") print("-" * 40) total_words = len(words) for rank, (word, count) in enumerate(sorted_words[:top_n], 1): percentage = (count / total_words) * 100 print(f"{rank:4} | {word:12} {count:6} \t{percentage:.2f}%") return soQdJIcrted_words if __name__ == "__main__": # 使用示例 file_path = input("请输入文本文件路径:").strip() top_n = input("要显示前多少个高频词(默认全部):").strip() top_n = int(top_n) if top_n.isdigit() else None word_frequency(file_path, top_n)
代码解析
导入必要模块:
- re:提供正则表达式支持,用于精确提取单词
- defaultdict:特殊字典类型,当键不存在时提供默认值,简化词频统计
核心函数设计:
- 异常处理确保文件打开的健壮性
- 使用正则表达式\b[a-zA-Z'-]+\b提取英文单词(包括带连字符和撇号的复杂形式)
- 采用defaultdict高效统计词频
- 使用Python内置的sorted()函数按词频排序
用户交互:
- 支持自定义文件路径输入
- 灵活设置显示的高频词数量
运行效果
将以下文本保存为txt文件,然后运行程序,输入文件路径即可看到分析结果:
应用场景
英文文学作品词汇分析
论文关键词提取
网络文本主题挖掘
语言学习词汇频率研究
进阶改进方向
增加中文分词支持(可结合jieba等分词库)
添加停用词过滤功能
实现数据可视化展示(如词云图)
开发GUI界面提升用户体验
支持批量文件分析比较
到此这篇关于使用Python实现一个简单实用的文本词频统计分析工具的文章就介绍到这了,更多相关Python文本词频统计分析内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!
精彩评论