@mahbe

Как найти выборку максимально близких чисел из массива?

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

Для этого разбиваю поисковый запрос на массив слов. Определяю их индекс (номера вхождений) в текст материала. И... Дальше не знаю что делать с этими числами. Допустим где начинаются мои ключи в полном тексте материала понятно, а как их грамотно вытащить оттуда? Как найти отрезок где они упоминаются чаще всего? То есть выборку чисел самых близких по значению?

Думал найти банально среднее арифметическое и уже от него искать просто ближайший ключ. Но это как то слабовато.
  • Вопрос задан
  • 2411 просмотров
Решения вопроса 1
Как насчет решения в лоб - установить скользящее окно, равное количеству слов во "врезке", и пройти весь текст, подсчитывая суммарное количество слов, попавших в окно в этой позиции или сумму их весов, если у слов разные приоритеты. Значение суммы весов, попавших в скользящее окно в текущей позиции, вычисляется изменением предыдущего значения окна - одна позиция текста (у "головы" окна) вошла (увеличиваем сумму, если слово было "поисковым") и одна позиция (у "хвоста") вышла (уменьшаем сумму, если слово было "поисковым").
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Deerenaros
@Deerenaros
Программист, математик, задрот и даже чуть инженер
Расстояние Хемминга может формализовать задачу: требуется найти ограниченную область, расстояние двух любых точек в котором будет определяться r. Точки представлены векторами, где единица - наличие определённого ключевого слова, а нуль - его отсутствие.

Очевидно, потребуется полный набор ключевых слов. К тому же, задача не тривиальная, как может показаться на первый взгляд, однако вполне можно считать один раз при создании/изменении материала, и добавлять к найденным новосозданный текст, чтобы не пересчитывать всё заново.

Хотя на самом деле, проще просто произвести SELECT по базе данных и брать первые несколько материалов, которые имеют хотя бы 1-2 общих тега. Такой эвристики более чем достаточно просто потому, что термин "похожий материал" сам по себе сильно субъективен.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы