使用python词频统计分析

发布时间:2026/7/3 3:27:29
使用python词频统计分析 前言词频统计是指在文本或语音数据中统计每个单词或符号出现的次数以便对文本或语音数据进行分析和预处理。词频统计是自然语言处理中的一个重要任务其目的是为后续的文本分析、情感分析、机器翻译等任务做好准备。文本词频统计(英文字符)1、普通版importredefparse(text):# 使用正则表达式去除标点符号和换行符textre.sub(r[^\w ], ,text)# 转为小写texttext.lower()# 生成所有单词的列表word_listtext.split( )# 去除空白单词并转换为列表返回word_listlist(filter(None,word_list))returnword_list# 测试一下sample_textHello, World! \nThis is a test-text. Are you ready?print(parse(sample_text))结果如下[hello,world,this,is,a,test_text,are,you,ready]2.改良版importredefparse_optimized(text):# 去除标点符号替换为空格textre.sub(r[^\w ], ,text)# 转为小写并直接使用 split() 自动处理连续空格returntext.lower().split()# 测试sample_textHello, World! \nThis is a test-text. Are you ready?print(parse_optimized(sample_text))python中的split函数如果不传任何参数(即直接写split()),它会自动按所有空白字符(空格换行符\n制表符\t)进行过分割并且自动去除空字符。文本词频统计(中文字符)与英文字符不同中文的字符之间是没有空格的所以需引入jieba(结巴分词)进行词频统计。1.普通版importreimportjiebafromcollectionsimportCounterdefget_chinese_word_freq(text,top_n10):# 1. 数据清洗去除标点符号、数字和英文字母只保留中文字符# 如果你想保留英文可以把正则改成 r[^\w\u4e00-\u9fa5]cleaned_textre.sub(r[^\u4e00-\u9fa5],,text)# 2. 中文分词使用 jieba 的 lcut 方法直接返回列表word_listjieba.lcut(cleaned_text)# 3. 过滤无意义的词可选但强烈建议# 在实际项目中通常会读取一个“停用词表”(stop words)文件这里做简单演示stop_words{的,了,和,是,就,都,而,及,与,着,或}filtered_words[]forwordinword_list:# 过滤掉停用词并且通常过滤掉长度为 1 的单字比如“我”、“你”、“啊”ifwordnotinstop_wordsandlen(word)2:filtered_words.append(word)# 4. 统计词频使用 Counterword_countsCounter(filtered_words)# 5. 返回出现频率最高的 top_n 个词returnword_counts.most_common(top_n)# 测试一下 sample_text 自然语言处理是计算机科学领域与人工智能领域中的一个重要方向。 它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。 自然语言处理是一门融语言学、计算机科学、数学于一体的科学。 因此这一领域的研究将涉及自然语言即人们日常使用的语言 所以它与语言学的研究有着密切的联系。 # 获取词频最高的 5 个词top_wordsget_chinese_word_freq(sample_text,top_n5)print(中文词频统计结果)forword,freqintop_words:print(f词语: {word} 出现次数:{freq})结果如下中文词频统计结果 词语:自然语言 出现次数: 4 词语:领域 出现次数: 3 词语:研究 出现次数: 3 词语:处理 出现次数: 2 词语:计算机科学 出现次数: 2jieba.lcut(text):这是结巴分词的核心方法它会基于内置的强大中文库利用统计算法HMM模型把一段连续的中文切分成一个词语列表。\u4e00-\u9fa5 是汉字在 Unicode 编码中的范围。这个正则的意思是“把所有不是汉字的字符全部替换为空”len(word) 2中文里很多单字如“的、地、得、我、你、他”通常对分析文章核心内容帮助不大所以统计词频时经常会把长度小于 2 的词过滤掉。CounterPython 内置的计数神器把它套在列表外面它会自动帮你统计每个元素出现的次数并提供 most_common() 方法直接排序输出。2.改良版与普通版相比改进的一点是可以加载自定义词典和停用词库importreimportjiebaimportosfromcollectionsimportCounterdefchinese_word_cut(mytext,top_n10):dict_pathos.path.join(os.path.dirname(os.path.abspath(__file__)),自定义词典.txt)jieba.load_userdict(dict_path)# 这里你可以添加jieba库识别不了的网络新词避免将一些新词拆开jieba.initialize()# 初始化jieba# 文本预处理 去除一些无用的字符只提取出中文出来new_datare.findall([\u4e00-\u9fa5],mytext)new_data .join(new_data)# 文本分词seg_list_exactjieba.lcut(new_data)result_list[]stop_words_pathos.path.join(os.path.dirname(os.path.abspath(__file__)),停用词库.txt)# 读取停用词库withopen(stop_words_path,encodingutf-8)asf:# 可根据需要打开停用词库然后加上不想显示的词语conf.readlines()stop_wordsset()foriincon:ii.replace(\n,)# 去掉读取每一行数据的\nstop_words.add(i)# 去除停用词并且去除单字forwordinseg_list_exact:ifwordnotinstop_wordsandlen(word)1:result_list.append(word)returnCounter(result_list).most_common(top_n)comment大唐不夜城,不夜城趣味性很高里面地方特色东西好吃也有星巴克麦当劳等等选择有不少场表演外景夜景一定要薅一个其它地方很难有这般景象了。娱乐体验了不倒翁还有十二时辰里面表演更加精彩、内景拍照不错簋唐楼可以尝试一下沉浸剧本杀……comment_cuttedchinese_word_cut(comment,top_n5)# word_counts.most_common(10) # 输出词频最高的前十个单词print(中文词频统计结果)forword,freqincomment_cutted:print(f词语: {word} 出现次数:{freq})结果如下中文词频统计结果 词语:不夜城 出现次数: 2 词语:里面 出现次数: 2 词语:地方 出现次数: 2 词语:表演 出现次数: 2 词语:大唐 出现次数: 1