我正在尝试使用斯坦福解析器生成类似的句子。 步骤:
1.使用斯坦福大学图书馆输入句子。
2.从解析的句子生成生产规则
3.更换一些终端值
4.使用nltk.parse.generate
中的generate()函数重新生成句子我有三个疑问:
1.StanfordParser总是生成有限的生产规则吗?
2.使用生成函数时,对于少数句子,我收到以下错误。
“RuntimeError:调用Python对象时超出了最大递归深度”
当我使用sys.setrecursionlimit(0x10000000)设置递归限制时,我收到错误:“Segmentation fault:11”
2.1我可以增加递归限制吗?
2.2如何解决这个问题?
3这是正确的做法吗?我该如何改进呢?
答案 0 :(得分:2)
功能nltk.parse.generate.generate()
旨在生成所有语法的产生。这意味着即使是单个递归规则,例如NP中的NP(一直发生)也会给你无限递归。如文档所示,您可以通过限制递归深度来控制它(例如,depth=20
)。如果您愿意,还可以指定要生成的树的数量(n=100
)。
限制将解决无限递归问题,但他们并不保证您会喜欢结果。 generate()
按顺序插入所有可能的扩展,因此如果第一个规则是递归的,它将被一次又一次地使用。例如,如果选择生成的第50个树,您可能会得到更好的结果;但是如果你检查一下你生成的语法的结构,你就会得到最好的结果,然后编写你自己的生成器,在可能的扩展中做出随机选择。