ITS·黑客

【python】小实验-10行词云

2017-04-23  本文已影响77人  某米狼

效果《乡土中国》:

环境:

pip3 install wordcloud
pip3 install jieba

代码

import matplotlib.pyplot as plt
from wordcloud import WordCloud
import jieba
 
text_from_file_with_apath = open('/Users/hecom/23tips.txt').read()
 
wordlist_after_jieba = jieba.cut(text_from_file_with_apath, cut_all = True)
wl_space_split = " ".join(wordlist_after_jieba)
 
my_wordcloud = WordCloud().generate(wl_space_split)
 
plt.imshow(my_wordcloud)
plt.axis("off")
plt.show()

报错:

>>> text_from_file_with_apath = open('/Users/Lazyant/Desktop/a.txt').read()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/Cellar/python3/3.6.1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/codecs.py", line 321, in decode
    (result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xa1 in position 2: invalid start byte

解决:
在源码wordcloud.py中找到以下代码,
1 修改字体并替换文件夹字体,支持中文即可。
2 修改txt的存储编码为utf-8。这个不能忘

FONT_PATH = os.environ.get("FONT_PATH", os.path.join(os.path.dirname(__file__), "DroidSansMono.ttf"))

读源码
我偷懒直接摘录了笔记

生产词云的原理其实并不复杂,大体分成5步:

  1. 对文本数据进行分词,也是众多NLP文本处理的第一步,对于wordcloud中的process_text()方法,主要是停词的处理
  2. 计算每个词在文本中出现的频率,生成一个哈希表。词频计算相当于各种分布式计算平台的第一案例wordcount, 和各种语言的hello world 程序具有相同的地位了,呵呵。
  3. 根据词频的数值按比例生成一个图片的布局,类IntegralOccupancyMap 是该词云的算法所在,是词云的数据可视化方式的核心。
  4. 将词按对应的词频在词云布局图上生成图片,核心方法是generate_from_frequencies,不论是generate()还是generate_from_text()都最终到generate_from_frequencies
  5. 完成词云上各词的着色,默认是随机着色
上一篇下一篇

猜你喜欢

热点阅读