高效的上下文无关语法分析器,最好是Python友好的

2024-05-17 23:43:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要为我的一个项目解析一小部分英语,它被描述为具有(1级)特征结构(example)的上下文无关语法,我需要高效地完成它。

现在我正在使用NLTK的解析器,它生成正确的输出,但速度非常慢。对于我的语法来说,450个相当模糊的非词汇规则和50万个词条,解析简单的句子可能需要2到30秒,这取决于生成的树的数量。词条对性能几乎没有影响。

另一个问题是,在一开始加载(25MB)语法+词汇可能需要一分钟的时间。

根据我在文献中的发现,用于解析此类语法的算法(Earley或CKY)的运行时间应该与语法的大小成线性关系,与输入令牌列表的大小成立方关系。我对NLTK的经验表明,歧义是影响性能的最大因素,而不是语法的绝对大小。

所以现在我正在寻找一个CFG解析器来代替NLTK。我一直在考虑PLY但是我不知道它是否支持cfg中的特性结构,这在我的例子中是必需的,我看到的例子似乎在做大量的过程性分析,而不仅仅是指定语法。有谁能给我举一个例子来说明PLY既支持特征结构又使用声明式语法吗?

我也可以与任何其他解析器,可以做我需要的有效。Python接口是可取的,但不是绝对必要的。


Tags: 项目解析器规则example时间语法特征性能