Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Определения языка текста


Автор: mobi_vic 24.4.2010, 09:54
Здравствуйте!

Нужно написать программу которая будет определять язык текста который бет подгружаться из файла!
Уже есть один алгоритм но он мне кажеться не очень подходящим, суть его заключаеться в следующем:
Сoздаеться например 2-строки (на 2 языка) в каждую мы заносим  те символы согласно которым мы можем на 100% определить какой это язык, например для английского мы туда запишем "qwrtyuisdfghjklzxvbnm".
Далее просто будем сверять, например с помощью функии Pos() будем искать наш символ в определленой строке.

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

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

Автор: Данкинг 24.4.2010, 12:22
Цитата(mobi_vic @  24.4.2010,  10:54 Найти цитируемый пост)
Но есть и минус скажем если взять два языка (русский и украинский) возникает проблема, у них очень много одинаковых букв,

Ну, бери слова, наиболее распространённые в украинском, а как ещё-то в данном случае.

Автор: borisbn 24.4.2010, 12:44
В какой кодировке будет файл ? ANSI, Utf-8, Unicode-16 ? Если не знаешь, то придётся ещё определять кодировку ...

Автор: mobi_vic 24.4.2010, 12:50
Цитата(borisbn @ 24.4.2010,  12:44)
В какой кодировке будет файл ? ANSI, Utf-8, Unicode-16 ? Если не знаешь, то придётся ещё определять кодировку ...

Мне сейчас без разницы с какой кодировкой скажем взять ту с которой попроще будет работать.

Я обратил внимание на то как в ворде, есть такая вещь как определение языка, вот интерестно какой ее принцип работы.
Ибо там можно со старта выставить язык, или он сам будет определять. Есть такой вопрос к символу как то подвязываеться его происхождение, или только код? Скажем в русском и украинском буква "А" имеет одинаковые данные? Или они разные?

Автор: borisbn 24.4.2010, 14:33
Цитата(mobi_vic @  24.4.2010,  12:50 Найти цитируемый пост)
взять ту с которой попроще будет работать

проще ( в данном контексте ) работать с unicode.
см. http://www.unicode.org/alloc/Pipeline.html
а также
http://novikovmaxim.narod.ru/index.htm?http://novikovmaxim.narod.ru/statyi/web_help/webuni1.htm
а ещё лучше
http://www.google.ru/search?client=opera&rls=ru&q=%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D0%B0+unicode+%D1%81%D0%B8%D0%BC%D0%B2%D0%BE%D0%BB%D0%BE%D0%B2&sourceid=opera&ie=utf-8&oe=utf-8

Автор: mobi_vic 24.4.2010, 15:14
Если я все понял правильно, мне нужно получить код символа и посмотреть в какой дипазон он попадает?

Вопрос, как его получить, у меня только получалось когда с клавиатурі вводили и все :(

Автор: borisbn 24.4.2010, 16:12
В С/С++ "символ" и "значение символа" - одно и то же. Если у тебя в переменной есть "символ", значит значение этой переменной равно "значению символа".
А как читать симолы из файла - см. http://msdn.microsoft.com

Автор: mobi_vic 24.4.2010, 16:48
С кодом разобрался получилось следующее:

char a='Ы';
int b=a;
Form1->Edit2->Text=b;

Только вот результат получается отрицательным :( его надо еще как то переводить?

Автор: KOHCEPBATOP 26.4.2010, 09:59
Цитата(mobi_vic @  24.4.2010,  16:48 Найти цитируемый пост)
Только вот результат получается отрицательным

char по умолчанию является знаковым, поэтому все русские буквы будут отрицательными. Или работай так, или используй unsigned char:
unsigned char a='Ы';
Но тогда нужно учитывать, что a != 'Ы', но a == (unsigned char)'Ы'.
Можно в проекте указать, что char по умолчанию - беззнаковый, но ИМХО лучше этого не делать.

Автор: xvr 26.4.2010, 13:23
Цитата(mobi_vic @  24.4.2010,  09:54 Найти цитируемый пост)
можно ли как то определить толи этот текст пренадлжит русскому толи украинскому толи английскому
Обычно это делают частотным анализом (отдельных букв и биграмм). На основе анализа отдельных символов определить язык практически невозможно. Например в русском тексте могут быть вкрапления английских слов, про различие украинского и русского я вообще молчу  smile 
См. http://www.statsoft.ru/home/portal/exchange/textanalysis.htm


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)