Эффективный алгоритм поиска связанных представлений - PullRequest
1 голос
/ 13 октября 2009

Я недавно запустил свой скромный побочный проект и хотел бы добавить раздел «связанные представления» при просмотре представления. Точно так же, как то, что SO делает здесь - см. Правую колонку под названием «Related»

Учитывая, что каждое представление имеет заголовок и набор тегов, какой самый эффективный (оптимальный результат), наиболее эффективный (быстрый, дружественный к памяти) способ запроса базы данных для связанных представлений?

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

Ответы [ 2 ]

3 голосов
/ 13 октября 2009

Вот мое решение за два цента:
Чтобы добиться наилучшего результата, нам нужно поставить «вес» на результаты запроса.

Для начала предполагается, что каждое представление в базе данных имеет нулевой вес. Затем, если отправка в «пуле» делится одним тегом с текущей отправкой, мы добавляем +3 к найденной отправке. Следовательно, если найдена другая отправка, которая разделяет два тега с текущей отправкой, мы добавляем +6 к весу.

Далее мы разбиваем / разбиваем заголовок текущей заявки и удаляем «стоп-слова».
Я видел список стоп-слов от Google, но сейчас я определю свои стоп-слова: [«of», «a», «the», «in»]

Пример:
Название «Лучшая подача всех времен»
Приведите массив: [«The», «Best», «Submission», «of», «All», «Times»]
Удалить стоп-слова: [«Лучший», «Представление», «Все», «Время»]

Затем мы запрашиваем базу данных, содержащую любые из названных названий, и для каждого результата добавляем вес: + 2
И, наконец, отсортируйте список по убыванию по весу и возьмите лучшие результаты N.

Что вы думаете? (будь нежным!)

0 голосов
/ 14 октября 2009

Если я хорошо понимаю, вам нужна техника, чтобы определить, «похожи» ли два сообщения друг на друга. Вы можете использовать вероятностную модель для этого:

http://en.wikipedia.org/wiki/Mutual_information

Идея состоит в том, чтобы сказать, что если в двух сообщениях содержится много «необычных» слов, они, вероятно, говорят на одну и ту же тему. Для обнаружения необычных слов, в зависимости от вашего приложения, вы можете использовать общую таблицу частот, или, может быть, лучше, построить ее самостоятельно на основе совокупности слов ваших сообщений (но вам потребуется их достаточно, чтобы иметь что-то релевантное) .

Я бы не стал ограничивать себя в заголовках и тегах, но я бы перевесил их в исследовании.

Подобные идеи очень распространены в фильтрации спама. Я, к сожалению, время, чтобы сделать полный обзор, но быстрый поиск в Google дает:

http://www.aclweb.org/anthology/P/P04/P04-3024.pdf karlmicha.googlepages.com/acl2004_poster.pdf

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...