赞
踩
data.write(i[0]+‘\n’)
data.close()
cursor.close()
conn.close()
记得把csv文件的编码格式转换成utf-8哦,不然可能会运行不下去:
当然你还可以用正则表达式去除以下内容
微信发送的数据:wxid.*
__表情:[.]*
不过我觉得这些也是必要的聊天信息之一,留着也无妨,因此在这里就不加入进去啦
最后得到的文本格式就是一行一句聊天内容,处理后我们就准备好进入下一个环节了!那就是令人激动的!生成词云
1. 导入我们的聊天记录,并对每一行进行分词
聊天记录是一行一行的句子,我们需要使用分词工具把这一行行句子分解成由词语组成的数组,这时候我们就需要用到结巴分词了。
分词后我们还需要去除词语里一些语气词、标点符号等等(停用词),然后还要自定义一些词典,比如说你们之间恩恩爱爱的话,一般结巴分词是无法识别出来的,需要你自行定义,比如说:小傻瓜别感冒了,一般分词结果是
小/傻瓜/别/感冒/了
如果你把“小傻瓜”加入到自定义词典里(我们下面的例子里是mywords.txt),则分词结果则会是
小傻瓜/别/感冒/了
下面对我们的聊天记录进行分词:
import jieba
import codecs
def load_file_segment():
jieba.load_userdict(“mywords.txt”)
f = codecs.open(u"聊天记录.txt",‘r’,encoding=‘utf-8’)
content = f.read()
f.close()
segment=[]
segs=jieba.cut(content)
for seg in segs:
if len(seg) > 1 and seg != ‘\r\n’:
segment.append(seg)
return segment
print(load_file_segment())
在这个函数里,我们使用了codecs打开我们的聊天记录文件,然后进行结巴分词,最终返回一个包含所有词语的数组。记得运行前要安装jieba分词包,默认你已经安装了python3.
windows打开CMD/macOS系统打开Terminal 输入:
pip install jieba
安装完成后,在编辑器中输入我们刚刚的python代码,我将其命名为segment.py,切记在同个目录下放置 聊天记录.txt 及 自定义词表 mywords.txt, 然后在CMD/Terminal中输入命令运行
python segment.py
你就可以看见你们的聊天记录分词后的效果啦
2. 计算分词后的词语对应的频数
为了方便计算,我们需要引入一个叫pandas的包,然后为了计算每个词的个数,我们还要引入一个叫numpy的包,cmd/terminal中输入以下命令安装pandas和numpy:
pip install pandas
pip install numpy
详细的解析我都写在下方的注释里啦,大家可以自行阅读并实践。不过需要注意的是,里面的load_file_segment()是我们第一步里的函数,如果你不知道如何把这两个步骤合在一起,没关系,最后我们会提供一份完整的代码.
import pandas
import numpy
def get_words_count_dict():
segment = load_file_segment()
df = pandas.DataFrame({‘segment’:segment})
stopwords = pandas.read_csv(“stopwords.txt”,index_col=False,quoting=3,sep=“\t”,names=[‘stopword’],encoding=“utf-8”)
df = df[~df.segment.isin(stopwords.stopword)]
words_count = df.groupby(by=[‘segment’])[‘segment’].agg({“计数”:numpy.size})
words_count = words_count.reset_index().sort_values(by=“计数”,ascending=False)
return words_count
print(get_words_count_dict())
同第一步一样,运行这份代码你就可以看到每个词语及其对应的频数。需要注意的是,这里有个加载停用词的操作,你需要把停用词表放在当前文件夹下,我们这里提供一份停用词表下载:stopwords.txt
3. 生成词云
终于到了最后一部分啦!你是不是开心而又满怀激动的心情呢(滑稽,在这一步开始之前,我们需要先安装需要使用的包,我们需要用到的包有:
pip install matplot
pip install scipy
pip install wordcloud
打开CMD/Terminal 输入以上命令即可安装,加上之前两个步骤的包,有:
pip install jieba
pip install codecs
pip install pandas
pip install numpy
如果你在安装这些包的时候出现了什么问题,请记得在我们下方评论区提出,我们会一一解答的哦。
运行目录的文件结构如下:
聊天记录.txt
mywords.txt(如果你没有自定义的词的话可以为空)
stopwords.txt
wordCloud.py
ai.jpg (可以为任意的图片,你喜欢就行)
完整代码,wordCloud.py 如下,附有详细的解析:
import jieba
import numpy
import codecs
import pandas
import matplotlib.pyplot as plt
from scipy.misc import imread
import matplotlib.pyplot as plt
from wordcloud import WordCloud, ImageColorGenerator
from wordcloud import WordCloud
def load_file_segment():
jieba.load_userdict(“mywords.txt”)
f = codecs.open(u"聊天记录.txt",‘r’,encoding=‘utf-8’)
content = f.read()
f.close()
segment=[]
segs=jieba.cut(content)
for seg in segs:
if len(seg) > 1 and seg != ‘\r\n’:
segment.append(seg)
return segment
def get_words_count_dict():
segment = load_file_segment()
df = pandas.DataFrame({‘segment’:segment})
stopwords = pandas.read_csv(“stopwords.txt”,index_col=False,quoting=3,sep=“\t”,names=[‘stopword’],encoding=“utf-8”)
df = df[~df.segment.isin(stopwords.stopword)]
words_count = df.groupby(by=[‘segment’])[‘segment’].agg({“计数”:numpy.size})
words_count = words_count.reset_index().sort_values(by=“计数”,ascending=False)
return words_count
words_count = get_words_count_dict()
bimg = imread(‘ai.jpg’)
wordcloud = WordCloud(background_color=‘white’, mask=bimg, font_path=‘simhei.ttf’)
words = words_count.set_index(“segment”).to_dict()
wordcloud = wordcloud.fit_words(words[“计数”])
bimgColors = ImageColorGenerator(bimg)
plt.axis(“off”)
plt.imshow(wordcloud.recolor(color_func=bimgColors))
plt.show()
值得注意的是这里面的bimg和wordcloud对象的生成,我们知道png格式背景一般是透明的,因此如果你的图像是png格式的话,其生成词云的时候背景色应该设为None,然后mode应该设为RGBA。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/669910
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。