语料词频统计和词云绘制


前言

这是一个课后作业,老师给了一个已经做好词性标注的语料,让我们进行词频统计并绘制图云。看起来任务好像很简单,但是在这个过程中真是踩了不少雷,现记录一下。

语料长这样:
在这里插入图片描述


实现代码

  • 导入相关库
from wordcloud import WordCloud
import re
import collections

在安装wordcloud包的时候遇到了一些问题,折腾了不少时间,解决办法记录在另一篇文章中了:https://blog.csdn.net/weixin_44738882/article/details/123753379?spm=1001.2014.3001.5502

  • 导入数据并进行预处理
txt = open('语料.txt', 'r', encoding='utf-8').read()
words = txt.split('  ')

老师给的数据已经进行了分词和词性标注,并且发现词之间是使用两个空格进行分隔,所以可以用split()进行切割。

  • 词频统计
word_counts = collections.Counter(words) # 对分词做词频统计
word_counts_top50 = word_counts.most_common(50) # 获取前50最高频的词
print (word_counts_top50) # 输出检查

通过cllections直接进行词频统计。一开始我使用循环进行词频统计,不知道哪里出了问题,代码没有报错,但是也一直在运行,不出结果,所以切换为使用该方法。
输出前50个如图所示,由图可以发现,很多标点,还有没意义的词都被计数,要想绘制有意义的词云,需要将无意义的词剔除。
在这里插入图片描述

  • 剔除无关词
words_list = []
for word in words:
    if len(word) >= 4 :
        words_list.append(word)

通过对上边结果进行观察可以发现,词的长度小于4的基本都是标点符号或者没有意义的单字,所以这里筛选长度大于等于4的词。
一开始我是在for循环里使用emove()来将长度小于4的剔除,但是这里踩坑了,弄了好久没发现问题出在哪,后边才知道我犯了和这位博主一样的错误(由于删除元素之后索引会发生变化):
https://www.cnblogs.com/lipx9527/p/9450819.html


  • 再次统计词频,输出排名前50的高频词
word_counts = collections.Counter(words_list) # 对分词做词频统计
word_counts
word_counts_top50 = word_counts.most_common(50) # 获取前50最高频的词
print (word_counts_top50)

总算是把词频统计弄完了。

  • 词云绘制
import wordcloud
wc = wordcloud.WordCloud(width = 1000, font_path='STKAITI.TTF', height = 700)
wc.generate(" ".join(words_list))
wc.to_file("./wordcloud1.png")

我是在网上找的代码来进行修改,一开始不知道generate里需要传入str,传入list报错,随后又由于字体的问题报错,参考了这位博主的文章得以解决:
https://blog.csdn.net/q3102885/article/details/80622348
原来字体是需要自己指定路径的。
到这里总算是完成了任务,词云如下图所示:在这里插入图片描述

总结

一个简单的任务都一波三折,自己其实整体思路蛮清楚的,我之前学习不擅长动手,总是感觉听懂了就行,这是个坏毛病,得改,学技术肯定得多练习,多记录。


版权声明:本文为weixin_44738882原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。