кто знает — тоже не стесняйтесь). ;)
Какая сейчас ситуация с русскими словарями для FTS, где брать самые адекватные?
Есть ли какое-то [техническое] описание того, какими они должны быть и т.п., кроме документации PostgreSQL?
На гитхабе postgrespro есть две репы со словарями.
Спасибо, поищу! А по второму вопросу есть что-то?
Описание стеммера читайте snowball, описание ispell/hunspell тоже есть.
Интересует описание апи ?
Тоже интересует, да. Эти? https://github.com/postgrespro/hunspell_dicts/tree/master/hunspell_ru_ru Это, насколько я вижу, старый словарь, работы ещё Александра Лебедева, так? https://github.com/postgrespro/hunspell_dicts/tree/master/hunspell_ru_ru_aot А это — старая версия от AOT group (из LibreOffice), да? И вот это? https://github.com/postgrespro/rusmorph Но вопрос-то у меня был, скорее, по содержанию словарей. Вот к примеру, должны ли они быть в идеале максимально полны? Т.е. должны они включать все устаревшие, диалектные и специальные термины — которые, если попадаются в современном тексте, почти наверняка являются тупо опечатками общеупотребительных слов? Так же и с самими распространёнными очепятками, кстати. ;) Т.е. меня интересует, какой подход к наполнению словарей именно для FTS — правильный?
По словарям ты все правильно написал - Лебедев и аот для словоформ.
Наполнение словаря - это философский выбор. Мое мнение, что нужно сделать словарь на основе n-gram переменной длины и индексировать всё, а при поиске задавать степень соответствия.
Да это же не словарь, в таком случае... нет? Т.е. сгенерируйте все сочетания букв длины 1, 2, 3... N — и вот он "словарь". Или я не понял, что Вы имели в виду?
Словарь - это любая программа, которая из входа что-то генерит, то есть для каждого слова можно выдать упорядоченный список ngram
При поиске матчить эти списки.
Но специфические словари терминов конечно тоже нужны.
Нет, подождите. :) Это обычные n-gramms, такое можно "на коленке запилить" в PostgreSQL хоть сейчас... но к настоящим орфографическим словарям это не имеет никакого отношения... Т.е. Вы имеете в виду, что настоящие словари не нужны? > Но специфические словари терминов конечно тоже нужны. Хмм... но зачем, учитывая вышенаписанное?
Ярослав, просто все зависит от задачи. Я не видел моральной идеального морфологического словаря. Мы проектировали fts как возможность матчинга запроса и документов с возможностью ранжирования, конкретную реализацию со словарями и конфигурациями можно рассматривать как одну из возможных. На самом деле основное это два типа данных и оператор для них, дальше все можно делать руками, т.е., самому делать tsquery, tsvector, хоть во внешнем клиенте.
Это я всё умозрительно понимаю (реального опыта с FTS у меня мало), но мне кажется, что подход с n-граммами в реальности будет плох. Вот для примера (первое, что пришло в голову): при поиске по слову "меч" так можно выдавать "мечусь" (словоформу "далёкого" по n-граммам "метаться"), а вот "брошь" и "брошу" — почти одно и тоже. Так вот меня как раз интересует, какими должны быть словари, чтобы "русский" FTS был качественным на практике.
> Так вот меня как раз интересует, какими должны быть словари, чтобы "русский" FTS был качественным на практике. Тогда нужно стремиться к полноте словарей, но проблему омонимии они не решат - Путин, путин, Путина, путина ? Я не в курсе, кто-нибудь вообще занимается поддержкой машинной морфологии русского языка, имеется ввиду открытой. Я вижу только aot.ru
> Тогда нужно стремиться к полноте словарей, Почему нужно-то? Вот то, что я написал про совпадающие с "левыми" словами опечатки — как в идеале должен к ним относиться FTS? > но проблему омонимии они не решат - Путин, путин, Путина, путина ? Ну так это реальная проблема (в самом языке), а не проблема качества словарей. > то-нибудь вообще занимается поддержкой машинной морфологии русского языка, имеется ввиду открытой. А никто, насколько я знаю (по крайней мере, я больше вообще не нашёл ни одного активного проекта). :( Причём то, что делает AOT, мне крайне не нравится — я вижу, что туда просто внесено много опечаток; кроме того, словарь набит топонимами, фамилиями, диалектизмами, устаревшими словами и "редкими" терминами. Даже для его, по идее, основной цели (проверки правописания) это всё совсем не хорошо.
А, и ещё про этот "прекрасный" словарь — заметно, что он сделан по принципу "да ладно, и так сойдёт!" — к примеру, нередко вместо основы и правил словоизменения сделано вот так (реальный пример): аркаден аркадна аркадная аркадно аркадного аркадное аркадной аркадном аркадному аркадную аркадны аркадные аркадный аркадным аркадными аркадных Т.е. для проверки правописания это сойдёт, а вот для FTS получается, что каждая форма здесь — основа, т.е. "аркадному" и "аркадный" — это совершенно разные слова.
Мы взяли ispell-кие словари для морфологии от бедности. Буду рад, если кто возьмется за создание нормального морфологического словаря.
А брать-то больше почти и нечего... Есть, впрочем, существенно доработанный/переработанный (но тоже уже брошенный, к сожалению) Александром Клюквиным словарь Лебедева (и он всё ещё качественнее, чем "обновляемый" от AOT group, по моему нескромному мнению ;) ). Но на этом и всё. > Буду рад, если кто возьмется за создание нормального морфологического словаря. Да, неплохо бы... только это большая работа, пойди найди энтузиастов. ;) А вообще, опять-таки, AOT group тихо и незаметно "подложила свинью" всем русскоязычным пользователям проверки правописания и FTS (потому что почти все берут их словари).
И всё-таки мне любопытно, какими для "идеального" FTS должны быть ответы на вопросы про опечатки и "левые" (редкие и т.п., см. выше) слова. ;)
Обсуждают сегодня