Определить, является ли символ упрощенным или традиционным китайским - PullRequest
9 голосов
/ 06 января 2011

Я нашел этот вопрос , который дает мне возможность проверить, содержит ли строка китайский символ. Я не уверен, что диапазоны Юникода верны, но, похоже, они возвращают false для японского и корейского языков и true для китайского.

Что он не делает, так это говорит, является ли персонаж традиционным или упрощенным китайским. Как бы вы узнали об этом?


обновление

В: Как узнать из 32-битного значения символа Unicode, если это китайский, корейский или японский символ?

http://unicode.org/faq/han_cjk.html

Их аргумент, что символы независимо от их формы имеют одинаковое значение и, следовательно, должны быть представлены одним и тем же кодом. Что ж, это не бессмысленно для меня, потому что я анализирую отдельных персонажей, которые не работают с их решением:

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

Ответы [ 3 ]

5 голосов
/ 30 мая 2012

Как уже говорилось, вы не можете надежно определить стиль скрипта по одному символу, но это возможно для достаточно длинного образца текста.См. https://github.com/jpatokal/script_detector о Ruby gem, который выполняет эту работу, и Упрощенная таблица китайского юникода для общего обсуждения.

2 голосов
/ 07 января 2011

Как я думаю, вы обнаружили, что вы не можете.Упрощенный и традиционный - это всего лишь два стиля написания одних и тех же символов - это как различие между римским и готическим шрифтом для европейских языков.

1 голос
/ 17 апреля 2017

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

  1. Только традиционные символы.
  2. Символы, которые только упрощены.Символы, которые остались нетронутыми и доступны в обоих.

Возьмите, например, символ 面.Он относится как к № 2, так и к № 3 ... Как упрощенный символ, он обозначает и , лицо и лапшу.Принимая во внимание, что 麵 только традиционный характер.Таким образом, в базе данных Unihan, 麵 имеет kSimplifiedVariant, что указывает на .Таким образом, вы можете сделать вывод, что это только традиционный символ.

Но также имеет kTraditionalVariant, что указывает на .Вот где система ломается: если вы используете эти данные, чтобы вычесть, что 面 является только упрощенным символом, вы ошибаетесь ...

С другой стороны, имеетkTraditionalVariant, указывая на , и эти две пары представляют собой "настоящую" упрощенную / традиционную пару.Но ничто в базе данных Unihan не отличает такие случаи, как 韓 / 韩, от случаев, подобных 麵 / 面.

...