2016-11-23 3 views
2

Meine Ziele ist es, einen Ähnlichkeitswert zwischen zwei Dokumenten (Sammlungen von Wörtern) zu finden. Ich habe bereits mehrere Antworten wie this SO post oder this SO post gefunden, die Python-Bibliotheken bereitstellen, die das erreichen, aber ich habe Schwierigkeiten, den Ansatz zu verstehen und es für meinen Anwendungsfall funktionieren zu lassen.Java: Wie benutzt man TF-IDF, um die Ähnlichkeit zweier Dokumente zu berechnen?

Wenn ich richtig verstehe, wird TF-IDF eines Dokuments in Bezug auf einen gegebenen Begriff berechnet, richtig? So interpretiere ich es aus der Wikipedia article: "tf-idf ... ist eine numerische Statistik, die widerspiegeln soll, wie wichtig ein Wort für ein Dokument ist".

In meinem Fall habe ich keinen bestimmten Suchbegriff, den ich mit dem Dokument vergleichen möchte, aber ich habe zwei verschiedene Dokumente. Ich gehe davon aus, dass ich zuerst Vektoren für die Dokumente berechnen muss und dann den Kosinus zwischen diesen Vektoren nehmen muss. Aber alle Antworten, die ich bezüglich der Konstruktion dieser Vektoren gefunden habe, nehmen immer einen Suchbegriff an, den ich in meinem Fall nicht habe.

Ich kann nicht meinen Kopf darum wickeln, jede konzeptionelle Hilfe oder Links zu Java-Bibliotheken, die dies erreichen, würden sehr geschätzt werden.

+1

Führen Sie eine Ausdrucksextraktion vor, und sobald Sie die Liste der Begriffe mit ihren Häufigkeiten für beide Korpora haben, berechnen Sie die [Kosinusähnlichkeit] (https://en.wikipedia.org/wiki/Cosine_ähnlichkeit). –

+0

@Wiktor Stribiżew: Danke für den Vorschlag. Also extrahiere ich die Begriffe beider Dokumente in eine Liste. Und dann berechne ich für jeden dieser Terme die tf-idf-Werte für jedes der beiden Dokumente, was mir zwei Vektoren gibt, aus denen ich die Kosinusähnlichkeit berechnen kann. Verstehe ich das richtig? – gmazlami

+1

Ja, im Grunde ist es so. Berücksichtigen Sie anhand des Begriffs Häufigkeit die Vektoren TF-IDF und berechnen Sie die Kosinusähnlichkeit. Stellen Sie sicher, dass Sie stemming verwenden, um die extrahierten Wortformen zu normalisieren, um das Rauschen zu reduzieren. –

Antwort

2

Ich rate Terminologie Extraktion zuerst, zusammen mit ihren Frequenzen. Beachten Sie, dass Stemming auch auf die extrahierten Terme angewendet werden kann, um Rauschen während der folgenden cosine similarity Berechnung zu vermeiden. Siehe Java library for keywords extraction from input text SO Thread für weitere Hilfe und Ideen dazu.

Dann, wie Sie selbst erwähnen, müssen Sie für jeden dieser Begriffe die TF-IDF-Werte berechnen, die Vektoren erhalten und die Kosinusähnlichkeit berechnen.

Bei der Berechnung der TF-IDF, daran, dass 1 + log(N/n) (N für die Gesamtzahl der Corpora stehen und n für die Anzahl der Corpora stehen, die den Begriff enthalten) Formel ist besser, da es das Problem vermeidet, wenn TF nicht 0 ist und IDF ergibt gleich 0.

Verwandte Themen