在python中使用pdfminer处理连字

时间:2014-05-20 04:08:59

标签: python unicode encoding utf-8 pdfminer

我有一个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本身有关?

1 个答案:

答案 0 :(得分:3)

所以我最后通过电子邮件发送了PDFMiner的创建者Yusuke Shinyama。我在下面总结了他的答复。

  • 有问题的PDF使用特殊字体进行连字。
  • 像“fi”“ff”或“fl”这样的字母有时会在英文版式中特别处理,而且它们通常会合并为一个字形,以使其看起来更好。
  • 有问题的PDF确实如此,并使用“!”作为组合字母,当使用该专用字体呈现时,它可能看起来像“fi”或“ff”。
  • 由于PDFMiner没有该信息,因此总是尝试提取 文档中的文字文本。

根据Shinyama博士的说法,除了将所有内容都放在OCR软件上之外,没有好的解决方案。


我没有时间实施OCR,所以我写了一个非常简单的拼写检查器。拼写检查器通过我的文本查找单词“!”(使用正则表达式),然后将它们与已知单词列表进行比较。

根据Shinyamas博士的说法,世界上仍然有很多像这样的PDF,将PDF转换为文本总是会产生“尽力而为”的结果。