【问题标题】:Generating Sentences *Randomly* Given a CFG在给定 CFG 的情况下*随机*生成句子
【发布时间】:2019-10-03 15:55:46
【问题描述】:

我想根据给定的上下文无关语法随机生成句子。

随机是重要的部分,因为我的语法非常大,NLTK 生成所有可能的递归不足的话语(即E -> A E)并且需要很长时间才能在短时间内生成“有趣”的话语(有趣不同于当前话语之前的其他话语)。

是否有任何 Python 库可以做到这一点?谢谢!

【问题讨论】:

  • 你的CFG是什么样子的;即它是什么类型的?
  • @L3viathan 它在 EBNF 中。
  • 并且所有可能的扩展都是同样可能的;你没有 PCFG?
  • 它是一种编程语言的 CFG,所以是的,它们都有同样的可能性(或者可以假设如此)。
  • 啊,那我被你提到的 NLTK 弄糊涂了。那时我不知道有任何这样的库;只需将您的语法解析为字典并迭代扩展以 ["start"] 开头的列表,直到无法进行更多扩展。

标签: python random context-free-grammar


【解决方案1】:

NLTK 不提供从语法生成随机句子的方法,尽管如相关的 SO 问题 How to use NLTK to generate sentences from an induced grammar? 中所述,它可以从三元组生成随机句子。

如果您想编写自己的 Python 函数,您可能会对 Bruce Mackenzie 1997 年的这篇论文感兴趣,Generating Strings at Random from a Context Free Grammar。 (我在this answer to a different SO question 中找到了链接。)该算法涉及在 O(N2) 预处理步骤中预先计算权重,并且要求语法没有 epsilon 产生式(扩展为空字符串的产生式) )。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-08
  • 1970-01-01
  • 2018-09-21
相关资源
最近更新 更多