【问题标题】:How can I fix my Chinese PDF parsed in Apache Tika for Python to read the characters correctly?如何修复在 Apache Tika for Python 中解析的中文 PDF 以正确读取字符?
【发布时间】:2020-09-07 06:58:58
【问题描述】:

我有一个下载的中文 PDF,我想使用 Tika + Python 提取文本(完整 PDF 的原始链接可以找到here,或者可以找到提取的示例页面here)。

当我运行以下代码时

analysed_file = 'D:\\5_Programming\\test.pdf'

# Parse data from file
file_data = parser.from_file(analysed_file, "http://localhost:9998/")

# Get files text content
text = file_data['content']
print(text)

它在命令行中打印空心框。当我复制这些框并在此处粘贴示例时,它看起来像

£Î £á £÷ £á £ú £¬ £ó £è £õ £ê £á ÄÇ Íß ×È £¬ Êæ ¼Ó

£Ï £æ £æ £é £ã £å £ò £¬ £Ì £® £È £® °Â ·Æ ɪ £¬ £Ì £® £È £®

£Ð £á £õ £ì £ó £¬ £Â £® £Ä £é £á £î £å ±£ ¶û ˹ £¬ £Â £® ÷ì °² ÄÈ

我使用拉丁字符创建了一个 PDF,并使用完全相同的脚本对其进行了解析,它在命令行中打印得非常好。

我在 Acrobat 中打开文件进行故障排除,它给了我错误消息“无法找到或创建字体 [garbled characters]”。它也是displayed all characters as bullets,如果它不识别字体(https://helpx.adobe.com/au/acrobat/using/pdf-fonts.html),这是它的明显行为:

但是,在 Google Chrome PDF 查看器中,整个文本都是中文的displayed correctly

Google Chrome 的不同之处在于它允许在 Adob​​e Acrobat 和 Tika + Python 中出现乱码时读取它,我该如何解决 PDF 的这个问题以允许 Tika 正确解析它?是编码问题还是字体问题?我并不直接关心它在 Acrobat 中是否正确打印。

【问题讨论】:

  • 打印时输出编码是否有问题?如果你在 python 程序中输入几个汉字并打印出来,它们会正确显示吗?
  • @Gagravarr 是的,我已经使用中文一段时间了,它在命令行中始终正确显示。

标签: python pdf character-encoding apache-tika


【解决方案1】:

大家好,欢迎加入 Stack Overflow 社会。 Adobe Reader 可能没有安装中文字体。 您可以从此link 安装它们(滚动到称为附加组件的部分)。有两个字体包可用。您可以尝试安装这些并让我知道这是怎么回事。
问候,
Ravi Arora 的真正令人惊叹的视频

【讨论】:

  • 嗨,Ravi,感谢您的评论,这让我意识到我的问题不清楚。我要解决的问题是 Tika for Python 正确解析文本而不是 Acrobat。我只是使用 Acrobat 来显示 PDF 出了什么问题,现在已经编辑了问题。
  • @Moonman157 Tika 的问题可能必须类似地解决,您可能必须配置它(或底层 PDFBox)以访问一些额外的字体。但是,由于您没有共享有问题的 PDF,我们只能猜测。除了缺少字体之外,PDF 中的缺陷也可能导致此行为(由 Chrome 修复但其他人未修复)或设置中使用的组件之间的编码不匹配。
  • @mkl 我现在添加了指向 PDF 的链接,感谢您提及。文档的问题是嵌入字体的名称也是乱码,所以无法手动添加缺失的字体。或者你的意思是我可以添加一个支持 CJK 字符的字体供 PDFBox 默认使用?
  • "对于 CJK(中文、日文和韩文)字体,主机字体系统的字体名称通常编码在主机操作系统的脚本中。例如,日文字体可能有一个名称使用某些(未识别的)日语编码用日语编写的。因此,TrueType 字体名称可能包含多字节字符代码,每个字符代码都需要多个字符来表示 PDF 名称对象(使用 # 表示法根据需要引用特殊字符)."(ISO 32000-1,第 9.6.3 节,注 4)-因此,字体名称可能会因为使用未知编码而出现乱码。
【解决方案2】:

您可以将 Apache Tika 与作为 docker 映像启动的 Google Tesseract Parser 一起使用 - blog post

然后您必须在 tesseract 中添加正确的语言:例如 tesseract-ocr-chi-sim(简体中文)。语言列表:list

docker exec -it tika-server-ocr /bin/bash
apt-get update
apt-get install tesseract-ocr-chi-s

然后您需要启用 OCR(用于 pdf 解析)并将中文设置为语言:

curl -H "X-Tika-PDFextractInlineImages: true" -H "X-Tika-PDFocrStrategy: OCR_ONLY" -H "X-Tika-OCRLanguage: chi-sim"  -T test.pdf localhost:9998/tika

【讨论】:

    猜你喜欢
    • 2016-01-09
    • 1970-01-01
    • 2011-09-02
    • 2022-12-18
    • 2018-10-21
    • 2019-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多