2009-04-24 4 views
6

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

Я прочитал, что могу проверить каждый символ на его номере юникода, чтобы узнать, находится ли он в диапазоне символов CJK. Это полезно, однако я бы хотел отделить их, если возможно, от обработки текста от разных словарей. Есть ли способ проверить, является ли персонаж японским или китайским?

+1

Вы знаете кодовое, или вы должны догадаться, что тоже? –

+0

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

+0

Я заводиться преобразования все в юникод в любом случае для анализа (я вынужден на самом деле) .Я могу обнаружить набор кодов перед преобразованием, этот вопрос больше, если набор кодов уже юникод. – landyman

ответ

6

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

  1. Упрощение - если персонаж, который вы тестируете, является PRC simplification, например 门, доступен только на основной территории китайского языка.
  2. Kana - если символ является одним из многих символов Japanese kana, таких как あ い う え お, то текстовый блок, с которым вы работаете, определенно японский.

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

+0

Спасибо. Я знал, что некоторые из персонажей были разделены, но я не понимал, что символы каны не являются частью китайского. Я смог сделать тест для них, который работает до сих пор. Мы увидим, насколько это точно после тестирования. Еще раз спасибо. – landyman

+0

Упрощенный китайский, как правило, не найден в японском кандзи. Чтобы различать эти два, вы можете разобрать строку для присутствия Kana (Hiragana & Katakana), которая характерна для японцев. – Mikaveli

1

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

Однако я просто изучаю китайский язык, поэтому я не эксперт.

2

В процессе разработки Unicode был включен Han Unification. Это связано с тем, что многие японские символы происходят от китайских символов или же, как и китайские; аналогично корейскому. Есть некоторые символы (катакана и хирагана - см. chapter 12 стандарта Unicode v5.1.0), обычно используемые на японском языке, которые указывают, что текст был японским, а не китайским, но я считаю, что это будет статистический тест, а не окончательный.

Ознакомьтесь с книгой O'Reilly по телефону CJKV Information Processing (CJKV сокращен для китайского, японского, корейского, вьетнамского языков, у меня есть где-то предшественник CJK). Есть также книга О'Рейли на Unicode Explained, которая может быть некоторой помощью, хотя, вероятно, не для этого вопроса (я не помню, как определить японский и китайский текст).

+0

Спасибо. Я обязательно проверю книги. Я согласен с тем, что тестирование только для японцев (хирагана и катакана) не является окончательным, но пока оно будет работать. – landyman

0

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

0

Обходным способом является проверка кодировки перед ее преобразованием в Юникод.

0

Есть много символов, которые только (обычно), используемые в японском или используются только на китайском языке.

Япония и Китай как упрощенные много персонажей, но часто по-разному. Вы можете проверить японские китайские символы Shinjitai и Simplified. Их гораздо больше, чем первое. Если нет ни одного из них, то у вас, вероятно, есть традиционный китайский.

Конечно, если вы имеете дело с текстом в формате Юникод, вы можете встретить редкие персонажи или смешанные языки, которые могут сбросить эвристику, поэтому вам лучше идти с подсчетом типов символов, чтобы судить.

Хороший способ выяснить, какие символы являются общими на одном языке, а не в других, чтобы сравнить унаследованных кодировок друг против друга. Вы можете легко найти сопоставления каждого из Unicode в Интернете.

Я использовал, чтобы иметь некоторый код, который я написал, который сделал бинарный поиск по элементу кода, и это было очень быстро, даже в JavaScript - я, возможно, потерял в моих путешествиях, хотя (-: