首页 > 代码库 > 斯坦福的nlp学习

斯坦福的nlp学习

Stanford NLP tools提供了处理中文的三个工具,分别是分词、Parser

具体参考:

http://nlp.stanford.edu/software/parser-faq.shtml#o

1.中文分词

这个包比较大,运行时候需要的内存也多,因而如果用eclipse运行的时候需要修改虚拟内存空间大小:

运行-》自变量-》VM自变量-》-Xmx800m (最大内存空间800m)

demo

2.依存句法分析

可以参考http://nlp.stanford.edu/software/parser-faq.shtml#o

http://blog.csdn.NET/leeharry/archive/2008/03/06/2153583.aspx

根据输入的训练库不同,可以处理英文,也可以处理中文。输入是分词好的句子,输出词性、句子的语法树(依赖关系)

英文demo(下载的压缩文件中有):

  1. LexicalizedParser lp = new LexicalizedParser("englishPCFG.ser.gz");  
  2. lp.setOptionFlags(new String[]{"-maxLength", "80", "-retainTmpSubcategories"});  
  3.   
  4. String[] sent = { "This", "is", "an", "easy", "sentence", "." };  
  5. Tree parse = (Tree) lp.apply(Arrays.asList(sent));  
  6. parse.pennPrint();  
  7. System.out.println();  
  8.   
  9. TreebankLanguagePack tlp = new PennTreebankLanguagePack();  
  10. GrammaticalStructureFactory gsf = tlp.grammaticalStructureFactory();  
  11. GrammaticalStructure gs = gsf.newGrammaticalStructure(parse);  
  12. Collection tdl = gs.typedDependenciesCollapsed();  
  13. System.out.println(tdl);  
  14. System.out.println();  
  15.   
  16. TreePrint tp = new TreePrint("penn,typedDependenciesCollapsed");  
  17. tp.printTree(parse);

中文有些不同:

  1. //LexicalizedParser lp = new LexicalizedParser("englishPCFG.ser.gz");  
  2. LexicalizedParser lp = new LexicalizedParser("xinhuaFactored.ser.gz");  
  3. //lp.setOptionFlags(new String[]{"-maxLength", "80", "-retainTmpSubcategories"});  
  4.   
  5. //    String[] sent = { "This", "is", "an", "easy", "sentence", "." };  
  6. String[] sent = { "他", "和", "我", "在",  "学校", "里", "常", "打", "桌球", "。" };  
  7. String sentence = "他和我在学校里常打台球。";  
  8. Tree parse = (Tree) lp.apply(Arrays.asList(sent));  
  9. //Tree parse = (Tree) lp.apply(sentence);  
  10.   
  11. parse.pennPrint();  
  12.   
  13. System.out.println();  
  14. /* 
  15. TreebankLanguagePack tlp = new PennTreebankLanguagePack(); 
  16. GrammaticalStructureFactory gsf = tlp.grammaticalStructureFactory(); 
  17. GrammaticalStructure gs = gsf.newGrammaticalStructure(parse); 
  18. Collection tdl = gs.typedDependenciesCollapsed(); 
  19. System.out.println(tdl); 
  20. System.out.println(); 
  21. */  
  22. //only for English  
  23. //TreePrint tp = new TreePrint("penn,typedDependenciesCollapsed");  
  24. //chinese  
  25. TreePrint tp = new TreePrint("wordsAndTags,penn,typedDependenciesCollapsed",new ChineseTreebankLanguagePack());  
  26. tp.printTree(parse);

然而有些时候我们不是光只要打印出来的语法依赖关系,而是希望得到关于语法树(图),则需要采用如下的程序:

  1. String[] sent = { "他", "和", "我", "在",  "学校", "里", "常", "打", "桌球", "。" };  
  2. ParserSentence ps = new ParserSentence();  
  3. Tree parse = ps.parserSentence(sent);  
  4. parse.pennPrint();  
  5. TreebankLanguagePack tlp = new ChineseTreebankLanguagePack();  
  6. GrammaticalStructureFactory gsf = tlp.grammaticalStructureFactory();  
  7. GrammaticalStructure gs = gsf.newGrammaticalStructure(parse);  
  8. Collection tdl = gs.typedDependenciesCollapsed();  
  9. System.out.println(tdl);  
  10. System.out.println();  
  11. for(int i = 0;i < tdl.size();i ++)  
  12. {  
  13. //TypedDependency(GrammaticalRelation reln, TreeGraphNode gov, TreeGraphNode dep)  
  14. TypedDependency td = (TypedDependency)tdl.toArray()[i];  
  15. System.out.println(td.toString());  

//采用GrammaticalStructure的方法getGrammaticalRelation(TreeGraphNode gov, TreeGraphNode dep)可以获得两个词的语法依赖关系

斯坦福的nlp学习