我正在尝试转换一个非常干净的PDF文件到txt文件使用python。我试过使用pyPDF2和PDFMiner,它们在文本识别方面都工作得很好。
然而,由于在PDF中的行是换行的,提取的.txt文件在末尾有意外的换行符:例如,第1行:"is an account of the Elder /n Days,“。在"Elder“和"days”之间不应该有换行符。
PDF文件:
当用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()
发布于 2021-05-27 07:07:49
“一张图片胜过千言万语”,评论不允许图片!我使用的是另一个副本的Web归档,但要点完全相同。
您正在处理“对齐”的内容,但与字处理程序中的回流对齐不同,字形通常绑定到从页面底部开始设置位置的一行。Adobe正在开发可回流的</br>
,并拥有在段落中合并线条的专业技能,但其他读者会接受PDF
每一行都是什么。</br>
<p stle=indented>
中没有段落边界标记,就像HTML <\p>
中那样
Reader在未来可以像acrobat一样被增强,以组合行,但它不需要一次(大声朗读)一行。一些音频阅读器在“一次一行”返回时会明显卡顿,而一些音频阅读器则被智能地编程为直接忽略它们。
简而言之,您需要添加自己的AI/正则表达式来收集行和添加缩进,但要注意显著的人类文学差异,如连字符和东方标点符号。
https://stackoverflow.com/questions/67708422
复制相似问题