【问题标题】:How can I find grammatical relations of a noun phrase using Stanford Parser or Stanford CoreNLP如何使用斯坦福解析器或斯坦福 CoreNLP 找到名词短语的语法关系
【发布时间】:2015-04-17 12:42:01
【问题描述】:

我正在使用 stanford CoreNLP 来尝试查找名词短语的语法关系。

这是一个例子:

鉴于“健身房很脏”这句话。

我设法将“健身房”确定为我的目标名词短语。我现在正在寻找一种方法来发现“脏”形容词与“健身房”而不仅仅是与“房间”有关。

示例代码:

private static void doSentenceTest(){
    Properties props = new Properties();
    props.put("annotators","tokenize, ssplit, pos, lemma, ner, parse, dcoref");
    StanfordCoreNLP stanford = new StanfordCoreNLP(props);

    TregexPattern npPattern = TregexPattern.compile("@NP");

    String text = "The fitness room was dirty.";


    // create an empty Annotation just with the given text
    Annotation document = new Annotation(text);
    // run all Annotators on this text
    stanford.annotate(document);

    List<CoreMap> sentences = document.get(CoreAnnotations.SentencesAnnotation.class);
    for (CoreMap sentence : sentences) {

        Tree sentenceTree = sentence.get(TreeCoreAnnotations.TreeAnnotation.class);
        TregexMatcher matcher = npPattern.matcher(sentenceTree);

        while (matcher.find()) {
            //this tree should contain "The fitness room" 
            Tree nounPhraseTree = matcher.getMatch();
            //Question : how do I find that "dirty" has a relationship to the nounPhraseTree


        }

        // Output dependency tree
        TreebankLanguagePack tlp = new PennTreebankLanguagePack();
        GrammaticalStructureFactory gsf = tlp.grammaticalStructureFactory();
        GrammaticalStructure gs = gsf.newGrammaticalStructure(sentenceTree);
        Collection<TypedDependency> tdl = gs.typedDependenciesCollapsed();

        System.out.println("typedDependencies: "+tdl); 

    }

}

我在句子上使用了 Stanford CoreNLP 提取了它的根 Tree 对象。在这个树对象上,我设法使用 TregexPattern 和 TregexMatcher 提取名词短语。这给了我一个包含实际名词短语的子树。我想知道的是在原句中找到名词短语的修饰语。

typedDependecies 输出给了我以下信息:

typedDependencies: [det(room-3, The-1), nn(room-3, fitness-2), nsubj(dirty-5, room-3), cop(dirty-5, was-4), root(ROOT-0, dirty-5)]

我可以看到 nsubj(dirty-5, room-3) 但我没有完整的名词短语作为支配者。

我希望我足够清楚。 任何帮助表示赞赏。

【问题讨论】:

    标签: nlp stanford-nlp


    【解决方案1】:

    类型化的依赖关系do表明形容词“脏”适用于“健身房”:

    det(room-3, The-1)
    nn(room-3, fitness-2)
    nsubj(dirty-5, room-3)
    cop(dirty-5, was-4)
    root(ROOT-0, dirty-5)
    

    'nn'标签是名词复合修饰语,表示'fitness'是'room'的修饰语。

    你可以在Stanford dependency manual找到依赖标签的详细信息。

    【讨论】:

      【解决方案2】:

      修改方法

      Collection<TypedDependency> tdl = gs.typedDependenciesCollapsed(); with
      Collection<TypedDependency> tdl = gs.typedDependenciesCCprocessed();
      or
      Collection<TypedDependency> tdl = gs.allDependencies(); 
      

      【讨论】:

        猜你喜欢
        • 2019-03-17
        • 2016-02-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多