2010-09-17 106 views
9

我使用斯坦福分析器來解析字對之間的依賴關係,但我也需要標記單詞。但是,在ParseDemo.java中,程序只輸出標記樹。我需要每個字的標籤是這樣的:如何使用斯坦福分析器獲取POS標記

My/PRP$ dog/NN also/RB likes/VBZ eating/VBG bananas/NNS ./. 

不喜歡這樣的:

(ROOT 
    (S 
    (NP (PRP$ My) (NN dog)) 
    (ADVP (RB also)) 
    (VP (VBZ likes) 
     (S 
     (VP (VBG eating) 
      (S 
      (ADJP (NNS bananas)))))) 
    (. .))) 

誰能幫我?非常感謝。

回答

12

如果你的主要目標是在程序操縱的標籤,並且不需要TreePrint功能,你可以得到的標記詞作爲一個列表:

LexicalizedParser lp = 
    LexicalizedParser.loadModel("edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz"); 
Tree parse = lp.apply(Arrays.asList(sent)); 
List taggedWords = parse.taggedYield();  
+0

lp是什麼? ... – 2014-03-31 14:39:49

+1

上面編輯的LexicalizedParser ...。 – 2014-08-30 15:48:19

+0

@ChristopherManning python中如何實現 – 2017-05-25 11:08:38

3

在命令行上運行edu.stanford.nlp.parser.lexparser.LexicalizedParser,您要使用:

-outputFormat "wordsAndTags" 

編程方式,使用與formatString的= 「wordsAndTags」 構建的TreePrint類並調用printTree ,像這樣:

TreePrint posPrinter = new TreePrint("wordsAndTags", yourPrintWriter); 
posPrinter.printTree(yourLexParser.getBestParse()); 
2
String[] sent = { "This", "is", "an", "easy", "sentence", "." }; 
List<CoreLabel> rawWords = Sentence.toCoreLabelList(sent); 
Tree parse = lp.apply(rawWords); 
ArrayList ar=parse.taggedYield(); 
System.out.println(ar.toString()); 
+0

這裏是什麼'lp'?你錯過了解釋它。 – talha06 2013-04-07 14:43:49

+1

@ talha06:我想這是一個LexicalizedParser – citronas 2013-10-16 15:21:06

+0

是的,這是一個LexicalizedParser。 – 2014-03-31 22:57:50

0

這個答案有點過時,所以我決定添加自己的。因此,與斯坦福分析器版本3.6.0(Maven依賴):

<dependency> 
     <groupId>edu.stanford.nlp</groupId> 
     <artifactId>stanford-parser</artifactId> 
     <version>3.6.0</version> 
    </dependency> 
    <dependency> 
     <groupId>edu.stanford.nlp</groupId> 
     <artifactId>stanford-corenlp</artifactId> 
     <version>3.6.0</version> 
    </dependency> 
    <dependency> 
     <groupId>edu.stanford.nlp</groupId> 
     <artifactId>stanford-corenlp</artifactId> 
     <version>3.6.0</version> 
     <classifier>models</classifier> 
    </dependency> 

 private static MaxentTagger tagger = new MaxentTagger(MaxentTagger.DEFAULT_JAR_PATH); 
     public String getTaggedString(String someString) { 

      String taggedString = tagger.tagString(someString); 
      return taggedString; 
     } 

這將返回I_PRP claim_VBP the_DT rights_NNS'I claim the rights'

所以,如果你想使用Java來檢測一個短語動詞和斯坦福分析器,你可以這樣做:

public boolean containsVerb(String someString) { 
     String taggedString = tagger.tagString(someString); 
     String[] tokens = taggedString.split(" "); 
     for (String tok : tokens){ 
      String[] taggedTokens = tok.split("_"); 
      if (taggedTokens[1].startsWith("VB")){ 
       return true; 
      } 

     } 
     return false; 
} 
相關問題