План PHP-синонимизатора с учётом морфологии
Интересует написание синонимйзер с поддержкой морфологии.
Информации по такому синонимайзеру не нашёл.
Когда-то писал такой синонимайзер с помощью класса phpMorphy:
Идея была слеюдущая примерно:
- сначала создать базу синонимов в начальной форме (в моём случае - обрабатывал существующие);
- вычистить все, где было несоответствие форм после замены (например, чтобы не получилось существительное женского рода после синонимизации мужского и т.п.) - это всё сравнивал этим же классом
phpMorphy;
- все слова нужного текста приводятся в начальные формы;
- из базы (по поиску нач. форм) берутся слова синонимы (тоже в нач. форме) и приводятся в ту форму, в которой было исходное слово. Класс phpmorphy выдаёт достаточно сложные массивы - я их преобразовывал в нужный мне вид.
- идёт подмена найденных слов. Простой str_replace тут не подойдёт, т.к. он может заменять многие слова неверно. Для этих целей обычно использую регулярные выражения.
Как вариант - чтобы заменялось только одно слово, можно предварительно пронумеровать слова (расставить какие-то символьно-числовые метки, которые потом устранять либо str_replace, либо preg_replace).
В целом - этот способ написания синонимизатора достаточно хороший, тексты в большинстве случаев получаются грамматически правильно (правда бывают сложности когда одно слово может иметь сразу две возможных формы/части речи и т.п. - нужно экспериментировать).
Однако, естественно, всё это требует ещё и нехилых ресурсозатрат. Поэтому, может быть проще с помощью этого же морфологизатора создать один раз
мега-большую базу всех возможных слоформ и синонимов под эти формы - а потом уже делать просто поиск по этой базе
Вот такой примерно план.