2012-03-26 13 views
15

Angesichts eines Unicode-Zeichens, was wäre die einfachste Möglichkeit, seine script zurückgeben (wie "Latin", "Hangul" usw.)? unicodedata scheint diese Art von Funktion nicht zu bieten.Finden Sie das Unicode-Skript eines Zeichens

+1

Was meinst du mit "script Wert"? –

+2

Siehe http://stackoverflow.com/questions/436220/python-is-there-a-way-to-determine-the-coding-of-text-file. Der Link sagt, dass das korrekte Erkennen der Codierung immer unmöglich ist. –

+1

@DanielRoseman: http://en.wikipedia.org/wiki/Script_%28Unicode%29 – georg

Antwort

15

Ich hatte gehofft, jemand hat es vorher getan, aber anscheinend nicht, also hier ist, was ich am Ende bin. Das folgende Modul (ich nenne es) erweitert unicodedata und bietet script_cat(chr), die ein Tupel (Skriptname, Caterogy) für ein Unicode-Zeichen zurückgibt. Beispiel:

# coding=utf8 
import unicodedata2 
print unicodedata2.script_cat(u'Ф') #('Cyrillic', 'L') 
print unicodedata2.script_cat(u'の') #('Hiragana', 'Lo') 
print unicodedata2.script_cat(u'★') #('Common', 'So') 

Das Modul: https://gist.github.com/2204527

+2

Bravo! Herzlichen Dank für ein Selbstakzept, denke ich. – Marcin

+0

@EOL: nur aus Neugier, was ist der Sinn Ihrer Bearbeitung? Ich bin kein Emacs-Benutzer, also bin ich mir nicht sicher, wozu diese '- * -' gut sind. – georg

+0

@ thg435: Gute Frage: Ich dachte, dass die '- * - 'Syntax eine allgemeine Python-Konvention war, aber dann überprüfte ich PEP 263 und stellte fest, dass das nicht der Fall war. :) Ich habe die Änderung größtenteils rückgängig gemacht (die neue Version spiegelt jedoch PEP 263 besser wieder). Ich habe ein Leerzeichen vor der Kommentarmarke '#' gesetzt, um der PEP 8-Konvention "mindestens zwei Leerzeichen" zu folgen (Referenz: http://www.python.org/dev/peps/pep-0008/#inline-). Bemerkungen). – EOL

2

Die einzige Möglichkeit, die ich kenne, ist leider, den Unicode-Codepunkt mit ord() zu erhalten und dann Ihre eigene Tabelle zu verwenden (mit http://en.wikipedia.org/wiki/Unicode#Standardized_subsets und mehr). Eine vorläufige Umwandlung in eine normale Form kann angebracht sein, um der Tatsache Rechnung zu tragen, dass ein einzelnes "geschriebenes" Zeichen mit verschiedenen Sequenzen von Codepunkten ausgedrückt werden kann (das Unicode-Modul hilft hier).

2

Sie können ord verwenden, um den numerischen Wert eines Zeichens abzurufen (es funktioniert sowohl mit Unicode- als auch mit Bytezeichenfolgen der Länge 1).

Im nächsten Schritt werden Sie dann leider mit den Bereichen testen. Möglicherweise helfen die Daten hier: http://cldr.unicode.org/index/downloads

5

Es scheint mir, dass das Python UnicodeData Modul Werkzeuge für den Zugriff auf die Hauptdatei in der Unicode-Datenbank aber nichts für die anderen Dateien enthält: "Die Daten in dieser Datenbank basieren auf Die Datei UnicodeData.txt "

Die Skriptinformationen befinden sich in der Datei Scripts.txt. Es ist von relativ einfachem Format (beschrieben in UAX #44) und nicht schrecklich groß (131 Kilobyte), also könnten Sie es in Ihrem Programm analysieren. Beachten Sie, dass es in der Unicode-Klassifizierung das Skript "Common" gibt, das Zeichen enthält, die in verschiedenen Skripts verwendet werden, wie Satzzeichen.

Verwandte Themen