Есть ли библиотека для Python, которая дает имя сценария для данного символа или строки Юникода? - PullRequest
2 голосов
/ 09 февраля 2011

Есть ли библиотека, которая сообщает, к какому сценарию принадлежит конкретный символ Unicode?

Например, для ввода "u 'ሕ'" он должен возвращать эфиопский или аналогичный.

Ответы [ 2 ]

7 голосов
/ 09 февраля 2011

Возможно, вы ищете данные в модуле unicodedata:

print unicodedata.name(u"ሕ")

отпечатки

ETHIOPIC SYLLABLE HHE

Можно использовать напечатанное имячтобы найти соответствующий символ:

unicodedata.lookup("ETHIOPIC SYLLABLE HHE")
2 голосов
/ 09 февраля 2011

Вы можете проанализировать файл Scripts.txt:

# -*- coding: utf-8; -*-

import bisect

script_file = "/path/to/Scripts.txt"
scripts = []

with open(script_file, "rt") as stream:
    for line in stream:
        line = line.split("#", 1)[0].strip()
        if line:
            rng, script = line.split(";", 1)
            elems = rng.split("..", 1)
            start = int(elems[0], 16)
            if len(elems) == 2:
                stop = int(elems[1], 16)
            else:
                stop = start
            scripts.append((start, stop, script.lstrip()))

scripts.sort()
indices = [elem[0] for elem in scripts]

def find_script(char):
    if not isinstance(char, int):
        char = ord(char)
    index = bisect.bisect(indices, char) - 1
    start, stop, script = scripts[index]
    if start <= char <= stop:
        return script
    else:
        return "Unknown"

print find_script(u'A')
print find_script(u'Д')
print find_script(u'ሕ')
print find_script(0x1000)
print find_script(0xE007F)
print find_script(0xE0080)

Обратите внимание, что код не является ни надежным, ни оптимизированным.Вы должны проверить, обозначает ли аргумент действительный символ или кодовую точку, и объединить смежные эквивалентные диапазоны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...