在日常工作中,有时可能需要解析一些 PDF 文件,提取文件中的关键词,好让它们能够被我们搜索。解决这个问题的重要部分就是找到如何从 PDF 文件中提取文本数据的方法。从如果是几张或者几十张倒还好办,那要是几百几千张,可能就有点麻烦了。
幸好我们可以用 Python 完成这项工作。下面就分享一下如何用 Python 解析一个PDF文件,将其转为一列关键字。
设置:
本教程我们使用的是 Python 3.6.3,当然在实际工作中你可以使用任何你喜欢的 Python 版本,只要它支持用到的库就行。
需要安装以下 Python 库:
PyPDF2(用于将简单的基于文本的 PDF 文件转为 Python 可读的文本)
Textract(用于将 PDF 扫描文件转为 Python 可读的文本)
Nltk(用于清理短语、将短语转为关键字)
可以通过以下命令行安装这些库:
pip install PyPDF2
pip install textract
pip install nltk
这样我们就安装了解析 PDF 文件所需的库,一定要确保你的 PDF 文件放在你编写脚本所在的文件夹中。
启动编辑器,开始敲代码吧!
第一步:导入库
import PyPDF2
import textract
from nltk.tokenize import word_tokenize
from nltk.corpus import stopwords
第2步:读取 PDF 文件
#写个for循环来打开多个文件
filename = 'enter the name of the file here'
#open能让你读取文件
pdfFileObj = open(filename,'rb')
#变量pdfReader是即将被解析的可读对象
pdfReader = PyPDF2.PdfFileReader(pdfFileObj)
#分辨清楚页码数量能让我们解析所有页码的文件
num_pages = pdfReader.numPages
count = 0
text = ""
# while 循环会读取每一页
while count < num_pages:
pageObj = pdfReader.getPage(count)
count +=1
text += pageObj.extractText()
#这里的if语句用以检查上面的库是否返回了词汇,因为PyPDF2 无法读取扫描文本
if text != "":
text = text
# 如果上面返回False,就运行库textract 将PDF扫描文件转换为文本
else:
text = textract.process(fileurl, method='tesseract', language='eng')
# 现在我们获得了一个text变量,包含了从PDF文件中提取的文本。
# 输入print(text)查看包含的内容。可能会包含很多空格,可能还有’\n’等这样的字眼。
# 下面我们会清洗得到的text变量,将其返回为一列关键字。
第3步:将文本转换为关键字
# 函数word_tokenize() 会将文本句子解析为词汇
tokens = word_tokenize(text)
# 创建一个新列表,包含我们想要清理的标点符号
punctuations = ['(',')',';',':','[',']',',']
# 初始化stopwords变量
stop_words = stopwords.words('english')
# 创建一个列表推导式,它只会返回一列词汇
# 它们既不在stop_words中,也不在puctuations中
keywords = [word for word in tokens if not word in stop_words and not word in punctuations]
现在我们就将手中的 PDF 文件保存为了列表,可以按自己的需要使用了。如果想让 PDF 可搜索,或者解析大量文件进行聚类分析,还可以将得到的列表保存在电子表格中。
可能你还感兴趣:景略集智:用Python进行时序预测的7种方法zhuanlan.zhihu.com景略集智:有轻功:用3行代码让Python数据处理脚本获得4倍提速zhuanlan.zhihu.com
课程 | 景略集智jizhi.ai