Python 使用pdfminer从pdf中提取文本可提供多个副本
我正在尝试使用PDFMiner(代码位于)从PDF文件中提取文本。除了path/to/pdf之外,我没有更改代码。令人惊讶的是,代码返回同一文档的多个副本。我得到了与其他pdf文件相同的结果。我是否需要传递其他论点,或者我遗漏了什么?非常感谢您的帮助。为了以防万一,我提供了以下代码:Python 使用pdfminer从pdf中提取文本可提供多个副本,python,pdf,pdfminer,Python,Pdf,Pdfminer,我正在尝试使用PDFMiner(代码位于)从PDF文件中提取文本。除了path/to/pdf之外,我没有更改代码。令人惊讶的是,代码返回同一文档的多个副本。我得到了与其他pdf文件相同的结果。我是否需要传递其他论点,或者我遗漏了什么?非常感谢您的帮助。为了以防万一,我提供了以下代码: from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter from pdfminer.converter import TextCo
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfpage import PDFPage
from cStringIO import StringIO
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()
fstr = ''
for page in PDFPage.get_pages(fp, pagenos, maxpages=maxpages, password=password,caching=caching, check_extractable=True):
interpreter.process_page(page)
str = retstr.getvalue()
fstr += str
fp.close()
device.close()
retstr.close()
return fstr
print convert_pdf_to_txt("test.pdf")
我的回答在您引用的线程中有点不正确。我发现了错误,忘了更新我的答案 因为pdfminer的文档非常稀少,所以我无法完全解释为什么它是这样工作的。希望对pdfminer库有更好了解的人能给我们一些见解 我只知道您必须在for循环之外执行
text=retstr.getvalue()
。我只能假设retstr
正在更新,就像我们在for循环中执行final\u text+=text
一样,因此一旦完成,我们只需执行text=retstr.getvalue()
即可从所有页面获取文本
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfpage import PDFPage
from cStringIO import StringIO
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
print convert_pdf_to_txt("test.pdf")
希望这有帮助 对于python 3,DuckPuncher的代码只需稍作调整:
import io
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfpage import PDFPage
def convert_pdf_to_txt(path):
rsrcmgr = PDFResourceManager()
retstr = io.StringIO()
codec = 'utf-8'
laparams = LAParams()
device = TextConverter(rsrcmgr, retstr, codec=codec, laparams=laparams)
fp = open(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文件来自哪里?它们都是用同一个工具创建的吗?完全有可能是某个脑残的脚本正在创建PDF,其中包含文本的多个副本。@非常感谢您的提问。我从一份科学杂志下载了所有经过测试的pdf文件,因此我假设它们是使用相同的工具创建的。您可以共享一个示例文档来重现该问题吗?@mkl可以在此处下载示例文档:。谢谢。@药剂师,不知道您是否有机会试用我提供的溶液?