Erzeugung von Zufallszahlen Sätze von benutzerdefinierten text in Python-NLTK?
Ich habe Probleme mit dem NLTK unter Python, speziell die .generate () - Methode.
generieren(self, length=100)
Print random text, generiert mit einem Trigramm Sprachmodell (language model).
Parameter:
* length (int) - The length of text to generate (default=100)
Hier ist eine vereinfachte version von dem, was ich bin versucht.
import nltk
words = 'The quick brown fox jumps over the lazy dog'
tokens = nltk.word_tokenize(words)
text = nltk.Text(tokens)
print text.generate(3)
Diese wird immer generieren
Building ngram index...
The quick brown
None
Als gegen einen zufälligen Satz aus den Wörtern.
Hier ist meine Ausgabe, wenn ich
print text.generate()
Building ngram index...
The quick brown fox jumps over the lazy dog fox jumps over the lazy
dog dog The quick brown fox jumps over the lazy dog dog brown fox
jumps over the lazy dog over the lazy dog The quick brown fox jumps
over the lazy dog fox jumps over the lazy dog lazy dog The quick brown
fox jumps over the lazy dog the lazy dog The quick brown fox jumps
over the lazy dog jumps over the lazy dog over the lazy dog brown fox
jumps over the lazy dog quick brown fox jumps over the lazy dog The
None
Wieder angefangen mit dem gleichen text, aber dann variiert werden. Ich habe auch versucht, mit dem ersten Kapitel aus Orwells 1984. Wieder, dass immer beginnt mit dem ersten 3-Token (eines davon ist ein Raum in diesem Fall) und dann geht auf, um nach dem Zufallsprinzip generieren text.
Was mache ich hier falsch?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Generieren zufällige text -, U verwenden müssen Markov-Ketten
code: von hier aus
Erklärung:
Generierung von pseudo-random-text mit Markov-Ketten mit Python
Sollte man sein "training" das Markov-Modell mit mehreren Sequenzen, so dass Sie genau Beispiel die Start-Wahrscheinlichkeiten sowie (genannt "pi" in Markov-sprechen). Wenn Sie eine einzelne Sequenz, dann werden Sie beginnen immer im gleichen Zustand.
Im Fall von Orwell ' s 1984 würden Sie wollen, um Satz tokenisierung erste (NLTK ist sehr gut darin), dann word tokenization (woraus sich eine Liste der Listen von tokens, nicht nur eine Liste von tokens) und dann füttern Sie jeden Satz separat zu den Markov-Modell. Dies wird es ermöglichen, richtig Modell-Sequenz startet, anstatt fest auf eine einzige Art und Weise zu Beginn jeder Sequenz.
Ihre Probe Korpus wird wahrscheinlich zu klein sein. Ich weiß nicht, wie genau nltk baut seine Trigramm-Modell, aber es ist gängige Praxis, dass Anfang und Ende von Sätzen behandelt werden, irgendwie. Da gibt es nur einen Anfang des Satzes in dem Korpus dies könnte der Grund sein, warum jeder Satz hat den gleichen Anfang.
Vielleicht können Sie die Sortierung der Token-array zufällig vor der Generierung eines Satzes.
Sind Sie sicher, dass die Verwendung
word_tokenize
ist der richtige Ansatz?Diese Google Gruppen Seite hat das Beispiel:
Aber ich habe noch nie verwendet, nltk, so kann ich nicht sagen, ob das so funktioniert, wie Sie wollen.