Name Last modified Size Description
Parent Directory 11-Jun-2007 04:16 -
bldidx.rwww 26-Jan-2005 22:20 2k
fwais.tgz 26-Jan-2005 22:20 744k
indexsite.sh 26-Jan-2005 22:20 1k
libwww.tgz 26-Jan-2005 22:20 90k
rustem.html 19-Feb-2008 02:11 23k
rwais.tgz 26-Jan-2005 22:20 209k
steal.tgz 26-Jan-2005 22:20 5k
var-wais.tar.gz 26-Jan-2005 22:20 6k
wais-www-cfg.tgz 26-Jan-2005 22:20 9k
wais-www.tgz 26-Jan-2005 22:20 18k
ww-retrieve 26-Jan-2005 22:20 1k
ww-retrieve-h 26-Jan-2005 22:20 1k
ww-search 26-Jan-2005 22:20 1k
В freeWAIS для английского языка есть встроенный модуль отрезания от слов формообразующих частей, и качество поиска серьезно зависит от того, используется ли при обработке текста этот модуль. Для русского языка, разумеется, английский вариант не подходил (в том смысле, что, копируя используемые при обработке английских слов приемы, для русского языка не удалось построить ничего пристойного), готового решения также не удалось найти (все обнаруженное либо не решало проблемы, либо было слишком дорого), поэтому я решил сам написать отбрасыватель флексий.
Не будучи при этом ни в самой малой мере специалистом в лингвистике, я
нуждался в серьезной помощи со стороны людей, профессионально
занимающихся этой и смежными проблемами. К сожалению, большая часть бесед
с лингвистами, которых я смог найти, была не слишком продуктивной, однако
помощь Г.С.Цейтина и В.М.Андрющенко была существенной, и их консультации
позволили мне найти отправную точку моей работы и сделать первые шаги;
по предложению Андрющенко я обратился к сотруднице Машинного Фонда
Русского Языка Жанне Григорьевне Аношкиной, разработки которой стали
основой для алгоритмов, использованных в моей программе. (Любопытной и
поучительной подробностью моих исканий явилось то, что дважды в их ходе мне
предлагали отыскать некую Машкович из МФРЯ, у которой "лет шесть назад"
были статьи по интересующей меня теме, да я все никак не мог собраться
навести справки - так вот, Жанна Григорьевна Аношкина это та Машкович и
есть).
То, о чем мне рассказывала Аношкина, представляло собой программу
лемматизации и морфологического анализа слов русского языка, среди прочих
слов способную обрабатывать незнакомые ей (то есть отсутствующие в словаре)
слова. Ключевой (по крайней мере, для меня) чертой программы было наличие в
ней двух одинаково устроенных словарей - отсортированных словарей условных
окончаний и условных основ (условных потому, что часть основы, изменяющаяся
от формы к форме, была перенесена в окончание), записанных справа налево.
Сначала по словарю окончаний отыскивались все отделяемые от слова части,
потом для каждой из оставшихся после отделения частей в словаре основ
отыскивались полные совпадения. Для полных совпадений проверялись на
пересечения множества парадигм, прицепленные к условному окончанию и к
условной основе (был также перенумерованный словарь парадигм со ссылками на
него из двух первых словарей по номеру), и кандидаты с пересекающимися
множествами считались правильными ответами.
В случае же, если полного совпадения основы найдено не было, поиск
повторялся уже с учетом частичных совпадений и с выбором в качестве лучшего
варианта с наибольшей суммарной длиной окончания и совпавшей части основы;
при этом морфологический анализ производился так же, как для
соответствующего слова из словаря. Такой подход давал вполне достоверные
результаты и был положен, с рядом изменений, в основу моей программы.
Среди других особенностей программы Жанны Григорьевны, важных для меня, было
наличие
При том, что описанная программа уже очень близко подводила к решению стоящей передо мной задачи, использовать ее в неизмененном виде было невозможно или, по крайней мере, неразумно. Для такой точки зрения было неколько причин, среди которых основными были следующие:
По некотором размышлении я принял решение о ряде принципиальных изменений в
алгоритмах. Во-первых, я отказался от поиска полностью совпадающей основы,
оставив только поиск частичного совпадения, а
вместе с ним и от хранения полного словаря - при создании словаря от основы
остается не более заранее заданного числа букв, причем изменением этого
числа стало возможно устанавливать соотношение между производительностью и
качеством работы алгоритма.
Во-вторых, я несколько сузил число парадигм, воспользовавшись тем, что в
моей задаче их единственная роль состоит в установлении связи между основами
и окончаниями. Для этого я отсортировал флексии в парадигмах и убрал
дубликаты, а для нумерования парадигм стал использовать хэш-таблицу. (В
программе Аношкиной сравнивались только последовательные флексии).
В-третьих, при переборе разбиений я стал двигаться от максимального по длине
окончания к минимальному, а не наоборот, что позволило мне прерывать поиск в
случае, если найдено совпадение предельного числа букв основы.
В-четвертых, я убрал из словаря служебных слов числительные и вводные
слова, а оставшуюся часть словаря стал использовать как фильтр в том
смысле, что узнанные по этому словарю слова отбрасываются как несмысловые.
В-пятых, наконец, я отказался от использования словаря имен. Тот выигрыш,
которые давали выделяемые из него правила, был довольно мал, а накладные
расходы от его использования оказывались сравнительно велики.
Основные затраты процессорного времени и оперативной памяти приходятся на поиск в двух одинаково устроенных словарях - окончаний и основ, и от того, как они устроены, существенно зависит производительность программы и ее связь с размером словарей и плотностью входного потока. На настоящий момент, и, думаю, на довольно протяженное будущее, словари устроены следующим образом:
При создании словаря к уже описанным структурам (фильтру и словарям) добавляется таблица парадигм, которая, будучи сохранена, позволяла бы расширять словарь. Однако, все, что делалось в этом проекте, было направлено на то, чтобы программу было естественно и эффективно использовать, не задумываясь о расширении словарей, так как выделенные из базового словаря правила не изменяются сколько-нибудь сильно от дальнейших уточнений.
В настоящее время программа написана на Схеме и откомпилирована транслятором
Scheme->C, написанной Joel Bartlett, DEC WRL. Объем таблиц в оперативной
памяти составляет 2 Mb, но при этом при необходимости съэкономить память
тексты могут быть переписаны так, чтобы хватало 800 Kb оперативной памяти
для оптимального словаря. При достаточной памяти на 486DX33 программа
обрабатывает слова со скоростью около двухсот слов в секунду.
Оптимальным словарем, при этом, оказался такой,
котрый создавался с сохранением 6 букв основы - при меньшем числе больший
разброс возникает от преобладающего влияния ошибки приведения к основе, а
при большем различаются те тонкости, которыми вполне допустимо пренебречь -
при указанной величине же разброс минимальный, то есть из тестовой
последовательности (все просклоненные слова из словаря Зализняка) получается
список условных основ наименьшей длины. При этом при оставляемой длине слова
от 9 и больше результаты практически перестают различаться.
После некоторых эскпериментов минимальная приемлемая длина основы положена
равной 3.
Давид Толпин, Институт Коммерческой Инженерии.