2010-09-17 16 views
9

Używam Parsera Stanforda do analizowania relacji zależności między parą słów, ale potrzebuję także tagowania słów. Jednak w ParseDemo.java program wyprowadza tylko drzewo znaczników. Muszę tagowania Każde słowo jest tak:Jak zdobyć znaczniki POS przy użyciu Parsera Stanforda

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

nie podoba:

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

Kto może mi pomóc? wielkie dzięki.

Odpowiedz

12

Jeśli jesteś zainteresowana głównie manipulowanie tagów w programie, i nie potrzebują funkcjonalności TreePrint, można po prostu dostać oznaczonych słowa jako listy:

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

Co to jest IP? .... –

+1

A LexicalizedParser ... edytowany powyżej. –

+0

@ChristopherManning W jaki sposób można to osiągnąć w pythoniu –

3

Uruchamiając edu.stanford.nlp.parser.lexparser.LexicalizedParser w linii poleceń, którego chcesz użyć:

-outputFormat "wordsAndTags" 

programowo, użyć klasy TreePrint zbudowane z ŁAŃCUCH_FORMATUJĄCY = „wordsAndTags” i nazywają printTree coś takiego:

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

co to jest 'lp' tutaj? tęskniłeś, żeby to wyjaśnić. – talha06

+1

@ talha06: Domyślam się, że to LexicalizedParser – citronas

+0

Tak, to LexicalizedParser. –

0

Ta odpowiedź jest nieco przestarzały, więc postanowiłem dodać własną rękę. Więc z wersji 3.6.0 (Stanford Parser zależnościami 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; 
     } 

będzie to powrót I_PRP claim_VBP the_DT rights_NNS dla 'I claim the rights'

więc jeśli chcesz, aby wykryć czasowniki w zdaniu przy użyciu języka Java i parser Stanford można to zrobić:

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; 
} 
Powiązane problemy