Как получить POS-теги с помощью Stanford Parser - PullRequest
9 голосов
/ 17 сентября 2010

Я использую Stanford Parser для разбора отношений зависимости между парами слов, но мне также нужно пометить слова. Однако в ParseDemo.java программа выводит только дерево тегов. Мне нужно пометить каждое слово так:

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))))))
    (. .)))

Кто может мне помочь? Большое спасибо.

Ответы [ 4 ]

12 голосов
/ 19 сентября 2010

Если вы в основном заинтересованы в манипулировании тегами в программе и не нуждаетесь в функциональности TreePrint, вы можете просто получить слова с тегами в виде списка:

LexicalizedParser lp =
  LexicalizedParser.loadModel("edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz");
Tree parse = lp.apply(Arrays.asList(sent));
List taggedWords = parse.taggedYield();    
3 голосов
/ 17 сентября 2010

При запуске edu.stanford.nlp.parser.lexparser.LexicalizedParser в командной строке вы хотите использовать:

-outputFormat "wordsAndTags"

Программно используйте класс TreePrint , созданный с помощью formatString = "wordsAndTags", и вызовите printTree, как показано ниже:

TreePrint posPrinter = new TreePrint("wordsAndTags", yourPrintWriter);
posPrinter.printTree(yourLexParser.getBestParse());
2 голосов
/ 15 июня 2012
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 голосов
/ 29 февраля 2016

Этот ответ немного устарел, поэтому я решил добавить свой. Так с версией Stanford Parser 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 и stanford, вы можете сделать это:

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