基于python的中文词频分析

本文受到某文章启发,使用Python进行中文词频分析,主要针对聊天记录进行处理。通过正则表达式匹配中文字符,然后对字典按值排序,以揭示说话习惯。虽然没有涉及复杂的语义分析,但能快速统计大量文本。在50万字的文件中,统计过程不到一秒完成。分析结果显示了一些高频和低频的单字以及多字组合。

受http://yixuan.cos.name/cn/2011/03/text-mining-of-song-poems/这篇文章的启发,觉得PYTHON来做文字处理分析应该不错,可以来做个词频分析,分析聊天记录可以看出每个人的说话习惯

用的是暴力方法 不用语义分析 直接列出所有出现的字词

做下来觉得难点就在中文编码这部分 python下中文涉及的编码转化确实要琢磨一番

首先数据文件要存为utf-8格式

在python显示中文的关键代码:

import sys
reload(sys) 
sys.setdefaultencoding('utf8')
txt.encode('gb18030')
txt为中文字符串

搜索中文,用正则表达式匹配:

r = re.compile('[\x80-\xff]+')
m = r.findall(txt)

字典排序,按照value排序,代码很精简:

dict=sorted(dict.items(), key=lambda d:d[1])

代码:

#coding=utf-8
#Author: http://blog.youkuaiyun.com/boksic
import sys,re

reload(sys) 
sys.setdefaultencoding('utf8')
txt = open('blog.youkuaiyun.com.boksic.txt','r').read()
wfile=open('result.txt','w')


r = re.compile('[\x80-\xff]+')
m = r.
Python实现词频云和文本分析涉及多个步骤,包括文本预处理、分词、统计词频和生成词云等,以下是具体的方法及示例: ### 文本预处理与分词 Python有很多中文分词库,常见的有jieba、THULAC、pkuseg等[^4]。以jieba库为例,可进行如下分词操作: ```python import jieba content = "这是一段用于测试的中文文本。" word_list = jieba.cut(content) new_text = " ".join(word_list) print(new_text) ``` ### 统计词频 使用`collections`库中的`Counter`类统计词频: ```python from collections import Counter con_words = [x for x in jieba.cut(new_text) if len(x) > 2] frequencies = Counter(con_words).most_common() frequencies = dict(frequencies) print(frequencies) ``` ### 生成词云 使用`wordcloud`库根据词频生成词云,以下是示例代码: ```python from wordcloud import WordCloud import matplotlib.pyplot as plt # 简单形式矩形词云 def simpleWC1(sep='', back='black', freDictpath='data_fre.json', savepath='res.png'): try: with open(freDictpath) as f: data = f.readlines() data_list = [one.strip().split(sep) for one in data if one] fre_dict = {} for one_list in data_list: fre_dict[one_list[0]] = int(one_list[1]) except: fre_dict = freDictpath wc = WordCloud(font_path='font/simhei.ttf', # 设置字体 background_color=back, # 背景颜色 max_words=1300, # 词云显示的最大词数 max_font_size=120, # 字体最大值 margin=3, # 词云图边距 width=1800, # 词云图宽度 height=800, # 词云图高度 random_state=42) wc.generate_from_frequencies(fre_dict) # 从词频字典生成词云 plt.figure() plt.imshow(wc) plt.axis("off") wc.to_file(savepath) # 结合图片形状的词云 from scipy.misc import imread cut_text = open('E://pythonnotebook//text.txt', 'r').read() color_mask = imread('E://pythonnotebook//cloud.jpg') # 设置背景图 cloud = WordCloud( font_path='simfang.ttf', background_color='white', mask=color_mask, max_words=1000, max_font_size=100 ) word_cloud = cloud.generate(cut_text) # 保存词云图片 word_cloud.to_file('word_cloud.jpg') plt.imshow(word_cloud) plt.axis('off') plt.show() ``` ### 完整示例 结合以上步骤,完整代码如下: ```python import jieba from PIL import Image from wordcloud import WordCloud, STOPWORDS from scipy.misc import imread from collections import Counter import matplotlib.pyplot as plt content = open("./files/Text.txt", encoding="utf-8") word_list = [" ".join(jieba.cut(sentence=sentence)) for sentence in list(content)] new_text = " ".join(word_list) con_words = [x for x in jieba.cut(new_text) if len(x) > 2] frequencies = Counter(con_words).most_common() frequencies = dict(frequencies) pac_mask = imread("./files/1.png") wordcloud = WordCloud(font_path="simhei.ttf", background_color="white", max_words=2000, mask=pac_mask).fit_words(frequencies) plt.imshow(wordcloud) plt.axis("off") plt.show() wordcloud.to_file("./files/词频生成词云.png") ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值