http://www.nltk.org/book-にあるpythonの正規表現とNLTKでさまざまなテキストを処理しようとしています。ランダム テキスト ジェネレーターを作成しようとしていますが、少し問題があります。まず、私のコードフローは次のとおりです。
入力として文を入力 - これはトリガー文字列と呼ばれ、変数に割り当てられます -
トリガー文字列で最も長い単語を取得する
Project Gutenberg データベースで、この単語 -regardless of uppercase Lowercase- を含む文を検索します。
ステップ 3 で話した単語を含む最も長い文を返します
ステップ 1 とステップ 4 の文を一緒に追加します。
ステップ 4 のセンテンスを新しい「トリガー」センテンスとして割り当て、プロセスを繰り返します。2番目の文で最も長い単語を取得し、そのように続ける必要があることに注意してください-
これまでのところ、これを行うことができたのは一度だけです。これを続けようとすると、プログラムは検索結果の最初の文だけを出力し続けます。実際には、この新しい文で最も長い単語を探し、上記のコード フローを適用し続ける必要があります。
以下は私のコードとサンプルの入力/出力です:
サンプル入力
「コードの番人」
サンプル出力
「暗号の領主ノルウェー自身、恐ろしい数で、その最も不誠実な裏切り者、コーダーの領主に助けられて、小さな紛争を始めた.反抗的なアルメはアルメを獲得し、彼の怠惰な精神を抑制し、結論として、勝利者は対に陥った」
これで、実際には「Norway hime....」で始まる文を取得し、その中で最も長い単語を探し、上記の手順を実行する必要がありますが、そうではありません。助言がありますか?ありがとう。
import nltk
from nltk.corpus import gutenberg
triggerSentence = raw_input("Please enter the trigger sentence: ")#get input str
split_str = triggerSentence.split()#split the sentence into words
longestLength = 0
longestString = ""
montyPython = 1
while montyPython:
#code to find the longest word in the trigger sentence input
for piece in split_str:
if len(piece) > longestLength:
longestString = piece
longestLength = len(piece)
listOfSents = gutenberg.sents() #all sentences of gutenberg are assigned -list of list format-
listOfWords = gutenberg.words()# all words in gutenberg books -list format-
# I tip my hat to Mr.Alex Martelli for this part, which helps me find the longest sentence
lt = longestString.lower() #this line tells you whether word list has the longest word in a case-insensitive way.
longestSentence = max((listOfWords for listOfWords in listOfSents if any(lt == word.lower() for word in listOfWords)), key = len)
#get longest sentence -list format with every word of sentence being an actual element-
longestSent=[longestSentence]
for word in longestSent:#convert the list longestSentence to an actual string
sstr = " ".join(word)
print triggerSentence + " "+ sstr
triggerSentence = sstr