2012-02-21 3 views
2

Как я могу реализовать функцию «связанных элементов» для сообщений в блоге? Я хотел бы вернуть список аналогичных сообщений на основе анализа заголовков сообщений.«Связанные элементы» в Ruby

Мои собственные идеи для этого кажутся очень неэффективными, и мне интересно, есть ли инструменты, которые уже поддерживают эту функциональность. Я не нашел никакой помощи с помощью Google, рубинового инструментария, и я посмотрел на sunspot api. Как бы вы это достигли на своем веб-сайте/сайте?

Update

Для тех, кто заинтересован в этой функциональности, я решил пойти с пятном, что позволяет мне использовать это в моем show действия:

@find_related = Post.search do 
    fulltext params[:title] 
end 

Это возвращает массив соответствующих должностей:

@related = @find_related.results 

Спасибо за все отзывы и этот railscast был большая помощь

ответ

2

Уверены, что для этого есть хорошие и эффективные инструменты! Технически, что вы хотите, это полный текстовый поиск в индексированной базе данных заголовков/других данных. У нас есть инструменты, которые запускают внешнюю базу данных, которая обрабатывает весь поиск и индексирование. Эти серверы универсальны, а не рубины, вы используете клиентскую логику в своем приложении. Это очень эффективно, так как вы, вероятно, не сможете реализовать какие-либо другие алгоритмы, кроме существующих. Я бы рекомендовал следующее:

Эти библиотеки обеспечивают логику клиента для обмена данными с выше поисковые системы (все из базы Apache)

+0

Спасибо, я думаю, что у меня есть лучшее представление о том, как идти о это. – Dru

1

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

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

1

Есть несколько способов сделать это, как w с различными плюсами и минусами.

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

Более сложный метод предполагает использование NLP для анализа заголовков каждого сообщения и вычисления пригодности для другого сообщения. Это потребует написания большего количества кода и может создавать ложные срабатывания. Однако вам не нужно будет помечать сообщения вручную, и вы можете настроить методы, используемые для поиска сообщений, если вы хотите весить определенные слова или фразы. Взгляните на Treat, the Text Retrieval, Extraction and Annotation Toolkit, это похоже на хорошую отправную точку для Ruby NLP.

1

Если вы собираетесь словами в названии, это сырое упрощенное решение может дать вам трамплин для чего-то производства готового:

#assume titles is an array of arrays of the words of titles and title is the one we are trying to mach with 
HOW_MANY_RELATED_WORDS=3 
titleWords=title.split(' ').sort 
related=[] 
trues=0 
titles.each do |t| 
    t.each do |word| 
    true+=1 if titleWords.include?(word) 
    end 
    related<<t.join(' ') if(trues>=HOW_MANY_RELATED_WORDS) 
end 
Смежные вопросы