基于python的热点词云构建

##此文由于原服务器过期,原稿丢失,故在此尽量回忆。原稿大概发布于22年8月,故将本回忆版发布时间也调整为22年8月,实际该版写于23年9月。

本文是2020年的一项课程小组作业,主要采集了十二月中上旬的人民日报和新浪网政治类文章,其中人民日报1185篇,新浪网907篇。我们以此为基础进行语言资源的分析,统计相应时期政治热点词汇,并且利用词云直观展现研究结果。

语料爬取

在本次对新浪网时事新闻的爬取过程中主要运用Python中的requests,json,lxml中的etree板块以及time.sleep()板块。爬取过程暂略

停止词

停用词(Stop Words) ,词典译为“电脑检索中的虚字、非检索用字”。为节省存储空间和提高搜索效率,搜索引擎在索引页面或处理搜索请求时会自动忽略某些字或词,这些字或词即被称为Stop Words(停用词、静止词)。停用词一定程度上相当于过滤词(Filter Words),不过过滤词的范围更大一些,包含黄色、政治等敏感信息的关键词都会被视做过滤词加以处理,停用词本身则没有这个限制。通常意义上,停用词(Stop Words)大致可分为如下两类:

对于一个给定的目的,任何一类的词语都可以被选作停用词。通常意义上,停用词大致分为两类。一类是人类语言中包含的功能词,这些功能词极其普遍,与其他词相比,功能词没有什么实际含义,比如'the'、'is'、'at'、'which'、'on'等。在汉语这类词基本上是指虚词,没有词汇意义而只有语法意义的词,如“的”“了”等。另一类词包括词汇词,比如'want'等,在汉语中是指一些常用词汇的或者基本词汇,如“以前”“一直”“同时”“如下”等等。这些词应用十分广泛,但是对这样的词搜索引擎无法保证能够给出真正相关的搜索结果,难以帮助缩小搜索范围,同时还会降低搜索的效率,所以通常会把这些词从问题中移去,从而提高搜索性能。在我们的词频统计中,也将这些词移除,以防影响词频统计的效度和准度。

我们在github上下载了多个中文停用词表进行停用词过滤,如下:

词表名

词表文件

中文停用词表

cn_stopwords.txt

哈工大停用词表

hit_stopwords.txt

百度停用词表

baidu_stopwords.txt

四川大学机器智能实验室停用词库

scu_stopwords.txt

在实际使用,停用词表的差异对词云呈现结果的影响并不大,我们最终采用百度停用词表进行我们的词频统计与词云构建。

代码编写

用Python生成中文词云,需要pip安装以下几个库:matplotlib,jieba,wordcloud,pillow。

wordcloud库,是Python的词云展示第三方库。词云以词语为基本单位更加直观和艺术的展示文本词云图,也叫文字云,是对文本中出现频率较高的“关键词”予以视觉化的展现,词云图过滤掉大量的低频低质的文本信息,使得浏览者只要一眼扫过文本就可领略文本的主旨。在做词频统计可视化分析的时候有着很好的应用。

在wordcloud库的下载过程中,发生了错误,经过咨询老师和上网搜寻经验等方式进行反复尝试后,最终对Python进行了降级(从3.9.0-3.6.5),解决了wordcloud的安装问题。

经过设计与调试,Python中文词云代码如下:

from wordeloud import WordCloud
from wordcloud import ImageColorGenerator
from matplotlib.image import imread
import matplotlib.pyplot as plt
import jieba.analyse

back_img = imread("p1.jpg")#自定义图片来形成词云的形状
img_colors = ImagecolorGenerator(back_img)

with open("aniticle.txt", encoding="UTF-8") as file:
    jieba.analyse.set stop.words("baidu.stopmords.txt")#设置stop words列表,例如一些标点及常用助词等不参与调频统计
    tags = jieba.analyse.extract.tags(file.read(,1080,withWeight=True)
    data = {item[e]: item[1]for iten in tags)
    word_eloud = WordCloud(font_path="c:AwindowslEontslsinhei,ttf",
                  background_color="white".
                  max_words=1888,
                  max_font_size=188,
                  width=1920,
                  mask=back_img,
                  scale=32,
                  height=1880).generate_from_frequencies(data)
    word_cloud.recolor(color func=ing.colors)#替换默认的字体题色
    plt.figureO#创建一个图形实例
    plt.imshow(word_cloud, interpolation='bilinear')
    plt.axis("off")#不显示坐标尺寸
    plt.show()

wordcloud库的词云设置:

参数

描述

width

指定词云对象生成图片的宽度,默认400像素

height

指定词云对象生成图片的高度,默认200像素

min_font_size

指定词云中字体的最小字号,默认4号

max_font_size

指定词云中字体的最大字号,根据高度自动调节

font_step

指定词云中字体字号的步进间隔,默认为1

font_path

指定字体文件的路径,默认None

max_words

指定词云显示的最大单词数量,默认200

stop_words

指定词云的排除词列表,即不显示的单词列表

mask

指定词云形状,默认为长方形,需要引用imread()函数

background_color

指定词云图片的背景颜色,默认为黑色

运行结果


基于python的热点词云构建
http://www.whxblog.com//archives/1692175330943
作者
W
发布于
2022年08月16日
许可协议