繁体   English   中英

NLTK-从概率上下文无关语法(PCFG)生成文本

[英]NLTK - generate text from probabilistic context free grammar (PCFG)

我有一个上下文无关的语法,并用它来创建句子(在python中使用NLTK)。

# 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。

希望你能帮帮我!

nltk.parse.generate.generate不会产生随机句子。 它返回一个迭代器,该迭代器精确地生成每个可能的句子一次,直到生成请求数量的句子为止。 可以限制最大派生深度,但是生成是深度优先的。 它不按派生深度对句子排序。

您可以在这里找到源代码 不难看出它在做什么。

因此,它完全是确定性的,永远不会重复。 如果您想要(可能是无限的)随机选择的句子流,则必须编写自己的生成器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM