python解析pdf中⽂乱码_解析PDF⽂件以及解决编码问题1、解析pdf⽂件
最近需要将pdf中⽂本提取出来,于是就了解了⼀下pdfminer
⾸先安装:pip3 install pdfminer3k
之后就是⽤pdfminer解析,不多说,直接上代码,这些代码都是参考各位前辈
from pdfminer.pdfparser import PDFParser,PDFDocument
from pdfminer.pdfinterp import PDFResourceManager,PDFPageInterpreter
verter import PDFPageAggregator
from pdfminer.layout import LTTextBoxHorizontal,LAParams,LTImage
import os
path=''
def pdf_to_word(folder,password):
#获取指定⽬录下的所有⽂件
files=os.listdir(folder)
pdfFiles=[f for f in files dswith('.pdf')]
#获取pdf类型的⽂件,放到⼀个列表中
for pdfFile in pdfFiles:
print(pdfFile)
#将⽬录和⽂件合并成⼀个路径 os.path.join('root','test','') ##root/
# pdfPath=os.path.join(folder,pdfFile)
#设置将要转换后存放word⽂件的路径
# wdPath=pdfPath
#判断是否已经存在对应的⽂件,如果不存在就加⼊到存放的路径中去
# if wdPath[-4:]!='.docx':
# wdPath=wdPath+'.docx'
fn=open(path+"/{}".format(pdfFile),'rb')
#创建⼀个PDF⽂本档分析器:PDFParser
parser=PDFParser(fn)
#创建⼀个PDF⽂档:PDFDocumeng
doc=PDFDocument()
#链接分析器与⽂档
parser.set_document(doc)
doc.set_parser(parser)
#提供出事话的密码,如果没有密码,输⼊空字符串
doc.initialize('')
#检测⽂档是否提供txt转换,不提供就直接忽略
if not doc.is_extractable:
print('PDFTextExtractionNotAllowed')
else:
#创建PDF资源管理器:PDFResourceManager
resource=PDFResourceManager()
#创建⼀个PDF参数分析器:;AParams
laparams=LAParams()
#创建聚合器,⽤于读取⽂档的对象:PDFPageAggregator
device=PDFPageAggregator(resource,laparams=laparams)
#创建解释器,对⽂档编码,解释成python能够识别的格式:PDFPageInterpreter interpreter=PDFPageInterpreter(resource,device)
#_pages()是获取page列表的⼀个⽅法
num_page,num_image,num_Text=0,0,0
for page _pages():
pdf_str=''
#利⽤解释器的peocess_page()⽅法解析单独页数
interpreter.process_page(page)
_result()
for out in layout:
if isinstance(out,LTTextBoxHorizontal):
num_Text+=1
print(_text()))
pdf_str+=_text().strip()
if isinstance(out,LTImage):
num_image+=1
print(pdf_str)
# with open(wdPath,'a',encoding='utf-8') as f:
# f._text()+'\n')
if __name__=='__main__':
pdf_to_word(path,'')
2、解决编码问题
如果⾸次这样运⾏的话,会输出两⾏⽂字:
WARNING:root:GBK2K-H
python中文文档WARNING:root:GBK2K-v
我的平台是ubuntu
我这边是在路径下放了两个pdf⽂件,⼀个pdf中是⽂本,另⼀个是Image
所以就继续原因,后⾯发现是编码问题。
pdfminer3k不能解析特殊字体,需要下载相应的字体包来解决
这⾥有很多的字体包,看看你的警告是属于哪种字体,就下载相应的字体包。
下载完成之后,不要解压直接放在 pdfminer/cmap⽂件夹下
pdfminer/cmap⽂件夹:我的这个是通过pip安装的,到⾃⼰的python包,进去到⾥⾯的相关⽂件夹就可以了。再次运⾏。发现不报刚刚的警告了。但是有了新的问题
然后下⾯就会以有⼀堆的cid:xxx
着说明编码问题已经解决了,现在需要的解码。同样的在上⾯的链接到图⽚中相应解码包,这⾥需要的就是
再以同样的⽅法保存到同样的位置就可以了。然后就完美的输出⽂本了。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论