gpt4 book ai didi

Ruby 从 PDF 中提取阿拉伯语文本

转载 作者:数据小太阳 更新时间:2023-10-29 08:48:13 25 4
gpt4 key购买 nike

我通常使用此代码从 PDF 中提取文本:

require 'rubygems'
require 'pdf/reader'

filename = File.expand_path(File.dirname(__FILE__)) + "/myfile.pdf"

PDF::Reader.open(filename) do |reader|
reader.pages.each do |page|
puts page.text
end
end

这次我想解析一个阿拉伯语 PDF,但是,使用这段代码,我得到了一堆奇怪的字符。例如:±πNuô ≠ö ¥πbÈÊ ´Lö È«_°u«» ±GKIW √±U±Nr ÈîUÅW √Ê ´bœ È≠w «∞LπLuŸ, ¥L

我已经读到coding: utf-8 适合阿拉伯语,那么,有什么解决办法吗?

最佳答案

此 PDF 中的文本未正确编码:屏幕上显示的内容与其代表的字符代码之间的关系未存储在此 PDF 中。这就是您获得“随机”文本的原因。

character definitions

同样值得注意的是:文本出现的顺序是正确的,但那是因为字体字符是绘制镜像的,而且文本本身也是镜像绘制的:

characters drawn in mirrored shapes

-- 使用 Quark XPress 正确排版阿拉伯语的典型 hack-ish 解决方法(曾经有一个 XTension (sp.?)“启用”这个)。

因为看起来这个错误的编码实际上是在字体内部定义的(“字体使用内置编码”,根据 Acrobat Pro 的“ list ”功能),您也许可以找到您所使用的字符之间的转换表正在阅读以及它们实际上应该是什么。请注意,对于本文档中的每种字体,这些表格可能会有很大差异,因此您必须检查每个文本字符串使用的字体。


加法

我做了一些进一步的调查,他们同意你自己和 Acrobat Pro 的调查结果。您的示例文本如下所示:

/F1 1 Tf        % set font and size "HGKECF+PHBagdad"
...
[ (´Mb ) -24.4 (¢'b¥b ) -24.4 («®{05}d«ØU¢Nr, ) -24.4 (Ë«ù´öÂ ) -24.4 (°LDU{03}&Nr.) ] TJ

通常,PDF 中的字体条目包含一个“转换”为实际字符代码的表格。这种字体(以及所有其他字体)也是如此:

<<
/Type /Font
/Subtype /Type1
/BaseFont /HGKECF+PHBagdad
/Encoding 66 0 R
/ToUnicode 69 0 R
>>

(仅列出相关条目)。 /Encoding 入口指向一个简单的索引数组 > 字符代码列表,而 /ToUnicode 指向一个更正式的表,它本质上包含相同的内容。两个列表翻译成相同的文本。

如上图所示,字体 包含阿拉伯语字形(镜像),但链接到这些字形的代码 不是阿拉伯语的正确代码。这就像旧的“Symbol”字体黑客:键入“a”以获得 alpha,“b”为 beta,“g”为 gamma:屏幕上的文本显示为“ɑβɣ”但实际上它说的是“abg”。


加法2

另请参阅此 Adob​​e 论坛主题:Arabic - ToUnicode Map incorrect?

引用:

Arabic XT fonts are not Arabic fonts from the operating system point of view (MacOS or Windows). They use the Mac Roman encoding; the Arabic glyphs are placed in place of the Roman glyphs.

我试图为您的字体找到一个“校正”编码,​​但到目前为止还没有成功。如果我能找到一个翻译表,应该可以将现有的 /ToUnicode 表与更正的表进行交换,并且在提取时您会得到正确的文本。 (尽管在您选择的编程语言中使用同一个表来更改提取后的文本字符串可能更简单。)

关于Ruby 从 PDF 中提取阿拉伯语文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21032994/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com