gpt4 book ai didi

python - 逐页阅读pdf

转载 作者:行者123 更新时间:2023-12-05 08:57:15 25 4
gpt4 key购买 nike

我搜索了我的问题,但在两个可用问题中没有得到我的答案

  1. Extract text per page with Python pdfMiner?

  2. PDFMiner - Iterating through pages and converting them to text

基本上我想遍历每个页面,因为我只想选择具有特定文本的页面。

我用过pyPdf。它适用于几乎我可以说 90% 的 pdfs 但有时它不会从页面中提取信息。

我使用了下面的代码:

import pyPdf
extract = ""
pdf = pyPdf.PdfFileReader(open('filename.pdf', "rb"))
num_of_pages = pdf.getNumPages()
for p in range(num_of_pages):
ex = pdf.getPage(6)
ex = ex.extractText()
if re.search(r"to be held (at|on)",ex.lower()):
print 'yes'
print ex ,"\n"
extract = extract + ex + "\n"
continue

上面的代码可以工作,但有时某些页面不会被提取。

我也尝试过使用 pdfminer,但我找不到如何逐页迭代其中的 pdf。 pdfminer 返回 pdf 的整个文本。

我使用了下面的代码:

def convert_pdf_to_txt(path):
rsrcmgr = PDFResourceManager()
retstr = StringIO()
codec = 'utf-8'
laparams = LAParams()
device = TextConverter(rsrcmgr, retstr, codec=codec, laparams=laparams)
fp = file(path, 'rb')
interpreter = PDFPageInterpreter(rsrcmgr, device)
password = ""
maxpages = 0
caching = True
pagenos=set()

for page in PDFPage.get_pages(fp, pagenos, maxpages=maxpages, password=password,caching=caching, check_extractable=True):
interpreter.process_page(page)

text = retstr.getvalue()

fp.close()
device.close()
retstr.close()
return text

在上面的代码中,pdf 中的文本来自 for 循环

for page in PDFPage.get_pages(fp, pagenos, maxpages=maxpages, password=password,caching=caching, check_extractable=True):
interpreter.process_page(page)

text = retstr.getvalue()

在这种情况下,我如何一次迭代一个页面。

pdfminer 的文档无法理解。也有许多相同的版本。

那么对于我的问题是否还有其他可用的软件包,或者可以使用 pdfminer 来解决这个问题?

最佳答案

因为 retstr 将保留每一页,您可以考虑通过调用 retstr.truncate(0) 来更改您的代码,它每次都会清除字符串,否则您每次都会打印已读取的全部内容:

import pyPdf
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.layout import LAParams
from pdfminer.pdfpage import PDFPage
from cStringIO import StringIO

path = "filename.pdf"
pdf = pyPdf.PdfFileReader(open(path, "rb"))
fp = file(path, 'rb')
num_of_pages = pdf.getNumPages()
extract = ""
for i in range(num_of_pages):
inside = [i]
pagenos=set(inside)
rsrcmgr = PDFResourceManager()
retstr = StringIO()
codec = 'utf-8'
laparams = LAParams()
device = TextConverter(rsrcmgr, retstr, codec=codec, laparams=laparams)
interpreter = PDFPageInterpreter(rsrcmgr, device)
password = ""
maxpages = 0
caching = True
text = ""
for page in PDFPage.get_pages(fp, pagenos, maxpages=maxpages, password=password,caching=caching, check_extractable=True):
interpreter.process_page(page)
text = retstr.getvalue()
retstr.truncate(0)
text = text.decode("ascii","replace")
if re.search(r"to be held (at|on)",text.lower()):
print text
extract = extract + text + "\n"
continue

关于python - 逐页阅读pdf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34591770/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com