2

我能够使用斯坦福解析器和下面的java代码解析一个句子并获得解析分数

LexicalizedParser lp = LexicalizedParser.loadModel(
    "edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz"
);

lp.setOptionFlags(new String[]{"-maxLength", "80", "-retainTmpSubcategories"});

String sent = "My name is Rahul";
Tree parse = (Tree) lp.apply(sent);
double score = parse.score();

有没有办法使用斯坦福解析器给出的解析分数来检查句子的语法性?

谢谢。

4

2 回答 2

4

与@kutschkem 相比,我想说答案不是一个硬性的“不”,而是一个非常谨慎的“也许”。这绝对是一个活跃的研究领域。我已经看到(未发表的)工作表明长度归一化的解析分数(内部概率)表现出双峰分布,手动注释的“更差”句子通常落入较低的峰值,而“更好”的句子进入更高的峰值。那是针对一个特定的语料库(推文,如果我没记错的话),我不知道它是否在其他地方被复制。

更一般地说,句法解析信息对语法分类很有帮助,但可能不是唯一的分类特征。你可以看看 Joel Tetrault 和他在 ETS 工作的研究团队的一些工作。都柏林的 Jennifer Foster 在这方面也做了一些工作。他们的论文(和他们的参考书目)应该让你开始。

但是(不幸的是)构建一个有用的分类器并不像提取内部解析分数那么容易。

于 2013-04-04T05:47:48.017 回答
1

所以你的问题是你是否可以检查句子在语法上是否正确?答案是不。例如,我曾经尝试通过简单的单词替换来生成问题并比较单词所有排列的解析分数。(我知道,这种方法很糟糕,但可以作为一个很好的例子)。然而,问题是,没有意义的句子(我不完全确定语法)的排名高于任何实际上是问题的排列。看到问题在用于训练语言模型的语料库中可能很少见,人们可以期待这种行为。如果你的分数很低,那只是意味着你的句子结构不常见,而不是语法不正确。实际上,语法错误的句子根本不应该被解析。说实话,

顺便提一句。“My Rahul is name”在语法上也是正确的;-)(好的,取决于你的语法)

于 2013-04-03T17:14:28.837 回答