Frage

Ich habe folgende Situation vor:

String a = "Ein Web-Crawler ist ein Computerprogramm, das das World Wide Web Internet surft automatisch"; String b = "Web-Crawler Computerprogramm durchsucht das World Wide Web";

Gibt es eine Idee oder ein Standard-Algorithmus, um den Prozentsatz der Ähnlichkeit zu berechnen?

Zum Beispiel obigen Fall wird die Ähnlichkeit durch manuelle geschätzt suchen, sollten 90% ++.

Meine Idee ist es, sowohl Strings tokenize und die Anzahl der Token angepasst vergleichen. So etwas wie (7 Token / 1 0 Tokens) * 100. Aber natürlich ist es nicht wirksam überhaupt für diese Methode ist. Vergleichen Anzahl der Zeichen abgestimmt auch scheinen nicht wirksam zu sein ....

Kann jemand einige Richtlinien geben ???

Oben ist Teil meines Projektes, Plagiarism Analyzer.

Daher abgestimmt Worte genau gleiche ohne Synonyme sein werden.

Die einzigen Dinge in diesem Fall ist, dass, wie man einen recht genauen Prozentsatz der Ähnlichkeit zu berechnen.

Vielen Dank für jede hilft.

War es hilfreich?

Lösung

Wie Konrad wies darauf hin, hängt Ihre Frage stark auf, was Sie unter „ähnlich“. Im Allgemeinen würde ich sagen, dass die folgenden Richtlinien von Nutzen sein sollten:

  • normalisiert die Eingabe durch ein Wort, um es der Grundform reduziert und Klein es
  • verwenden, um eine Worthäufigkeitsliste (erhältlich leicht auf dem Netz) und das „Ähnlichkeit Relevanz“ Wort macht invers proportional zu seiner Position auf der Frequenzliste
  • berechnen die Gesamt Satz Ähnlichkeit als aggregierter Ähnlichkeit der Wörter in beiden Sätze geteilt durch die Gesamt Ähnlichkeit Relevanz der Sätze erscheinen

Sie können die Technik verfeinern Unterschiede zwischen den Wortformen beinhalten, Satz Wortfolge, synonim Listen etc. Obwohl Sie nie ein perfektes Ergebnis bekommen, haben Sie viele Möglichkeiten, Zwicken und ich glaube, dass allgemein in Ihnen sehr wertvoll bekommen könnte Maßnahmen der Ähnlichkeit.

Andere Tipps

Das hängt von Ihrer Idee der Ähnlichkeit. Formal müssen Sie eine Metrik definieren, was Sie „ähnliche“ Strings anwenden Statistiken zu ihnen halten. Üblicherweise geschieht dies über die hypothetische Frage getan: „Wie wahrscheinlich ist es, dass der erste String ist eine modifizierte Version des ersten Strings, wo Fehler (zum Beispiel durch die Eingabe) eingeführt wurden“

Eine sehr einfache, aber effektive Maßnahme für eine solche Ähnlichkeit (oder besser gesagt, die invers) ist die Editierdistanz von zwei Zeichenketten, die unter Verwendung der dynamischen Programmierung berechnet werden kann, die> Zeit ( nm ) im allgemeinen, wobei n und m sind die Längen der Saiten.

Je nach Nutzung, aufwändigere Maßnahmen (oder völlig unabhängig, wie die soundex metrisch ) Maßnahmen erforderlich sein könnten.

In Ihrem Fall, wenn Sie ohne weiteres ein Token Spiel (das heißt bloße Wortzählung) anwenden Sie werden nie erhalten eine> 90% Ähnlichkeit. Um solch eine hohe Ähnlichkeit in einer sinnvollen Art und Weise würde erweiterte semantische Analyse erfordern. Wenn Sie dies getan, veröffentlichen Sie das Papier, da diese noch ein weitgehend ungelöstes Problem ist.

Ich zweite, was Konrad Rudolf schon gesagt.

Andere können verschiedene Abstandsmetriken empfehlen. Was ich werde begleitet sagen, diese, aber das Problem der Anpassung Semantik mehr aussieht.

Nach dem, was Sie scheinen zu suchen, empfehle ich, dass Sie einige der Standard-Textverarbeitungsmethoden anwenden. Alle diese haben potentielle Übertretungen, so dass ich sie in der Reihenfolge der die Applikation als auch Schwierigkeiten Liste gut

zu tun
  1. Satz Splitting. Herauszufinden, Ihre Einheiten des Vergleichs.
  2. Stoppwort Entfernung. Nimmt ein, ein, die, von usw.
  3. Tasche von Wörtern Prozentsatz: welcher Prozentsatz der gesamten Wörter entsprechen, unabhängig von Ordnung
  4. (viel aggressiver) Sie Synonym Expansion versuchen könnte, das zählt Synonyme als timmender Wörter.

Das Problem mit dieser Frage lautet:. Die Ähnlichkeit kann entweder eine humanisierte-Ähnlichkeit (wie Sie sagen „+ - 90% Ähnlichkeit“) oder eine statistische Ähnlichkeit (Kondrad Rudolph Antwort)

Die Mensch-Ähnlichkeit kann nie leicht berechnet werden: zum Beispiel dieser drei Worte

cellphone car message

mobile automobile post

Die statistische Ähnlichkeit ist sehr niedrig, während es tatsächlich ziemlich ähnlich ist. Also: es wird schwierig sein, dieses Problem zu lösen, und die denken, nur kann ich Sie verweisen auf eine Bayesian Filterung oder Künstliche Intelligenz mit Bayes-Netzwerke .

Eine gemeinsame Maßnahme ist die Levenshtein-Distanz, ein Sonderfall des Strings bearbeiten Abstand. Es wird auch in der Apache String util Bibliothek

Die Längste gemeinsame Teilsequenz ein gut als String dis-Ahnlichkeitsmetrik bekannt ist , die in der dynamischen Programmierung

implementiert
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top