Алгоритм или библиотека ближайшего соседа на основе ключевых слов

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

Это не должно быть очень хорошо, просто достаточно хорошо.

Может кто подскажет решение или с чего начать. Лекции Юрия Лифшица я просматривал и раньше, но надеюсь получить что-то готовое, если получится.

Предпочтительны Java-библиотеки.


person Ankur    schedule 15.05.2011    source источник
comment
вы сопоставляете местоположения или вам нужен алгоритм, который связывает разные страницы только на основе их ключевых слов?   -  person fasseg    schedule 15.05.2011
comment
вы можете создать взвешенный неориентированный граф узлов веб-сайта, и веса ребер будут представлять близость. например Каждое ключевое слово, которое есть у двух сайтов, может увеличить их граничный вес. в java есть много графических библиотек, которые вы могли бы использовать.   -  person fasseg    schedule 15.05.2011
comment
@smegbrains, да, я думаю, это то, что я сделал. Я вычислил пересечение пар ключевых слов (что, я думаю, эквивалентно тому, что вы называете «шириной края»)   -  person Ankur    schedule 15.05.2011
comment
Ваша проблема звучит как приложение для анализа текста и кластеризации документов. Попробуйте данный обзор, чтобы узнать, дает ли он какие-нибудь намеки на бумаги, на которые можно посмотреть.   -  person Dave    schedule 16.06.2011


Ответы (1)


Как вы сказали, у вас уже есть ключевые слова, извлеченные со страницы. Я предполагаю, что вы представляете каждый документ/страницу вектором слов. Что-то вроде матрицы частоты терминов документа.

Я предполагаю, что ближайший сосед страницы в идеале является страницей с похожим содержимым. Итак, вы хотели бы найти документы, в которых относительная частота каждого слова аналогична тому, которое вы ищете. Итак, сначала нормализуйте матрицу doc-term WRT для каждой строки; т. е. заменить количество вхождений на %stage вхождения.

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

Когда у вас есть векторы и функция расстояния, запустите Ближайший сосед или алгоритм K-ближайшего соседа.

person BiGYaN    schedule 15.05.2011
comment
Спасибо, вы правы, на каждой странице есть вектор (размер 6 - для удобства) ключевых слов. Я просто возьму пересечение набора ключевых слов для каждой пары, и это даст простую и грубую меру сходства. - person Ankur; 15.05.2011
comment
В случае, если это хобби/домашняя работа, эта мера подойдет. Но если вы занимаетесь машинным обучением, вам нужно использовать более строгие и проверенные временем методы. - person BiGYaN; 16.05.2011