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

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

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

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

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

Благодаря!

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

Вы также можете посмотреть на частотную частотную частоту документа .

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

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

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

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

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

Там есть замечательная книга О'Рейли « Программирование коллективного интеллекта», которая охватывает групповое открытие, рекомендации и другие подобные темы. Из памяти примеры в Perl, но я понял, что это легко понять, исходя из фона PHP, и через несколько часов построил нечто похожее на то, что вам нужно.

Yahoo имеет ключевое слово extractor webservice по адресу http://developer.yahoo.com/search/content/V1/termExtraction.html

Вы можете использовать проверку орфографии, где corpus – это названия / текст существующих часто задаваемых вопросов:

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