Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Stanford Parser或Stanford CoreNLP查找名词短语的语法关系_Nlp_Stanford Nlp - Fatal编程技术网

如何使用Stanford Parser或Stanford CoreNLP查找名词短语的语法关系

如何使用Stanford Parser或Stanford CoreNLP查找名词短语的语法关系,nlp,stanford-nlp,Nlp,Stanford Nlp,我正在使用斯坦福大学的CoreNLP来寻找名词短语的语法关系 以下是一个例子: 给出了“健身室很脏”这句话 我设法把“健身室”作为我的目标名词短语。我现在正在寻找一种方法来发现“肮脏”形容词与“健身室”的关系,而不仅仅是与“房间”的关系 示例代码: private static void doSentenceTest(){ Properties props = new Properties(); props.put("annotators","tokenize, ssplit,

我正在使用斯坦福大学的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); 

    }

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

我希望我足够清楚。
感谢您的帮助。

键入的依赖项确实表明形容词“脏”适用于“健身室”:

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”的修饰语

您可以在中找到依赖项标记的详细信息。

修改该方法

Collection<TypedDependency> tdl = gs.typedDependenciesCollapsed(); with
Collection<TypedDependency> tdl = gs.typedDependenciesCCprocessed();
or
Collection<TypedDependency> tdl = gs.allDependencies(); 
Collection tdl=gs.typedDependenciesCollapsed();具有
集合tdl=gs.typedDependenciescpProcessed();
或
集合tdl=gs.allDependencies();
Collection<TypedDependency> tdl = gs.typedDependenciesCollapsed(); with
Collection<TypedDependency> tdl = gs.typedDependenciesCCprocessed();
or
Collection<TypedDependency> tdl = gs.allDependencies();