www.wikidata.de-de.nina.az
In der Informatik sind String Matching Algorithmen eine Gruppe von Algorithmen die das Finden von Textsegmenten in einer Zeichenkette englisch string anhand eines vorgegebenen Suchmusters beschreiben Sie zahlen somit zur Klasse der Zeichenkettenalgorithmen Im engeren Sinne suchen diese Algorithmen nach exakten Ubereinstimmungen englisch matches Im weiteren Sinne sind auch Algorithmen gemeint die ungefahre Ubereinstimmungen zulassen wobei der Begriff ungefahr durch ein Toleranzkriterium genau definiert sein muss Das Problem besteht darin diese Aufgabe moglichst effizient zu losen In der Praxis ist dies bedeutsam wenn in grossen Textmengen wie z B einer Wikipedia Suchbegriffe gefunden werden sollen Inhaltsverzeichnis 1 Exakte Suche 1 1 Problemstellung 1 2 Losungsmethoden 1 2 1 Naiver Algorithmus 1 2 2 Endlicher Automat 1 2 3 Der Knuth Morris Pratt Algorithmus 1 2 4 Suche im Suffixbaum 1 3 Ubersicht 1 4 Weitere Algorithmen 2 Multi String Matching 2 1 Liste von Algorithmen 3 Mustervergleichssuche 4 Unscharfe Suche 5 Siehe auch 6 Weblinks 7 EinzelnachweiseExakte Suche BearbeitenProblemstellung Bearbeiten Grundsatzlich sind zwei Situationen zu unterscheiden Nach Vorgabe einer Suchmaske sollen beliebige Texte durchsucht werden Der Text ist vorgegeben und dann sollen beliebige Suchmasken im Text gefunden werden Der zweite Fall entspricht etwa der Aufgabe die Wikipedia derart aufzubereiten dass beliebige Suchmasken schnell und effizient aufgefunden werden Auch Suchmaschinen im Internet finden sich in der zweiten Situation Im Folgenden wird jedoch nur auf die erste Situation eingegangen Losungsmethoden Bearbeiten Naiver Algorithmus Bearbeiten Der einfachste Algorithmus besteht darin ein so genanntes Suchfenster von der Lange der Suchmaske uber den Text zu schieben In jeder Position der Suchmaske werden die Symbole der Maske mit denen des darunterliegenden Textes verglichen Wenn ein nicht ubereinstimmendes Symbol gefunden wird wird das Fenster um eine Position verschoben und erneut ein Vergleich angestellt wenn alle Symbole im Fenster ubereinstimmen ist die Suchmaske gefunden worden Der Algorithmus endet wenn der ganze Text vom Fenster abgesucht worden ist Dieser Algorithmus hat eine Laufzeit von der Ordnung O n m displaystyle textstyle mathcal O n cdot m nbsp wenn m die Lange der Suchmaske und n die Lange des Textes ist Pseudocode Eingabe Strings T T1 Tn und P P1 PmAusgabe q die Stellen an denen P in T auftritt for q 0 to n m do if P 1 T q 1 and P 2 T q 2 and and P m T q m then write q Uberraschenderweise ist der naive Ansatz in der Praxis sehr schnell da Fehler in naturlichsprachigen Texten nach 1 bis 2 Zeichen auftauchen Fur die englische Sprache ergibt sich eine Wahrscheinlichkeit von 1 07 Zeichen Somit ist der naive Ansatz nahezu linear schnell Dies wird auch deutlich wenn man sich den ungunstigsten Fall selbst ansieht Er lautet Text aaa aab Muster ab Derartige Falle sind in naturlich sprachlichen Texten ausserst unwahrscheinlich Endlicher Automat Bearbeiten nbsp Ein endlicher Automat zur Suche des Wortes anaxBei dem String Matching Algorithmus mit Hilfe von endlichen Automaten wird ein fur ein Alphabet S displaystyle Sigma nbsp und ein gegebenes Suchmuster der Lange m displaystyle m nbsp ein Automat Q S d q0 qm displaystyle Q Sigma delta q 0 q m nbsp mit Zustandsmenge Q qi 0 i m displaystyle textstyle Q q i mid 0 leq i leq m nbsp erstellt Dabei stellt i displaystyle textstyle i nbsp die Anzahl von ubereinstimmenden Buchstaben an der aktuellen Stelle vom Anfang des Suchmusters an betrachtet dar Zur Einfachheit sei Pi displaystyle textstyle P i nbsp das Prafix des Suchmusters bis einschliesslich des Buchstabens an der Stelle i displaystyle textstyle i nbsp Die Ubergangsfunktion d qi a displaystyle delta q i a nbsp mit a S displaystyle a in Sigma nbsp gibt nun fur 0 i m 1 displaystyle 0 leq i leq m 1 nbsp wieder einen Zustand qj displaystyle q j nbsp zuruck bei dem j displaystyle j nbsp die maximale Anzahl von Buchstaben darstellt mit der Pj displaystyle P j nbsp ein Suffix vom Wort Pia displaystyle P i a nbsp ist Also d qi a qmax j Pj ist Suffix von Pia displaystyle delta q i a q max j mid P j text ist Suffix von P i a nbsp Ist das Suchmuster gefunden wird im Endzustand verharrt also d qm a qm displaystyle delta q m a q m nbsp Der Vorteil dieses Algorithmus gegenuber dem naiven Algorithmus liegt darin dass er auch beim Finden eines nicht passenden Zeichens das erlangte Wissen uber den bereits verarbeiteten Teil der Zeichenkette nicht verwirft Angenommen wir suchen das Muster anax im Text ananax Trifft der automatenbasierte Algorithmus bei der Suche auf das Zweite n in ana n ax so wird er die ersten beiden Buchstaben verwerfen und beginnend mit anan ax weitersuchen Der naive Algorithmus hingegen hatte den kompletten bereits verarbeiteten Teil verworfen und hatte beginnend mit an anax einen nachsten Versuch begonnen Python Implementation def is suffix suffix word Uberpruft ob das suffix ein Suffix von word ist return word endswith suffix def transition pattern state event Hier wird die Ubergangsfunktion berechnet for k in range state 1 0 1 if is suffix pattern k pattern state event return k return 0 def create matcher alphabet pattern Erzeugt alle Zustande und eine Ubergangsfunktions Tabelle transition table for state in range 0 len pattern 1 for event in alphabet transition table state event transition pattern state event return transition table len pattern def match matcher text Gibt die gefundenen Treffer im Text mit dem Automaten der aus create matcher erstellt wurde transition table last state matcher matches state 0 text pos 0 for text pos in range 0 len text state transition table state text text pos if state last state matches append text pos last state 1 return matches def find alphabet pattern text matcher create matcher alphabet pattern return match matcher text Der Knuth Morris Pratt Algorithmus Bearbeiten Der Knuth Morris Pratt Algorithmus baut auf dem naiven Suchalgorithmus auf Wesentlicher Unterschied ist dass das Vergleichsfenster nicht immer um nur eine Position weitergeruckt wird sondern eventuell um mehr als eine Position Dazu muss zu Anfang die Suchmaske analysiert werden so dass bei jeder teilweisen Ubereinstimmung etwa der ersten k Symbole bekannt ist ob der Anfang der Suchmaske mit dem Ende der letzten ubereinstimmenden Teilmaske ubereinstimmt Die Verschiebung der Suchmaske erfolgt nach der uberlappenden Ubereinstimmung zusatzlicher Vorteil ist dass die schon verglichenen Symbole nicht noch einmal verglichen werden mussen Suche im Suffixbaum Bearbeiten Insbesondere wenn der zu durchsuchende Text im Voraus bekannt ist und in diesem spater nach vielen unterschiedlichen Mustern gesucht werden soll bietet sich die Konstruktion eines Suffixbaums an Diese Konstruktion kann in O n displaystyle textstyle mathcal O n nbsp erfolgen Anschliessend kann jedes Muster ohne erneute Vorbereitung des Texts in O m displaystyle textstyle mathcal O m nbsp gesucht werden Sofern es vorhanden ist kann man von der Quelle des Suffixbaums den entsprechenden Knoten erreichen ansonsten schlagt die Suche fehl es ist kein entsprechender Knoten vorhanden 1 Ubersicht Bearbeiten Algorithmus Vorbereitungszeit SuchzeitNaiver Algorithmus 0 displaystyle 0 nbsp keine 8 n m 1 m displaystyle Theta left left n m 1 right cdot m right nbsp Rabin Karp Algorithmus 8 m displaystyle Theta left m right nbsp average 8 n m displaystyle Theta left n m right nbsp worst 8 n m displaystyle Theta left n cdot m right nbsp Endlicher Automat O m S displaystyle mathcal O left m cdot Sigma right nbsp 8 n displaystyle Theta left n right nbsp Knuth Morris Pratt Algorithmus 8 m displaystyle Theta left m right nbsp 8 n displaystyle Theta left n right nbsp Boyer Moore Algorithmus 2 8 m displaystyle Theta left m right nbsp average 8 n m displaystyle Theta left n m right nbsp worst 8 n m displaystyle Theta left n cdot m right nbsp Shift Or Algorithmus 8 m S displaystyle Theta left m Sigma right nbsp 8 n displaystyle Theta left n right nbsp Suche im Suffixbaum 8 n displaystyle Theta left n right nbsp 8 m displaystyle Theta left m right nbsp Wobei m die Lange der Suchmaske und n die Lange des Textes ist Weitere Algorithmen Bearbeiten Skip Search Algorithmus Baeza Yates Gonnet Algorithmus Shift Or oder Shift And BNDM Backward Nondeterministic Dawg Matching BOM Backward Oracle Matching Multi String Matching BearbeitenDie Suche nach mehreren Mustern in einem Text nennt sich Multi String Matching 3 Die meisten Algorithmen sind abgeleitet von einem entsprechenden String Matching Algorithmus fur genau ein Muster Eine besondere Herausforderung bei der Suche nach mehreren Suchwortern ist die Behandlungen von Wort Uberlappungen Liste von Algorithmen Bearbeiten Multi String Algorithmus passender Single String AlgorithmusMulti Shift And Shift AndAho Corasick Knuth Morris PrattCommentz Walter Boyer MooreSet Horspool HorspoolWu Manber Horspool Rabin KarpSet BOM BOMMustervergleichssuche Bearbeiten Hauptartikel Pattern Matching Die Suche nach Mustern ist zwischen unscharfer und exakter Suche anzusiedeln da der Benutzer explizit angeben muss welchen Spielraum er fur bestimmte Zeichenklassen an bestimmten String Positionen zulasst Unscharfe Suche Bearbeiten Hauptartikel unscharfe Suche und phonetische Suche Bei der unscharfen Suche entscheidet ublicherweise der Algorithmus nach Vorgabe eines Gute oder Abstandskriteriums wie gross die Abweichung von Treffern gehen darf Diese Form der Suche umfasst auch Suchen nach gleichlautenden Wortern in einem Text phonetische Suche Beispiele von Algorithmen sind Soundex Kolner PhonetikSiehe auch BearbeitenSuchverfahren Levenshtein Distanz approximative Suche Gestalt Pattern Matching approximative Suche VolltextrechercheWeblinks BearbeitenJava Animationen die die Funktionsweise so gut wie aller exakten Suchalgorithmen veranschaulichen StringSearch high performance pattern matching algorithms in Java Implementierungen vieler String Matching Algorithmen in Java BNDM Boyer Moore Horspool Boyer Moore Horspool Raita Shift Or StringsAndChars Implementierungen von String Matching Algorithmen fur ein und mehrere Muster in Java einfache und ausfuhrliche Erklarung des Boyer Moore AlgorithmusEinzelnachweise Bearbeiten Dan Gusfield Algorithms on Strings Sequences and Trees 1997 ISBN 0 521 58519 8 Kapitel 7 1 APL1 1999 korrigierte Ausgabe R S Boyer J S Moore A fast string searching algorithm In Communications of the ACM 20 Jahrgang 1977 S 762 772 doi 10 1145 359842 359859 Gonzalo Navarro Mathieu Raffinot Flexible Pattern Matching Strings Practical On Line Search Algorithms for Texts and Biological Sequences 2008 ISBN 0 521 03993 2 Abgerufen von https de wikipedia org w index php title String Matching Algorithmus amp oldid 227452349