Перевести китайские пиньинь с акцентом в числовую форму - PullRequest
2 голосов
/ 11 ноября 2010

Я хочу преобразовать пиньинь, где тональные метки написаны с акцентами (например, Nín hǎo), в пиньинь, написанный в числовой форме / в формате ASCII (например, Nin2 hao1).

Кто-нибудь знает о каких-либобиблиотеки для этого, желательно PHP?Или знаете китайский / пиньинь достаточно хорошо, чтобы комментировать?

Я сам начал писать один, который был довольно простым, но я не говорю по-китайски и не до конца понимаю правила, когда слова должны быть разделены с помощьюпробел.

Мне удалось написать переводчик, который преобразует:

Nín hǎo. Wǒ shì zhōng guó rén ==> Nin2 hao3. Wo3 shi4 zhong1 guo2 ren2

Но как вы обрабатываете слова, подобные следующим -они разделяются пробелом на несколько слов или вы вставляете тональные числа в слове (если да, то где?): huā shíjiān, wèishénme, yuèláiyuè, shēngbìng и т. д.

Ответы [ 2 ]

5 голосов
/ 11 ноября 2010

Проблема с разбором пиньинь без пробела, разделяющего каждое слово, состоит в том, что будет двусмысленность.Возьмем, к примеру, название древней китайской столицы 长安 : Чангань (обратите внимание на неоднозначный апостроф).Однако если мы уберем апостроф, это можно интерпретировать двумя способами: Chán gān или Cháng ān.Китайцы скажут вам, что второе гораздо более вероятно, в зависимости от контекста, конечно, но ваш компьютер никак не может это сделать.

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

  1. Создать функцию свертывания с акцентом
  2. Создатьмассив действительных пиньинь (Вы должны взять его со страницы Википедии для пиньинь)
  3. Сопоставить каждое слово со списком действительных пиньинь
  4. Проверьте следующее слово, если есть двусмысленность относительно возможностипоследнего символа, принадлежащего следующему слову, например:
 shēngbìng
     ^ Does this 'g' belong to the next word?
 

В любом случае, правильное расположение числового представления тонов и правильные цифры для представления каждого акцента достаточно хорошо освещеныв этом разделе статьи Wikipeda о пиньине: http://en.wikipedia.org/wiki/Pinyin#Numerals_in_place_of_tone_marks. Вы также можете посмотреть, как IME делают свою работу.

2 голосов
/ 11 ноября 2010

Интервал должен оставаться прежним, но вы получили неправильную нумерацию тонов. Nin2 hao3. Wo3 shi4 zhong1 guo2 ren2.

wèishénme становится wei4shen2me.

  1. Удалите диакритические метки, сопоставив "āáǎà" на "a" и т. Д.
  2. Используя простой алгоритм максимального соответствия, разбейте составы на слоги (всего около 418 слогов мандарина).
  3. Добавление чисел (вы должны помнить, какую метку вы удалили) и соединение слогов обратно в соединения.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...