1.代码
//调用stanford parser进行句法分析,提取节点间路径
import java.io.IOException;
import java.util.List;
import edu.stanford.nlp.parser.lexparser.LexicalizedParser;
import edu.stanford.nlp.trees.Tree;
public class ParserTest2 {
public static void main(String[] args) throws IOException {
String grammar = "edu/stanford/nlp/models/lexparser/chineseFactored.ser.gz";
// String grammar = "edu/stanford/nlp/models/lexparser/chinesePCFG.ser.gz";
String[] options = {};
LexicalizedParser lp = LexicalizedParser.loadModel(grammar, options);
String line = "质量 太 差 了";
String word1 = "质量";
String word2 = "差";
Tree parse = lp.parse(line);
parse.pennPrint();
List<Tree> nodelist = parse.preOrderNodeList();
Tree node1=parse,node2=parse;
for(Tree nodet:nodelist)
{
if(nodet.label().toString().equals(word1)){
node1 = nodet;
//System.out.println(nodet.label().toString());
}
if(nodet.label().toString().equals(word2)){
node2 = nodet;
//System.out.println(nodet.label().toString());
}
}
List<Tree> nodepath = parse.pathNodeToNode(node1, node2);
String nodepathstr="";
for(Tree nodet:nodepath)
{
if(nodet!=null)
nodepathstr += nodet.label().toString() + ",";
}
System.out.println(nodepathstr);
System.out.println("---end---");
}
}
2.结果
(ROOT
(IP
(IP
(NP (NN 质量))
(VP
(ADVP (AD 太))
(VP (VA 差) (AS 了))))
(PU ,)
(CP
(IP
(VP (VV 用)
(VP
(ADVP (AD 不))
(PP (P 到)
(NP (NN 半天)))
(ADVP (AD 就))
(VP (VE 没)
(NP (NN 电))))))
(SP 了))))
质量,NN,NP,IP,VP,VP,VA,差,
---end---
3.参考资料
https://nlp.stanford.edu/nlp/javadoc/javanlp/edu/stanford/nlp/trees/Tree.html
https://nlp.stanford.edu/nlp/javadoc/javanlp/edu/stanford/nlp/ling/Label.html