知识内容:

1.jieba库的使用

2.wordcloud库的使用

参考资料:

https://github.com/fxsjy/jieba

https://blog.csdn.net/fontthrone/article/details/72775865

一、jieba库的使用

1.jieba库介绍

jieba是优秀的中文分词第三方库,使用pip安装后可以使用其来对中文文本进行分词

特点:

  • 支持三种分词模式:

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

  • 支持自定义词典

  • MIT 授权协议

2.jieba库方法

(1)jieba库3种分词方法(3种模式)

3种模式对应的方法如下:

  • cut(s)和lcut(s)                            # 精确模式
  • lcut(s, cut_all=True)                             # 全模式(存在冗余)
  • cut_for_search(s)和lcut_for_search(s)     # 搜索模式(存在冗余)

注:cut()和lcut()的不同:cut返回的是生成器,lcut返回的是列表。cut_for_search()和lcut_for_search()也是前者返回生成器,后者返回列表

另外:

  • cut 方法lcut方法接受三个输入参数: 需要分词的字符串;cut_all 参数用来控制是否采用全模式;HMM 参数用来控制是否使用 HMM 模型
  • cut_for_search 方法和lcut_for_searchlcut_for_search接受两个参数:需要分词的字符串;是否使用 HMM 模型。该方法适合用于搜索引擎构建倒排索引的分词,粒度比较细
  • 待分词的字符串可以是 unicode 或 UTF-8 字符串、GBK 字符串。注:不建议直接输入 GBK 字符串,可能无法预料地错误解码成 UTF-8

示例:

 import jieba

 s = "中国是一个伟大的国家"
res1 = jieba.lcut(s) # 精确模式
res2 = jieba.lcut(s, cut_all=True) # 全模式(存在冗余)
res3 = jieba.lcut_for_search("中华人民共和国是伟大的") # 搜索模式(存在冗余) print(res1, res2, res3, sep="\n")
 import jieba

 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("他来到了网易杭研大厦") # 默认是精确模式
print(", ".join(seg_list)) seg_list = jieba.cut_for_search("小明硕士毕业于中国科学院计算所,后在日本京都大学深造") # 搜索引擎模式
print(", ".join(seg_list))

结果:

(2)向字典中添加新词或添加自定义词典

使用 add_word(word, freq=None, tag=None)del_word(word) 可在程序中动态修改词典,当然也可以使用load_userdict(file_name)来导入自定义字典

最简单的用法:add_word() 直接向分词词典中添加新词

示例:

 s = "李小福是创新办主任也是云计算方面的专家"
print(jieba.lcut(s))
jieba.add_word("创新办")
print(jieba.lcut(s))

还可以使用load_userdict(file_name)导入自定义字典

示例:

自定义字典文件dict.txt内容如下:

 云计算 5
李小福 2 nr
创新办 3 i
easy_install 3 eng
好用 300
 s = "李小福是创新办主任也是云计算方面的专家"
print(jieba.lcut(s))
jieba.load_userdict("dict.txt")
print(jieba.lcut(s))

3.文本词频统计通用代码

 import string
import jieba
# 统计哈姆雷特和三国演义的词频 # 统计hamlet的词频 -> 可以用做英文的通用分词和统计
class Hamlet(object):
def __init__(self, name):
"""
:param name: 文本名字或路径
"""
self.text_name = name def get_text(self):
"""
获取文本并进行相关处理
:return: 返回文本内容
"""
txt = open(self.text_name, "r").read().lower()
for ch in string.punctuation:
txt = txt.replace(ch, " ")
return txt def count(self):
"""
统计单词出现的次数并输出结果
"""
hamlet_txt = self.get_text()
words = hamlet_txt.split()
counts = {}
for word in words:
counts[word] = counts.get(word, 0) + 1
items = list(counts.items())
# key指定用列表中每一项中第二个值作为排序依据, reverse设置排序顺序 设为True的排序顺序为从大到小
items.sort(key=lambda x: x[1], reverse=True)
for i in range(10):
print(items[i][0], items[i][1]) # 统计三国演义中人物名字的词频 -> 可以用做中文的通用分词及统计
class ThreeKindDom(object):
def __init__(self, name):
"""
:param name: 文本名字或路径
"""
self.text_name = name def get_text(self):
"""
获取文本并进行相关处理
:return: 返回文本内容
"""
txt = open(self.text_name, "r", encoding="utf-8").read()
return txt def split_txt(self):
"""
对文本进行分词
:return: 返回分词后的列表
"""
threekingdom_txt = self.get_text()
words = jieba.lcut(threekingdom_txt)
return words def count(self):
"""
统计单词出现的次数并输出结果
"""
words = self.split_txt()
# excludes为要去掉的词
excludes = {"将军", "却说", "二人", "不可", "荆州", "不能", "如此", "商议", "如何", "左右",
"军马", "引兵", "军士", "次日", "主公", "大喜", "天下", "东吴", "于是", "今日", "魏兵"}
counts = {}
for word in words:
rword = word
if len(word) == 1:
continue
# 对一些特殊的词进行处理
elif word == "诸葛亮" or word == "孔明" or word == "孔明曰":
rword = "孔明"
elif word == "关公" or word == "云长":
rword = "关羽"
elif word == "玄德" or word == "玄德曰":
rword = "刘备"
elif word == "孟德" or word == "丞相":
rword = "曹操"
counts[rword] = counts.get(rword, 0) + 1
for word in excludes:
del counts[word]
items = list(counts.items())
# key指定用列表中每一项中第二个值作为排序依据, reverse设置排序顺序 设为True的排序顺序为从大到小
items.sort(key=lambda x: x[1], reverse=True)
for i in range(8):
print(items[i][0], items[i][1]) if __name__ == '__main__':
# s1 = Hamlet("hamlet.txt")
# s1.count() s2 = ThreeKindDom("threekingdoms.txt")
s2.count()

二、wordcloud库的使用

1.wordcloud库介绍

wordcloud库是基于Python的词云生成类库,很好用,而且功能强大

词云如下所示:

2.wordcloud库基本使用

实例:

 import wordcloud

 c = wordcloud.WordCloud()                           # 生成词云对象
c.generate("wordcloud by Python") # 加载词云文本
c.to_file("wordcloud.png") # 输出词云文件

WordCloud方法的参数如下:

  • width:指定词云对象生成的图片的宽度(默认为200px)
  • height:指定词云对象生成的图片的高度(默认为400px)
  • min_font_size:指定词云中字体最小字号,默认为4
  • max_font_size:指定词云中字体最大字号
  • font_step:指定词云中字体之间的间隔,默认为1
  • font_path:指定字体文件路径
  • max_words:指定词云中能显示的最多单词数,默认为200
  • stop_words:指定在词云中不显示的单词列表
  • background_color:指定词云图片的背景颜色,默认为黑色

指定词云形状:

 import jieba
import wordcloud
from scipy.misc import imread mask = imread("yun.png") # 读取图片数据到mask中 f = open("文档.txt", "r", encoding="utf-8")
data = f.read()
f.close() ls = jieba.lcut(data) # 分词
txt = " ".join(ls) # 将列表中的单词连接成一个字符串 w = wordcloud.WordCloud(mask=mask) # 指定词云形状
w.generate(txt)
w.to_file("output.png")

3.生成词云通用代码

 import jieba
import wordcloud
from scipy.misc import imread def make_cloud(input_file, output_file, **kwargs):
"""
制作词云的通用代码
:param input_file: 输入文本的路径或名字
:param output_file: 输出图片的路径或名字
:param kwargs: WordCloud的参数(width、height、background_color、font_path、max_words)
:return:
"""
width = kwargs.get("width")
height = kwargs.get("height")
background_color = kwargs.get("background_color")
font_path = kwargs.get("font_path")
max_words = kwargs.get("max_words") f = open(input_file, "r", encoding="utf-8")
data = f.read()
f.close() ls = jieba.lcut(data) # 分词
txt = " ".join(ls) # 将列表中的单词连接成一个字符串 w = wordcloud.WordCloud(width=width, height=height, background_color=background_color, font_path=font_path,
max_words=max_words)
w.generate(txt)
w.to_file(output_file) def make_cloud_png(input_file, output_file, png_file, **kwargs):
"""
用特殊图形制作词云的通用代码
:param input_file: 输入文本的路径或名字
:param output_file: 输出图片的路径或名字
:param png_file: 设置词云的图片形状的文件路径或名字
:param kwargs: WordCloud的参数(width、height、background_color、font_path、max_words)
:return:
"""
width = kwargs.get("width")
height = kwargs.get("height")
background_color = kwargs.get("background_color")
font_path = kwargs.get("font_path")
max_words = kwargs.get("max_words")
mask = imread(png_file) f = open(input_file, "r", encoding="utf-8")
data = f.read()
f.close() ls = jieba.lcut(data) # 分词
txt = " ".join(ls) # 将列表中的单词连接成一个字符串 w = wordcloud.WordCloud(width=width, height=height, background_color=background_color, font_path=font_path,
max_words=max_words, mask=mask)
w.generate(txt)
w.to_file(output_file)

jieba库及wordcloud库的使用的更多相关文章

  1. 使用jieba库与wordcloud库第三方库进行词频统计

    一.jieba库与wordcloud库的使用 1.jieba库与wordcloud库的介绍 jieba 库的分词原理是利用一个中文词库,将待分词的内容与分词词库进行比对,通过图结构和动态规划方法找到最 ...

  2. python预课05 爬虫初步学习+jieba分词+词云库+哔哩哔哩弹幕爬取示例(数据分析pandas)

    结巴分词 import jieba """ pip install jieba 1.精确模式 2.全模式 3.搜索引擎模式 """ txt ...

  3. python词云生成-wordcloud库

    python词云生成-wordcloud库 全文转载于'https://www.cnblogs.com/nickchen121/p/11208274.html#autoid-0-0-0' 一.word ...

  4. wordcloud库基本介绍和使用方法

    一.wordcloud库基本介绍 1.1 wordcloud库概述 wordcloud是优秀的词云展示第三方库 词云以词语为基本单位,更加直观和艺术的展示文本 1.2wordcloud库的安装 pip ...

  5. python爬虫——京东评论、jieba分词、wordcloud词云统计

    接上一章,动态页面抓取——抓取京东评论区内容. url=‘https://club.jd.com/comment/productPageComments.action?callback=fetchJS ...

  6. Python常用的标准库以及第三方库

    Python常用的标准库以及第三方库有哪些?   20个必不可少的Python库也是基本的第三方库 读者您好.今天我将介绍20个属于我常用工具的Python库,我相信你看完之后也会觉得离不开它们.他们 ...

  7. 【转】iOS动态库和静态库的简要介绍

    静态库与动态库的区别 首先来看什么是库,库(Library)说白了就是一段编译好的二进制代码,加上头文件就可以供别人使用. 什么时候我们会用到库呢?一种情况是某些代码需要给别人使用,但是我们不希望别人 ...

  8. C++ 系列:静态库与动态库

    转载自http://www.cnblogs.com/skynet/p/3372855.html 这次分享的宗旨是——让大家学会创建与使用静态库.动态库,知道静态库与动态库的区别,知道使用的时候如何选择 ...

  9. C++静态库与动态库

    C++静态库与动态库 这次分享的宗旨是--让大家学会创建与使用静态库.动态库,知道静态库与动态库的区别,知道使用的时候如何选择.这里不深入介绍静态库.动态库的底层格式,内存布局等,有兴趣的同学,推荐一 ...

随机推荐

  1. Java第十次作业--多线程

    一.学习要点 认真看书并查阅相关资料,掌握以下内容: 理解进程和线程的区别 掌握Java多线程的两种实现方式和区别 理解线程对象的生命周期 熟悉线程控制的基本方法 掌握Java线程的同步机制 理解多线 ...

  2. Linux C socket 封装

    /************************************************************************** * Linux C socket 封装 * 声明 ...

  3. FZU OJ 1056 :扫雷游戏

    Problem 1056 扫雷游戏 Accept: 2624    Submit: 6903Time Limit: 1000 mSec    Memory Limit : 32768 KB  Prob ...

  4. Stones 优先队列

    Because of the wrong status of the bicycle, Sempr begin to walk east to west every morning and walk ...

  5. 使用python的Paramiko模块登陆SSH

    使用python的Paramiko模块登陆SSH paramiko是用Python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接. python的paramiko模块 ...

  6. width百分比

    table中的td可以在页面中直接在元素上设置width:但是li不能只能在页面中写style: <!-- <li width="20%" class="p- ...

  7. Linux修改开机启动logo

    默认开机LOGO会在液晶屏的左上脚显示一只小企鹅,分辨率为80*80,具体在kernel/drivers/video/logo下会有logo_linux_clut224.ppm这幅图像,程序会根据这幅 ...

  8. solr学习一(一大堆的学习资料)

    这篇博客含有海量资料,学习solr必备字典 大概看完solr就基本上手了. solr原味资料:http://wiki.apache.org/solr/FrontPage (     http://wi ...

  9. nginx unit nodejs 模块试用

      unit 对于nodejs 的支持是在10.25 发布的,基本能用,但是依然有好多问题,当前在测试的时候就发现,请求之后会block , 相关的issue 已经有人反馈了,最好使用源码编译,方便测 ...

  10. Linux性能测试工具安装全集

    stress 下载地址:http://people.seas.harvard.edu/~apw/stress/ 一.stress工具安装:1.获取stress源码安装包(stress-1.0.4.ta ...