当前位置:   article > 正文

python:基于Wordcloud的词云可视化_wordcloud词云

wordcloud词云

声明:

本文章是基于经过文本清洗去除停用词、利用jieba库进行中文分词后的词云可视化。本文不对上述提及的相关技术做详细解释,如有需要,可参考文章:NLP:利用jieba库,基于TF-IDF算法的关键词提取-CSDN博客

wordcloud库的安装:

pip install wordcloud -i https://pypi.tuna.tsinghua.edu.cn/simple

 关键代码:

生成词云的方法:
  1. # 生成简单词云的方法
  2. new_text = " ".join(final_list)
  3. # 这里final_list是经过文本清洗及分词的一个词语列表,
  4. # 其具体形式为["你好","中国","芯片"...]
  5. # 此步骤是将上面列表中的词语拼接起来,符合wordcloud的格式
  6. #创建一个wordcloud模版,设置一些参数
  7. wordcloud = WordCloud(font_path='simhei.ttf', # 指定中文字体路径
  8. background_color='white',
  9. #mask=shape, # 这里用于设定前面得到的轮廓
  10. max_words=100, # 显示最大词数
  11. max_font_size=100, # 显示最大字体大小
  12. random_state=30, # 随机状态,使得结果可复现
  13. width=800, height=400 # 词云图的尺寸
  14. # contour_color='red', # 添加词云轮廓,设置为红色
  15. # contour_width=1
  16. ) # 轮廓线条的粗细
  17. wordcloud.generate(new_text) # 生成词云
  18. wordcloud.to_file('./wordcloud.png') # 保存词云图到文件
 为词云绘制轮廓的方法:
  1. # 比如我想将词云绘成苹果的模样
  2. pic = Image.open("apple3.png") # 读取文件
  3. shape = np.array(pic) # 提取文件的轮廓
  4. #在之前设定好的wordcloud模版中添加mask = shape即可
  5. wordcloud = WordCloud(font_path='simhei.ttf', # 指定中文字体路径
  6. background_color='white',
  7. mask=shape, # 在这里添加前面设定好的轮廓即可
  8. max_words=100, # 显示最大词数
  9. max_font_size=100, # 显示最大字体大小
  10. random_state=30, # 随机状态,使得结果可复现
  11. width=800, height=400 # 词云图的尺寸
  12. # contour_color='red', # 添加词云轮廓,设置为红色
  13. # contour_width=1
  14. ) # 轮廓线条的粗细
  15. #其余步骤一致
  16. wordcloud.generate(new_text) # 生成词云
  17. wordcloud.to_file('./wordcloud.png') # 保存词云图到文件

完整源码:

 代码中已有详细注释。

  1. import pprint
  2. import jieba
  3. import re
  4. # 示例文本
  5. with open("huawei.txt", 'r', encoding='utf-8') as file:
  6. text = file.read()
  7. # print(text)
  8. # exit()
  9. def clean_text2(test):
  10. pattern = r'[^\w\s]' #^是取反的意思,即与后面的条件不相符的情况
  11. # \w 匹配任何字母、数字或下划线,就相当于[a-zA-Z0-9_]
  12. # \s 匹配任何空白字符,空格、制表符等。
  13. cleaned_text = re.sub(pattern,'',text) # 使用re.sub()函数替换标点符号为空字符串,不过这种写法处理后的文本中会出现空格的情况
  14. return cleaned_text
  15. cleaned_text = clean_text2(text)
  16. # print(cleaned_text)
  17. # 使用jieba进行分词
  18. words = jieba.cut(cleaned_text,cut_all = False) #使用jieba分词后,返回结果是一个生成器类型,无法直接看到分词的结果,需要将其转化成列表的
  19. # 形式或者用for循环来查看分词结果。用generator类型,能够节省内存,用完立马就释放了,不会像存储在一个变量中一样。
  20. words_list = list(words) #分词结果
  21. # pprint.pprint(words_list) #通过这里才可以看到分词的结果
  22. # 读取停用词列表
  23. with open('../stop_words/customize.txt', 'r', encoding='utf-8') as file:
  24. stop_word = set([line.strip() for line in file])
  25. # pprint.pprint(list(stop_word)[0:10]) #这里需要将set转成集合才能够查看输出,而且,因为集合是无序的,所以其实每次结果都会不一样
  26. # exit()
  27. # 这里的set是一种数据结构——集合,不采用list的形式是因为其较于列表有这样的优势:
  28. # 自动去重、查找速度较快(因为后面得对分词进行判断,是否为停用词)
  29. # 正确写法
  30. final_list = [] # 创建新的列表,存储不存在于停用词列表中的元素,或者采用列表推导式,但是不好理解
  31. for word in words_list:
  32. if word not in stop_word:
  33. final_list.append(word)
  34. # pprint.pprint(final_list)
  35. from wordcloud import WordCloud
  36. from PIL import Image
  37. import numpy as np
  38. # from imageio import imread
  39. new_text = " ".join(final_list) # 需要将上面列表中的词语拼接起来,符合wordcloud的格式
  40. pic = Image.open("apple3.png") # 读取文件
  41. shape = np.array(pic) # 提取文件的轮廓
  42. # 创建WordCloud对象,设置一些参数,比如背景颜色,最大词数等
  43. wordcloud = WordCloud(font_path='simhei.ttf', # 指定中文字体路径
  44. background_color='white',
  45. mask=shape, # 这里用于设定前面得到的轮廓
  46. max_words=100, # 显示最大词数
  47. max_font_size=100, # 显示最大字体大小
  48. random_state=30, # 随机状态,使得结果可复现
  49. width=800, height=400 # 词云图的尺寸
  50. # contour_color='red', # 添加词云轮廓,设置为红色
  51. # contour_width=1
  52. ) # 轮廓线条的粗细
  53. wordcloud.generate(new_text) # 生成词云
  54. wordcloud.to_file('./wordcloud.png') # 保存词云图到文件

效果展示:

备注:

本文使用的停用词是采用。txt的形式存储的,大家也可自行在网上搜索下载。 

实例文本也是采用.txt文本进行存储了,大家也可自行设计一段中文文本测试。

至于想将词云绘制成何种形状,提前下载好自己需要的相关图片即可。这里需要说明的是,作为轮廓的图片最好是白底。参考图片:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/899406
推荐阅读
相关标签
  

闽ICP备14008679号