2009-05-21 6 views
26

Связанные с этим вопросы, возникающие после ввода заголовка, и те, которые находятся на правой панели при просмотре вопроса, похоже, предлагают очень интересные вопросы.Переполнение стека Алгоритм связанных вопросов

Stack Overflow выполняет поиск только SQL и не использует никаких специальных алгоритмов, сказал Спольский в разговоре.

Какие существуют алгоритмы, чтобы дать хорошие ответы в таком случае. Как сделать поиск базы данных в таком случае? Сделайте поиск по ключевым словам и поиска по ключевым словам или поиска по тегам и этим вопросам с большим количеством голосов сверху?

ответ

7

Родственные вопросы боковой панель будет строить на тегах для каждого вопроса (возможно, путем ранжирования их на основе тегов перекрытия, так что 5-тегов в общем> 4 метки в общих и т.д.).

Остальное будет построено на эвристике и алгоритмах, подходящих для обработки естественного языка. Обычно это не очень хорошо на языке общего назначения, но большинство из них ОЧЕНЬ хороши, когда словарь сводится к одной технической области, такой как программирование.

+0

совпадение тегов, вероятно, не единственное, что связано с ним; поскольку главный вопрос, связанный с этим вопросом, не имеет общего с этим вопросом. :) –

+1

Главный вопрос (есть ли алгоритм, который говорит вам ...) имеет тег nlp, тот же, что и этот вопрос, и два других тега. Ниже приведено nlp и еще 4 тега. # 3 имеет nlp, 4 других тега и меньше upvotes, чем # 2. Есть еще кое-что, поскольку # 4 имеет nlp, 3 других тега и больше, чем # 3, поэтому, вероятно, некоторая обработка и по заголовку :) – workmad3

6

Посмотрите на Портер, основывающийся на алгоритме stemming, если вы хотите попасть в «связанные» алгоритмы.

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

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

принимают также уход игнорировать stop words вроде «», «вариант», «в» и т.д.

-1

Используйте полнотекстового поиска особенность SQL Server.

0

Такие проблемы решаются путем создания «мешка слов» словесных слов. Это в основном вектор подсчета слов. Эти слова предварительно обрабатываются (стерилизуются) и взвешиваются с их вероятностью встречаться в предложении («у» есть более высокая вероятность, чем «вероятность», и поэтому его следует взвешивать меньше). Затем вы можете воспринимать этот пакет слов либо как вектор в евклидовом пространстве, либо как образец плотности вероятности.

Алгоритмы можно применять как поиск ближайшего соседа или семантическое хеширование. Последний, по-видимому, является SOTA (см. http://www.cs.toronto.edu/~rsalakhu/papers/semantic_final.pdf).

18

Если вы слушаете Stack Overflow podcast 32 (к сожалению, в расшифровке стенограммы не так много), вы можете услышать, как Джефф Этвуд немного говорит о том, как он это делает.

Похоже, что алгоритм является чем-то вроде:

  • Возьмите вопрос
  • Удалить наиболее часто встречающиеся слова на английском языке (из списка, он получил от Google)
  • представить полный поиск текста в SQL Server 2008 полнотекстового поиска

Более подробно о полнотекстового поиска можно найти здесь: http://msdn.microsoft.com/en-us/library/ms142571.aspx

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

Смежные вопросы