Python对单词МАМА
和MAMA
的处理方式不同,因为其中一个是使用拉丁语而另一个是使用西里尔语编写的。
如何让python将它们视为一个相同的字符串?
我只关心同形异形体。
答案 0 :(得分:3)
有一个python库可以执行称为transliterate
>>> from transliterate import translit
>>>
>>> cy = u'\u041c\u0410\u041c\u0410'
>>> en = u'MAMA'
>>> cy == en
False
>>> cy_converted = translit(cy, 'ru', reversed=True)
>>> cy_converted == en
True
>>> cy_converted
u'MAMA'
答案 1 :(得分:2)
音译无济于事(它将把西里尔语P变成拉丁语R)。乍一看,Unicode兼容形式(NFKD或NFKC)看起来很有希望,但是将U + 041C(CYRILLIC CAPITAL LETTER EM)变成U + 041C(而不是U + 004D(LATIN CAPITAL LETTER EM)) - 所以不会工作
唯一的解决方案是构建自己的allomorphs表,并在比较之前将所有字符串转换为规范形式。
注意:当我说“Cyrillic P”时,我欺骗并使用了拉丁文allomorph - 我没有一种简单的方法可以进入西里尔语。
答案 2 :(得分:0)
您可能想要使用normalize方法。 https://docs.python.org/2/library/unicodedata.html#unicodedata.normalize