python读取pdf中的文本
python处理pdf也是常用的技术了,对于python3来说,pdfminer3k是一个非常好的工具。
pip install pdfminer3k首先,为了满足大部分人的需求,我先给一个通用一点的脚本来读取pdf中的文本:
from io import StringIOfrom io import openfrom pdfminer.converter import TextConverterfrom pdfminer.layout import LAParamsfrom pdfminer.pdfinterp import PDFResourceManager, process_pdfdef read_pdf(pdf):# resource managerrsrcmgr = PDFResourceManager()retstr = StringIO()laparams = LAParams()# devicedevice = TextConverter(rsrcmgr, retstr, laparams=laparams)process_pdf(rsrcmgr, device, pdf)device.close()content = retstr.getvalue()retstr.close()# 获取所有行lines = str(content).split('\n')return linesif __name__ == '__main__':with open('t1.pdf', 'rb') as my_pdf:print(read_pdf(my_pdf))
我主要是想在pdf中抽出自己想要的一些关键信息,所以需要找到这些信息的共同点。幸运的是,这些关键信息的行都含有'//',所以我只需找到含有'//'的行就行了,于是写了以下脚本。
这样就可以直接使用了,我们先看脚本:
from io import StringIOfrom io import openfrom pdfminer.converter import TextConverterfrom pdfminer.layout import LAParamsfrom pdfminer.pdfinterp import PDFResourceManager, process_pdfdef read_pdf(pdf):# resource managerrsrcmgr = PDFResourceManager()retstr = StringIO()laparams = LAParams()# devicedevice = TextConverter(rsrcmgr, retstr, laparams=laparams)process_pdf(rsrcmgr, device, pdf)device.close()content = retstr.getvalue()retstr.close()# 获取所有行lines = str(content).split('\n')units = [1, 2, 3, 5, 7, 8, 9, 11, 12, 13]header = '\x0cUNIT '# print(lines[0:100])count = 0flag = Falsetext = open('words.txt', 'w+')for line in lines:if line.startswith(header):flag = Falsecount += 1if count in units:flag = Trueprint(line)text.writelines(line + '\n')if '//' in line and flag:text_line = line.split('//')[0].split('. ')[-1]print(text_line)text.writelines(text_line+'\n')text.close()def _main():my_pdf = open('t1.pdf', 'rb')read_pdf(my_pdf)my_pdf.close()if __name__ == '__main__':_main()
其实看到lines = str(content).split('\n')那一行就够了,我们可以把lines都print出来,就可以看到pdf里面的内容。
这样我们就可以把pdf文件处理看作简单的字符串数据处理了。接下来的脚本操作也不用过多解释了。
赞 (0)
