使用stanford解析器生成句子

时间:2017-10-11 14:57:52

标签: python parsing nlp nltk stanford-nlp

我正在尝试使用斯坦福解析器生成类似的句子。 步骤:

1.使用斯坦福大学图书馆输入句子。

2.从解析的句子生成生产规则

3.更换一些终端值

4.使用nltk.parse.generate

中的generate()函数重新生成句子

我有三个疑问:

1.StanfordParser总是生成有限的生产规则吗?

2.使用生成函数时,对于少数句子,我收到以下错误。

“RuntimeError:调用Python对象时超出了最大递归深度”

当我使用sys.setrecursionlimit(0x10000000)设置递归限制时,我收到错误:“Segmentation fault:11”

2.1我可以增加递归限制吗?

2.2如何解决这个问题?

3这是正确的做法吗?我该如何改进呢?

1 个答案:

答案 0 :(得分:2)

功能nltk.parse.generate.generate()旨在生成所有语法的产生。这意味着即使是单个递归规则,例如NP中的NP(一直发生)也会给你无限递归。如文档所示,您可以通过限制递归深度来控制它(例如,depth=20)。如果您愿意,还可以指定要生成的树的数量(n=100)。

限制将解决无限递归问题,但他们并不保证您会喜欢结果。 generate()按顺序插入所有可能的扩展,因此如果第一个规则是递归的,它将被一次又一次地使用。例如,如果选择生成的第50个树,您可能会得到更好的结果;但是如果你检查一下你生成的语法的结构,你就会得到最好的结果,然后编写你自己的生成器,在可能的扩展中做出随机选择。