2013-06-10 11 views
36

Gibt es Bibliotheken für die Berechnung der semantischen Ähnlichkeitswerte für ein Paar von Sätzen?Python: Semantische Ähnlichkeit Score für Strings

Ich kenne die semantische Datenbank von WordNet, und wie ich die Punktzahl für 2 Wörter generieren kann, aber ich bin auf der Suche nach Bibliotheken, die alle Vorverarbeitungsaufgaben wie Port-Stemming, Stopwortentfernung usw. ausführen ganze Sätze und gibt eine Punktzahl für die Beziehung zwischen den beiden Sätzen aus.

Ich fand eine work in Bearbeitung, die mit dem .NET-Framework geschrieben wird, das den Score mit einem Array von Vorverarbeitungsschritten berechnet. Gibt es ein Projekt, das dies in Python tut?

Ich bin nicht für die Folge von Operationen suchen, den mir die Partitur finden würde helfen
(wie here gefragt wird) Ich würde gerne jede Stufe auf meinem eigenen implementieren, oder Klebstoff Funktionen aus verschiedenen Bibliotheken, so dass es funktioniert für Satzpaare, aber ich brauche das meistens als ein Werkzeug, um Rückschlüsse auf Daten zu testen.


EDIT: Ich war mit NLTK Berücksichtigung und Berechnung der Punktzahl für jedes Paar Worte über die beiden Sätze wiederholt, und dann Rückschlüsse aus der Standardabweichung der Ergebnisse zeichnen, aber ich weiß nicht, ob das ist eine legitime Schätzung der Ähnlichkeit. Außerdem braucht es viel Zeit für lange Saiten.
Ich suche wieder nach Projekten/Bibliotheken, die das schon intelligent umsetzen. Etwas, das mir auf diese Weise können tun:

import amazing_semsim_package 
str1='Birthday party ruined as cake explodes' 
str2='Grandma mistakenly bakes cake using gunpowder' 

>>similarity(str1,str2) 
>>0.889 
+0

Betrachten Sie vektorbasierte semantische Modelle oder Matrixzerlegungsmodelle, um die Satzähnlichkeit zu vergleichen. Wenn nicht, können Sie auf lesk-artigen Kosinus zurückgreifen, der zuerst einen Satz vektorisiert, um den Kosinus zwischen den 2 Vektoren – alvas

+0

zu berechnen, wenn Sie etwas als ein Abschneiden gewichten oder die Kerbe dringend benötigen, betrachten NLTKs wup Ähnlichkeit. Sie müssten etwas wie CLIPS-Muster verwenden, um den Typ zu erhalten (Verb, Nomen, Adj, etc.)Sie können das verwenden, um tatsächlich die perfekte Anzahl von Kategorien für LSA/LDA zu finden, wie sie in Gensim oder einer Fuzzy/Kosinus-Implementierung von Kmeans zu finden sind. –

Antwort

37

Das beste Paket, das ich für diese gesehen habe, ist GENSIM am Gensim Homepage gefunden. Ich habe es oft benutzt und war insgesamt sehr zufrieden mit der Benutzerfreundlichkeit. Es ist in Python geschrieben und hat eine leicht zu befolgende tutorial, um Sie zu starten, die 9 Zeichenfolgen vergleicht. Es kann über Pip installiert werden, so dass Sie nicht viel Mühe haben, es installiert zu bekommen, hoffe ich.

Welcher Scoring-Algorithmus Sie verwenden, hängt stark vom Kontext Ihres Problems ab, aber ich würde vorschlagen, mit der LSI-Funktionalität zu beginnen, wenn Sie etwas Grundlegendes wollen. (Das ist, was das Tutorial Sie durchläuft.)

Wenn Sie durch das Tutorial für Gensim gehen, wird es Sie durch den Vergleich von zwei Strings, mit der Ähnlichkeitsfunktion führen. Dadurch können Sie sehen, wie sich Ihre Stiche auf der Grundlage des darin enthaltenen Textes miteinander oder mit einem anderen Stich vergleichen.

Wenn Sie in der Wissenschaft interessiert sind, hinter wie es funktioniert, überprüfen this paper.

+0

Das sieht sehr vielversprechend aus. Danke, dass du Justin darauf hingewiesen hast. – user8472

-4

AFAIK der mächtigsten NLP-Lib für Python ist http://nltk.org/

+3

NLTK hat 6 Punkte für die semantische Ähnlichkeit zwischen einem Paar von Wortkonzepten, aber ich möchte zwei Strings vergleichen (mehrere, vielleicht Hunderte von Wörtern) – user8472

0

Leider kann ich Ihnen nicht mit PY helfen, aber Sie können einen Blick auf meinem alten Projekt nehmen die Wörterbücher verwendet die semantischen Vergleiche zu erreichen zwischen den Sätzen (die später in PY codiert werden können und die Vektorraumanalyse implementieren). Es sollte nur ein paar Stunden Codierung sein, um von JAVA zu PY zu übersetzen. https://sourceforge.net/projects/semantics/