首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用PyPDF2按正确的顺序从PDF中提取文本?

如何使用PyPDF2按正确的顺序从PDF中提取文本?
EN

Stack Overflow用户
提问于 2021-05-16 13:28:46
回答 2查看 1.1K关注 0票数 0

我目前正在做一个项目,以提取PDF的内容。代码运行平稳,我可以提取文本,但提取的文本没有正确的顺序。代码以一种奇怪的方式提取文本。课文的顺序到处都是。它不会自上而下,而且真的令人困惑。

我在网上查了一下,但在如何排序文本提取方面几乎没有什么帮助。大多数教程得出了同样的结果。作为参考,这是我目前正在测试的PDF文件(第5页):https://www.pidm.gov.my/PIDM/files/13/134b5c79-5319-4199-ac68-99f62aca6047.pdf

代码语言:javascript
运行
复制
    import PyPDF2

with open('pdftest2.pdf', 'rb') as pdfTest:
    reader = PyPDF2.PdfFileReader(pdfTest)
    page5 = reader.getPage(4)
    text = page5.extractText()
    print(text)

提取的文本总是从页面的页脚开始,然后从底部到顶部。我注意到,在下一页,它将从上到下开始,但只有少数几个特定的句子。然后,它将从页面的另一个位置提取文本,而不是从它停止的位置继续。

所有的文本都是被提取出来的,但是它被抽取的顺序到处都是。这个问题有什么解决办法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-05-16 13:44:06

我不得不处理一个类似的问题,结果发现模块pdfplumberPyPDF工作得更好。我想这取决于文件本身,你应该试试。

否则,解决问题的另一个方法是将PDF与pdf2image模块视为图像,并使用pytesseract提取其中的文本。但是,它可能不是完美的方法,因为pdf2image方法convert_from_path可能需要相当长的时间才能运行。

如果你有兴趣的话,我会在这里删除一些代码。

首先,确保您安装了所有必要的约束,以及Tesseract和ImageMagik。您可以在网站上找到有关安装的任何信息。如果您正在使用windows,那么有一篇很好的中型文章这里

使用pdf2image:将PDF转换为图像

如果您正在windows上工作,请不要忘记添加弹出程序路径。看起来应该像那个r'C:\<your_path>\poppler-21.02.0\Library\bin'

代码语言:javascript
运行
复制
def pdftoimg(fic,output_folder, poppler_path):
    # Store all the pages of the PDF in a variable 
    pages = convert_from_path(fic, dpi=500,output_folder=output_folder,thread_count=9, poppler_path=poppler_path) 

    image_counter = 0

    # Iterate through all the pages stored above 
    for page in pages: 
        filename = "page_"+str(image_counter)+".jpg"
        page.save(output_folder+filename, 'JPEG') 
        image_counter = image_counter + 1
        
    for i in os.listdir(output_folder):
        if i.endswith('.ppm'):
            os.remove(output_folder+i)

从图像中提取文本:

您的tesseract路径将是这样的:r'C:\Program Files\Tesseract-OCR\tesseract.exe'

代码语言:javascript
运行
复制
def imgtotext(img, tesseract_path):
    # Recognize the text as string in image using pytesserct 
    pytesseract.pytesseract.tesseract_cmd = tesseract_path
    text = str(((pytesseract.image_to_string(Image.open(img))))) 
    text = text.replace('-\n', '')
    
    return text
票数 2
EN

Stack Overflow用户

发布于 2022-07-29 20:07:51

我最近开始使用PyMuPDF。它的许可有点令人困惑,但他们的一些方法有方法正确排序文本,因为它自然出现(左到右,从上到下)。就像page.get_text(“单词”,sort=True)一样。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67557264

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档