2016-07-16 4 views
0

スタンフォードCoreNLPのSemanticGraphコンポーネントを使用して(一般的な方法で)文の主語を取得するにはどうすればよいですか?Stanford SemanticGraph文の件名

以下のコードを試しましたが、出力は件名がヌルであることを示しています。

String sentence = "Carl has 84 Skittles."; 
Annotation doc = InitUtil.initStanford(sentence, "tokenize, ssplit, pos, lemma, ner, parse"); 
SemanticGraph semGraph = doc.get(SENTENCE).get(0).get(DEPENDENCIES); 
IndexedWord verb = semGraph.getFirstRoot(); 
IndexedWord subject = semGraph.getChildWithReln(verb, GrammaticalRelation.valueOf("nsubj")); 
System.out.println(subject); 

私は以下の3行と最後の行に2つ目の交換同じコードをしようとすると、私は「カール」の予想される出力を得ます。違いはspecificと呼ばれるプライベートフィールドGrammaticalRelationが表示されますが、このフィールドの値は文固有のように見えます。私の質問は、すべての、またはほぼすべての文章に適用できる方法で主題を取得する方法です。

答えて

1

この問題はspecificフィールドでは分かりませんでした。

SemanticGraph.getChildWIthRelnは、2つのオブジェクトの言語に互換性があるかどうかを確認するGrammaticalRelation.equals()に依存します。 GrammaticalRelation.valueOf(String)Language.Englishという言語のGrammaticalRelationを返す一方、スタンフォードパーサーはLanguage.UniversalEnglishを使用します。 2つの言語は何らかの理由で互換性がありません。 GrammaticalRelation.valueOf(String)からGrammaticalRelation.valueOf(Language, String)への呼び出しを変更すると問題が解決しました。

+0

偉大な発見、ありがとう! – Jean

関連する問題