Ich denke darüber nach, ein Programm zu schreiben, das mir die gebräuchlichsten Sätze in einem großen Teil des Textes sammelt. Wäre das Problem auf das bloße Finden von Wörtern reduziert worden, so wäre das so einfach wie das Speichern jedes neuen Wortes in einer Hash-Map und dann das Erhöhen der Zählung bei jedem Auftreten. Aber mit Phrasen scheint es unmöglich, jede Permutation eines Satzes als Schlüssel zu speichern.
Im Grunde ist das Problem darauf beschränkt, herauszufinden, wie man jede mögliche Phrase aus einem ausreichend großen Text extrahiert. Das Zählen der Phrasen und dann die Sortierung nach der Anzahl der Vorkommen wird trivial.
Ich nehme an, dass Sie nach gemeinsamen Mustern aufeinander folgender Wörter suchen, die in derselben Reihenfolge erscheinen (zB würde "oben auf der Welt" nicht als dieselbe Phrase wie "Spitze einer Welt" oder "die Welt der Spitze" gezählt) ).
Wenn ja, würde ich den folgenden linearen Zeitansatz empfehlen:
Sie sind jetzt in der Lage, Ihre gebräuchlichen Sätze zu sammeln.
Es ist nicht ganz klar, wie Sie das Ende einer Phrase bestimmen wollen. Eine Möglichkeit besteht darin, einfach alle Sequenzen von 4 Wörtern, die sich wiederholen, zu sammeln.
Dies kann in linearer Zeit geschehen, indem Sie durch Ihr Suffix-Array gehen und auf Orte schauen, wo das längste gemeinsame Präfix-Array & gt; = 4 ist. Jeder Durchlauf von Indizes x im Bereich [start + 1 ... start + len] wo der LCP [x] & gt; = 4 (für alle außer dem letzten Wert von x) entspricht einer Phrase, die len mal wiederholt wird. Der Ausdruck selbst wird durch die ersten 4 Wörter gegeben, zum Beispiel Suffix start + 1.
Beachten Sie, dass dieser Ansatz möglicherweise Sätze erkennt, die Satzende überschreiten. Sie können es vorziehen, einige Interpunktionszeichen wie Vollpunktzahlen in eindeutige Ganzzahlen umzuwandeln, um dies zu verhindern.
Tags und Links algorithm data-structures frequency word-frequency frequency-analysis