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

Тема в разделе "PHP", создана пользователем LEXAlForpostl, 13 ноя 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. LEXAlForpostl

    LEXAlForpostl

    Регистр.:
    21 май 2008
    Сообщения:
    708
    Симпатии:
    225
    Здравствуйте.
    Подскажите пожалуйста, с чего начать написание синонимайзера на РНР?
    Может быть уже кто-то задавался данной целью?
     
  2. jamce123

    jamce123 Постоялец

    Регистр.:
    7 апр 2009
    Сообщения:
    70
    Симпатии:
    5
    Чтобы начать писать синонимайзер на php, нужно скачать несколько синонимайзеров на php. Изучить исходный код, посмотреть, что не устраивает. И на основе этого писать свой синонимайзер. То есть сделать выводы по поводу того, что можно улучшить, решить для себя в каком направлении двигаться.
    А изобретать велосипед с нуля, это не перспективно)).
     
  3. Raccoon

    Raccoon

    Регистр.:
    31 июл 2007
    Сообщения:
    172
    Симпатии:
    9
    Какие есть синонимайзеры на данный момент?
     
  4. t0wer

    t0wer BlackHerald

    Регистр.:
    24 июн 2008
    Сообщения:
    731
    Симпатии:
    421
    гугл еще никто не отменял! смотреть
     
  5. LEXAlForpostl

    LEXAlForpostl

    Регистр.:
    21 май 2008
    Сообщения:
    708
    Симпатии:
    225
    Интересует написание синонимйзер с поддержкой морфологии.
    Информации по такому синонимайзеру не нашёл.
     
  6. System777

    System777 Создатель

    Регистр.:
    20 апр 2008
    Сообщения:
    30
    Симпатии:
    13
    План PHP-синонимизатора с учётом морфологии

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

    http://phpmorphy.sourceforge.net/

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

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

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

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

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

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

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

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

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

    Вот такой примерно план.
     
  7. LEXAlForpostl

    LEXAlForpostl

    Регистр.:
    21 май 2008
    Сообщения:
    708
    Симпатии:
    225
    Т.е. взять словарь синонимов и с каждой единицей поработать, изменить число, род, скланение и т.д.
    Правильно понял?
    P.S.
    Может натолкнёте на мысль, где и как можно собирать базы синонимов?
     
  8. gradusnick

    gradusnick Прохожие

    Да, совершенно верно.

    Способ №1. Идти в google или/и Яндекс и искать базы синонимов в паблике.

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

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

    таким образом


    В любом случае, необходимо будет чистить базу от шлака - в любой базе, хоть платная, хоть бесплатная много шлака
     
  9. System777

    System777 Создатель

    Регистр.:
    20 апр 2008
    Сообщения:
    30
    Симпатии:
    13
    Да, и эти функции заложены изначально в класс phpMorphy - ему достаточно передать слово, а он выдаст в массив все словоформы (для разного числа, падежа и т.п.) + начальную форму (для каждой части речи такая есть).

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

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

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

    Конечно, такой способ в разы уменьшает базу, но главное - не портит грамматическое соответствие ;)
     
  10. LEXAlForpostl

    LEXAlForpostl

    Регистр.:
    21 май 2008
    Сообщения:
    708
    Симпатии:
    225
    Разъясните пожалуйста.
    Не совсем понял...))
     
Статус темы:
Закрыта.