Как использовать регулярное выражение для преобразования <U + 5C16> в \ u5c16? - PullRequest
0 голосов
/ 09 января 2019

Я занимаюсь анализом настроений и, во-первых, мне нужно очистить текстовые данные. В некоторых текстах есть китайский, тагальский, и я сейчас пытаюсь перевести их на английский. Но до сих пор все китайские символы в этом файле данных имеют представление Unicode, например:

<U+5C16>

, с которой невозможно справиться, используя путь кодирования и декодирования Python. Поэтому я хочу преобразовать этот тип шаблона в:

\u5c16

Тогда я думаю, что мы могли бы использовать следующий код, чтобы получить китайские иероглифы, которые я хочу:

text.encode('latin-1').decode('unicode_escape')

Итак, вопрос в том, как использовать регулярное выражение для преобразования <U+5C16> в \u5c16?

Большое спасибо!


Обновление: я думаю, что самое сложное в том, что мне нужно, чтобы часть 5c16 в \u5c16 была эквивалентна строчной букве 5C16 в <U+5C16>. И в моем наборе данных социальных сетей больше всего я вижу текстовые данные, подобные следующим:

<U+5C16><U+6C99><U+5480><U+9418><U+6A13>

Если бы я мог преобразовать приведенный выше текст в '\u5c16\u6c99\u5480\u9418\u6a13' и распечатать его на Python, я мог бы получить то, что мне действительно нужно:

尖沙咀鐘樓

Но как я мог это сделать? Будем благодарны за любые идеи и подсказки!

Ответы [ 2 ]

0 голосов
/ 09 января 2019

Если ваш файл точно такой, как вы его описали, вот как его конвертировать:

text = "text with <U+5C16> and so on"
ready = re.sub(r"<U\+([0-9a-fA-F]{4})>", r"\u\1", text)
go = re.sub(r"<U\+([0-9a-fA-F]{4})>", r"\u\1", text)    # BMP: 4 hex digits
go = re.sub(r"<U\+([0-9a-fA-F]{5})>", r"\U000\1", go)   # SMP: 5 -> 8 hex digits
print(go.encode("ascii").decode('unicode_escape'))

(Строка с пометкой «SMP» необходима, только если у вас есть символы вне «базовой многоязычной плоскости».)

Выход: text with 尖 and so on

0 голосов
/ 09 января 2019

Требуемое регулярное выражение выглядит примерно так:

найти: r'<U\+([A-Fa-f0-9]+?)>'

заменить на: r'\u\1'

Чтобы превратить полученную строку в юникод, сделайте s.encode().decode('unicode-escape')

Пример:

re.sub(r'<U\+([A-Fa-f0-9]+?)>',r'\u\1',s).encode().decode('unicode-escape')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...