admin管理员组文章数量:1630204
- 点赞、关注再看,养成良好习惯
- Life is short, U need Python
1. 前言
最近超星学习通课程需要几个封面图片(模板图片不满意,无法和课程匹配),于是想着自己做几个词云图,然而本人自然语言处理知识接触不多(虽然也很感兴趣),于是静静坐下来花了半天稍微系统地学习了一下如何制作词云图(从读取本地TXT文档到本地读取PDF文档,以及在线读取PDF文档,这里的PDF文档主要是为了想读取某本点子书),结果有点上瘾了:媳妇做好饭喊话半天都没从电脑面前移步餐桌(最后不得不错过热腾腾的大米饭)。好了,下面言归正传开始今天的博文正文!
2. 读取PDF文档
博文本节主要介绍 Python3.X 版本(2020年开始 Python2.X 版本不再维护,因此建议初学者直接一步到位学习 Python3.X 版本)解析并读取PDF文件内容,这里需要用到第三方库 — pdfminer 库(与Python2版本不同,Python3版本需要安装pdfminer3k 库)。其中代码部分也参考了一些已经发布的博客内容,不过博主还是详细拆解了其他博文的代码,以一种通俗易懂的方式展示给Python初学者,免得初学者直接把别人的代码复制过来(那些代码大多封装起来了,写得过于专业,不太适合初学者)在自己电脑跑了一下,也许发现很多 bug,而不知道如何去 debug,或者不知从那做起。博主希望通过这次所谓详细的讲解能让初学者真正明白(如果还是不清楚请博文留言,博主会第一时间为博友解读)。好了,不啰嗦了,言归正传开始本节正文!
下面以具体案例为主,详细分解如何利用Python语言实现读取PDF文档(博友可以任意选一本电子书):
(1)准备工作
- 事先安装好Python集成开发环境(IDE)
- 详见博文Python入门(一)之Python的安装
- 事先安装好第三方库 pdfminer3k
- 貌似直接 pip install pdfminer3k 失败了(博友可以试一下),转本地安装即可(下载 pdfminer3k 到本地,提取码:j4en);
- 以 Anaconda3 安装Python IDE 为例,开始菜单找到 Anaconda3 文件夹下面的 Anaconda Prompt,点击打开后在命令提示符 > 后面输入:pip install D:\zgq\pdfminer3k-master.zip (后面是pdfminer3k本地电脑存储位置),等待完成安装即可。
(2)实现源代码(本地PDF)
- 导入模块(有关 pdfminer3k 的教程会抽时间博文介绍)
from pdfminer.pdfparser import PDFParser, PDFDocument
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import PDFPageAggregator
from pdfminer.layout import LTTextBoxHorizontal, LAParams
- 设置读取、输出文件路径
pdf_file = 'Python.pdf' (默认工作路径)
txt_file = 'Python.txt' (默认工作路径)
#pdf_file = 'C:\Users\Administrator\Desktop\'Python.pdf' (电脑桌面)
#txt_file = 'C:\Users\Administrator\Desktop\Python.txt' (电脑桌面)
- 生成对象并读取文件(建议先找一个页码少的PDF跑一下)
device = PDFPageAggregator(PDFResourceManager(), laparams=LAParams())
interpreter = PDFPageInterpreter(PDFResourceManager(), device)
document = PDFDocument()
parser = PDFParser(open(pdf_file, 'rb'))
parser.set_document(document)
document.set_parser(parser)
document.initialize()
- 打开TXT文档写入内容
with open(txt_file, 'w', encoding='utf-8') as f:
page_list = list(document.get_pages())
page_list_length = len(page_list)
print('The number of PDF is: ', page_list_length)
for page in document.get_pages():
# 接受LTPage对象
interpreter.process_page(page)
# 获取LTPage对象的text文本属性
layout = device.get_result()
for x in layout:
if isinstance(x, LTTextBoxHorizontal):
results = x.get_text()
f.write(results)
- 检验是否转换成TXT文档(用于下一步的作词云图)
with open('Python.txt',encoding='utf-8') as f:
txt_text = f.readlines()
txt_text[:10]
3. 生成词云图
突然觉得肚子有点饿了,本想加一下餐,但是为了尽快完成博文还是坚持一下吧!不再啰嗦了,直接进入正文。
(1)准备工作
- 事先安装好第三方库 wordcloud
- 直接在 Anaconda Prompt 命令行窗口输入:pip install wordcloud,等待完成安装即可(得有网络啊)
- 当然也可以下载本地安装 wordcloud(提取密码:9ld7;记着选取对应32位还是64位啊:得看你电脑操作系统了)
(2)实现源代码(制作词云图)
- 导入模块
import matplotlib.pyplot as plt
from wordcloud import WordCloud
- 读取生成的TXT文档
with open('Python.txt',encoding='utf-8') as f:
mytext = f.readlines()
- 生成我的词云对象
mycloud = WordCloud().generate(str(mytext))
- 奇迹出现(展示词云图)
plt.imshow(mycloud)
plt.axis('off') # 关闭词云图坐标显示
plt.savefig('out.jpg',dpi=1000,edgecolor='blue', bbox_inches='tight', quality=95) # 保存词云图(到工作路径下)
plt.show()
- 中文显示问题:发现中文无法显示(一些小方块)
- 添加参数:font_path = ‘simsun.ttc’ (可以到 C:\Windows\Fonts 选择其他字体)
- 结果小方块消失了(因选择PDF文档关系,图片不太明显)
mycloud = WordCloud(font_path = 'simsun.ttc').generate(str(mytext))
- 思考题:是否发现如上出现 ‘n’ 最大?想一想为啥?相信您会处理掉的,再次不再啰嗦了!
- 美化词云图:自己去发现一些参数吧:比如,背景颜色等!
- 能否生成其他图形的词云图(矩形词语图很反感)?当然没问题了,看代码吧(不再解析,直接封装代码了)!
from wordcloud import WordCloud
import matplotlib.pyplot as plt
import imageio
filename = "Python.txt"
mytext = open(filename).read()
picture = imageio.imread('people.jpg')
mycloud = WordCloud(
background_color = 'white', # 背景颜色
max_words = 20000, # 最大词数
mask = picture, # 以该参数值作图绘制词云,width和height会被忽略
max_font_size = 30, # 显示字体的最大值
font_path = 'simsun.ttc', # 解决显示口字型乱码问题
collocations=False, # 避免词重复
).generate(mytext)
plt.imshow(mycloud)
plt.axis('off')
plt.savefig('new.jpg',dpi=1000,edgecolor='blue',transparent=True, bbox_inches='tight', quality=95)
plt.show()
- 温馨提示:代码中的图例(people.jpg)记得存在工作路径下。
- 写作不易,切勿白剽
- 博友们的点赞和关注就是对博主坚持写作的最大鼓励
- 持续更新,未完待续…
下一篇:自然语言处理(二)之 pdfminer3k库 教程讲解
版权声明:本文标题:自然语言处理(一)之读取PDF文档生成词云图 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/xitong/1729068466a1184800.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论