【问题标题】:Pdf Miner returns weird letters/charactersPdf Miner 返回奇怪的字母/字符
【发布时间】:2019-03-22 15:30:40
【问题描述】:

我在 python 3 中使用 pdfminer,我在从 pdf 恢复的文本中得到奇怪的字母。

例如,我得到significant而不是significant(请注意字母fI 合并为一个)。

我不知道为什么会这样。这是我正在使用的代码。

from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfpage import PDFPage
from io import StringIO
from nltk.tokenize import sent_tokenize


def convert_pdf_to_txt(path):
    rsrcmgr = PDFResourceManager()
    retstr = StringIO()
    codec = 'utf-8'
    laparams = LAParams()
    device = TextConverter(rsrcmgr, retstr, codec=codec, laparams=laparams)
    fp = open(path, 'rb')
    interpreter = PDFPageInterpreter(rsrcmgr, device)
    password = ""
    maxpages = 0
    caching = True
    pagenos=set()

    for page in PDFPage.get_pages(fp, pagenos, maxpages=maxpages, password=password,caching=caching, check_extractable=True):
        interpreter.process_page(page)

    text = retstr.getvalue()

    sentences = sent_tokenize(text)

    for s in sentences:
        print(s)
        print("\n\n")

到目前为止我唯一的猜测是它可能与编码有关,但似乎there is no way to retrieve the encoding of a pdf

【问题讨论】:

  • 您是否使用其他方式验证了 PDF 中的文本实际上存储为单独的字符,并且您确实从 pdfminer 获得的结果与通过其他方式不同?
  • 在上一条评论的基础上, 是一个常见的ligature
  • @RandomDavis 我已经用几个查看器打开了几个 pdf 文件,而且这个词每次都很好。 “重要”的 Ctrl-F 确实显示了这个词。
  • 因为 (1) 它是一种非常 非常 常见的连字,许多(显然是你的所有)“几个观众”都知道,和/或 (2) PDF可以包含明确声明特定字体中字形的正确翻译应该是另一系列字符和/或(3)任何字符串的元数据PDF 可以附加元数据,其中包含字符串“背后”的含义,以便于搜索引擎、屏幕阅读器和其他软件。
  • @usr2564301 那么有什么办法可以避免这个问题呢?

标签: python python-3.x pdf text pdfminer


【解决方案1】:

PDFminer 工作正常。有问题的字符是 Unicode 字符 U+FB01,fi ligature

在您的代码中添加一行以将 替换为fi

for s in sentences:
    s = s.replace ('fi', 'fi')
    print (s)

在 Unicode 中定义了另一种非常常见的 - 纯印刷 (*) - 连字:U+FB02,fl 连字;同等对待:

    s = s.replace ('fl', 'fl')

以及Alphabetic Presentation block 中的其他几个人,您不妨也包括在内。

(*)不要错误地将æ 更改为aeœ 更改为oe。这些不是“纯粹的印刷连字”,而是它们自己的有效字符。

【讨论】:

  • 已接受。认为可能有办法解决它,但我必须坚持这个并寻找其他可能的连字。
猜你喜欢
  • 2020-01-24
  • 2019-07-05
  • 2017-07-04
  • 2018-03-11
  • 2019-07-27
  • 2014-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多