2010-09-17 54 views
9

Tôi đang sử dụng Stanford Parser để phân tích mối quan hệ phụ thuộc giữa hai từ, nhưng tôi cũng cần gắn thẻ từ. Tuy nhiên, trong ParseDemo.java, chương trình chỉ xuất ra cây gắn thẻ. Tôi cần gắn thẻ của mỗi chữ như thế này:Cách lấy thẻ POS bằng cách sử dụng Stanford Parser

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

không như thế này:

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

Ai có thể giúp tôi? cảm ơn rất nhiều.

Trả lời

12

Nếu bạn chủ yếu quan tâm đến việc thao tác với các thẻ trong một chương trình, và không cần các chức năng TreePrint, bạn chỉ có thể nhận được những lời được gắn thẻ như một danh sách:

01.
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 là gì? .... –

+1

Một LexicalizedParser ... chỉnh sửa ở trên. –

+0

@ChristopherManning Làm thế nào điều này có thể đạt được trong python –

3

Khi chạy edu.stanford.nlp.parser.lexparser.LexicalizedParser trên dòng lệnh, bạn muốn sử dụng:

-outputFormat "wordsAndTags" 

Programatically, sử dụng lớp TreePrint xây dựng với formatString = "wordsAndTags" và gọi printTree , như thế này:

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' ở đây là gì? bạn đã bỏ lỡ giải thích nó. – talha06

+1

@ talha06: Tôi đoán đó là một LexicalizedParser – citronas

+0

Vâng, đó là một LexicalizedParser. –

0

Câu trả lời này là một chút lỗi thời vì vậy tôi quyết định thêm của riêng tôi. Vì vậy, với phiên bản Stanford Parser 3.6.0 (maven phụ thuộc):

<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; 
     } 

này sẽ trở lại I_PRP claim_VBP the_DT rights_NNS cho 'I claim the rights'

Vì vậy, nếu bạn muốn để phát hiện động từ trong một cụm từ sử dụng java và stanford parser bạn có thể làm điều này:

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; 
} 
Các vấn đề liên quan