Мифы о простоте программы склонения
Автор программы нередко сталкивается с мнением, что написать программу склонения по падежам произвольных словосочетаний
— задача, в общем-то, тривиальная и любой программист справится с ней за один присест, вооружившись одним лишь учебником русского языка.
Причем сделает это так, что вопрос будет закрыт раз и навсегда.
Возможно, ваш покорный слуга не такой уж хороший программист, раз он работает над такой простой программой уже 10 лет и до сих пор находит, что в нее добавить?
Давайте посмотрим, с чем вам придется столкнуться, возьмись вы решить эту задачу своими силами.
Для дальнейшего повествования выбрана форма «развенчания мифов». Итак, миф первый...
Миф: «Такая программа пишется на «раз», нужно только...
«...прочитать учебник русского языка»
Конечно, ведь в русском языке всего 3 склонения – что может быть проще, правда?
(Другое дело эстонский, где их 16!)
Если слово заканчивается на -а, берем окончания первого склонения, если на согласную, то второго,
если на мягкий знак... ну, тут, конечно, возможны варианты.
Мы-то с вами знаем, что парень мужского рода, а зелень – женского.
Соответственно, и склоняются по-разному. А как склоняется, например, Ивдель? В Ивделе или в Ивдели?
Проверьте себя по Гуглу.
Не забываем, что есть еще и несклоняемые слова. Например, копье склоняется, а колье — нет.
Разница в одной букве.
Увы, учебник русского языка не даст вам ответ на эти и многие другие вопросы, например, почему по-разному склоняются такие пары слов как:
- росток – ростка, восток – востока
- ветер – ветра, катер – катера
- Павел – Павла, Фавел – Фавела
- Дания – о Дании, Зульфия́ – о Зульфие́
- Петрович – с Петровичем, Кузьмич – с Кузьмичом
- бельчонок – бельчата, бочонок – бочонки
Вывод ясен: для адекватного склонения произвольных слов нужен словарь. Да не простой (орфографический),
а грамматический, то есть содержащий для каждого слова информацию о номере склонения, беглости гласной,
одушевленности, ударении, чередованиях суффиксов и других особенностях.
К счастью, такие словари существуют, например, Грамматический словарь А.А. Зализняка,
легший в основу практически всех современных систем обработки текстов.
А большой ли нужен словарь? В словаре Зализняка около 100000 слов.
Думаете, это много? К сожалению, вы не найдете в нем таких слов как микроволновка, ноутбук, смартфон и прочих айфонов и айпадов.
Это к вопросу о склонении наименований товаров.
А если мы хотим склонять географические названия? Их в словаре тоже нет.
Только в России населенных пунктов сотни тысяч (Википедия), а в мире – миллионы
(geonames.org - более 8 миллионов топонимов).
Поэтому весомая часть усилий по созданию и поддержанию программы Морфер заключается в составлении грамматического словаря имен собственных –
имен и фамилий, географических названий.
«...надо заюзать морфологический движок» (далее следуют отсылки к phpMorphy, pyMorphy и словарям ispell)
Да, использовать морфологический анализатор — это, безусловно, шаг в правильном направлении,
так как основной его частью (по трудоемкости создания) является тот самый грамматический словарь, о котором мы только что говорили.
Да, морфологический анализатор поможет вам просклонять отдельные слова, но увы, не словосочетания.
Возьмем простейшее словосочетание «Отделение банка».
Откуда программа узнает, что слово «банка» склонять не нужно?
Или попробуем просклонять простое русское имя «Зорина Галина Владимировна».
На слово ЗОРИНА
phpMorphy выдает
три варианта разбора. И нужный нам вариант со значением «женская фамилия» — не самый первый. А ваша программа должна решить, какой из трех вариантов выбрать.
Такие совпадения встречаются на каждом шагу. Хороший словарь на фамилию Ольгин выдаст вам таже кубинский город Ольги́н (Holguin)
и притяжательное прилагательное ольгин. Все три склоняются по-разному. Есть также дальневосточный город Ольга,
а также города Артём, Владимир, Ростов, Кишинёв, Горький и другие, совпадающие с именами и фамилиями, но склоняющиеся не совсем так же (попал во Владимир — попал во Владимира).
Есть еще довольно большой класс фамилий, совпадающих с обычными нарицательными словами, такие как: Фи́лин, Ка́мин, Ро́дина, Ка́ртина, При́чина, Ва́гина...
Если эти примеры кажутся вам надуманными и редкими, то взгляните на то, как программа видит текст на русском языке, на примере
морфологического анализатора opencorpora.org. Например, в предложении:
После этого несколько сотен человек пришли к полицейскому участку на главной улице в Тоттенхэме с требованиями «восстановления справедливости».
Слово после вызвало у программы вопрос: предлог это или существительное посол в предложном падеже?
Слово пришли тоже вызвало у программы недоумение, так как оно может быть формой глаголов прийти и прислать.
Полицейский может быть существительным (сотрудник полиции) и прилагательным (как в сочетании полицейский участок).
В среднем морфологический анализ находит по 2,5 варианта разбора у каждого слова.
Явление омонимии (совпадения по форме разных слов) — это, конечно, одна из больших проблем в компьютерной обработке текстов.
Но еще большие проблемы лежат в области синтаксиса — науки о закономерностях сочетания слов, в области менее изученной по сравнению с морфологией.
Во многих случаях склонение или несклонение слова зависит от структуры словосочетания. Просклоняйте, например, такие пары:
- мастер судовой
- мастер судовой дизельной установки
- стенд огневой
- стенд огневой стрельбы
Это одни из наиболее простых примеров. А встречаются и посложнее, например:
- Краснознаменный ордена Ленина гвардейский полк им. Кутузова
Уже представили, как вы будете объяснять программе, какие здесь слова склоняются, а какие нет? Учтите, что
ордена и Ленина — вполне себе слова в именительном падаже с точки зрения морфологического анализатора.