第八章 Python第三方库安装及常用库介绍
8.1 Python第三方库简介
8.2 Python第三方库安装
8.3 jieba库的使用
8.4 wordcloud库的使用
8.1 Python第三方库简介
- 近20年的开源运动产生了深植于各信息技术领域的大量可重用资源,形成了“计算生态”。
- 编程领域形成的庞大“计算生态”,需要一种编程语言或方式将不同语言、不同特点、不同使用方式的代码统一起来。
- 在计算生态思想指导下,编写程序的起点不再是探究每个具体算法的逻辑功能和设计,而是尽可能利用第三方库进行代码复用,探究运用库的系统方法。这种像搭积木一样的编程方式,称 为“模块编程”
- Python从诞生之初致力于开源开放,建立 了全球最大的编程计算生态,至今已建立了9万多第三方库
- Python官方网站(https://pypi.python.org/pypi)提供了第三方库索引功能, 这些库覆盖信息领域所有技术方向
8.2 Python第三方库安装
Python第三方库安装:
- Python语言有标准库和第三方库两种库,标准库随Python安装包一起
发布,用户安装Python后即可使用,而第三方库需要安装后才可使用 - Python第三方库按照安装方式灵活性和难易度主要有以下安装方法:
(1)pip工具安装
(2)自定义安装【略】
(3)文件安装
其中最常用和最高效的安装方式:采用pip工具安装
pip工具安装:
- pip是Python官方提供并维护的在线第三方库安装工具
- pip是Python内置命令,需要通过命令行执行,执行pip –h命令将列出pip常用的子命令,注意,需要在“命令提示符”窗口运行pip命令,而不要在IDLE环境下运行pip命令
- pip支持安装(install)、下载(download)、卸载(uninstall)、列表(list)、查看(show)、查找(search)等一系列安装和维护子命令
- 安装一个库的命令格式如下(在“命令提示符”窗口输入pip命令):
pip install <拟安装库名>
例如 :pip install wordcloud
pip工具将默认从网络上下载wordcloud 库安装文件并自动安装到系统中
文件安装:
- 如果在windows平台下有些第三方库用pip工具无法安装,可以尝试使用文件安装
- 美国加州大学尔湾分校提供了一个页面,帮助Python用户获得Windows可直接安装的第三方库文件,链接地址如下:
http://www.lfd.uci.edu/~gohlke/pythonlibs
选择适用于Python(如Python 3.7)解释器和64(32)位操作系统的对应.whl文件,下载后用pip命令进行安装
安装补充:如 anaconda的集成开发环境安装
8.3 jieba库
1 jieba库简介
2 jieba库分词函数
1 jieba库简介
jieba库:
- 在自然语言处理技术中,中文分词是其他中文信息处理的基础,比如搜索引擎、机器翻译(MT)、语音合成、自动分类、自动摘要、自动校对等等,都需要用到分词
- jieba 是Python中一个重要的第三方中文分词库,具有分词、添加用户词典、提取关键词和词性标注等功能
- jieba库的安装( 在“命令提示符”窗口输入命令):
pip install jieba
- jieba 库的分词原理是利用一个中文词库,将待分词的内容与分词词库进行比对,通过图结构和动态规划方法找到最大概率的词组。它支持3 种分词模式:
(1)精确模式:试图将句子最精确地切开,适合文本分析。
(2)全模式:把句子中所有可以成词的词语都扫描出来,速度快,但是不能解决歧义问题。
(3)搜索引擎模式:在精确模式的基础上,对长词再次切分,提高召回率,适用于搜索引擎分词
2 jieba库分词函数
jieba库:
- jieba 库主要提供分词功能,可以辅助自定义分词词典。jieba 库中包含的主要函数如表格所示
函数 | 说明 |
---|---|
jieba.cut(s) | 精确模式,返回一个可迭代的数据类型,可以通过for循环来取里面的每一个词 |
jieba.cut(s,cut_all=True) | 全模式,输出文本s中所有可能的单词 |
jieba.cut_for_search(s) | 搜索引擎模式,适合搜索引擎建立索引的分词结果 |
jieba.lcut(s) | 精确模式,返回一个列表类型 |
jieba.lcut(s,cut_all=True) | 全模式,返回一个列表类型 |
jieba.lcut_for_search(s) | 搜索引擎模式,返回一个列表类型 |
【 例8-1】 jieba库的分词基本应用
>>>import jieba
>>>str1="AlphaGo是第一个战胜围棋世界冠军的人工智能机器人"
>>>jieba.lcut(str1)
['AlphaGo','是','第一个','战胜','围棋','世界冠军','的','人工智能','机器人']
>>>jieba.lcut(str1,cut_all=True)
['AlphaGo','是','第一','第一个','一个','战胜','围棋','世界','世界冠军','冠军','的','人工','人工智能','智能','智能机','机器','机器人']
>>>jieba.lcut_for_search(str1)
['AlphaGo','是','第一','一个','第一个','战胜','围棋','世界','冠军','世界冠军','的','人工','智能','人工智能','机器','机器人']
>>>jieba.cut(str1)
<generator object Tokenizer.cut at 0x000002326E6B03B8>
>>>[word for word in jieba.cut(str1)]
['AlphaGo','是','第一个','战胜','围棋','世界冠军','的','人工智能','机器人']
3 向jieba调整词典和自定义词典
调整字典
函数 | 说明 |
---|---|
jieba.add_word(word,freq=None,tag=None) | 向词典添加新闻 |
jieba.del_word(word) | 删除词典中的词 |
jieba.suggest_freq(segment,tune=True) | 可调节单个词语的词频,使其能(或不能)被拆分 |
【例8-2】jieba库的添加分词与调节词频
>>>import jieba
>>>str="甄善美爱Python"
>>>jieba.lcut(str2)
['甄善','美爱','Python']
>>>jieba.add_word("甄善美")
>>>jieba.lcut(str2)
['甄善美','爱','Python']
>>>st3="在运动中将有补给"
>>>jieba.lcut(str3)
['在','运动','中将','有','补给']
>>>jieba.suggest_freq(('中','将'),True)
494
>>>jieba.lcut(str3)
['在','运动','中','将','有','补给']
自定义词典:
- 用户自定义的词典文件格式是每个词占一行,每一行分 3 部分:词语、词频(可省略)、词性(可省略),各部分用空格隔开,顺序不可颠倒
- 通常的字典文件编码格式为 UTF-8。例如创建字典文件 dict1.txt结构如图所示:
dict.txt - 记事本
杨树芳 10
三级 1500
跳高 1500
当壁镇 5
创业处 7
- jieba中添加自定义字典的语法格式如下,其中 <文件名> 为文件类对象或自定义词典文件的路径。
jieba.load_userdict(<文件名>)
【例8-3】用户自定义字典的应用
>>>str4="杨树芳是当壁镇马拉松冠军也是国家三级跳高运动员"
>>>jieba.lcut(str4)
['杨树','芳是','当壁','镇','马拉松','冠军','也','是','国家','三级跳','高','运动员']
>>>jieba.load_userdict('C:\\Python36\\Lib\\site-packages\\jieba\\dict1.txt')
>>>jieba.lcut(str4)
['杨树芳','是','当壁镇','马拉松','冠军','也','是','国家','三级','跳高','运动员']
8.4 wordcloud库
wordcloud库
- wordcloud是专门用于根据文本生成词云的Python第三方库
- 词云又叫文字云,以词语为基本单元,对文本数据中出现频率较高的“关键词”在视觉上的突出呈现,形成“关键词云层”或“关键词渲染”类似云一样的彩色图片,从而一眼就可以领略文本数据的主要表达意思,以达到数据展示的多样性的目的
【例8-4】 每年的4月23日是世界读书日,其设立目的是为了推动更多的人去阅读和写作。中国古代有许多关于书的成语和鼓励人们多读书的诗句,请将“腹有诗书气自华”、“读书破万卷,下笔如有神”、“书到用时方恨少”这三句诗翻译成英文,编写程序将其生成词云图
from wordcloud import WordCloud
text="One who is filled with knowledge always behaves with elegance;\
Having pored over ten thousand volumes, one can write with godly power;\
It is when you are using what you have learned from books that you wish you had read more books than you have."
wcloud=WordCloud().generate(text)
wcloud.to_file("d:/python/a1.png")
wordcloud库
- wordcloud库的核心是WordCloud类,所有的功能都封装在WordCloud类中
- 使用时需要实例化一个WordCloud类的对象,并调用其
generate(<文本>)
方法将text文本转化为词云 - wordcloud类在创建时有一系列可选参数,用于配置词云图片
- wordcloud对象创建时的常用参数及常用方法如表格所示
WordCloud对象创建的常用参数
参数 | 功能 |
---|---|
front_path | 指定字体文件的完整路径,默认None |
width | 生成图片宽度,默认400像素 |
height | 生成图片高度,默认200像素 |
mask | 词云形状,默认None,即方形图 |
min_font_size | 词云中最小的字体字号,默认4号 |
font_step | 字号步进间隔,默认1 |
max_font_size | 词云中最大的字体字号,默认None,根据高度自动调节 |
max_words | 词云图中最大词数,默认200 |
stopwords | 被排除词列表,排除词不在词云中显示 |
background_color | 图片背景颜色,默认黑色 |
WordCloud类的常用方法
方法 | 功能 |
---|---|
WordCloud.generate(<文本>) | 由文本生成词云 |
WordCloud.to_file(<文件名>) | 将词云图保存为文件名 |
【扩展 例8-4】
from wordcloud import WordCloud
text="One who is filled with knowledge always behaves with elegance;\
Having pored over ten thousand volumes, one can write with godly power;\
It is when you are using what you have learned from books that you wish you had read more books than you have."
wcloud=WordCloud(height=400,background_color="yellow").generate(text)
wcloud.to_file("d:/python/a2.png")
【例8-5】 修改【例8-4】,生成带有形状的词云
提示:
(1)需要提前准备好一张带形状的图片(*.png、*.jpg、*.jpeg等)
(2)需要用到scipy库将图像转换成ndarray类型,在安装wordcloud库时,scipy库会被作为依赖库自动安装。除此之外,也可以用numpy库和PIL处理图像,需要单独安装
(3)设置WordCloud( )对象中mask限制生成词云的形状
from wordcloud import WordCloud
from scipy.misc import imread #或者from imgeio import imread
background_image=imread("d:/python/photo4.jpeg")
text="One who is filled with knowledge always behaves with elegance;\
Having pored over ten thousand volumes, one can write with godly power;\
It is when you are using what you have learned from books that you wish you had read more books than you have."
wcloud=WordCloud(mask=background_image,background_color='white').generate(text)
wcloud.to_file("d:/python/a3.png")
【例8-6】根据党的十九大报告全文,生成词云
提示:
(1) 准备文档“党的十九大报告全文.txt”
(2) 对于中文文本,分词外理需要由用户来完成,因此安装第三方库jieba库并使用。一般步骤是先将文本分词处理,然后以空格拼接,再调用wordcloud库函数
(3) 处理中文时还需要指定中文字体
from wordcloud import WordCloud
import jieba
f=open("d:/python/党的十九大报告全文.txt","r")
txt=f.read()
f.close( )
words=jieba.lcut(txt)
newtxt=''.join(words) #用空格连接列表元素为字符串font="c:/Windows/Fonts/simhei.ttf"
wcloud=WordCloud(font_path=font).generate(newtxt)
wcloud.to_file("d:/python/a4.png")
【扩展 例8-6】 根据党的十九大报告全文,生成带形状的词云
from wordcloud import WordCloud
import jieba
from scipy.misc import imread
f=open("d:/python/党的十九大报告全文.txt","r")
txt=f.read()
f.close()
words=jieba.lcut(txt)
newtxt=''.join(words)font="c:/Windows/Fonts/simhei.ttf"
background_image=imread("d:/python/photo13.jpg")
wcloud=WordCloud(font_path=font,mask=background_image,background_color\
="white").generate(newtxt)
wcloud.to_file("d:/python/a5.png")
【温馨提示】 程序运行若出现如下提示
ImportError: cannot import name ‘imread’ from ‘scipy.misc’……….
原因是在最新版本的scipy库中已移除imread函数
可参考:方法1或方法2尝试解决
方法1需要在命令提示符窗口安装第三方库 imageio
pip install imageio
方法2需要在命令提示符窗口安装第三方库 numpy和PIL(实际安装pillow)
pip install numpy
pip install pillow
方法一
from wordcloud import WordCloud
import jieba
from scipy.misc import imread #from imageio import imread
f=open("d:/python/党的十九大报告全文.txt","r")
txt=f.read()
f.close()
words=jieba.lcut(txt)
newtxt=''.join(words)
font="c:/Windows/Fonts/simhei.ttf"
background_image=imread("d:/python/photo13.jpg")
wcloud=WordCloud(font_path=font,mask=background_image,background_color\
="white").generate(newtxt)
wcloud.to_file("d:/python/a5.png")
方法二
from wordcloud import WordCloud
import jieba
from scipy.misc import imread '''import PIL.Image as image
import numpy as np'''
f=open("d:/python/党的十九大报告全文.txt","r")
txt=f.read()
f.close()
words=jieba.lcut(txt)
newtxt=''.join(words)
font="c:/Windows/Fonts/simhei.ttf"
background_image=imread("d:/python/photo13.jpg") #np.array(image.open("d:/python/photo13.jpg"))
wcloud=WordCloud(font_path=font,mask=background_image,background_color\
="white").generate(newtxt)
wcloud.to_file("d:/python/a5.png")
【课后思考】 根据“红楼梦.txt”,生成带有形状的词云
from wordcloud import WordCloud
import jieba
from scipy.misc import imread
f=open("d:/python/红楼梦.txt","r",encoding="utf-8") #"utf-8"表示文件编码
font="c:/Windows/Fonts/simhei.ttf"
background_image=imread("d:/python/photo11.jpg")
txt=f.read()
f.close()
words=jieba.lcut(txt)
newtxt=''.join(words)
wcloud=WordCloud(font_path=font,mask=background_image,background_color="white").generate(newtxt)
wcloud.to_file("d:/python/a6.png")
综合大作业
【综合大作业】每名学生上交 1 份电子版作业,要求自行设计一个主题,并利用 wordcloud 生成基于中文文本的带有形状的词云。将本次作业创建一个名为“学号班级姓名”的压缩包,通过雨课堂试卷进行提交。压缩包内具体包括如下内容:
- 编写的程序文件,文件名为“学号班级姓名.py”
- 生成的词云图片,文件名为“学号班级姓名.png”
- 原始文本,文件名为“学号班级姓名 yswb.txt”
- 原始图像,文件名为“学号班级姓名 ystx.jpg” 实验报告,文件名为“学号班级姓名实验报告.docx”
提示:
(1)文件名“学号班级姓名”(如190101123中文1张小小),在其中间不要加空格或其他符号
(2) 实验报告模版请从QQ群文件中下载