9

我正在使用斯坦福解析器来解析词对之间的依赖关系,但我还需要词的标记。但是,在 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

4 回答 4

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();    
于 2010-09-18T21:33:03.947 回答
3

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

-outputFormat "wordsAndTags"

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

TreePrint posPrinter = new TreePrint("wordsAndTags", yourPrintWriter);
posPrinter.printTree(yourLexParser.getBestParse());
于 2010-09-17T14:39:00.627 回答
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());
于 2012-06-14T21:56:22.343 回答
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;
}
于 2016-02-28T22:20:00.273 回答