Stackoverflow Связанные вопросы алгоритм

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

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

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

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

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

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

    Кажется, что алгоритм выглядит примерно так:

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

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

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

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

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

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

    Также старайтесь игнорировать слова остановки, такие как «the», «an», «of» и т. Д.

    Этот пост поможет вам Есть ли алгоритм, который говорит о семантическом сходстве двух фраз?

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

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

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

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