如何使用Stanford Parser获得POS标记

时间:2010-09-17 08:01:25

标签: nlp stanford-nlp

我正在使用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 个答案:

答案 0 :(得分: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();    

答案 1 :(得分:3)

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

-outputFormat "wordsAndTags"

以编程方式,使用由formatString =“wordsAndTags”构造的TreePrint类并调用printTree,如下所示:

TreePrint posPrinter = new TreePrint("wordsAndTags", yourPrintWriter);
posPrinter.printTree(yourLexParser.getBestParse());

答案 2 :(得分: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());

答案 3 :(得分:0)

这个答案有点过时,所以我决定添加自己的答案。因此,使用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;
}