题目要求
词云描述
词云,也叫文字云,是一种应用广泛的数据可视化方法。是过滤掉文本中大量的低频信息,形成“关键词云层”或“关键词渲染”,对出现频率较高的“关键词”予以视觉化的突出展现,使浏览者只要一眼扫过文本就可领略文本的主旨。
- word_cloud是python的一个第三方库,可根据文本或文本中的词频,对文本内容进行可视化。(需通过指令pip install wordcloud安装)
word_cloud生成词云的主要方法有如下三种,分别用于以词频为参数或以字符文本为参数的场景。
-
根据词频生成词云,参数为包含词与词频的字典。
generate_from_frequencies(frequencies)
fit_words(frequencies) -
根据文本生成词云,如果参数是排序的列表,需设置“collocations=False”,否则会导致每个词出现2次。
generate_from_text(text)
generate(text) -
将英文长文本text分词并去除屏蔽词后生成词云。
process_text(text)
将英文长文本text分词并去除屏蔽词后生成词云。
请按照如下要求,依次绘制对应的词云图:
-
根据文件“Who Moved My Cheese.txt”的内容,用词频为参数的方法绘制英文词云,设置背景色为白色,不显示坐标轴。
-
根据文件“Who Moved My Cheese.txt”的内容,用文本为参数的方法绘制英文词云,设置背景色为白色,不显示坐标轴。观察两种方法绘制结果,分析其原因,了解stopwords参数的意义及stopwords文件的内容,思考用词频方法时,怎样处理才能得到与文本方法相近的结果?
-
中文词之间无分隔,所以中文词云的制作略麻烦,需要提前对文本进行分词处理。jieba是目前应用较广泛的一个中文分词库,可以导入jieba利用它进行分词再绘制词云。
import jieba
import jieba.analyse
jieba.analyse.textrank(sentence, topK=20, withWeight=False, allowPOS=('ns', 'n', 'vn', 'v'))
应用textrank()方法对字符串进行分词,可用参数topK设置最多返回多少个词(词性表allowPOS默认仅提取词性为地名ns、名词n、动名词vn、动词v),例如设置topK=100,返回最多100个词。返回的词与其权值以元组类型作为列表的元素,按权值降序排列,数据格式如:
[(‘科技’, 1.0), (‘创新’, 0.6818768373499384), (‘研究’, 0.39785607069634815), (‘科学家’, 0.39327521713414126), …]
将这个列表转为字典类型, 利用WordCloud.generate_from_frequencies()方法,以词频作参数,便可以绘制中文词云了。读文件“scientist.txt”,根据内容生成词云,字体不限,但要求中文能正常显示。设置用前60个高频词生成词云,背景色为白色,用“ball.jpg”作背景图片或自选背景图片。
代码
import string
import jieba.analyse
from wordcloud import WordCloud
import matplotlib