Python 使用不同的字母表检测相同的单词?

Python 使用不同的字母表检测相同的单词?,python,Python,Python对单词МАМА和MAMA的处理方式不同,因为其中一个是用拉丁语编写的,另一个是用西里尔语编写的 如何让python将它们视为同一个字符串 我只关心同构。您可能需要使用规范化方法。 有一个python库,可以将西里尔语转换为拉丁语unicode,名为 音译是没有帮助的(它会把西里尔字母p变成拉丁字母R)。乍一看,Unicode兼容形式(NFKD或NFKC)看起来很有希望,但这将U+041C(西里尔字母大写EM)变成了U+041C(而不是U+004D(拉丁字母大写EM))——所以这行不通

Python对单词
МАМА
MAMA
的处理方式不同,因为其中一个是用拉丁语编写的,另一个是用西里尔语编写的

如何让python将它们视为同一个字符串


我只关心同构。

您可能需要使用规范化方法。

有一个python库,可以将西里尔语转换为拉丁语unicode,名为


音译是没有帮助的(它会把西里尔字母p变成拉丁字母R)。乍一看,Unicode兼容形式(NFKD或NFKC)看起来很有希望,但这将U+041C(西里尔字母大写EM)变成了U+041C(而不是U+004D(拉丁字母大写EM))——所以这行不通

唯一的解决方案是构建您自己的同构表,并在比较之前将所有字符串转换为规范形式


注意:当我说“西里尔字母p”时,我作弊并使用了拉丁语变体-我没有一个简单的方法来输入西里尔字母。

搜索
编码
解码
python@jonrsharpe这是一个关于看起来相似但没有共同点的角色的问题。这不是将Unicode字符串“压缩”成ASCII表示。@vpekar但这就是你说服它它们是同一个字符串的方式,它不会相信你otherwise@jonrsharpe问题是关于音译。俄语字符可以按惯例音译为拉丁字符,而使用unicodata.normalize无法实现这一点。见布伦丹·阿贝尔的最新答案。你能澄清一下,你是只关心同构,还是音译算数?例如,您希望如何处理“PAPA”问题?这难道不会使“БП”被视为等同于“DRP”吗?这听起来好像OP只想考虑AlopOfas相等。这也似乎是“ПАПА”将音译为“RARA”,我怀疑OP不想要。好的。谢谢我认为这是唯一的办法。
>>> 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'