【问题标题】:Stanford Parser: how to extract dependencies?斯坦福解析器:如何提取依赖关系?
【发布时间】:2011-03-27 12:06:39
【问题描述】:

我的工作是在一个句子中找到一个查询(可以是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"

可能这看起来很简单,但是直到现在,我还没有找到能够提取特定类型依赖的方法,我真的需要这个来完成我的工作。

欢迎任何帮助,

【问题讨论】:

  • 您使用哪种编程语言?
  • 我正在使用 java,但是对于这个旧评论,我找到了解决方案,我使用了 StringTokonizer 2 次,用“(”作为分隔符,然后是“,”。最后我把提取的标记放在一个xml 文件。

标签: parsing nlp stanford-nlp


【解决方案1】:

可以通过以下代码找到依赖:

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
}

【讨论】:

  • 代码是Java,它很好地解决了NLP领域的问题,特别是斯坦福核心NLP API。 @Alain 解决问题没有意义吗??
  • 这很好,但通常接受和赞成的答案只涉及比代码块更多的上下文,即使代码相当简单。也许通过调整您的示例用例来解决原始问题?不管怎样,恐怕你不会从作者那里得到更多的反馈,因为这个问题在 2 年内没有任何活动。
【解决方案2】:

我认为没有办法告诉解析器提取给定单词的依赖关系。但是,您可以只遍历每个句子的依赖项列表,搜索查询词出现在nsubj 关系中的所有实例。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多