2016-10-23 2 views
3

Python behandelt Wörter МАМА und MAMA unterschiedlich, weil einer von ihnen mit lateinischen und ein anderer mit Cyrillian geschrieben wird.Erkennen Sie die gleichen Wörter mit verschiedenen Alphabeten?

Wie macht man Python behandeln sie als eine gleiche Zeichenfolge?

Ich interessiere mich nur für Allomorphe.

+0

Suche nach 'encoding' und' decoding' von Strings in python –

+0

@jonrsharpe Es ist eine Frage über Zeichen, die ähnlich aussehen, aber ansonsten nichts gemeinsam haben. Es geht nicht darum, eine Unicode-Zeichenfolge in eine ASCII-Darstellung zu "quetschen". – vpekar

+0

@vpekar aber das ist * wie * Sie überzeugen, dass sie die gleiche Zeichenfolge sind, wird es Ihnen sonst nicht glauben – jonrsharpe

Antwort

2

Trans wird nicht helfen (es wird sich Kyrillisch P in Latein R). Auf den ersten Blick sieht das Unicode-Kompatibilitätsformular (NFKD oder NFKC) hoffnungsvoll aus, aber das verwandelt U + 041C (CYRILLIC CAPITAL LETTER EM) in U + 041C (und nicht U + 004D (LATIN CAPITAL LETTER EM)) - das wird es nicht Arbeit.

Die einzige Lösung besteht darin, eine eigene Allomorphentabelle zu erstellen und alle Strings vor dem Vergleich in eine kanonische Form zu übersetzen.

Hinweis: Als ich "Kyrillisch P" sagte, habe ich betrogen und den lateinischen Allomorph verwendet - ich habe keinen einfachen Weg, um kyrillisch zu werden.

+0

OK. Vielen Dank. Ich denke, es ist der einzige Weg. –

3

Es gibt eine Python-Bibliothek, die das kyrillische zu lateinische Unicode Übersetzungen tun genannt 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

Wäre das nicht "ДРП" gleich "DRP"? Es klingt irgendwie so, als ob das OP nur Allomorphe gleich betrachten möchte. Dies scheint auch so zu sein, dass "РАРА" zu "RARA" transliterieren würde, was ich vermute, dass das OP nicht will. – Paul

Verwandte Themen