| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C++ Builder > Определения языка текста |
| Автор: mobi_vic 24.4.2010, 09:54 |
| Здравствуйте! Нужно написать программу которая будет определять язык текста который бет подгружаться из файла! Уже есть один алгоритм но он мне кажеться не очень подходящим, суть его заключаеться в следующем: Сoздаеться например 2-строки (на 2 языка) в каждую мы заносим те символы согласно которым мы можем на 100% определить какой это язык, например для английского мы туда запишем "qwrtyuisdfghjklzxvbnm". Далее просто будем сверять, например с помощью функии Pos() будем искать наш символ в определленой строке. Но есть и минус скажем если взять два языка (русский и украинский) возникает проблема, у них очень много одинаковых букв, а те с помошью которых можно различить, очень мало, поэтому программа получаеться в большинстве счлучев не может определить язык. Вопрос состоит в следующем: можно ли как то определить толи этот текст пренадлжит русскому толи украинскому толи английскому, что б не привязываться к проверке символов, скажем как то получить код символа и определить к каому языку он пренадлежит. Расмотрю и другие варианты решения даной задачи. Заранее благодарен |
| Автор: borisbn 24.4.2010, 12:44 |
| В какой кодировке будет файл ? ANSI, Utf-8, Unicode-16 ? Если не знаешь, то придётся ещё определять кодировку ... |
| Автор: mobi_vic 24.4.2010, 12:50 | ||
Мне сейчас без разницы с какой кодировкой скажем взять ту с которой попроще будет работать. Я обратил внимание на то как в ворде, есть такая вещь как определение языка, вот интерестно какой ее принцип работы. Ибо там можно со старта выставить язык, или он сам будет определять. Есть такой вопрос к символу как то подвязываеться его происхождение, или только код? Скажем в русском и украинском буква "А" имеет одинаковые данные? Или они разные? |
| Автор: borisbn 24.4.2010, 14:33 |
проще ( в данном контексте ) работать с 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 |
char по умолчанию является знаковым, поэтому все русские буквы будут отрицательными. Или работай так, или используй unsigned char: unsigned char a='Ы'; Но тогда нужно учитывать, что a != 'Ы', но a == (unsigned char)'Ы'. Можно в проекте указать, что char по умолчанию - беззнаковый, но ИМХО лучше этого не делать. |
| Автор: xvr 26.4.2010, 13:23 | ||
См. http://www.statsoft.ru/home/portal/exchange/textanalysis.htm |