我试图从pdf中提取文本,但我遇到了一个错误,因为我的脚本有时会检测pdf的每一页,有时只检测pdf的第一页。我甚至在stackoverflow上的上一个post中包含了这一行。
print(len(list(extract_pages(pdf_file))))任何时候,我的脚本只提取第一页,脚本只检测到1页。
我甚至尝试过另一个库(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())发布于 2020-10-17 12:42:56
这是一个解决方案。在尝试了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())https://stackoverflow.com/questions/64396326
复制相似问题