我能够解析一个句子并使用斯坦福解析器获得解析得分,其中包含以下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();
有没有办法用Stanford解析器给出的解析得分来检查句子的语法?
感谢。
答案 0 :(得分:4)
与@kutschkem形成鲜明对比的是,我认为答案不是“不”,而是“非常谨慎”。这绝对是一个活跃的研究领域。我已经看到(未发表)的工作表明长度标准化的解析得分(内部概率)表现出双峰分布,手动注释的“更差”句子通常落入较低的峰值,而“更好”的句子则表示较高的句子。这是针对一个特定的语料库(推文,如果我没记错的话),我不知道它是否被复制到其他地方。
更一般地说,句法分析信息在分类语法方面非常有用,但可能不是唯一的分类功能。您可以看一下Joel Tetrault和他在ETS工作的研究团队的一些工作。都柏林的詹妮弗福斯特也在这方面做了一些工作。他们的论文(和他们的参考书目)应该让你开始。
但是(不幸的是)构建一个有用的分类器并不像提取内部解析分数那么容易。
答案 1 :(得分:1)
所以你的问题是你是否可以检查句子在语法上是否正确?答案是不。作为一个例子,我曾经尝试通过简单的单词替换产生问题并比较单词的所有排列的解析得分。 (我知道,这种做法很糟糕,但却是一个很好的例子)。然而,问题在于,没有意义的句子(我不完全确定语法性)的排名高于任何实际问题的排列。在用于训练语言模型的语料库中看到问题可能很少见,人们可以期待这种行为。 如果你的分数很低,那只意味着你的句子有一个不常见的结构,而不是在语法上不正确。实际上,语法不正确的句子根本不应该被解析。说实话,只有少数几个在语法上是不正确的。
顺便说一下。 "我的Rahul是名字"在语法上也是正确的;-)(好的,取决于你的语法)