查看原文
其他

PDF分章节转TXT并实现可视化——以胡景北知青日记1971至1978年为例

爬虫俱乐部 Stata and Python数据分析 2022-03-15

本文作者:方   言,中南财经政法大学金融学院

本文编辑:张孟晗

技术总编:王子一

Stata&Python云端课程来啦!

       为了感谢大家长久以来的支持和信任,爬虫俱乐部为大家送福利啦!!!Stata&Python特惠课程双双上线腾讯课堂~爬虫俱乐部推出了Python编程培训课程Stata基础课程Stata进阶课程Stata文本分析正则表达式网络爬虫基本字符串课程。报名课程即可加入答疑群,对报名有任何疑问欢迎在公众号后台和腾讯课堂留言哦。我们在这篇推文的最后提供了每门课程的课程二维码,大家有需要的话可以直接扫描二维码查看课程详情并进行购买哦~


在之前的推文《提取PDF文本信息:入门》《PDF文本信息提取(二)》中,介绍了pdfminer、pdfplumber的用法,可以实现对图片形式的PDF文件转换为文本文件,便于我们进行数据和文本的分析。本文将一个PDF版本的知青日记分章节转化为txt文档,并按照日记时间分年制作词云图。接下来,让我们看一下具体是怎么操作的吧~

1、观察PDF


首先我们观察目录,发现这本日记一共有七个章节,并且本日记标有明确的页码,为我们分章节提取PDF提供了便利。

如果在没有标明页码的PDF文档中货物页数,可以键入以下命令:
from PyPDF2 import PdfFileWriter, PdfFileReaderpdf = PdfFileReader(open('知青日记.pdf', 'rb'))pages = pdf.getNumPages() #获取PDF的总页数print(pages)
输出结果为510页,与PDF标明的页码一致。



2、分章节提取


这里我们需要用到目录中所列示的页码,并对其进行循环,分章节输出PDF文档,由于需要多输出一个章节才能保证最后一章的PDF能够正常打开,因此这里在最后多设置一个循环:
list1 = [5,103,189,260,336,410,476,503,504]for i in range(0,8): file = PdfFileWriter() for l1 in range(list1[i],list1[i+1]): file.addPage(pdf.getPage(l1)) outputfile= open('第{}章.pdf'.format(i+1),'wb')        file.write(outputfile)





3、将PDF文档转换为TXT文档


该步骤可以将PDF文档按章节分别输出为txt文档
#转换为TXT文档import pdfplumberfor chapter in range(1,8): with pdfplumber.open('第{}章.pdf'.format(chapter)) as pdf: for pages in pdf.pages: text=pages.extract_text() file=open('第{}章.txt'.format(chapter),'a',encoding='utf-8')            file.write(text)


4、可视化操作


接着对转换成文本的项目名称进行分词并做词云图:
import jiebafrom PIL import Imageimport numpy as npfrom collections import Counterimport matplotlib.pyplot as pltfrom wordcloud import WordCloud, STOPWORDSfor chapter in range(1,8): with open('第{}章.txt'.format(chapter),"r",encoding="utf-8",errors='ignore') as file: #出现了decode错误的时候,直接ignore text=file.readlines() result=[] seg_list = jieba.lcut(str(text)) seg_list=filter(lambda word:len(word)>2,seg_list) #过滤长度为2的词 result.extend(seg_list) #将分词结果加入到列表result中 word_counts = Counter(result) #对分词做词频统计 stopwords=set(STOPWORDS) with open('停用词表.txt',encoding='UTF-8') as f: stop_words=[i.strip() for i in f.readlines()] for word in stop_words: stopwords.add(word) w=WordCloud( background_color='white', # 设置背景颜色 font_path="msyh.ttc", #设置输出词云的字体为微软雅黑 width=300, height=300, #设置词云图的宽度,高度 max_words=800, min_font_size=1, scale=8, stopwords=stopwords, ) wordcloud=w.generate_from_frequencies(word_counts) #加载词云文本 plt.figure(figsize = (8,6)) plt.imshow(wordcloud,interpolation='bilinear') plt.axis("off") #设置显示的词云图中无坐标轴 plt.show()        w.to_file('第{}章.png'.format(chapter))  

这里展示各章节词云图效果:







最后,我们为大家揭秘雪球网(https://xueqiu.com/)最新所展示的沪深证券和港股关注人数增长Top10。



腾讯课堂课程二维码








            


 对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!











往期推文推荐

万物皆可开——shellout妙用

无处不在的系列配置项|从零开始的Pyecharts(三)

使用Python制作自动聊天机器人  

fillin一下,平衡回来~

order命令——快速改变变量顺序的利器 Ajax应用场景——以获取雪球网港股代码及公司名称为例

播放列表中的歌单排行 

在Stata中轻松运用program编写命令

Meta Analysis in Stata17      

芒果TV视频弹幕爬取之《我在他乡挺好的》

Stata中的判断神器——confirm命令

cngdf——名义GDP与实际GDP之间的摆渡船

最近《扫黑风暴》有点火爆!我从豆瓣评论中发现了这些……

随机森林-Random Forest 

复原之神--preserve&restore

合并,“纵”享新丝滑:frameappend & xframeappend
什么是全局配置项?|从零开始的Pyecharts(二)帮你拿下数据可视化|从零开始的Pyecharts 

Stata助力疫情打卡管理——是谁没有接龙呢?

这十年,《金融研究》的编委和读者偏爱哪些研究话题和文章?

【案例展示】Python与数据库交互

学好这一手,英语词典常在手 

玩转Stata中的数学函数

用spmap看中国空气质量

戳穿围城面具:安利&劝退一个专业

走进图文并茂的攻略世界 

玩转word文档“大变身”——wordconvert

数据读入|一文读懂用Stata读入不同类型的数据

简述递归

OpenCV库——轻松更换证件照背景色

800万年薪!还有谁?!

关于我们 


   微信公众号“Stata and Python数据分析”分享实用的Stata、Python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。

   武汉字符串数据科技有限公司一直为广大用户提供数据采集和分析的服务工作,如果您有这方面的需求,请发邮件到statatraining@163.com,或者直接联系我们的数据中台总工程司海涛先生,电话:18203668525,wechat: super4ht。海涛先生曾长期在香港大学从事研究工作,现为知名985大学的博士生,爬虫俱乐部网络爬虫技术和正则表达式的课程负责人。



此外,欢迎大家踊跃投稿,介绍一些关于Stata和Python的数据处理和分析技巧。

投稿邮箱:statatraining@163.com投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里
为作者署名,并有赏金分成。

2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众
号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。



您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存