wordcloud 是什么? 词云图,也叫文字云,是对文本中出现频率较高的“关键词”予以视觉化的展现词云图过滤掉大量的低频低质的文本信息使得浏览者只要一眼扫过文本就可领略文本的主旨。
pip install wordcloud
先导入,在创建一个wordcloud的实例化对象。
基本使用方法如下:
from wordcloud import WordCloud #导入
with open("new.txt","r",encoding="utf-8") as file: #打开文件
txt = file.read() #读取文件
wordcloud = WordCloud(font_path="BASKVILL.TTF", #设置属性
collocations=False,
background_color="white",
width=800,
height=600,
max_words=50).generate(txt)
#生成图片
image = wordcloud.to_image()
#展示图片
image.show()
#保存图片
wordcloud.to_file("tag.jpg")
这里面的参数都是什么意思?
绝对路径:这里为了方便就使用绝对路径了
C:\Windows\Fonts\simhei.ttf
怎么找?
在C:\Windows\Fonts\找到字体之后右键,属性,找到字体文件名
相对路径:
把字体文件放到与py文件一个文件夹里
from wordcloud import WordCloud
with open("new.txt","r",encoding="utf-8") as file:
txt = file.read()
wordcloud = WordCloud(font_path="BASKVILL.TTF", #这里我用的是相对路径,自己演示的时候可以做修改
collocations=False,
background_color="white",
width=800,
height=600,
max_words=50).generate(txt)
#generate(txt)这个方法的作用是把 txt 里面的信息传给wordcloud,让他绘制词云图
#生成图片
image = wordcloud.to_image()
#展示图片
image.show()
文本为英文时font_path可以不用写
from wordcloud import WordCloud
# 第一个是包名,第二个是类名
txt ="The awesome yellow planet of Tatooine emerges from a totaleclipse,~her two moons glowing againstl"
wordcloud = WordCloud(
# font_path="C:\Windows\Fonts\STFANGSO.TTF",
collocations=False, #这些也可以不用设置,默认的也可以
background_color="black",
width=800,
height=600,
max_words=50).generate(txt)
#生成图片
image = wordcloud.to_image()
#展示图片
image.show()
文本含中文时,不加字体路径会出现乱码现象
from wordcloud import WordCloud
# wordcloud是包名,WordCloud是类名
txt = "这是我写的第一个词云图"
wordcloud = WordCloud(
# font_path="C:\Windows\Fonts\simhei.ttf",
collocations=False,
background_color="white",
width=800,
height=600,
max_words=50).generate(txt)
#生成图片
image = wordcloud.to_image()
#展示图片
image.show()
把路径加上再演示一下
from wordcloud import WordCloud
# wordcloud是包名,WordCloud是类名
txt = "这是我写的第一个词云图"
wordcloud = WordCloud(
font_path="C:\Windows\Fonts\simhei.ttf",
collocations=False,
background_color="white",
width=800,
height=600,
max_words=50).generate(txt)
#生成图片
image = wordcloud.to_image()
#展示图片
image.show()
运行后会发现这根本不是词云图
wordcloud默认以空格来拆分词
from wordcloud import WordCloud
# wordcloud是包名,WordCloud是类名
txt = "这 是我 写的 第一个 词云图"
wordcloud = WordCloud(
font_path="C:\Windows\Fonts\STFANGSO.TTF",
collocations=False,
background_color="white",
width=800,
height=600,
max_words=50).generate(txt)
#生成图片
image = wordcloud.to_image()
#展示图片
image.show()
特点-支持三种分词模式:
pip install jieba
import jieba
seg_list = jieba.cut("我来到北京清华大学") # 默认是精确模式
print(" ".join(seg_list))
seg_list = jieba.cut("小明硕士毕业于中国科学院计算所,后在日本京都大学深造") # 默认
print("-".join(seg_list))
seg_list = jieba.cut("我来到北京清华大学",cut_all=True)
print("Full Mode:" + " ".join(seg_list))
seg_list = jieba.cut("我来到北京清华大学",cut_all=False)
print("Default Mode:" + " ".join(seg_list)) #精确模式
会从前往后找能够拼接的词。把能组成词的全部显示出来
seg_list = jieba.cut_for_search("小明硕士毕业于中国科学院计算所,后在日本京都大学深造")
print(" ".join(seg_list))
看一下拆分后是什么?
import jieba # 数据文件
txt ="皇后区的友好邻居变成了宇宙的,现实世界资本的侵蚀之下,只有哥谭还维持着它的地域性"
txt_list =jieba.cut(txt) #jieba.cut()返回的是一个迭代器没法直接打印
print([i for i in txt_list])
txt_str = " ".join(txt_list) #把txt_list 这个列表里的数据用空格来拼接起来,前面" "里面是什么,就拿什么拼接
还有一点要注意:
import jieba # 数据文件
txt ="皇后区的友好邻居变成了宇宙的,现实世界资本的侵蚀之下,只有哥谭还维持着它的地域性"
txt_list =jieba.cut(txt) #jieba.cut()返回的是一个迭代器没法直接打印
print(type(txt_list))
print([i for i in txt_list])
txt_str = " ".join(txt_list) #把txt_list 这个列表里的数据用空格来拼接起来,前面" "里面是什么,就拿什么拼接
print(txt_str) # 这一步无法打印是因为前面使用了迭代器,前面迭代器已经走到最后了,再往后就没有了
词云图和分词结合起来
from wordcloud import WordCloud
import jieba
import jieba.analyse
txt ="皇后区的友好邻居变成了宇宙的,现实世界资本的侵蚀之下,只有哥谭还维持着它的地域性"
txt_list = jieba.cut(txt) # 分词
txt_str = " ".join(txt_list) # 拼接
wordcloud = WordCloud(
font_path="C:\Windows\Fonts\STFANGSO.TTF",
collocations=False,
background_color="white",
width=800,
height=600,
max_words=50).generate(txt_str) #传入
#生成图片
image = wordcloud.to_image()
#展示图片
image.show()
第一个参数:待提取关键词的文本。
第二个参数 topk:返回关键词的数量,重要性从高到低排排序
第三个参数withWeight:是否同时返回每个关键词的权重 (一般用不到)
第四个参数allowPOS=(): 词性过滤,为空表示不过滤,若提供则仅返回符合词性要求的关键词
比如:名词为 n,动词为 v
注意事项:必须引入的使用就引入jieba.analyse,才能使用. 不能导入jieba,然后使用jieba.analyse,会报错
试一试?
import jieba
# import jieba.analyse
text ="皇后区的友好邻居变成了宇宙的,现实世界资本的侵蚀之下,只有哥谭还维持着它的地域性"
seg_list = jieba.analyse.extract_tags(text, allowPOS=("v"))
print("analysea extract allowPOS:"+ str((seg_list))) # 分析提取
提取名词
import jieba
import jieba.analyse
text ="皇后区的友好邻居变成了宇宙的,现实世界资本的侵蚀之下,只有哥谭还维持着它的地域性"
seg_list = jieba.analyse.extract_tags(text, allowPOS=("n"))
print("analysea extract allowPOS:"+ str((seg_list))) # 分析提取
提取动词
import jieba
import jieba.analyse
text ="皇后区的友好邻居变成了宇宙的,现实世界资本的侵蚀之下,只有哥谭还维持着它的地域性"
seg_list = jieba.analyse.extract_tags(text, allowPOS=("v"))
print("analysea extract allowPOS:"+ str((seg_list))) # 分析提取
不设置词性
import jieba.analyse
text ="皇后区的友好邻居变成了宇宙的,现实世界资本的侵蚀之下,只有哥谭还维持着它的地域性"
seg_list = jieba.analyse.extract_tags(text)
print("analysea extract allowPOS:"+ str((seg_list))) # 分析提取
词云图和分词结合起来
from wordcloud import WordCloud
import jieba.analyse
text ="皇后区的友好邻居变成了宇宙的,现实世界资本的侵蚀之下,只有哥谭还维持着它的地域性"
seg_list = jieba.analyse.extract_tags(text)
#将列表拼接成字符串
txt_str = " ".join(seg_list)
wordcloud = WordCloud(
font_path="C:\Windows\Fonts\STFANGSO.TTF",
collocations=False,
background_color="white",
width=800,
height=600,
max_words=50).generate(txt_str)
#生成图片
image = wordcloud.to_image()
#展示图片
image.show()
对比上面生成的没有像 的 了 着 的那些词了,相比之下好很多
from wordcloud import WordCloud
import jieba.analyse
text ="皇后区的友好邻居变成了宇宙的,现实世界资本的侵蚀之下,只有哥谭还维持着它的地域性"
seg_list = jieba.analyse.extract_tags(text,topK=3,allowPOS=("v"))
#将列表拼接成字符串
txt_str = " ".join(seg_list)
wordcloud = WordCloud(
font_path="C:\Windows\Fonts\STFANGSO.TTF",
collocations=False,
background_color="white",
width=800,
height=600,
max_words=50).generate(txt_str)
#生成图片
image = wordcloud.to_image()
#展示图片
image.show()