Регулярное выражение разделяется на все знаки препинания и последовательности символов Engli sh и сохраняет разделители с zhuyin в Python - PullRequest
1 голос
/ 19 июня 2020

Как преобразовать строку с фиксированным набором символов (чжуинь), пунктуациями и символами sh английского языка в последовательности чжуинь (разделенные пробелами, но иногда соединенные знаками пунктуации или sh английского языка), отдельные знаки препинания и Engli sh последовательности символов?

Для строки как таковой

"ㄉㄢˋNCCㄗㄞˋ『ㄅㄠˇ ㄏㄨˋ』ㄍㄜ˙ ㄗ,ㄉㄜ˙「ㄑㄧㄢˊ ㄊㄧˊ」ㄒㄧㄚˋ。"

Как преобразовать ее в

['ㄉㄢˋ', 'NCC', ㄗㄞˋ', '『', 'ㄅㄠˇ', 'ㄏㄨˋ', '』', 'ㄍㄜ˙', 'ㄗ', ',', 'ㄉㄜ˙', '「', 'ㄑㄧㄢˊ', 'ㄊㄧˊ', '」', 'ㄒㄧㄚˋ', '。']

В настоящее время я использую понимание списка и шаблон регулярного выражения как таковой

[seq for seq in re.split("([^\w˙])", input_str) if seq and seq != " "]

, но это не позволяет токенизировать последовательности символов sh английского языка и дает такие результаты

['ㄉㄢˋNCCㄗㄞˋ', '『', 'ㄅㄠˇ', 'ㄏㄨˋ', '』', 'ㄍㄜ˙', 'ㄗ', ',', 'ㄉㄜ˙', '「', 'ㄑㄧㄢˊ', 'ㄊㄧˊ', '」', 'ㄒㄧㄚˋ', '。']

1 Ответ

1 голос
/ 19 июня 2020

Вы можете использовать модуль regex вместо re и использовать чередование между чжуинь (или бопомофо), латиницей и знаками препинания. Например:

\p{Bopomofo}+[ˋˇ˙ˊ]?|\p{Latin}+|\p{P}

См. онлайн-демонстрацию

  • \p{Bopomofo}+ - Любой один или несколько символов Чжуинь.
  • [ˋˇ˙ˊ]? - необязательный символ из заданных символов.
    • | - Альтернативный вариант (ИЛИ)
  • \p{Latin}+ - Любой один или несколько латинских символов (запятую тоже можно записать).
    • | - Альтернативный (ИЛИ)
  • \p{P} - Любой знак препинания.

import regex
text = 'ㄉㄢˋNCCㄗㄞˋ『ㄅㄠˇ ㄏㄨˋ』ㄍㄜ˙ ㄗ,ㄉㄜ˙「ㄑㄧㄢˊ ㄊㄧˊ」ㄒㄧㄚˋ。'
lst = regex.findall(r'\p{Bopomofo}+[ˋˇ˙]?|\p{Latin}+|\p{P}', text)
print(lst)

Результатов в:

['ㄉㄢˋ', 'NCC', 'ㄗㄞˋ', '『', 'ㄅㄠˇ', 'ㄏㄨˋ', '』', 'ㄍㄜ˙', 'ㄗ', ',', 'ㄉㄜ˙', '「', 'ㄑㄧㄢˊ', 'ㄊㄧˊ', '」', 'ㄒㄧㄚˋ', '。']
...