在信息检索讲座期间,有一些幻灯片谈论用于索引和查询文本文档的令牌的lemmatisation和/或规范化。其中一个提到了从右到左的语言,例如阿拉伯语,但在unicode中,它们以与从左到右的语言相同的方式逻辑/顺序编码,只是从右向左显示。这是有道理的,但数字是如何编码的(特别是那些使用罗马数字的数字)?
在英语中,“1962”年将使用unicode和大多数其他字符编码将字符顺序编码为string testStr;
getline(cin, testStr);
。但是,在阿拉伯语中,不清楚演讲幻灯片中显示的年份“1962”是按顺序编码为1962
然后从左向右呈现(所以document is technically bidirectional),或编码为1962
并按文字从右向左呈现。
这对索引非常重要,因此1962年的阿拉伯文和英文文本在索引中都是相同的标记。我是否需要反转阿拉伯语中的字符以对它们进行标准化,或者它们的编码顺序与英语相同?
答案 0 :(得分:2)
我想我找到了Unicode Bi-Directional Text的答案。 Unicode意味着在逻辑上编码而不是渲染的顺序,因此渲染算法仍然可以针对不同的段落宽度正确执行换行(并且还解释了为什么从右到左的支持有时需要要显式启用,因为渲染更复杂。
从维基百科看来,unicode将字符分为四种类型的“命令”:强,弱,中性和显式。数字属于弱序,因为它们具有模糊的方向性。来自维基百科:
除非存在方向覆盖,否则数字始终被编码(并输入)大端,并且数字呈现为LTR。弱方向性仅适用于整个数字的放置。 (1)
因此,据我所知,数字“1962”应该以典型的从左到右的字符串以相同的逻辑顺序(1962
)进行编码,就像在带有right-to的字符串中一样左侧角色。