我有一个Python脚本,可以使用PDFminer从pdf文档中读取文本,如下所示:
def convert_pdf_to_txt(path):
rsrcmgr = PDFResourceManager()
retstr = StringIO()
codec = 'utf-8'
laparams = LAParams()
device = TextConverter(rsrcmgr, retstr, codec=codec, laparams=laparams)
file_pointer = file(path, 'rb')
interpreter = PDFPageInterpreter(rsrcmgr, device)
password = ""
maxpages = 0
caching = True
pagenos=set()
for page in PDFPage.get_pages(file_pointer, pagenos, maxpages=maxpages, password=password, caching=caching, check_extractable=True):
interpreter.process_page(page)
file_pointer.close()
device.close()
str = retstr.getvalue()
retstr.close()
return str
当打印此字符串str时,该文本显示出来,这似乎很好用。但是,在仔细检查后,有许多字符双打(即“ ff”,“ fi”,“ fl”和“ ff”)在浏览生成的文本时变成“!”。
经过一番研究,我发现这些字符都具有“连字”,这意味着可以用两个字符的合并版本来替换它们。
这些连字显然无法在ASCII中找到,但我发现它们可以通过unicode表示。
我开始尝试使用不同的字符编码,以使文本中的“!”变成正确的连字,但是我没有成功。
也许这与我的PDF文件或PDFminer本身有关?
最佳答案
因此,我最终通过电子邮件将PDFMiner的创建者Shinyama Yusuke寄给了我。我在下面总结了他的答复。
有问题的PDF使用特殊字体进行连字。
诸如“ fi”,“ ff”或“ fl”之类的字母有时在英语字体中经过特殊处理,并且通常将它们组合成一个字形,以使其外观更好。
所讨论的PDF正是这样做的,并使用“!”作为组合字母,当以该专用字体呈现时,它看起来像是“ fi”或“ ff”。
由于PDFMiner没有该信息,因此它总是尝试提取
文档中的文字文本。
据Shinyama博士说,除了将所有内容都放入OCR软件之外,没有很好的解决方案。
我没有时间实施OCR,因此我写了一个非常简单的拼写检查器。拼写检查器贯穿我的文本,查找带有“!”的单词(使用正则表达式),然后将它们与已知带有连字的单词列表进行比较。
据Shinyamas博士说,世界上仍然有许多这样的PDF,将PDF转换为文本总是以“尽力而为”的结果。
关于python - 在python中使用pdfminer处理连字,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23750863/