2010-10-31 4 views
9

machen arbeite ich versuche, automatisch kurze Artikel zu kategorisieren, und ich versuche, herauszufinden, wie ähnliche Worte passen - zB Regal Regale oder Malerei und neu streichenwie könnte ich ein Suchspiel nach ähnlichen Worten

I benutze den Porter Stemming Algorithmus, aber es hilft nur in bestimmten Situationen und nur mit dem Ende des Wortes (beide Beispiele oben funktionieren nicht damit).

Gibt es ein Algorithmus oder ein verwandtes Wortlisten, die mit so etwas wie diese (meine eigene außerhalb zu machen?) Helfen würde

(in PHP so in dieser Sprache arbeite ich irgendwelche Lösungen wäre hilfreicher sein.)

Antwort

9

Die Levenshtein Distance ist, was Sie suchen.

Für zwei beliebige Zeichenfolgen berechnet es die minimale Anzahl von Einfügungen, Mutationen und Löschungen, die auftreten müssen, um eine Zeichenfolge in die andere zu ändern.

Wenn der Abstand niedrig ist, sind die beiden Wörter ähnlich.

Sie können auch den Algorithmus Soundex verwenden, um festzustellen, ob zwei Wörter ähnlich klingen.

Siehe auch:
PHP levenshtein function
PHP soundex function

+1

Ein besonderes Problem mit Levenshtein in dieser Art von Kontext ist, dass Sie eine gute Schwelle finden müssen; Es gibt nur die Anzahl der Änderungen zwischen den beiden Wörtern zurück. Es gibt einen großen Unterschied zwischen den beiden Beispielen im ursprünglichen Beitrag: Levenshtein ("Regal", "Regale") = 3, Levenshtein ("Malerei", "Repaint") = 5. –

+0

als Referenz - Ich fand http : //stackoverflow.com/questions/634995/implementation-of-levenshtein-distance-for-mysql-fuzzy-search, die eine Verknüpfung zu einer mysql Stored Procedure-Version enthält. Wie Jan schon sagte, ist noch nicht klar, wie nah es kommen wird. Aber es ist einen Versuch wert. – Yehosef

+0

Dies ist die nächste Antwort - es ist nicht ideal, aber ein guter Anfang. Die Wortliste von Jan ist idealer, aber an dieser Stelle nicht so praktisch. – Yehosef

4

Nun, es ist die Mutter aller „bezogenen Wortlisten“, die so genannte WordNet: http://wordnet.princeton.edu/

Es ist verfügbar auf einer ziemlich großzügigen Lizenz kostenpflichtig frei . Es gibt eine PHP-Schnittstelle im Abschnitt "Verwandte Projekte".

Der Vorteil gegenüber einem Wortähnlichkeitsalgorithmus ist, dass er sogar verschiedene Synonyme von Wörtern wie "Farbe" und "Farbe" kennt. Der Nachteil ist, dass Sie entweder die richtigen Synsets kennen müssen (schließlich kann ein Wort verschiedene Dinge bedeuten) oder Sie können eine ziemlich wilde Liste von Synonymen bekommen.

+0

wow - danke für den Link. Ich denke, nur das db-Format zu verstehen wäre mehr Zeit, als ich für das Projekt habe, aber es scheint der ideale Weg zu sein. – Yehosef

Verwandte Themen