Java 使用斯坦福语法分析器提取包含特定单词的名词短语

Java 使用斯坦福语法分析器提取包含特定单词的名词短语,java,nlp,stanford-nlp,Java,Nlp,Stanford Nlp,如何使用斯坦福语法分析器提取包含特定单词的名词短语。我可以使用本文中编写的代码提取名词短语: 然而,我需要得到包含特定单词的名词短语,然而这并不像进行字符串搜索那么简单,因为该单词可能在句子中出现两次。所以我需要提取名词短语,它包含句子中特定顺序的特定单词。假设我有一句话: String some_sentence = "The dog ran after the intruding bigger dog"; 狗出现两次,第一次作为句子中的第二个单词,第二次作为句子中的最后一个单词。如何

如何使用斯坦福语法分析器提取包含特定单词的名词短语。我可以使用本文中编写的代码提取名词短语:

然而,我需要得到包含特定单词的名词短语,然而这并不像进行字符串搜索那么简单,因为该单词可能在句子中出现两次。所以我需要提取名词短语,它包含句子中特定顺序的特定单词。假设我有一句话:

  String some_sentence = "The dog ran after the intruding bigger dog"; 

狗出现两次,第一次作为句子中的第二个单词,第二次作为句子中的最后一个单词。如何提取包含首次出现的dog的名词短语

最简单的方法(如果不是最优雅的方法)可能是将解析收集为一个带括号的字符串,通过正则表达式恢复名词短语,然后检查每个匹配项是否包含单词

这会产生类似的结果:

String parse  = "(ROOT (S (NP (DT The) (NN dog)) (VP (VBD ran) (PP (IN after) (NP (DT the) (JJ intruding) (JJR bigger) (NN dog))))))";
String target = "dog";
String result = null;
String regex  = "\\(NP \\s (?: \\( .+? \\) )* \\)"; // an NP contains an arbitrary number of sub-phrases
Pattern patt  = Pattern.compile(regex, Pattern.COMMENTS);
Matcher match = patt.matcher(parse);
while(match.find() && result == null) {
    if (match.group().contains(target)) {
        result = match.group();
    }
}
if (result != null) {
    System.out.println(result);
}

您链接到的问题不可访问