Ungefähre Zeichenfolge Matching

Eine Fuzzy Mediawiki -Suche nach "wütendem Emoticon" hat als empfohlenes Ergebnis "André Emotions"

Im Informatik, ungefähre Zeichenfolge Matching (oft umgangssprachlich als als bezeichnet Fuzzy -String -Suche) ist die Technik des Findens Saiten das passt a Muster ungefähr (und nicht genau). Das Problem der ungefähren String-Matching ist normalerweise in zwei Unterprobleme unterteilt Substring Übereinstimmung in einer bestimmten Zeichenfolge und das Finden von Wörterbuchketten, die ungefähr dem Muster entsprechen.

Überblick

Die Nähe einer Übereinstimmung wird anhand der Anzahl der primitiven Vorgänge gemessen, die erforderlich sind, um die Zeichenfolge in eine genaue Übereinstimmung umzuwandeln. Diese Zahl wird die genannt Entfernung bearbeiten zwischen der Saite und dem Muster. Die üblichen primitiven Operationen sind:[1]

  • Einfügung: KinderbettCOat
  • Streichung: COatKinderbett
  • Auswechslung: COatCOst

Diese drei Operationen können als Substitutionsformen verallgemeinert werden, indem ein Nullzeichen (hier symbolisiert durch *symbolisiert), wo immer ein Zeichen gelöscht oder eingefügt wurde:

  • Einfügung: CO*tCOat
  • Streichung: COatCO*t
  • Auswechslung: COatCOst

Einige ungefähre Spieler behandeln auch Transposition, in denen die Positionen von zwei Buchstaben in der Saite ausgetauscht werden, um eine primitive Operation zu sein.[2]

  • Transposition: COstCOts

Unterschiedliche ungefähre Matcher stellen unterschiedliche Einschränkungen auf. Einige Matcher verwenden eine einzelne globale ungewichtete Kosten, dh die Gesamtzahl der primitiven Vorgänge, die erforderlich sind, um die Übereinstimmung in das Muster umzuwandeln. Zum Beispiel, wenn das Muster ist Spule, vereiteln unterscheidet sich durch eine Substitution, Spulen durch ein Einfügen, Öl durch eine Löschung und Fohlen von zwei Substitutionen. Wenn alle Operationen als einzelne Kosteneinheit gelten und das Limit auf eins eingestellt ist, vereiteln, Spulen, und Öl wird als Übereinstimmungen zählen, während Fohlen wird nicht.

Andere Matcher geben die Anzahl der Operationen jedes Typs getrennt an, während noch andere die Gesamtkosten festlegen, aber unterschiedliche Gewichte für unterschiedliche Vorgänge zugeordnet werden können. Einige Matcher ermöglichen separate Zuordnungen von Grenzen und Gewichten für einzelne Gruppen im Muster.

Problemformulierung und Algorithmen

Eine mögliche Definition des ungefähren String -Matching -Problems ist Folgendes: Bei einer Musterzeichenfolge gegeben und eine Textzeichenfolge Finden Sie ein Substring in T, was von allen Unterstrings von T, hat die kleinste Bearbeitungsentfernung zum Muster P.

Ein Brute-Force-Ansatz wäre die Berechnung der Bearbeitungsentfernung zu P für alle Substrings von T und dann das Substring mit der minimalen Entfernung auszuwählen. Dieser Algorithmus hätte jedoch die Laufzeit O(n3 m).

Eine bessere Lösung, die von Verkäufern vorgeschlagen wurde[3], beruht auf Dynamische Programmierung. Es verwendet eine alternative Formulierung des Problems: für jede Position j im Text T und jede Position i im Muster PBerechnen Sie den minimalen Bearbeitungsabstand zwischen dem i Erste Zeichen des Musters, , und jedes Substring von T das endet an Position j.

Für jede Position j im Text Tund jede Position i im Muster P, gehen Sie alle Substrings von durch T an Position enden j, und bestimmen Sie, welcher von ihnen die minimale Bearbeitungsentfernung zur i Erste Zeichen des Musters P. Schreiben Sie diese minimale Entfernung als E(iAnwesendj). Nach dem Computer E(iAnwesendj) für alle i und jWir können leicht eine Lösung für das ursprüngliche Problem finden: Es ist das Substring, für das E(mAnwesendj) ist minimal (m Die Länge des Musters sein P.))

Computer E(mAnwesendj) ist dem Berechnen des Bearbeitungsabstands zwischen zwei Zeichenfolgen sehr ähnlich. In der Tat können wir das verwenden Levenshtein Distanz Computeralgorithmus zum E(mAnwesendj), der einzige Unterschied besteht darin E(i- 1,j), E (i,j- 1) oder E(i- 1,j- 1) beim Computing E(iAnwesendj).

Im Array mit dem enthält das E(xAnwesendy) Werte, dann wählen wir den minimalen Wert in der letzten Zeile, lassen Sie es sein E(x2Anwesendy2) und folgen Sie dem Berechnungsweg zurück zu der Zeilennummer 0. Wenn das Feld, auf dem wir angekommen sind, war E(0,,y1), dann T[y1+1] ...T[y2] ist ein Substring von T mit der minimalen Bearbeitungsentfernung zum Muster P.

Berechnung der E(xAnwesendy) Array nimmt O(mn) Zeit mit dem dynamischen Programmieralgorithmus, während die rückwärts arbeitende Phase dauert O(n+m) Zeit.

Eine weitere jüngste Idee ist die Ähnlichkeit. Wenn die Datenbank übereinstimmt, bezieht sich die Datenbank auf eine große Auswahl an Daten, die O(mn) Die Zeit mit dem dynamischen Programmieralgorithmus kann nicht innerhalb einer begrenzten Zeit funktionieren. Die Idee ist also, die Anzahl der Kandidatenpaare zu verringern, anstatt die Ähnlichkeit von zu berechnen alle Streicherpaare. Weit verbreitete Algorithmen basieren auf Filterverifizierung, Hashing, Lokalempfindliches Hashing (LSH), Versuche und andere gierige und Näherungsalgorithmen. Die meisten von ihnen sind so konzipiert, dass sie zu einem Rahmen (z. B. Map-Reduce) passen, um gleichzeitig zu berechnen.

Online gegen Offline

Traditionell werden ungefähre Zeichenfolgen -Matching -Algorithmen in zwei Kategorien eingeteilt: online und offline. Bei Online-Algorithmen kann das Muster vor der Suche verarbeitet werden, der Text jedoch nicht. Mit anderen Worten, Online-Techniken suchen ohne Index. Frühe Algorithmen für eine online-ungefähre Übereinstimmung wurden von Wagner und Fisher vorgeschlagen[4] und von Verkäufern[5]. Beide Algorithmen basieren auf Dynamische Programmierung aber unterschiedliche Probleme lösen. Der Algorithmus der Verkäufer sucht ungefähr nach einem Substring in einem Text, während der Algorithmus von Wagner und Fisher berechnet Levenshtein -Entfernungnur für die Fuzzy -Suche von Wörterbuch zu sein.

Online-Suchtechniken wurden wiederholt verbessert. Die vielleicht berühmteste Verbesserung ist die Bitap -Algorithmus (Auch als Schicht- und Verschiebungs- und Algorithmus bekannt), was für relativ kurze Musterzeichenfolgen sehr effizient ist. Der Bitap -Algorithmus ist das Herz der Unix Suche Dienstprogramm Agrep. Eine Überprüfung der Online-Suchalgorithmen wurde von G. Navarro durchgeführt.[6]

Obwohl sehr schnelle Online-Techniken vorhanden sind, ist ihre Leistung für große Daten inakzeptabel. Textvorverarbeitung oder Indizierung macht die Suche dramatisch schneller. Heute wurden verschiedene Indizierungsalgorithmen vorgestellt. Unter ihnen sind Suffixbäume[7], Metrikbäume[8] und N-Gramm Methoden.[9][10] Eine detaillierte Übersicht über Indexierungstechniken, mit der man ein willkürliches Substring in einem Text finden kann, wird von Navarro angegeben et al.[11] Eine rechnerische Übersicht über Wörterbuchmethoden (d. H. Methoden, die es ermöglichen, alle Wörterbuchwörter zu finden, die ungefähr mit einem Suchmuster übereinstimmen) wird von Boytsov gegeben[12].

Anwendungen

Häufige Anwendungen der ungefähren Übereinstimmung umfassen Rechtschreibprüfung.[13] Mit der Verfügbarkeit großer Mengen an DNA -Daten, die übereinstimmen Nukleotid Sequenzen sind zu einer wichtigen Anwendung geworden.[14] Ungefähre Übereinstimmung wird auch in verwendet Spamfilterung.[15] Aufzeichnungsverknüpfung ist eine gemeinsame Anwendung, bei der Datensätze aus zwei unterschiedlichen Datenbanken übereinstimmen.

Die String -Matching kann nicht für die meisten binären Daten wie Bilder und Musik verwendet werden. Sie benötigen unterschiedliche Algorithmen, wie z. akustischer Fingerabdruck.

Siehe auch

Verweise

  • ^ Baeza-yates, R.; Navarro, G. (Juni 1996). "Ein schnellerer Algorithmus für die ungefähre Zeichenfolge". In Dan Hirchsberg; Gene Myers (Hrsg.). Kombinatorische Musteranpassung (CPM'96), LNCS 1075. Irvine, ca. S. 1–23. Citeseerx 10.1.1.42.1593.
  • ^ Baeza-yates, R.; Navarro, G. "Schnelle ungefähre Zeichenfolge, die in einem Wörterbuch passt" (PDF). Proc. Spire'98. IEEE CS Press. S. 14–22.
  • ^ Boytsov, Leonid (2011). "Indexierungsmethoden für das ungefähre Wörterbuchsuche: Vergleichende Analyse". Journal of Experimental Algorithmics. 16 (1): 1–91. doi:10.1145/1963190.1963191. S2CID 15635688.
  • ^ Cormen, Thomas; Leiserson, Rivest (2001). Einführung in Algorithmen (2. Aufl.). MIT Press. S. 364–7. ISBN 978-0-262-03293-3.
  • ^ Galil, ZVI; Apostolico, Alberto (1997). Musteranpassungsalgorithmen. Oxford [Oxfordshire]: Oxford University Press. ISBN 978-0-19-511367-9.
  • ^ Gusfield, Dan (1997). Algorithmen für Zeichenfolgen, Bäume und Sequenzen: Informatik und Computerbiologie. Cambridge, Großbritannien: Cambridge University Press. ISBN 978-0-521-58519-4.
  • ^ Myers, G. (Mai 1999). "Ein schneller Bit-Vektor-Algorithmus für die ungefähre Zeichenfolge Matching basierend auf dynamischer Programmierung" (PDF). Journal of the ACM. 46 (3): 395–415. doi:10.1145/316542.316550. S2CID 1158099.
  • ^ Navarro, Gonzalo (2001). "Eine geführte Tour zur ungefähren String -Matching". ACM Computing -Umfragen. 33 (1): 31–88. Citeseerx 10.1.1.96.7225. doi:10.1145/375360.375365. S2CID 207551224.
  • ^ Navarro, Gonzalo; Baeza-yates, Ricardo; Sutinen, Erkki; Tarhio, Jorma (2001). "Indexierungsmethoden für die ungefähre Zeichenfolge Matching" (PDF). IEEE Data Engineering Bulletin. 24 (4): 19–27.
  • ^ Sellers, Peter H. (1980). "Die Theorie und Berechnung der evolutionären Entfernungen: Mustererkennung". Journal of Algorithmen. 1 (4): 359–73. doi:10.1016/0196-6774 (80) 90016-4.
  • ^ Skiena, Steve (1998). Algorithmus -Designhandbuch (1. Aufl.). Springer. ISBN 978-0-387-94860-7.
  • ^ Ukkonen, E. (1985). "Algorithmen für die ungefähre Zeichenfolge Matching". Informationen und Kontrolle. 64 (1–3): 100–18. doi:10.1016/s0019-9958 (85) 80046-2.
  • ^ Wagner, R.; Fischer, M. (1974). "Das Problem der String-to-String-Korrektur". Journal of the ACM. 21: 168–73. doi:10.1145/321796.321811. S2CID 13381535.
  • ^ Zobel, Justin; Dart, Philip (1995). "Ungefähre Übereinstimmungen in großen Lexikonen finden". Software: Übung und Erfahrung. 25 (3): 331–345. Citeseerx 10.1.1.14.3856. doi:10.1002/spe.4380250307. S2CID 6776819.

Externe Links