Один из наших больших сайтов имеет раздел, где пользователи могут прислать вопросы во владельца веб-сайта, который оценен лично его штатом. Когда тот же вопрос открывается очень часто, они могут добавить этот конкретный вопрос часто задаваемым вопросам.
Чтобы препятствовать тому, чтобы они получили десятки подобных вопросов в день, мы хотели бы обеспечить функцию, подобную 'Связанным вопросам' на этом сайте (переполнение стека).
Что пути там для создания этого вида функции? Я знаю, что должен так или иначе оценить вопрос и сравнить его с вопросами в часто задаваемых вопросах, но как это сравнение работает? Ключевые слова извлечены и раз так как?
Могло бы стоить упомянуть, что этот сайт основан на стеке LAMP таким образом, это доступные технологии.
Спасибо!
Я не знаю, как работает функция Stack Overflow, но думаю, что она использует теги для поиска связанных вопросов. Например, в этом вопросе все несколько вопросов, связанных с переполнением стека, имеют тег recommendation-engine
. Я догадываюсь, что совпадения на более редких тегах засчитываются больше, чем на обычных.
Вы также можете посмотреть на термин -частота обратного документа .
Там есть отличная книга O'Reilly - программирование коллективного интеллекта - которые охватывают групповые открытия, рекомендации и другие подобные темы. Из памяти примеры находятся в Perl, но я обнаружил, что это легко понять, поступив с фона PHP, и в течение нескольких часов построили что-то похожее на то, что вы после.
Yahoo есть ключевое слово экстрактор Webservice на http://developer.yahoo.com/search/content/v1/termextriacce.html
Учитывая вы работаете в стеке лампы, то вы сможете использовать пользы функций поиска FullText MySQL . Который я считаю, что работают над принципалами TF-IDF, и должны сделать его довольно легко создать «связанные вопросы», которые вы хотите.
Вы можете использовать проверку орфографии, где корпус - это заголовки/текст существующих записей FAQ:
Если вы хотите создать что-то вроде этого самостоятельно с нуля, вы бы использовали что-то называемое TF / IDF: частота частоты / обратной передачи данных. Это означает, что чтобы чрезвычайно упростить его, вы найдете слова в запросе, которые необычно в корпусе в целом и находят документы, которые имеют эти слова.
Другими словами, если кто-то входит в запрос со словами «Я хочу купить слон» в нем, то слова в запросе, слово «слон», вероятно, наименее распространенное слово в вашем корпусе. «Купить», вероятно, следующий. Таким образом, вы рационете документы (в вашем случае, предыдущие запросы), насколько они содержат слово «слон», а затем, насколько они содержат слово «купить». Слова «я», «к» и «AN», вероятно, в стоп-списке, поэтому вы в целом игнорируете их. Вы занимаетесь каждым документом (предыдущий запрос в вашем случае), сколько существует соответствующих слов (весом в зависимости от обратной частоты документа - то есть высокий вес для необычных слов) и показать лучшие немногие.
Я упростил, и вам нужно будет читать на этом, чтобы получить его правильно, но это действительно не ужасно сложно реализовать простым способом. Страница Wikipedia может быть хорошим местом для начала: