PHP синонимайзер

Статус
В этой теме нельзя размещать новые ответы.

LEXAlForpostl

Мой дом здесь!
Регистрация
21 Май 2008
Сообщения
766
Реакции
228
Здравствуйте.
Подскажите пожалуйста, с чего начать написание синонимайзера на РНР?
Может быть уже кто-то задавался данной целью?
 
Чтобы начать писать синонимайзер на php, нужно скачать несколько синонимайзеров на php. Изучить исходный код, посмотреть, что не устраивает. И на основе этого писать свой синонимайзер. То есть сделать выводы по поводу того, что можно улучшить, решить для себя в каком направлении двигаться.
А изобретать велосипед с нуля, это не перспективно)).
 
Какие есть синонимайзеры на данный момент?
 
Интересует написание синонимйзер с поддержкой морфологии.
Информации по такому синонимайзеру не нашёл.
 
План PHP-синонимизатора с учётом морфологии

Интересует написание синонимйзер с поддержкой морфологии.
Информации по такому синонимайзеру не нашёл.

Когда-то писал такой синонимайзер с помощью класса phpMorphy:



Идея была слеюдущая примерно:

- сначала создать базу синонимов в начальной форме (в моём случае - обрабатывал существующие);

- вычистить все, где было несоответствие форм после замены (например, чтобы не получилось существительное женского рода после синонимизации мужского и т.п.) - это всё сравнивал этим же классом phpMorphy;

- все слова нужного текста приводятся в начальные формы;

- из базы (по поиску нач. форм) берутся слова синонимы (тоже в нач. форме) и приводятся в ту форму, в которой было исходное слово. Класс phpmorphy выдаёт достаточно сложные массивы - я их преобразовывал в нужный мне вид.

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

Как вариант - чтобы заменялось только одно слово, можно предварительно пронумеровать слова (расставить какие-то символьно-числовые метки, которые потом устранять либо str_replace, либо preg_replace).

В целом - этот способ написания синонимизатора достаточно хороший, тексты в большинстве случаев получаются грамматически правильно (правда бывают сложности когда одно слово может иметь сразу две возможных формы/части речи и т.п. - нужно экспериментировать).

Однако, естественно, всё это требует ещё и нехилых ресурсозатрат. Поэтому, может быть проще с помощью этого же морфологизатора создать один раз мега-большую базу всех возможных слоформ и синонимов под эти формы - а потом уже делать просто поиск по этой базе ;)

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

Может натолкнёте на мысль, где и как можно собирать базы синонимов?
Способ №1. Идти в google или/и Яндекс и искать базы синонимов в паблике.

Способ №2. Купить уже готовые базы синонимов.

Способ №3. Воспользоваться поиском баз синонимов по форуму
способ а: идёшь Для просмотра ссылки Войди или Зарегистрируйся и забиваешь кей типа "база синонимов" и ищешь в названии тем.
способ в:


В любом случае, необходимо будет чистить базу от шлака - в любой базе, хоть платная, хоть бесплатная много шлака
 
Т.е. взять словарь синонимов и с каждой единицей поработать, изменить число, род, скланение и т.д.
Правильно понял?

Да, и эти функции заложены изначально в класс phpMorphy - ему достаточно передать слово, а он выдаст в массив все словоформы (для разного числа, падежа и т.п.) + начальную форму (для каждой части речи такая есть).

Вот здесь и можно сохранить результаты в базу, или можно вызывать phpMorphy каждый раз при синонимизации нового текста.

P.S.
Может натолкнёте на мысль, где и как можно собирать базы синонимов?

Присоединяясь к ответу gradusnick, хочу добавить - что я пошёл путём скачивания из паблика готовых баз, которые более-менее приличного качества (отсутствие нецензурных слов, соответствие смысла и др.).

И над такими базами провёл работу с помощью phpMorphy - оставил только те синонимы, которые имеют одинаковые показатели в начальной форме (например, род) - иначе без такого отсева после преобразования будут сведены на нет усилия по использованию морфологизатора. Плюс после всего можно провести дополнительно ручную чистку.

Конечно, такой способ в разы уменьшает базу, но главное - не портит грамматическое соответствие ;)
 
оставил только те синонимы, которые имеют одинаковые показатели в начальной форме
Разъясните пожалуйста.
Не совсем понял...))
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху