Я пытаюсь обрабатывать различные тексты с помощью регулярных выражений и NLTK Python, которые находятся по адресу http://www.nltk.org/book-. Я пытаюсь создать генератор случайного текста, и у меня возникла небольшая проблема. Во-первых, вот мой поток кода:
Введите предложение в качестве входных данных — это называется триггерной строкой и назначается переменной.
Получить самое длинное слово в строке триггера
Искать во всей базе данных Project Gutenberg предложения, содержащие это слово, независимо от заглавных и строчных букв.
Верните самое длинное предложение, в котором есть слово, о котором я говорил на шаге 3.
Добавьте предложение на шаге 1 и шаге 4 вместе
Назначьте предложение на шаге 4 новым «триггерным» предложением и повторите процесс. Обратите внимание, что я должен получить самое длинное слово во втором предложении и продолжать в том же духе и так далее.
Пока мне удалось это сделать только один раз. Когда я пытаюсь продолжить, программа продолжает печатать только первое предложение, которое дает мой поиск. На самом деле он должен искать самое длинное слово в этом новом предложении и продолжать применять мой поток кода, описанный выше.
Ниже приведен мой код вместе с образцом ввода/вывода:
Пример ввода
«Тан кода»
Пример вывода
"Тан кодекса Норвегия сам, с ужасным числом, С помощью самого нелояльного Предателя, Тана Кавдора, начал унылый Конфликт, Пока жених Беллоны, купающийся в доказательствах, Противостоял ему с самосравнениями, Точкой против точки, мятежный Арме побеждал Арме, Обуздывая свой сластолюбивый дух: и, в заключение, Победа пала на нас».
Теперь это должно фактически взять предложение, начинающееся с «самой Норвегии….», и найти в нем самое длинное слово, выполнить шаги, описанные выше, и т. д., но это не так. Какие-либо предложения? Спасибо.
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