Python文本词频分析实战:打造你的第一个NLP小工具

打造你的第一个NLP小工具

编程基础第一期《4-30》实现统计文本文件单词频率(.txt

前言

文本分析是自然语言处理(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 []

    # 使用正则表达式提取单词(包括带连字符的单词)
    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 sorted_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)

代码解析

  1. 导入必要模块

    • re:提供正则表达式支持,用于精确提取单词
    • defaultdict:特殊字典类型,当键不存在时提供默认值,简化词频统计
  2. 核心函数设计

    • 异常处理确保文件打开的健壮性
    • 使用正则表达式\b[a-zA-Z'-]+\b提取英文单词(包括带连字符和撇号的复杂形式)
    • 采用defaultdict高效统计词频
    • 使用Python内置的sorted()函数按词频排序
  3. 用户交互

    • 支持自定义文件路径输入
    • 灵活设置显示的高频词数量

运行效果

将以下文本保存为txt文件,然后运行程序,输入文件路径即可看到分析结果:

Python文本词频分析实战:打造你的第一个NLP小工具_第1张图片

应用场景

  • 英文文学作品词汇分析
  • 论文关键词提取
  • 网络文本主题挖掘
  • 语言学习词汇频率研究

进阶改进方向

  1. 增加中文分词支持(可结合jieba等分词库)
  2. 添加停用词过滤功能
  3. 实现数据可视化展示(如词云图)
  4. 开发GUI界面提升用户体验
  5. 支持批量文件分析比较

✨今日分享语录

如果你在心里埋下了一颗争气的种子,那么努力就变成了必修课,无论再苦再累,请你跑到终点再哭泣,成长本来就是一个孤立无援的过程,难过的从来不是路,而是你心里的那一关,能困住你的的只有你自己!

你可能感兴趣的:(《挑战全网最肝Python教程,100个项目》,python,自然语言处理)