从PyMuPDF逐页和逐行提取pdf文本

时间:2019-05-03 17:11:08

标签: python text-extraction

我必须从现有的PDF文档中提取文本。目前,我为此使用PyMuPDF模块。总体而言,它工作正常且非常快。问题在于,该工具用新的换行符替换了pdf文档中的所有水平制表符(例如,标题:5 \t主题)。 由于我必须逐行提取文本,因此这对我来说是不切实际的。

有人知道如何解决此问题,还是知道另一种方法来逐页逐行提取文本页? 我还尝试了tika(这里我无法逐页提取文本)和PyPDF2(这很糟糕:对于任何格式的文本(如粗体显示),都会在提取的文本中添加换行符。

for document in pdfPath:
    string_dic[document] = StringIO()
    pdf_file = fitz.open(document)
    number_of_pages = pdf_file.pageCount
    for page_number in range(number_of_pages):
        page = pdf_file.loadPage(page_number)
        page_content = page.getText("text")
        string_dic[document].write(page_content)
        string_dic[document].write(chr(12))
    string_dic[document].seek(0)

当我转换具有以下内容的PDF文档时:
标签后的5个\t文字
提取后得到以下结果:
5
制表符后的文字

2 个答案:

答案 0 :(得分:0)

根据文档

https://myblobs.blob.core.windows.net/container1/?sp=... //copies the folder with content
https://myblobs.blob.core.windows.net/container1/*?sp=... //copies only the content

应该工作。但是,当我尝试时,它仍然有\ n而不是\ t

另一个选项,您必须将文本作为字典并仔细查看以构建文本。这有点round回,但是由于您获得了每个跨度的x0和x1位置,因此您可以从技术上计算它们之间的空格并使用它们

page.getText('text',flags=2) 

输出

page.getText('dict')

答案 1 :(得分:0)

lis=[]
for i in doc[5].getText('dict')['blocks']:
    try:
    
    for l in range(len(i['lines'])):
        #print(len(i['lines']))
        #print(i['lines'][l]['spans'][0]['text'],i['lines'][l]['spans'][0]['font'],round(i['lines'][l]['spans'][0]['size']))
        li=list((i['lines'][l]['spans'][0]['text'],i['lines'][l]['spans'][0]['font'],round(i['lines'][l]['spans'][0]['size'])))
        #print(li)
        lis.append(li)
        #print(lis)
except KeyError:
    print(' ')
相关问题