簡體   English   中英

PDFMiner 未檢測到所有頁面

[英]PDFMiner does not detect all pages

我正在嘗試從 pdf 中提取文本,但我遇到了一個錯誤,因為我的腳本有時會檢測到 pdf 的每一頁,有時只檢測到 pdf 的第一頁。 我什至在上一篇關於 stackoverflow 的文章中包含了這一行。

print(len(list(extract_pages(pdf_file))))

任何時候我的腳本只提取第一頁,腳本只檢測到一頁。

我什至嘗試過另一個庫( PyPDF2 )來提取文本,但結果更糟。

如果我查看腳本處理不當的 pdf 的屬性,Adobe 會在 pdf 的屬性中清楚地顯示正確的頁數。

下面是我正在使用的代碼。 任何有關我如何更改腳本以檢測 pdf 的所有頁面的建議都將不勝感激。

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())

這是一個解決方案。 在 R (pdftools) 和 Python (pdfplumber) 中嘗試不同的庫后, PyMuPDF效果最好。

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())

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM