我需要为我的一个项目解析一小部分英语,描述为具有(1级)特征结构的无上下文语法(示例),我需要有效地完成它.
现在我正在使用NLTK的解析器,它产生正确的输出,但速度非常慢.对于我的约450个相当模糊的非词典规则和50万个词条的语法,解析简单的句子可能需要2到30秒,这取决于所得到的树的数量.词条对性能几乎没有影响.
另一个问题是在开始时加载(25MB)语法+词典可能需要一分钟.
从我在文献中可以找到的,用于解析这种语法(Earley或CKY)的算法的运行时间应该与语法的大小呈线性关系,并且应该与输入令牌列表的大小相关.我对NLTK的体验表明,歧义是最能伤害表现的,而不是语法的绝对大小.
所以现在我正在寻找一个CFG解析器来取代NLTK.我一直在考虑PLY,但我不知道它是否支持CFG中的特征结构,这在我的情况下是必需的,我看到的例子似乎是在进行大量的过程解析,而不仅仅是指定语法.有人能告诉我一个PLY的例子,它既支持功能结构又使用声明性语法?
对于能够有效地完成我需要的任何其他解析器,我也没问题.Python接口是首选,但不是绝对必要的.