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とスタンフォードパーサーを使用してフレーズ内の動詞を検出する場合は、次のように実行できます。

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 に答える