Ответы пользователя по тегу Алгоритмы
  • Как грамотно выводить и определять похожие новости на сайте?

    Mendel
    @Mendel
    PHP-developer
    Теги это хорошо. Но не всегда применимо. Не всегда они есть, и в достаточном количества.
    Название может сильно отличаться, хотя тоже немаловажно.
    Если проект на php то библиотеку скорее лучше брать phpmorphy.
    ну или стеммер какой, но тогда слова в качестве тегов пользователю не выведешь.

    Первое что приходит в голову это примерно такой алгоритм:
    1 — приводим тексты к базовой форме
    2 — отбрасываем все стоп-слова по словарю. Можно еще по морфемам от phpmorphy отбирать, но это ИМХО излишнее. Проще словарь ручками под себя оттюнинговать.
    3 — прогоняем через синонимизацию (опционально, на самом деле от тематики зависит и качества словаря, иногда уж лучше и не гонять).
    4 — вычисляем релевантность наших слов тексту. Я бы взял самый простой алгоритм с тошнотой. Только добавил бы весу словам из заголовка статьи и если есть большое желание добавил бы веса с учетом выданных phpmorphy морфем. (к примеру прилагательным давал бы меньше вес чем существительным)
    5 — отбираем топ-N наших ключевых слов, и привязываем их каждой статье. Колво ключей выберете исходя из Вашей задачи, но по опыту думаю это будет между 5 и 10.
    6 — теперь самое сложное. Нужно сделать запрос. Тут нужно курить и экспериментировать. ИМХО стоит вычислять некий «рейтинг» близости, тут или количество совпавших слов из нашего топа подойдет, или сделать это колво взвешенным (в зависимости от позиции слова в списке или от его веса в тексте). Дальше уже сильно все зависит от реализации, от ORM и т.п.

    ПЫСЫ: на счет морфологической омонимии — лично я в подобных случаях тупо брал первый попавшийся вариант. Суммарно это очень незначительно влияло на результат, а разрешение морфологической омонимии это еще та задача :)
    Ответ написан
    Комментировать