Преобразование символов Unicode, отличных от ASCII, в слова

Я ищу пакет Python, который может принимать текст в качестве входных данных и возвращать тот же текст с любым «символом Unicode, отличным от ASCII», преобразованным в слово, которое его представляет, если такое преобразование имеет смысл.

Например, учитывая текст:

This text is © John Smith. He likes √2 and €. 

вывод может быть:

This text is copyright John Smith. He likes square root 2 and euro. 

Подойдет любая ОС, лицензия и цена.

(Мне нужно преобразовать некоторые тексты Unicode в ASCII, и я хочу избежать использования слишком большого количества информации. Тексты представляют собой медицинские документы, написанные на английском языке.)

«использовать слишком много информации» или «потерять слишком много информации»?

Ответы (1)

Не пакет, а две простые функции, которые уже могут делать то, чего вы хотите добиться:

import unicodedata

def InsertUnicodeCharNames(inputstring):
    result = ""
    for ch in inputstring:
        if ord(ch) > 127:
            result += TrimSign(unicodedata.name(ch)).lower()
        else:
            result += ch
    return result

# remove trailing string " SIGN" from EURO SIGN, COPYRIGHT SIGN etc.
def TrimSign(inputstring):
    if inputstring.endswith(" SIGN"):
        return inputstring[:len(inputstring) - len(" SIGN")]
    else:
        return inputstring

Это пример использования:

print(InsertUnicodeCharNames("This text is © John Smith. He likes √2 and €."))

возвращается

This text is copyright John Smith. He likes square root2 and euro.

К сожалению, этот подход приведет к ужасным результатам для акцентированных символов:

print(InsertUnicodeCharNames("Beyoncé planning to perform with Motörhead!"))

возвращается

Beyonclatin small letter e with acute planning to perform with Motlatin small letter o with diaeresisrhead!