所以我得到了一些希伯来语的PDF文件,我希望将其翻译成英语,并且在尝试将PDF文件中的文本复制并粘贴到文本编辑器中时,所有的希伯来语决赛字母被错误地复制了。
我发现了this问题,但没有找到解决方案,而且该问题只涉及一个错误阅读的特定最终字母,而且只是指特定的图书馆。
我尝试从acrobat阅读器和chrome PDF查看器进行复制和粘贴,但无法正确复制内容。
我发现另一件有趣的事情是,当你在浏览器中按Ctrl + F(我在chrome上试过它)并搜索最后一个字母" Pe"例如,它会给常规" Pe"和#34; Pe" (反之亦然,当您搜索常规" Pe")时,即使它们具有不同的代码点(以及ANSI代码页中的不同代码),这也是奇怪的。 (对于所有最终字母及其相应的常规字母,它都是相同的)
所以问题是 - 有谁知道为什么会这样?
我知道可能没有实际的代码点映射到字形,但在这种情况下,字符是如何呈现的?我对这个问题不太熟悉,所以我很感激任何解释。此外,任何能够让我用最终字母提取文本的好解决方案都将非常受欢迎,因为我想解析文本并弄乱字母导致不完整的单词。
修改
根据weibeld的要求,我添加了一些复制的单词和相应的正确单词。
我还要添加他们的hexdump。
E1 F7 F8 1B בקר. # Should be בקרן (Final letter "Nun") Switches every
final Nun with 1B instead of EF according to the windows 1255 code page.
F2 F1 F7 E9 E9 17 עסקיי. # Should be עסקיים (Final letter "Mem") Switches
every final Mem with 17 instead of ED.
谢谢!
答案 0 :(得分:1)
因此,根据您的编辑,PDF文件似乎使用一些奇怪的(非ASCII兼容的)希伯来语编码进行文本提取,这将字母的最终形式放在1X
区域中的ASCII格式不可打印的控制字符是。
如果您只想重建PDF中的文本,最简单的解决方案可能是,不是更改PDF,而是在从PDF复制文本后用正确的代码替换错误的代码。
例如,将从PDF复制的文本粘贴到file
,然后粘贴:
cat file | tr '\033' '\357' | tr '\027' '\355' >out_file
也就是说,每个错误的最终字母都有一个tr
。数字033
,357
等只是您使用1B
找到的十六进制字节EF
,hexdump
等的八进制形式。只需找出剩余的映射并将它们添加到链中。然后out_file
应该包含正确编码的文本,您可以使用Windows-1255使用一些文本编辑器打开它。
答案 1 :(得分:0)
PDF参考文献基本上没有对用于文本提取的非拉丁语非CJK文本进行编码的正确方法(渲染字形不需要这些),但实际上有两种方法:第一种方法是一个ToUnicode表(对于简单字体和复合字体),第二个,对于简单字体,是指定一个带有差异数组的编码字典,用Adobe注册表中的名称标识每个字形(例如https://github.com/adobe-type-tools/agl-aglfn/blob/master/glyphlist.txt)。
Identity-H编码意味着一个复合(双字节)字体,可能有一个ToUnicode表。自定义编码意味着具有差异数组的编码字典。标准编码意味着未指定预定义(或自定义)编码。
这三者的混合意味着一个非常混乱的起源。