如何修复在ApacheTika for Python中解析的中文PDF以正确读取字符?

如何修复在ApacheTika for Python中解析的中文PDF以正确读取字符?,python,pdf,character-encoding,apache-tika,Python,Pdf,Character Encoding,Apache Tika,我有一个下载的中文PDF,我想使用Tika+Python从中提取文本(可以找到完整PDF的原始链接,也可以找到提取的示例页面) 当我运行以下代码时 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

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

当我运行以下代码时

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中打开该文件进行故障排除,它给了我错误消息“无法找到或创建字体[]”。同时,如果它不识别字体(),这是它的明显行为:

然而,在谷歌Chrome PDF浏览器中,整个文本都是中文


Google Chrome做了什么不同的事情,允许它在Adobe Acrobat和Tika+Python中出现乱码时被读取,我如何用PDF修复这个问题,以允许Tika正确解析它?这是编码问题还是字体问题?我与Acrobat中的正确打印没有直接关系。

欢迎来到Stack Overflow society。 Adobe Reader中可能没有安装中文字体。 您可以从此处安装它们(滚动到名为Add-Ons的部分)。有两个字体包可用。您可以尝试安装这些,并让我知道如何进行。
问候,

Ravi Arora的真正令人惊奇的视频

您可以将Apache Tika与Google Tesseract解析器一起使用,该解析器以docker映像的形式启动-

然后您必须在tesseract中添加适当的语言:例如tesseract ocr chi sim(简体中文)。语言清单:

然后,您需要启用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

嗨,拉维,谢谢你的评论,这让我意识到我的问题不清楚。我想解决的问题是使用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)-因此,字体名称可能被乱码,因为它使用了未知的编码。打印时输出编码可能有问题吗?如果您在python程序中键入一些汉字并将其打印出来,它们是否正确显示?@Gagravarr是的,我已经使用中文一段时间了,它始终正确显示在命令行中。
curl -H "X-Tika-PDFextractInlineImages: true" -H "X-Tika-PDFocrStrategy: OCR_ONLY" -H "X-Tika-OCRLanguage: chi-sim"  -T test.pdf localhost:9998/tika