出于机器学习的目的(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 ....
您可以使用两种相当简单的技术。
如果要解压缩PDF文件中的流,我建议您使用qdpf
,但要在此文件上使用