如何使用从右到左的语言以unicode编码数字? (正常化)

时间:2017-03-11 16:01:25

标签: unicode encoding arabic right-to-left lemmatization

在信息检索讲座期间,有一些幻灯片谈论用于索引和查询文本文档的令牌的lemmatisation和/或规范化。其中一个提到了从右到左的语言,例如阿拉伯语,但在unicode中,它们以与从左到右的语言相同的方式逻辑/顺序编码,只是从右向左显示。这是有道理的,但数字是如何编码的(特别是那些使用罗马数字的数字)?

Aracbic Script and Bidirectionality Lecture Slide

在英语中,“1962”年将使用unicode和大多数其他字符编码将字符顺序编码为string testStr; getline(cin, testStr); 。但是,在阿拉伯语中,不清楚演讲幻灯片中显示的年份“1962”是按顺序编码为1962然后从左向右呈现(所以document is technically bidirectional),或编码为1962并按文字从右向左呈现。

这对索引非常重要,因此1962年的阿拉伯文和英文文本在索引中都是相同的标记。我是否需要反转阿拉伯语中的字符以对它们进行标准化,或者它们的编码顺序与英语相同?

1 个答案:

答案 0 :(得分:2)

我想我找到了Unicode Bi-Directional Text的答案。 Unicode意味着在逻辑上编码而不是渲染的顺序,因此渲染算法仍然可以针对不同的段落宽度正确执行换行(并且还解释了为什么从右到左的支持有时需要要显式启用,因为渲染更复杂。

从维基百科看来,unicode将字符分为四种类型的“命令”:强,弱,中性和显式。数字属于弱序,因为它们具有模糊的方向性。来自维基百科:

  

除非存在方向覆盖,否则数字始终被编码(并输入)大端,并且数字呈现为LTR。弱方向性仅适用于整个数字的放置。 (1)

因此,据我所知,数字“1962”应该以典型的从左到右的字符串以相同的逻辑顺序(1962)进行编码,就像在带有right-to的字符串中一样左侧角色。