NLTK - генерировать текст из вероятностной контекстно-свободной грамматики (PCFG) - PullRequest
0 голосов
/ 17 февраля 2019

У меня есть контекстно-свободная грамматика, и я использую ее для создания предложений (используя NLTK в python).

# Create a CFG
from nltk import CFG
from nltk.parse.generate import generate
grammar = CFG.fromstring("""
Story -> Introduction MainQuest End
LocationInfo -> 'He found himself in a small village where he grew up.'
Introduction -> 'Long ago there was a boy who decided to become a knight.'

MainQuest -> LocationInfo 'He had to get a sword first to fight monsters' Navigate

Navigate -> '[He could go west]' GoodEnd | '[He could go east]' BadEnd
GoodEnd -> 'And he lived happily ever after.'
BadEnd -> 'Finally he died painfully.'
End -> 'The End'
""")

#print(grammar.start())
#print(grammar.productions())
for sentence in generate(grammar, n=2):
    print('\n'.join(sentence))
    print('\n')

Это просто и работает.Но теперь я хотел бы добавить вероятности к особым случаям, чтобы моя сгенерированная история могла иметь хорошее или плохое окончание на основе случайного фактора с заданными вероятностями.

Я не могу найти ни одного примера длясделайте так, и когда я передаю свой PCFG в nltk.parse.generate, он воспринимает его как CFG.

Надеюсь, вы мне поможете!

1 Ответ

0 голосов
/ 18 февраля 2019

nltk.parse.generate.generate не дает случайных предложений.Он возвращает итератор, который выдает каждое возможное предложение ровно один раз, пока не будет сгенерировано требуемое количество предложений.Максимальная глубина деривации может быть ограничена, но генерация является первой по глубине;он не упорядочивает предложения по глубине деривации.

Вы можете найти исходный код здесь ;Нетрудно понять, что он делает.

Так что он полностью детерминирован и никогда не повторяется.Если вы хотите (потенциально бесконечный) поток случайно выбранных предложений, вам придется написать собственный генератор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...