文章目录

  • jieba
    • 关于 jieba
      • 特点
    • 安装
    • 使用
      • 分词工具
        • 添加自定义词典
        • 关键词抽取
        • 词性标注
  • 词云
    • 关于词云
      • 一些工具、资料
    • 使用
      • 一个简单的英文词云
      • 生成中文词云
      • 词云展示
    • 自定义显示
      • 分析 `WordCloud()` 方法
      • 带 mask 词云

jieba

关于 jieba

https://pypi.org/project/jieba/
https://github.com/fxsjy/jieba

“结巴”中文分词:做最好的 Python 中文分词组件
“Jieba” (Chinese for “to stutter”) Chinese text segmentation: built to be the best Python Chinese word segmentation module.


特点

-支持三种分词模式:
- 精确模式,试图将句子最精确地切开,适合文本分析;
- 全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义;
- 搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。

  • 支持繁体分词
  • 支持自定义词典
  • MIT 授权协议

优点:经典、免费
功能:用于分词


安装

(base) $ sudo pip install jieba
  • 全自动安装: easy_install jieba 或者 pip install jieba / pip3 install jieba
  • 半自动安装:先下载 https://pypi.python.org/pypi/jieba/ ,解压后运行 python setup.py install
  • 手动安装:将 jieba 目录放置于当前目录或者 site-packages 目录
  • 通过 import jieba 来引用

使用

分词工具

import jiebaseg_list = jieba.cut("我来到北京清华大学", cut_all=True)
print("全模式: " + "/ ".join(seg_list))  # 全模式seg_list = jieba.cut("我来到北京清华大学", cut_all=False)
print("精确模式: " + "/ ".join(seg_list))  # 精确模式(无重复)seg_list = jieba.cut("他来到了网易杭研大厦")  # 默认是精确模式
print(", ".join(seg_list))
全模式: 我/ 来到/ 北京/ 清华/ 清华大学/ 华大/ 大学
精确模式: 我/ 来到/ 北京/ 清华大学
他, 来到, 了, 网易, 杭研, 大厦

添加自定义词典

text = "故宫的著名景点包括乾清宫、太和殿和黄琉璃瓦等"# 全模式
seg_list = jieba.cut(text, cut_all=True)
print(u"[全模式]: ", "/ ".join(seg_list))# 精确模式
seg_list = jieba.cut(text, cut_all=False)
print(u"[精确模式]: ", "/ ".join(seg_list))
[全模式]:  故宫/ 的/ 著名/ 著名景点/ 景点/ 包括/ 乾/ 清宫/ / / 太和/ 太和殿/ 和/ 黄/ 琉璃/ 琉璃瓦/ 等
[精确模式]:  故宫/ 的/ 著名景点/ 包括/ 乾/ 清宫/ 、/ 太和殿/ 和/ 黄/ 琉璃瓦/ 等

设置字典,保存到 mydict.txt 文件中;注意要保存为 utf-8 编码。

乾清宫 1 n
黄琉璃瓦 1 n

也可以用 jieba.add_word("乾清宫")
适合加个别几个词;不会永久记录。所以重复性的东西建议做到词典

jieba.load_userdict("./data/mydict.txt") #需UTF-8,可以在另存为里面设置text = "故宫的著名景点包括乾清宫、太和殿和黄琉璃瓦等"# 全模式
seg_list = jieba.cut(text, cut_all=True)
print(u"[全模式]: ", "/ ".join(seg_list))# 精确模式
seg_list = jieba.cut(text, cut_all=False)
print(u"[精确模式]: ", "/ ".join(seg_list))
[全模式]:  故宫/ 的/ 著名/ 著名景点/ 景点/ 包括/ 乾清宫/ 清宫/ / / 太和/ 太和殿/ 和/ 黄琉璃瓦/ 琉璃/ 琉璃瓦/ 等
[精确模式]:  故宫/ 的/ 著名景点/ 包括/ 乾清宫/ 、/ 太和殿/ 和/ 黄琉璃瓦/ 等

关键词抽取

import jieba.analyseseg_list = jieba.cut(text, cut_all=False)
print (u"分词结果:")
print ("/".join(seg_list))# 获取关键词
tags = jieba.analyse.extract_tags(text, topK=5)  # topK:前K个最关键的词
print (u"关键词:")
print (" ".join(tags))
分词结果:
故宫/的/著名景点/包括/乾清宫/、/太和殿/和/黄琉璃瓦/等
关键词:
著名景点 乾清宫 黄琉璃瓦 太和殿 故宫
tags = jieba.analyse.extract_tags(text, topK=5, withWeight=True) # withWeight:输出是否带权重
for word, weight in tags:print(word, weight)
著名景点 2.3167796086666668
乾清宫 1.9924612504833332
黄琉璃瓦 1.9924612504833332
太和殿 1.6938346722833335
故宫 1.5411195503033335

词性标注

import jieba.posseg as psegwords = pseg.cut("我爱北京天安门")
for word, flag in words:print("%s %s" % (word, flag))
我 r
爱 v
北京 ns
天安门 ns

词云

关于词云

常见于文本可视化


一些工具、资料

  • 文档:http://amueller.github.io/word_cloud/, https://pypi.org/project/wordcloud/

  • web 词云统计 http://cloud.niucodata.com/

  • 更丰富的词云使用 https://github.com/amueller/word_cloud/


使用

一个简单的英文词云

创建 text 文件,保存英文内容
读取 text,生成并展示图云

from wordcloud import WordCloud
import matplotlib.pyplot as plt# 读取保存的文本
mytext = ''
# filename = "a.text"
filename = "b.text"
with open(filename, 'r') as f:mytext = f.read()print('mytext : ', len(mytext))# 生成词云
wc = WordCloud().generate(mytext)plt.imshow(wc, interpolation='bilinear')
plt.axis("off")
plt.show()


生成中文词云


  • 中文是连续的,不像 英文有 空格 分割;所以需要使用 jieba 这个库,将文字分开。
  • WordCloud默认不支持中文显示,需要下载中文字体;将字体文件路劲 填写到 font_path 键值即可; 一个免费字体下载网站:https://www.17font.com/fontlist/
#!/usr/bin/env python3
# -*- coding: utf-8 -*-from wordcloud import WordCloud
import matplotlib.pyplot as pltimport jieba
import timeimport numpy as  np
from os import path
from PIL import Image# 获取保存的文本
mytext = ''
filename = "src/a.text"
with open(filename, 'r') as f:mytext = f.read()# 2.结巴中文分词,生成字符串,默认精确模式,如果不通过分词,无法直接生成正确的中文词云
cut_text = jieba.cut(mytext)# 必须给个符号分隔开分词结果来形成字符串,否则不能绘制词云
mytext = " ".join(cut_text)# print(mytext)
print('mytext : ', len(mytext), type(mytext))wc = WordCloud(font_path = 'src/heart.ttf',  # 设置字体,不指定就会出现乱码background_color='white', # 设置背景色width=600, # 设置背景宽height=420,   # 设置背景高 mode='RGBA', )wc.generate(mytext)plt.imshow(wc, interpolation='bilinear')
plt.axis("off")
plt.show()now = time.strftime("output/%Y-%m-%d_%H:%M:%S", time.localtime())
print(now, type(now))
wc.to_file(str(now) + '.png')

如果字体错误,比如英文字符使用了中文字体,会报如下错误:

Traceback (most recent call last):File "/Users/user/repos/LearningPython/demos/wordcloud/wc01.py", line 54, in <module>wc.generate(mytext)File "/Users/user/opt/anaconda3/lib/python3.7/site-packages/wordcloud/wordcloud.py", line 631, in generatereturn self.generate_from_text(text)File "/Users/user/opt/anaconda3/lib/python3.7/site-packages/wordcloud/wordcloud.py", line 613, in generate_from_textself.generate_from_frequencies(words)File "/Users/user/opt/anaconda3/lib/python3.7/site-packages/wordcloud/wordcloud.py", line 447, in generate_from_frequenciesmax_font_size=self.height)File "/Users/user/opt/anaconda3/lib/python3.7/site-packages/wordcloud/wordcloud.py", line 496, in generate_from_frequenciesfont = ImageFont.truetype(self.font_path, font_size)File "/Users/user/opt/anaconda3/lib/python3.7/site-packages/PIL/ImageFont.py", line 640, in truetypereturn freetype(font)File "/Users/user/opt/anaconda3/lib/python3.7/site-packages/PIL/ImageFont.py", line 637, in freetypereturn FreeTypeFont(font, size, index, encoding, layout_engine)File "/Users/user/opt/anaconda3/lib/python3.7/site-packages/PIL/ImageFont.py", line 186, in __init__font, size, index, encoding, layout_engine=layout_engine
OSError: cannot open resourceProcess finished with exit code 1

词云展示

from wordcloud import WordCloud
import jieba
from wordcloud import WordCloud
from scipy.misc import imread
from collections import Counter
import matplotlib.pyplot as pltdata={}text_file = open('./data/19Congress.txt','r',encoding='utf-8')
text = text_file.read()
with open('./data/stopwords.txt',encoding='utf-8') as file:stopwords = {line.strip() for line in file}seg_list = jieba.cut(text, cut_all=False)
for word in seg_list:if len(word)>=2:if not data.__contains__(word):data[word]=0data[word]+=1
#print(data)      my_wordcloud = WordCloud(  background_color='white',  #设置背景颜色max_words=400,  #设置最大实现的字数font_path=r'./data/SimHei.ttf',  #设置字体格式,如不设置显示不了中文mask=imread('./data/mapofChina.jpg'), #指定在什么图片上画width=1000,height=1000,stopwords = stopwords
).generate_from_frequencies(data)plt.figure(figsize=(18,16))
plt.imshow(my_wordcloud)
plt.axis('off')
plt.show()  # 展示词云
my_wordcloud.to_file('result.jpg')
text_file.close()


自定义显示

示例

wc = WordCloud(# 设置字体,不指定就会出现乱码 background_color='white', # 设置背景色width=500, # 设置背景宽height=350,   # 设置背景高max_font_size=80,  # 最大字体min_font_size=10,  # 最小字体mode='RGBA',# colormap='pink')wc.generate(mytext)
plt.imshow(wc, interpolation='bilinear')

分析 WordCloud() 方法

  def __init__(self, font_path=None, width=400, height=200, margin=2,  # 图片宽、高、边距ranks_only=None, prefer_horizontal=.9,  # 词语水平方向排版出现的频率,默认 0.9 (所以词语垂直方向排版出现频率为 0.1 )# mask=None,  # 如果参数为空,则使用二维遮罩绘制词云。如果 mask 非空,设置的宽高值将被忽略,遮罩形状被 mask 取代。# 除全白(#FFFFFF)的部分将不会绘制,其余部分会用于绘制词云。如:bg_pic = imread('读取一张图片.png'),背景图片的画布一定要设置为白色(#FFFFFF),然后显示的形状为不是白色的其他颜色。# 可以用ps工具将自己要显示的形状复制到一个纯白色的画布上再保存,就ok了。scale=1, # 按照比例进行放大画布,如设置为1.5,则长和宽都是原来画布的1.5倍。color_func=None, # 生成新颜色的函数,如果为空,则使用 self.color_funcmax_words=200,  # 显示的词的最大个数max_font_size=None, min_font_size=4, # 最大、最小字体尺寸font_step=1,  # 字体步长,如果步长大于1,会加快运算但是可能导致结果出现较大的误差。stopwords=None, # 需要屏蔽的词,如果为空,则使用内置的STOPWORDSrandom_state=None, background_color='black', # 背景颜色mode="RGB",   # 当参数为“RGBA”并且background_color不为空时,背景为透明。relative_scaling='auto',  # 词频和字体大小的关联性regexp=None,  # 使用正则表达式分隔输入的文本collocations=True, # 是否包括两个词的搭配colormap=None, # 给每个单词随机分配颜色,若指定color_func,则忽略该方法。normalize_plurals=True, contour_width=0,contour_color='black', repeat=False,include_numbers=False, min_word_length=0, collocation_threshold=30):

单例其他方法

fit_words(frequencies)  # 根据词频生成词云generate(text) # 根据文本生成词云generate_from_frequencies(frequencies[, ...])  # 根据词频生成词云generate_from_text(text)   # 根据文本生成词云process_text(text) # 将长文本分词并去除屏蔽词(此处指英语,中文分词还是需要自己用别的库先行实现,使用上面的 fit_words(frequencies) )recolor([random_state, color_func, colormap])  # 对现有输出重新着色。重新上色会比重新生成整个词云快很多。to_array() # 转化为 numpy arrayto_file(filename)  # 输出到文件

带 mask 词云



#!/usr/bin/env python3
# -*- coding: utf-8 -*-from wordcloud import WordCloud
import matplotlib.pyplot as pltimport jieba
import timeimport numpy as  np
from os import path
from PIL import Image# 获取保存的文本
mytext = ''
filename = "b.text"
with open(filename, 'r') as f:mytext = f.read()# print(mytext)
print('mytext : ', len(mytext), type(mytext))# 展示图片
img = Image.open("apple.jpeg")
plt.imshow(img)
plt.show()
alice_mask = np.array(img)wc = WordCloud(background_color='white', # 设置背景色width=600, # 设置背景宽height=420,   # 设置背景高# max_font_size=200,  # 最大字体# min_font_size=10,  # 最小字体mode='RGBA',mask=alice_mask# colormap='pink')wc.generate(mytext)plt.imshow(wc, interpolation='bilinear')
plt.axis("off")
plt.show()now = time.strftime("%Y-%m-%d_%H:%M:%S", time.localtime())
print(now, type(now))
wc.to_file(str(now) + '.png')

NLP - 结巴分词 词云相关推荐

  1. python结巴分词 每个词一行,python结巴分词词云图

    导入结巴分词 from wordcloud import WordCloud import jieba # 词频计算 import jieba.analyse as analyse from scip ...

  2. 12星座都是什么性格?(python爬虫+jieba分词+词云)

    12星座都是什么性格,大数据告诉你! 下面是利用python爬取12星座性格相关的微博,产生的12星座性格特征词云!白羊座为例,其他的在最后. 上代码(以白羊座为例): 1.微博数据爬取(需要sele ...

  3. NLP 结巴分词词性映射关系

    直接上代码吧 import jieba.posseg as psgword_map={'eng':'英文','a':'形容词','ad':'副形词','an':'名形词','ag':'形容词性语素', ...

  4. java结巴分词如何提高运行速度_结巴分词 java 高性能实现,优雅易用的 api 设计,性能优于 huaban jieba 分词...

    Segment Segment 是基于结巴分词词库实现的更加灵活,高性能的 java 分词实现. 创作目的 分词是做 NLP 相关工作,非常基础的一项功能. jieba-analysis 作为一款非常 ...

  5. mysql使用结巴语句_结巴分词 java 高性能实现,是 huaban jieba 速度的 2倍

    Segment Segment 是基于结巴分词词库实现的更加灵活,高性能的 java 分词实现. 创作目的 分词是做 NLP 相关工作,非常基础的一项功能. jieba-analysis 作为一款非常 ...

  6. 《蚁人2》豆瓣影评爬虫+简单情感分析+词云

    打算把豆瓣上的短评爬下来作为分析的素材. 然而并没有成功爬到所有的短评,一波三折,最终只爬到了500条,当然这也是豆瓣目前可见的最大数量,本文将细致分析爬虫的整个过程,并对爬到的数据加以分析,蚁小见大 ...

  7. jieba分词_wordcloud词云美化——jieba结巴中文分词(将长句拆分)

    大家好,上一篇文章<五行代码上手WordCloud词云--用一个重复的单词做一个单词云>已经带大家初步认识了词云的基本制作流程,本节教大家如何对长句进行拆分制作词云: 首先我们来了解这张图 ...

  8. NLP实现文本分词+在线词云实现工具

    实现文本分词+在线词云实现工具 词云是NLP中比较简单而且效果较好的一种表达方式,说到可视化,R语言当仍不让,可见R语言︱文本挖掘--词云wordcloud2包 当然用代码写词云还是比较费劲的,网上也 ...

  9. 词云_jieba分词

    词云_jieba分词 本篇是对词云的代码展示,详细的见如下描述: # -*- coding: utf-8 -*- from wordcloud import WordCloud import matp ...

  10. 使用jieba和wordcloud进行中文分词并生成《悲伤逆流成河》词云

    因为词云有利于体现文本信息,所以我就将那天无聊时爬取的<悲伤逆流成河>的评论处理了一下,生成了词云. 关于爬取影评的爬虫大概长这个样子(实际上是没有爬完的): #!/usr/bin/env ...

最新文章

  1. 无需用户输入!Adobe提出自动生成高质量合成图像新方法
  2. hyper-v创建虚拟服务器,使用 Hyper-V 创建虚拟机
  3. php file_get_contents遇到https的处理办法
  4. android 自定义正方形 绕中心点旋转
  5. Top10 Web2.0在线生成器
  6. Python MySQL选择
  7. Ajax解决IE浏览器兼容问题
  8. Android 系统(189)---Android Handler:这是一份 全面、详细的Handler机制 学习攻略
  9. 郭明錤:全新设计AirPods Pro2将于2022年末推出
  10. 【Android】Android SDK下载和更新失败的解决方法!!!
  11. 十一款游戏教你学会 CSS!
  12. Gaze Estimation学习笔记(1)-Appearance-Based Gaze Estimation in the Wild
  13. 配置IP SAN服务器搭建iscsi(协议)存储系统
  14. 谈谈蛋疼的问题:里式替换原则:正方形是长方形吗?
  15. 快速原型模型的概念,优缺点。
  16. 兔子、狼、狐狸、王八
  17. How to Rerun Failed Tests in JUnit?
  18. Excel日期显示为数字,不能正常显示为日期
  19. Ubuntu18.04 鼠标键盘失灵
  20. 干货 : 揭秘信息可视化图表的设计方法

热门文章

  1. bch纠错码 码长8_浅析BCH码的编码方法.docx
  2. 证据理论的模态逻辑解释
  3. 动手学深度学习v2-线性代数课后习题
  4. [系统安全]《黑客免杀攻防》逆向基础之经典脱壳基础
  5. LCD12864图形点阵液晶显示模块中文资料介绍
  6. 基于stm32单片机外文文献_基于STM32的智能家居系统设计毕业论文+任务书+开题报告+文献综述+外文翻译及原文+程序+原理图+参考资料+答辩PPT+仿真设计...
  7. JS实现自动填写问卷【JS小工具】
  8. 偷窥Play Framework 2.0
  9. 商业计划书范文3000_大学生商业计划书范文
  10. 数字电视厂商及解决方案全景大扫描