Wie die früheren Leute erwähnen, ist der Suffixbaum das beste Werkzeug für den Job. Meine Lieblings-Site für Suffix-Bäume ist Ссылка . Es listet alle nützlichen Verwendungen von Suffixbäumen auf einer Seite auf und enthält eine eingebettete Test js
-Anwendung, um Strings zu testen und Beispiele durchzuarbeiten.
In der Theorie
In der Praxis
Ich vermute, Sie analysieren ein Dokument mit natürlichen Wörtern (z. B. Englisch) und Sie möchten etwas mit den gesammelten Daten tun.
In diesem Fall möchten Sie vielleicht einfach eine schnelle n-gram Analyse für ein kleines n machen, wie zum Beispiel n = 2 oder 3. Sie könnten beispielsweise Ihr Dokument in eine Liste von Wörtern zerlegen, indem Sie Zeichensetzung, Großschreibung und Wortstämme ausstreichen (running, läuft beides - & gt; 'run'), um semantische Übereinstimmungen zu erhöhen. Dann erstellen Sie einfach eine Hash-Map (z. B. hash_map in C ++, ein Wörterbuch in Python usw.) für jedes angrenzende Wortpaar bis zur Anzahl der Vorkommen. Am Ende erhalten Sie einige sehr nützliche Daten, die sehr schnell zu programmieren waren, und nicht verrückt langsam zu laufen.
Suffix-Bäume sind eine gute Möglichkeit, dies zu implementieren. Der untere Teil dieses Artikels enthält Links zu Implementierungen in verschiedenen Sprachen.
Wie Jmah sagte, können Sie Suffixbäume / Suffix-Arrays dafür verwenden.
Es gibt eine Beschreibung eines Algorithmus, den Sie hier verwenden können (siehe Abschnitt 3.1).
Sie finden eine ausführlichere Beschreibung in dem von ihnen zitierten Buch (Gusfield, 1997), das tgamblin 17.09.2008 23:33
Angenommen, Sie erhalten ein sortiertes Array A mit n Einträgen (i = 1,2,3, ..., n)
%Vor%Dieser Algo läuft um O (n) Zeit.
Tags und Links algorithm language-agnostic parsing