Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在没有意外换行的情况下从PDF转换为TXT?_Python_Python 3.x_Pdf_Pypdf2_Pdfminer - Fatal编程技术网

Python 如何在没有意外换行的情况下从PDF转换为TXT?

Python 如何在没有意外换行的情况下从PDF转换为TXT?,python,python-3.x,pdf,pypdf2,pdfminer,Python,Python 3.x,Pdf,Pypdf2,Pdfminer,我正在尝试使用python将一个非常干净的PDF文件转换为txt文件。我尝试过使用pyPDF2和PDFMiner,它们在文本识别中都非常有效 但是,在PDF中,行被包装,提取的.txt文件在结尾有意外的换行:例如第1行:“是长者/n天的帐户,”。“长者”和“日子”之间不应该有分界 PDF文件: 使用Acrobat编辑时,可以清楚地看到PDF中的原始文本不包含硬换行符,并且可以作为段落而不是单行进行编辑。 我尝试过的代码(根据此处的答案改编:) “一张图片胜过千言万语”,评论不允许图片! 我

我正在尝试使用python将一个非常干净的PDF文件转换为txt文件。我尝试过使用pyPDF2和PDFMiner,它们在文本识别中都非常有效

但是,在PDF中,行被包装,提取的.txt文件在结尾有意外的换行:例如第1行:“是长者/n天的帐户,”。“长者”和“日子”之间不应该有分界

PDF文件:

使用Acrobat编辑时,可以清楚地看到PDF中的原始文本不包含硬换行符,并且可以作为段落而不是单行进行编辑。

我尝试过的代码(根据此处的答案改编:)

“一张图片胜过千言万语”,评论不允许图片! 我使用的是不同副本的Web存档,但要点完全相同

您使用的是“对齐”内容,但与字处理器中的回流对齐不同,字形通常与从页面底部设置的设置位置的一行相关联。Adobe正在开发可回流PDF,并拥有在一个段落中组合行的专业技能,但是其他读者将接受


每一行是什么<代码>

没有段落边界标记,就像在HTML中一样

将来,读者可以像acrobat一样进行扩充,以组合台词,但不需要一次(大声)阅读一行。一些音频读取器在“一次一行”返回时会明显结巴,而一些音频读取器被智能地编程为忽略它们


简言之,您需要添加自己的AI/regex来收集行和添加缩进,但要注意人类文学的显著差异,如连字号和东方标点。

pdf文件本身就是这样格式化的吗?例如,在第1行中,您可以清楚地看到从“Elder”到“Days”的换行符。@Yes,.pdf文件是以这种方式显示的,因为任何给定的段落都需要在某个地方结束,而不是显示为很长的一行。然而,当我试图在Acrobat上编辑它时,它实际上会返回一个段落,而不是单行。因此,我很确定这条线是被包裹的,而不是断线。你能简单地剥去单线断线,就像你想保留双线断线一样吗?@JonSG 谢谢你的评论。我想保留文档中的其他单行换行符,因此我正在寻找一个通用的解决方案。我也在网上看到了很多关于如何从PDF中提取而不断行的讨论,对于许多人来说这似乎是一个长期存在的问题。所以我认为其他人也会感兴趣。有一些软件支持这个功能,但我想知道它是否可以在python上实现。我想我们最好能做点什么。撇开Python不谈,您如何确定何时保留或放弃换行符?
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()