2011-03-27 116 views
7

我的工作是在一个句子中查找一个查询(可以是noun+verb),然后提取该对象。斯坦福分析器:如何提取依赖关系?

例:"coding is sometimes a tough work."我的查询会是:"coding is"

的类型依赖我得到的是:

nsubj(work-6, coding-1) 
cop(work-6, is-2)  
advmod(work-6, sometimes-3) 
det(work-6, a-4) 
amod(work-6, tough-5) 

我的程序应提取nsubj依赖,确定"coding"作为查询和保存"work"

可能这看起来很简单,但直到现在,我没有找到一种方法能够提取特定类型的依赖关系,我真的需要这样做才能完成我的工作。

任何帮助是值得欢迎的,

+0

哪种编程语言是您使用? – Kaarel 2011-03-29 09:27:20

+0

我正在使用java,但对于这个旧的评论,我找到了解决方案,我使用了StringTokonizer 2次,用“(”作为分隔符,然后是机智“,”,最后我把解压缩的标记放在一个xml文件中 – 2011-05-12 08:15:03

回答

1

我不认为有一种方式来告诉解析器提取围绕给定词的依赖关系。但是,您可以遍历每个句子的依存关系列表,搜索查询词出现在nsubj关系中的所有实例。

另外,你如何存储句子的分析?如果(就像我从你的问题中收集到的)它是在一个文本文件中,你可以使用2个连续的greps,一个用于查询单词,另一个用于你想要的关系,以获得相关其他单词的列表。

10

您可以找到下面的代码依赖:

Tree tree = sentence.get(TreeAnnotation.class); 
// Get dependency tree 
TreebankLanguagePack tlp = new PennTreebankLanguagePack(); 
GrammaticalStructureFactory gsf = tlp.grammaticalStructureFactory(); 
GrammaticalStructure gs = gsf.newGrammaticalStructure(tree); 
Collection<TypedDependency> td = gs.typedDependenciesCollapsed(); 
System.out.println(td); 

Object[] list = td.toArray(); 
System.out.println(list.length); 
TypedDependency typedDependency; 
for (Object object : list) { 
typedDependency = (TypedDependency) object; 
System.out.println("Depdency Name"typedDependency.dep().nodeString()+ " :: "+ "Node"+typedDependency.reln()); 
if (typedDependency.reln().getShortName().equals("something")) { 
    //your code 
} 
+0

代码是在Java中,它很好地解决了NLP领域的问题,特别是针对斯坦福大学核心NLP API。 @Alain对解决问题没有意义吗? – Imran 2013-03-11 09:23:33

+0

没问题,但通常在SO上接受和支持的答案涉及到即使代码非常简单,也可以通过调整您的示例用例来解决原始问题?无论哪种方式,恐怕您都不会从作者处获得更多反馈因为这个问题在2年内没有任何活动。 – Alain 2013-03-11 09:29:02

相关问题