我正在使用stanford解析器从复习句中提取出格式依赖结构。我的问题是,由于某种原因,我的代码生成的输出与生成我的stanford在线工具的输出不相似。以下是一个例子。
评论句子:相机的画质不佳。
我的代码输出(使用 EnglishPCFG 模型和 typedDependenciesCollapsed 结构)
root(ROOT-0, -LSB--1),
det(quality-4, The-2),
nn(quality-4, picture-3),
nsubj(-RSB--11, quality-4),
det(camera-7, the-6),
prep_of(quality-4, camera-7),
cop(-RSB--11, is-8),
neg(-RSB--11, not-9),
amod(-RSB--11, good-10),
ccomp(-LSB--1, -RSB--11)
斯坦福在线工具输出:
det(quality-3, The-1)
nn(quality-3, picture-2)
nsubj(good-9, quality-3)
det(camera-6, the-5)
prep_of(quality-3, camera-6)
cop(good-9, is-7)
neg(good-9, not-8)
root(ROOT-0, good-9)
我正在寻找造成这种差异的原因。在线解析器使用什么样的模型和依赖结构?如果我遗漏了一些明显的东西,我道歉。任何帮助都将受到高度赞赏。
我可以根据需要添加代码段
更新:
我更改了代码以忽略SP标记生成器生成的LSB
和RSB
,但生成的语法结构仍然与在线工具不同。这是一个例子:
评论句子 :相机的尺寸和图像质量非常完美。
我的代码输出:
det(quality-5, The-1),
nn(quality-5, size-2),
conj_and(size-2, picture-4),
nsubj(perfect-10, quality-5),
det(camera-8, the-7),
prep_of(quality-5, camera-8),
cop(perfect-10, is-9),
root(ROOT-0, perfect-10)
斯坦福在线工具输出:
det(quality-5, The-1)
nn(quality-5, size-2)
conj_and(size-2, picture-4)
**nn(quality-5, picture-4)**
nsubj(perfect-10, quality-5)
det(camera-8, the-7)
prep_of(quality-5, camera-8)
cop(perfect-10, is-9)
root(ROOT-0, perfect-10)
请注意我的代码输出中缺少nn
依赖项。我试图了解为什么会发生这种情况。任何帮助将不胜感激。
更新(下方的相关代码段):
rawWords2 = [ - LSB-,The,size,and,picture,quality,of the,camera,is,perfect,-RSB - ]
lp = 使用EnglishPCFG模型的LexicalizedParser
Tree parse = lp.apply(rawWords2.subList(1,rawWords2.size() - 1));
TreebankLanguagePack tlp = new PennTreebankLanguagePack();
GrammaticalStructureFactory gsf = tlp.grammaticalStructureFactory();
GrammaticalStructure gs = gsf.newGrammaticalStructure(parse);
tdl = (List<TypedDependency>) gs.typedDependenciesCollapsed();
System.out.println(tdl.toString());
输出到屏幕就像帖子前面提到的那样。
另一个观察结果。
我在Stanford图书馆工作,向我展示quality
和picture
之间的依赖关系,如斯坦福在线工具nn
所示,但图书馆显示的依赖关系是{ {1}}(即找不到更合适的依赖)。现在的问题是为什么斯坦福在线工具显示dep
和quality
之间的依赖关系,而斯坦福图书馆显示picture
为依赖关系。
答案 0 :(得分:2)
您是否获得额外nn
依赖关系的主要问题是协调中是否存在依赖关系的传播(size
是nn
的{{1}}并且它与quality
协调,因此我们也picture
nn
。在线输出显示带有传播的折叠输出,而您正在调用不包含传播的API方法。您可以从命令行中使用选项查看,如本文底部所示。在API中,为了获得协调传播,您应该调用
quality
(而不是gs.typedDependenciesCCprocessed()
)。
其他评论:
gs.typedDependenciesCollapsed()
)来自哪里?它们不应由tokenizer引入。如果是,那就是一个bug。你能说出你为他们做的是什么吗?我怀疑他们可能来自你的预处理?句子中出现意外的事情往往会导致解析质量下降得非常糟糕。-LSB-
列表),如果您的准确性因为您的代码编写之外的其他原因而导致其依赖名称与早期版本相同,那么您的准确性就会降低。使用命令行的差异示例:
parser-user
答案 1 :(得分:0)
根据我的观察看来,stanford在线解析器仍然在其后端使用旧版本。
我一直在使用stanford解析器一年。我们已经使用版本3.2.0很长一段时间了。当版本3.3.0发布时具有感性分析的附加功能时,我尝试使用较新版本。但是,它的依赖性在3.2.0版本中略有不同,而且产品的效率也有所降低。
如果您的要求只是提取依赖关系而不是使用情绪分析。我建议你使用3.2.0版本。
检查this page的结尾以下载早期版本的解析器。