我有一个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/

10-09 23:12