首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PDFMiner不能检测所有页面

PDFMiner不能检测所有页面
EN

Stack Overflow用户
提问于 2020-10-17 04:59:23
回答 1查看 118关注 0票数 0

我试图从pdf中提取文本,但我遇到了一个错误,因为我的脚本有时会检测pdf的每一页,有时只检测pdf的第一页。我甚至在stackoverflow上的上一个post中包含了这一行。

代码语言:javascript
复制
print(len(list(extract_pages(pdf_file))))

任何时候,我的脚本只提取第一页,脚本只检测到1页。

我甚至尝试过另一个库(PyPDF2)来提取文本,但效果更差。

如果我查找我的脚本错误处理的pdf的属性,Adobe会在pdf的属性中清楚地显示正确的页数。

下面是我使用的代码。任何建议,我可能会改变我的脚本,以检测一个pdf的所有页面将不胜感激。

代码语言:javascript
复制
import os
from os.path import isfile, join
from io import StringIO
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfdocument import PDFDocument
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.pdfpage import PDFPage
from pdfminer.pdfparser import PDFParser
from pdfminer.high_level import extract_pages
from pdfminer.layout import LTTextContainer

pdf_dir = "/dir/pdfs/"
txt_dir = "/dir/txt/"

corpus = (f for f in os.listdir(pdf_dir) if not f.startswith('.') and isfile(join(pdf_dir, f)))
for filename in corpus:
    print(filename)
    output_string = StringIO()
    with open(join(pdf_dir, filename), 'rb') as in_file:
        parser = PDFParser(in_file)
        doc = PDFDocument(parser)
        rsrcmgr = PDFResourceManager()
        device = TextConverter(rsrcmgr, output_string, laparams=LAParams())
        interpreter = PDFPageInterpreter(rsrcmgr, device)
        for page in PDFPage.create_pages(doc):
            interpreter.process_page(page)
        txt_name = "{}.txt".format(filename[:-4])
        with open(join(txt_dir, txt_name), mode="w", encoding='utf-8') as o:
            o.write(output_string.getvalue())
EN

回答 1

Stack Overflow用户

发布于 2020-10-17 12:42:56

这是一个解决方案。在尝试了R (pdftools)和Python (pdfplumber)中的不同库之后,PyMuPDF运行得最好。

代码语言:javascript
复制
from io import StringIO
import os
from os.path import isfile, join
import fitz

pdf_dir = "pdf path"
txt_dir = "txt path"

output_string = StringIO()

corpus = (f for f in os.listdir(pdf_dir) if not f.startswith('.') and isfile(join(pdf_dir, f)))
for filename in corpus:
    print(filename)
    output_string = StringIO()
    doc = fitz.open(join(pdf_dir,filename))
    for page in doc:
        output_string.write(page.getText("rawdict"))
    txt_name = "{}.txt".format(filename[:-4])
    with open(join(txt_dir, txt_name), mode="w", encoding='utf-8') as o:
        o.write(output_string.getvalue())
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64396326

复制
相关文章

相似问题

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