如何从此压缩的PDF / A中提取文本?

问题描述 投票:3回答:2

出于机器学习的目的(sckit-learn),我需要从许多PDF文件中提取原始文本。首先,我使用xpdf pdftotext执行此任务:

exe = r'"'+os.path.join(xpdf_path,"pdftotext.exe")+'"'
cmd = exe+" "+"\""+pdf+"\""+" "+"\""+pdf+".txt"+"\""
subprocess.check_output(cmd)
with open(pdf+".txt") as f:
    texto_converted = f.read()

但是不幸的是,对于其中的少数人,我无法获取文本,因为他们在pdf来源上使用了“流”,例如this one

结果是这样的:

59!"#$%&'()*+,-.#/#01"21"" 345667.0*(879:4$;<;4=<6>4?$@"12!/ 21#$@A$3A$>@>BCDCEFGCHIJKIJLMNIJILOCNPQRDS QPFTRPUCTCVQWBCTTQXFPYTO"21 "#/!"#(Z[12\&A+],$3^_3;9`Z &a# .2"#.b#"(#c#A(87*95d$d4?$d3e#Z"f#\"#2b?2"#`Z 2"!eb2"#H1TBRgF JhiO
jFK# 2"k#`Z !#212##"elf/e21m#*c!n2!!#/bZ!#2#`Z "eo ]$5<$@;A533> "/\ko/f\#e#e#p

我什至尝试使用zlib + regex:

import re
import zlib

pdf = open("pdfa.pdf", "rb").read()
stream = re.compile(b'.*?FlateDecode.*?stream(.*?)endstream', re.S)

for s in re.findall(stream,pdf):
    s = s.strip(b'\r\n')
    try:
        print(zlib.decompress(s).decode('UTF-8'))
        print("")
    except:
        pass

结果是这样的:

1 0 -10 -10 10 10 d1
0.01 0 0 0.01 0 0 cm
1 0 -10 -10 10 10 d1
0.01 0 0 0.01 0 0 cm

我什至尝试过pdftopng(xpdf)尝试tesseract,但均未成功因此,有没有办法像使用Python或第三方应用程序那样从PDF中提取纯文本?

出于机器学习的目的(sckit-learn),我需要从许多PDF文件中提取原始文本。首先,我使用xpdf pdftotext执行此任务:exe = r'“'+ os.path.join(xpdf_path,” pdftotext ....

python pdf compression text-extraction pdfa
2个回答
0
投票

您可以使用两种相当简单的技术。


0
投票

如果要解压缩PDF文件中的流,我建议您使用qdpf,但要在此文件上使用

© www.soinside.com 2019 - 2024. All rights reserved.