Как создать 'связанные вопросы' механизм?

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

Чтобы препятствовать тому, чтобы они получили десятки подобных вопросов в день, мы хотели бы обеспечить функцию, подобную 'Связанным вопросам' на этом сайте (переполнение стека).

Что пути там для создания этого вида функции? Я знаю, что должен так или иначе оценить вопрос и сравнить его с вопросами в часто задаваемых вопросах, но как это сравнение работает? Ключевые слова извлечены и раз так как?

Могло бы стоить упомянуть, что этот сайт основан на стеке LAMP таким образом, это доступные технологии.

Спасибо!

6
задан Georg Fritzsche 3 August 2010 в 12:06
поделиться

5 ответов

Я не знаю, как работает функция Stack Overflow, но думаю, что она использует теги для поиска связанных вопросов. Например, в этом вопросе все несколько вопросов, связанных с переполнением стека, имеют тег recommendation-engine. Я догадываюсь, что совпадения на более редких тегах засчитываются больше, чем на обычных.

Вы также можете посмотреть на термин -частота обратного документа .

3
ответ дан 10 December 2019 в 02:47
поделиться

Там есть отличная книга O'Reilly - программирование коллективного интеллекта - которые охватывают групповые открытия, рекомендации и другие подобные темы. Из памяти примеры находятся в Perl, но я обнаружил, что это легко понять, поступив с фона PHP, и в течение нескольких часов построили что-то похожее на то, что вы после.

Yahoo есть ключевое слово экстрактор Webservice на http://developer.yahoo.com/search/content/v1/termextriacce.html

1
ответ дан 10 December 2019 в 02:47
поделиться

Учитывая вы работаете в стеке лампы, то вы сможете использовать пользы функций поиска FullText MySQL . Который я считаю, что работают над принципалами TF-IDF, и должны сделать его довольно легко создать «связанные вопросы», которые вы хотите.

1
ответ дан 10 December 2019 в 02:47
поделиться

Вы можете использовать проверку орфографии, где корпус - это заголовки/текст существующих записей FAQ:

Как вы реализуете "Вы имели в виду"?

0
ответ дан 10 December 2019 в 02:47
поделиться

Если вы хотите создать что-то вроде этого самостоятельно с нуля, вы бы использовали что-то называемое TF / IDF: частота частоты / обратной передачи данных. Это означает, что чтобы чрезвычайно упростить его, вы найдете слова в запросе, которые необычно в корпусе в целом и находят документы, которые имеют эти слова.

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

Я упростил, и вам нужно будет читать на этом, чтобы получить его правильно, но это действительно не ужасно сложно реализовать простым способом. Страница Wikipedia может быть хорошим местом для начала:

http://en.wikipedia.org/wiki/tf%e2%80%93IDF

4
ответ дан 10 December 2019 в 02:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: