c # как проверить, что строка, которую пользователь вводит в текстовое поле, китайская? - PullRequest
1 голос
/ 13 апреля 2011

Как проверить, что строка, которую пользователь вводит в текстовое поле, китайская? Кто-нибудь может мне помочь?

Ответы [ 4 ]

2 голосов
/ 13 апреля 2011

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

// Warning, this code only works for common Han ideographs inside the BMP. (Surrogate code points will need special care, and additional ranges within the BMP contain rare, historic, and uncommon characters.)
const double hannessThreshold = 0.25d;
const char lowestHanCodepoint = '\u4E00';
const char highestHanCodepoint = '\u9FFF';
string text = myTextBox.Text;
int hanCharacterCount = 0;
foreach (char c in text)
    if (lowestHanCodepoint <= c && c <= highestHanCodepoint)
        hanCharacterCount++;
double hannessScore = (double)hanCharacterCount / text.Length;
if (hannessScore >= hannessThreshold)
    MessageBox.Show("You are typing in Chinese, Japanese, or Korean!");

Однако этого не достаточно, чтобы точно определить, является ли он китайским.Юникод объединяет иероглифы, используемые для китайского, японского и корейского языков, поэтому для их различения потребуется какой-либо лингвистический анализ.

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

2 голосов
/ 13 апреля 2011

Если ввод содержит символы Юникода в диапазоне 4E00-9FFF, то он содержит китайские символы, поэтому язык, вероятно, китайский, японский или корейский.

Чтобы угадать, является ли он китайским, вы можете проверить, присутствуют ли на входе некоторые из наиболее часто встречающихся символов на китайском языке (см., Например, http://www.zein.se/patrick/3000char.html). Или, в качестве альтернативы, проверьте, присутствуют ли символы ввода хирагана (3040–309F), катакана (30A0–30FF) или хангеул (1100–11FF); они встречаются только на японском и корейском языках; если они встречаются на входе, у вас нет текста на китайском языке, хотя текст содержит китайские символы.

2 голосов
/ 13 апреля 2011

Вероятно, вам нужно использовать простой статистический метод.Подсчитайте количество символов, код которых находится в пределах диапазона китайских символов UTF-8, и количество символов, которых нет.Примите решение о том, больше ли одна группа, чем другая.

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

0 голосов
/ 13 апреля 2011

Полагаю, я проверю используемый набор символов, если они вводятся китайским иероглифом, думаю, это будет китайский. Однако, я полагаю, это довольно туманная вещь, чтобы проверить. Что если китайские слова пишутся с западным алфавитом? Не уверен, как еще ты проверил бы что-то подобное.

...