2010-02-02 4 views
6

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

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

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

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

Спасибо!

+0

возможного дубликата [Вопросы StackOverflow Связаны] (http://stackoverflow.com/questions/393505/stackoverflows-related-questions) –

ответ

3

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

Вы также можете посмотреть term frequency–inverse document frequency.

+2

и, возможно, размер пересечения между наборами тегов. – jensgram

4

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

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

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

http://en.wikipedia.org/wiki/Tf%E2%80%93idf

1

Учитывая вы работаете в стеке ЛАМПЫ, то вы должны быть в состоянии сделать хорошее использование MySQL's Fulltext search functions. Я считаю, что работаю над принципами TF-IDF, и вам должно быть довольно легко создать «связанные вопросы», которые вы хотите.

1

Существует отличная книга О'Рейли - Programming Collective Intelligence - которая охватывает групповое открытие, рекомендации и другие подобные темы. Из памяти примеры в Perl, но я понял, что это легко понять, исходя из фона PHP, и через несколько часов построил нечто похожее на то, что вам нужно.

Yahoo имеет ключевое слово экстрактор WebService в http://developer.yahoo.com/search/content/V1/termExtraction.html

+0

Образцы, которые я просматриваю в предварительном просмотре O'reilly * P.C.I. *, находятся в Python. – isomorphismes

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