Um eine große Menge Text auf effiziente Weise abzufragen, können Sie das Konzept der Edit Distance/Prefix Edit Distance verwenden.
Edit Distance ED(x,y): minimale Anzahl von Transformationen, um vom Begriff x zum Begriff y zu gelangen
Die Berechnung der ED zwischen jedem Begriff und Abfragetext ist jedoch ressourcen- und zeitaufwändig. Daher können wir anstatt die ED für jeden Begriff zu berechnen, zunächst mögliche übereinstimmende Begriffe extrahieren, indem wir eine Technik namens Qgramm-Index verwenden und dann die ED-Berechnung auf diese ausgewählten Begriffe anwenden.
Ein Vorteil der Qgramm-Index-Technik ist, dass sie die Fuzzy-Suche unterstützt.
Ein möglicher Ansatz, um den QGramm-Index anzupassen, besteht darin, einen Invertierten Index unter Verwendung von Qgrammen zu erstellen. Dort speichern wir alle Wörter, die mit einem bestimmten Qgramm übereinstimmen, unter diesem Qgramm (anstatt den vollständigen String zu speichern, können Sie für jeden String eine eindeutige ID verwenden). Sie können die Datenstruktur Tree Map in Java dafür verwenden. Im Folgenden finden Sie ein kleines Beispiel zum Speichern von Begriffen
col : colmbia, colombo, gancola, tacolama
Dann berechnen wir beim Abfragen die Anzahl der gemeinsamen Qgramme zwischen dem Abfragetext und den verfügbaren Begriffen.
Beispiel: x = HILLARY, y = HILARI(Anfragebegriff)
Qgramme
$$HILLARY$$ -> $$H, $HI, HIL, ILL, LLA, LAR, ARY, RY$, Y$$
$$HILARI$$ -> $$H, $HI, HIL, ILA, LAR, ARI, RI$, I$$
Anzahl gemeinsamer Q-Gramme = 4
Anzahl gemeinsamer Q-Gramme = 4.
Für Begriffe mit einer großen Anzahl von gemeinsamen Qgrammen berechnen wir die ED/PED gegen den Abfragebegriff und schlagen dann den Begriff dem Endbenutzer vor.
Sie finden eine Implementierung dieser Theorie in folgendem Projekt (Siehe "QGramIndex.java"). Zögern Sie nicht, Fragen zu stellen. https://github.com/Bhashitha-Gamage/City_Search
Um mehr über Edit Distance, Prefix Edit Distance, Qgramm-Index zu erfahren, sehen Sie sich bitte das folgende Video von Prof. Dr. Hannah Bast an https://www.youtube.com/embed/6pUg2wmGJRo (Die Lektion beginnt um 20:06)
3 Stimmen
Algorithmen, die typischerweise diese Art von Aufgaben erledigen, arbeiten daran festzustellen, wie viele Änderungen erforderlich sind, um eine untersuchte Zeichenfolge in die Zielzeichenfolge zu verwandeln. Diese Art von Algorithmen funktioniert überhaupt nicht gut in einer Situation wie dieser. Ich denke, es wird sehr schwierig sein, einen Computer dazu zu bringen, das hinzubekommen.
4 Stimmen
Levenshtein-Distanz-Quellcode in vielen Sprachen: Java, Ruby, Python, PHP, usw. en.wikibooks.org/wiki/Algorithm_Implementation/Strings/…
11 Stimmen
Im Allgemeinen hängt das, was als "nächster String" gilt, von dem verwendeten Ähnlichkeitsmaß und den Strafen ab, die für das Einführen von Lücken in der Ausrichtung verwendet werden. Zum Beispiel, betrachten Sie "Kuh" und "Huhn" als ähnlicher als "Kuh" und "rot" (weil sie verwandte Konzepte sind), oder ist es umgekehrt (weil "Huhn" mehr Buchstaben hat als "Kuh")? Aber bei einem Ähnlichkeitsmaß und Lückenstrafe kann gezeigt werden, dass der Levenshtein-Algorithmus unten garantiert den nächstgelegenen String findet. Dasselbe gilt für Needleman-Wunsch und Smith-Waterman (weiter unten).
0 Stimmen
Führen Sie eine Zeichen- oder Wortgruppierung durch. Bewerten Sie dies.