2010-02-02 5 views
6

Eine unserer größeren Websites hat einen Abschnitt, wo Benutzer Fragen an den Eigentümer der Website senden können, die von seinen Mitarbeitern persönlich ausgewertet werden. Wenn die gleiche Frage sehr oft auftaucht, können sie diese spezielle Frage zum Faq hinzufügen.Wie kann man eine Engine für verwandte Fragen erstellen?

Um zu verhindern, dass sie dutzende von ähnlichen Fragen pro Tag erhalten, möchten wir Ihnen eine Funktion anbieten, die der "Verwandte Fragen" auf dieser Seite ähnelt (Stack Overflow).

Welche Möglichkeiten gibt es, um diese Art von Funktion zu erstellen? Ich weiß, dass ich die Frage irgendwie auswerten und mit den Fragen in der FAQ vergleichen sollte, aber wie funktioniert dieser Vergleich? Werden Schlüsselwörter extrahiert und wenn ja wie?

Könnte erwähnen, diese Website ist auf dem LAMP-Stack gebaut, so dass diese Technologien verfügbar sind.

Danke!

+0

möglich Duplikat [Stackoverflow des Verwandte Fragen] (http://stackoverflow.com/questions/393505/stackoverflows-related-questions) –

Antwort

3

Ich weiß nicht, wie Stack Overflow funktioniert, aber ich denke, dass es die Tags verwendet, um verwandte Fragen zu finden. Zum Beispiel haben in dieser Frage die ersten paar verwandten Fragen alle das Tag recommendation-engine. Ich würde vermuten, dass die Übereinstimmungen bei selteneren Tags mehr zählen als Übereinstimmungen bei allgemeinen Tags.

Sie können auch sehen, term frequency–inverse document frequency.

+2

Und wahrscheinlich die Größe der Kreuzung zwischen den Tags. – jensgram

4

Wenn Sie so etwas wie dieses, sich von Grund auf neu bauen wollten, dann würden Sie verwenden etwas namens TF/IDF: Term Frequency/Inverse Dokumenthäufigkeit. Das bedeutet, um es enorm zu vereinfachen, finden Sie Wörter in der Abfrage, die im Korpus als Ganzes ungewöhnlich sind und Dokumente finden, die diese Wörter haben.

Mit anderen Worten, wenn jemand eine Abfrage mit den Worten "Ich möchte einen Elefanten kaufen" darin eingeben, dann ist das Wort "Elefant" wahrscheinlich das am wenigsten verbreitete Wort in Ihrem Korpus. "Kaufen" ist wahrscheinlich der nächste. So ordnen Sie Dokumente (in Ihrem Fall vorherige Abfragen) nach, wie viel sie das Wort "Elefant" enthalten und wie viel sie das Wort "kaufen" enthalten. Die Wörter "I", "To" und "An" befinden sich wahrscheinlich in einer Stop-Liste, also ignorierst du sie ganz. Sie klassifizieren jedes Dokument (vorherige Abfrage in Ihrem Fall) nach der Anzahl der übereinstimmenden Wörter (Gewichtung nach der Häufigkeit des umgekehrten Dokuments - d. H. Hohe Gewichtung nach ungewöhnlichen Wörtern) und zeigen die obersten paar.

Ich habe zu stark vereinfacht, und Sie müssten nachlesen, um es richtig zu machen, aber es ist wirklich nicht sehr kompliziert, auf einfache Weise zu implementieren. Die Wikipedia-Seite könnte ein guter Anfang sein:

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

1

Da Sie in einem LAMP-Stack arbeiten, dann sollten Sie in der Lage sein, gute Verwendung von MySQL's Fulltext search functions zu machen. Ich glaube, dass sie an den TF-IDF-Prinzipien arbeiten und es ziemlich einfach machen sollte, die "verwandten Fragen" zu erstellen, die Sie wollen.

1

Es gibt ein großartiges O'Reilly-Buch - Programming Collective Intelligence - das Gruppenentdeckung, Empfehlungen und andere ähnliche Themen behandelt. Aus dem Gedächtnis sind die Beispiele in Perl, aber ich fand es leicht zu verstehen, dass es aus einem PHP-Hintergrund kommt und innerhalb von ein paar Stunden etwas aufgebaut hat, was dem ähnlich ist, wonach Sie suchen.

Yahoo hat eine Keyword-Extraktor webservice bei http://developer.yahoo.com/search/content/V1/termExtraction.html

+0

Die Beispiele, die ich in O'reilys Vorschau auf * P.C.I. * suche, sind in Python. – isomorphismes