поиск на РЯ с учётом словоформ.

Научно-технические вопросы применения русского языка в программировании. Проекты с сайта программирование-по-русски.рф, кроме ЯОС . Информация об организациях и людях, использующих или изучающих русский язык в программировании. Сравнение операционных систем.
Ответить
БудДен
Сообщения: 1866
Зарегистрирован: 07.10.18 14:01

поиск на РЯ с учётом словоформ.

Сообщение БудДен » 11.12.20 21:18

Вот пример из того, что я сегодня перевёл:

https://gitlab.com/budden/ja-o-s/-/blob ... r.Mod#L221

Код: Выделить всё

строковыйЛитералСПунктуацией*: StringType; 
строковогоЛитералаСПунктуациейДлина*: SIZE;
Как искать такое? Какие есть подходы? Какая есть простенькая библиотека, которую было бы несложно портировать? Тут нужен даже не поиск словоформ, а нечто близкое по смыслу к нему, чтобы, допустим, искали "строковыйЛитерал", а библиотека сама определяла, возможно, с избытком, сколько букв в конце каждого сегмента нужно заменить на условную звёздочку(N), где N тоже вычислила бы и где это было бы похоже на то, что подходит под все словоформы данного слова и возможно прихватывает сколько-то лишнего, но не слишком много.

Аватара пользователя
Лис [Вежливый]
Сообщения: 438
Зарегистрирован: 08.10.18 13:32

Re: поиск на РЯ с учётом словоформ.

Сообщение Лис [Вежливый] » 12.12.20 01:08

Какие есть подходы?
Подход есть один - несколькогигабайтного размера словарь и поиск в нём. Но по современным меркам это фигня вопрос и можно держать его целиком в памяти.
Напомню, что Греф для решения аналогичного вопроса не парился и запустил нейросеть на петафлопном компе.

БудДен
Сообщения: 1866
Зарегистрирован: 07.10.18 14:01

Re: поиск на РЯ с учётом словоформ.

Сообщение БудДен » 12.12.20 16:05

Не верю в единственность этого подхода.

Павиа
Сообщения: 134
Зарегистрирован: 23.05.19 21:28

Re: поиск на РЯ с учётом словоформ.

Сообщение Павиа » 06.01.21 15:34

Это называется stemming (процесс стемминг, а обработчик стеммер).
Классический алгоритм snowball
http://snowball.tartarus.org/algorithms ... emmer.html

А более продвинутые и современные это лемотизатор. Таких много просто в гугле вбейте. Обычно словарь и обученное дерево для угадывания результатов.
Словарь делают на основе Опен Корпус словарь словоформ либо словаря Зализника.

БудДен
Сообщения: 1866
Зарегистрирован: 07.10.18 14:01

Re: поиск на РЯ с учётом словоформ.

Сообщение БудДен » 09.05.21 11:56

Теперь я наконец дочитал и понял, что написал Павиа. Нужно делать на базе словаря, а стемминг, видимо, для случаев, которые ещё не попали в словарь. Правда, с учётом того, что стемминг обучается, не совсем ясно, насколько он вообще будет работать. Вот один из примеров: https://habr.com/ru/post/230393/

БудДен
Сообщения: 1866
Зарегистрирован: 07.10.18 14:01

Re: поиск на РЯ с учётом словоформ.

Сообщение БудДен » 09.05.21 12:09

Набор ссылок про обработку ЕЯ: http://www.solarix.ru/

БудДен
Сообщения: 1866
Зарегистрирован: 07.10.18 14:01

Re: поиск на РЯ с учётом словоформ.

Сообщение БудДен » 16.05.21 00:37

Пример: хотим искать

ОбъявлениеТипаˉнаименования и ОбъявленийТипов_наименований

и пишем так:

объявлениТипНаименовани

В этом случае алгоритм такой:

1. Разбиваем по вхождениям больших букв (и подчёркиваний), получаем:

объявлени тип наименован

2. Звёздочка означает от нуля до трёх букв, составляющих одно из известных в природе окончаний, за которым могут следовать подчёркивания, знаки препинания и кавычки, допустимые в идентификаторе

3. К каждому разбитому слову алгоритм добавляет звёздочку

объявлени* тип* наименован

4. Поиск делается нечувствительно к регистру только первой буквы после звёздочки и в начале слова.

5. Если нужно точно такое окончание, то это показываем восклицательным (к примеру) знаком или другим метасимволом:

объявлениТип!Наименован

При этом после восклицательного знака могут опять же следовать знаки препинания.

Прошу осуждать.

БудДен
Сообщения: 1866
Зарегистрирован: 07.10.18 14:01

Re: поиск на РЯ с учётом словоформ.

Сообщение БудДен » 16.05.21 00:38

Забыл упомянуть, что поиск происходит после разбиения текста на лексемы. Если хотим найти более одной лексемы, например, a+b, то просто разделяем их для поиска пробелом:

a + b, и они ищутся даже при наличии между ними комментария или переноса строки.

БудДен
Сообщения: 1866
Зарегистрирован: 07.10.18 14:01

Re: поиск на РЯ с учётом словоформ.

Сообщение БудДен » 16.05.21 00:39

но с метасимволами надо соблюдать, конечно, осторожность, чтобы не получились сложные правила "закавычивания".

Ответить