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


Автор: Li 9.9.2002, 17:59
Привет всем!
Есть база данных. Одно из полей - название книг. В другое поле нужно проставить язык, на котором это книга, и определить это нужно по названию книги.
Идеальное решение  если определяется четыре варианта: русский, украинский (отличается от русского четырьмя буквами), английский и неизвестный язык. Если в такой постановке задача сложная можно упростить до трех языков: рус, укр, англ.
Нужно помнить, что есть книги с названиями, содержащими буквы разных алфавитов,
например: "Perl. Библиотека программиста".
Заранее спасибо за помощь в виде словесного алгоритма решения или программки на Си!

Автор: Vit 9.9.2002, 23:02
Со 100% точностью нельзя, но приблизительно можно считать что

1) Если нет букв кириллицы то книга английская
2) Если встречаются буквы специфичные для украинского языка ("Э оборотное", "и" с точкой и с двумя точками) то это украинксий
3) Во всех остальных случаев с какой-то долей вероятности - русский

Автор: suborg 10.9.2002, 04:52
В каждом языке можно определить возможные и довольно немыслимые буквосочетания. Таким образом можно разрешить некоторые неопределённости. Например в русском ЧА, ЩА, значит если написано ЧЯ, значит что-то здесь не так :)

Автор: Ampersand 10.9.2002, 14:42
Наиболее работоспособный, но и наиболее трудоемкий - сопоставление со словарем. Трудоемкость тут - в составлении словаря.

Автор: Li 10.9.2002, 18:35
Спасибо за идеи!

Если упростить первый алгоритм до следующего

ЕСЛИ встречается хотя бы одна русская гласная, то
   (ЕСЛИ встречается укр_и_с_двумя_точками ИЛИ укр_э_оборотное, то это украинский язык,
    ИНАЧЕ это русский язык),
ИНАЧЕ это английский язык.

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

ТЕОРЕТИЧЕСКИ, такой алгоритм дает 100% определение языка?
Если нет, можно на конкретном примере?

Автор: Alex101 12.9.2002, 06:17
Цитата(Guest @ 10.9.2002, 11:35)
ТЕОРЕТИЧЕСКИ, такой алгоритм дает 100% определение языка?
Если нет, можно на конкретном примере?

ТЕОРЕТИЧЕСКИ - нет.
Представь себе учебник русского языка для англичан...
Алгоритм ищет русские слова, и он их найдет

Автор: Vit 12.9.2002, 06:31
Любые алгоритмы дают только некое приближение, и могут определить язык только приблизительно - например если это монография по "сравнительной грамматике славянских языков и англосаксонских языков" то там могут быть слова на десятках языков, и даже проще - русский перевод английской книги, выпущенный в Киеве будет иметь русские, английские и украинские(название города и адрес редакции) слова...

Автор: Li 12.9.2002, 17:47
Да, согласна.
Спасибо!

Автор: Step 5.3.2003, 04:04
товарищи лучше всего использовать анализ частоты встречи конкретных символов. так не только язык можно определить. Так определяется кто в действительности написал ту или иную книгу.

Например русский язык. чаще всего встерчаються буквы е и н , в других языках по другому. При достаточной длине документа можно достигнуть практически сто процентного результата. Это не я придумал, а лингвисты. Нас к стати этому учили и на лобараторных мы могли идентифицировать учащихся по их докумнетам, а тут целый язык применяется, да есил еще и принять во внимае то что предложил VIT то вообще можно сделать 100 процентник. Кстати в книгах по лингвистике приводятся даже эти частоты, названия книги не помню, но мню что это огромные книги их около 10 томов, то про это столько написано что просто жуть

Автор: DENNN 5.3.2003, 05:21
Кажется автор написал, что в базе дданных только название книги а не содержание.
Частотный анализ в названии не даст 100% гарантии. Мне кажется что это даже около 50%, так как название не есть типичная, среднестатистическая фраза из языка, а скорее некое обобщение. Если же окажется, что часть односложных русских названий вбита английскими буквами (пример OH) то вообще кошмар для теоретического алгоритма.

Автор: Paradox 5.3.2003, 15:33
"10 УРОКОВ WEB-МАСТЕРУ"
у меня на полке такая книга стоит...
И на каком она языке по-моему предложенные алгоритмы не определят... Только словарный поиск, но никак не побуквенное сравнение

Автор: Step 5.3.2003, 21:17
Цитата
"10 УРОКОВ WEB-МАСТЕРУ"
у меня на полке такая книга стоит...
И на каком она языке по-моему предложенные алгоритмы не определят... Только словарный поиск, но никак не побуквенное сравнение

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


Автор: Paradox 5.3.2003, 22:53
Цитата
вот тут ты ошибаеся, если ты еще языки програмирования заложеш и многое другое и выставишь приоритеты назначения языков, например человеческие с максимальным приоритетом то все будет ок.

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

Автор: Step 5.3.2003, 22:58
а русский и украинский процентов 50 узнавать будет буква і не так часто встречается.

Автор: Molnienosetz 6.3.2003, 01:19
Извините, что везде суюсь, а в какой кодировке название? Если в Unicode, то вроде полегче, а если 8 бит, как отличить, например, русскую ы или украйнскую э наоборот или что там подвернётся. Извините.

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