【发布时间】:2021-05-27 07:36:36
【问题描述】:
我正在尝试使用 python 将一个非常干净的 PDF 文件转换为 txt 文件。我尝试过使用 pyPDF2 和 PDFMiner,它们在文本识别方面都表现出色。
但是,由于在 PDF 中换行,提取的 .txt 文件在末尾有意外的换行符:例如第 1 行:“is an account of the Elder /n Days,”。 “Elder”和“days”之间不应有换行符。
使用 Acrobat 编辑时,可以清楚地看到 PDF 中的原始文本不包含硬换行符,并且可以作为段落而不是单行进行编辑。
我尝试过的代码(改编自这里的答案:convert from pdf to text: lines and words are broken)
import io as io
from io import StringIO
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfpage import PDFPage
import os
import sys, getopt
#converts pdf, returns its text content as a string
def convert(fname, pages=None):
if not pages:
pagenums = set()
else:
pagenums = set(pages)
output = io.StringIO()
manager = PDFResourceManager()
converter = TextConverter(manager, output, laparams=LAParams())
interpreter = PDFPageInterpreter(manager, converter)
infile = open(fname, 'rb')
for page in PDFPage.get_pages(infile, pagenums):
interpreter.process_page(page)
infile.close()
converter.close()
text = output.getvalue()
output.close
return text
path='D:\Folder\File.pdf'
a=convert(path)
f=open("D:\Folder\File.txt",'a',encoding='utf-8')
f.write(a)
f.close()
【问题讨论】:
-
.pdf 文件本身是这样格式化的吗?以第 1 行为例,您可以清楚地看到从“Elder”到“Days”的换行符。
-
@是的,.pdf 文件以这种方式呈现,因为任何给定的段落都需要在某处结束,而不是显示为很长的单行。但是,当我尝试在 Acrobat 上编辑它时,它实际上以段落的形式返回,而不是单行。因此,我很确定这条线只是被包裹,而不是被打破。
-
你能简单地去掉单行换行符,就好像你想保留双换行符一样?
-
@JonSG感谢您的评论。我想保留文档中的其他单行换行符,所以我正在寻找一个通用的解决方案。我还在网上看到了很多关于如何在没有换行符的情况下从 PDF 中提取的讨论,这对许多人来说似乎是一个长期存在的问题。所以我认为其他人也会对此感兴趣。有软件可以启用这个功能,但我想知道它是否可以在 python 上实现。
-
我最好我们可以做点什么。除了 Python,您将如何确定何时保留或丢弃换行符?
标签: python python-3.x pdf pypdf2 pdfminer