Нормализация юникода в наборе данных - PullRequest
0 голосов
/ 23 октября 2018

В настоящее время мой код выглядит следующим образом:

import unicodedata
unicode = open("unicode.txt").read()
unicode = unicodedata.normalize('NFKC', unicode)
print(unicode)

, где unicode.txt - текстовый файл, который просто читает \u00e9.

Когда я запускаю программу, вывод по-прежнему\u00e9, однако, если я заменим unicode в строке .normalize на \u00e9, то получится é.

Конечная цель - просто заменить все строки Unicode (например, \ u00e9)со своими обычными персонажами.Как cafe вместо café.

Функция нормализации, кажется, работает нормально, когда строка вводится в функцию, но не когда она находится в файле, который нужно открыть. Дажетогда кажется, что он возвращает стилизованный é вместо обычного e.

Есть ли способ заставить эту работу?

1 Ответ

0 голосов
/ 24 октября 2018

Содержимое файла буквально состоит из шести символов: \u0029.'\u0029', напечатанный в коде, представляет собой одну кодовую точку Unicode, представленную в качестве escape-кода:

>>> print('\u00e9')   # A single character escape code
é
>>> print(r'\u0039')  # A six-character string using raw string notation.
\u0039                # Escape codes are ignored and characters are literal.
>>> print('\\u0039')  # A six-character string using an escaped backslash
\u0039                # to indicate a literal backslash.

Чтобы преобразовать шестизначную строку в символ, используйте следующее,

>>> r'\u00e9'.encode('ascii').decode('unicode-escape')
'é'

Кодирование ascii необходимо для преобразования строки Unicode символов ASCII в строку байтов, поскольку в Python 3 можно декодировать только строки байтов. Python 2 может пропустить его, поскольку при необходимости неявно кодирует строки Unicode обратно в ASCII.
Вы также можете напрямую прочитать его из файла (при условии Python 3), используя:

with open('unicode.txt',encoding='unicode-escape') as f:
    data = f.read()

Использование import io и io.open на Python 2.

...