スタンフォードパーサーを使用して、特定の文で複数の名詞句を見つけたいです。私はJavaを使用しています。
例文:
画質は本当に良いです。
次に、「画質」を抽出する必要があります。
依存関係ツリーをたどって目的の結果を得る方法はありますか?
また、スタンフォードパーサーは XML 形式の文にタグを付けることができますか?
スタンフォードパーサーを使用して、特定の文で複数の名詞句を見つけたいです。私はJavaを使用しています。
例文:
画質は本当に良いです。
次に、「画質」を抽出する必要があります。
依存関係ツリーをたどって目的の結果を得る方法はありますか?
また、スタンフォードパーサーは XML 形式の文にタグを付けることができますか?
すべての名詞句を検索する場合は、依存関係の表現ではなく、句構造解析ツリーを使用することで、おそらく最も簡単に実行できます。Treeオブジェクトのノードを手動で反復してlabel()。value()が「NP」であるかどうかを確認するか、「@ NP」のTregexPatternを使用してから、TregexMatcherを使用してNPを反復することができます。
次のコマンドラインフラグを使用して、パーサーからXML形式の出力を取得できます。
-outputFormatOptions xml
または、コード内で「xml」のオプション文字列を使用してTreePrintオブジェクトを作成します。
@christopher-manningの回答を拡張するために、ここで使用できるコードをいくつか示します。
private List<String> getNounPhrases(Tree parse) {
List<String> result = new ArrayList<>();
TregexPattern pattern = TregexPattern.compile("@NP");
TregexMatcher matcher = pattern.matcher(parse);
while (matcher.find()) {
Tree match = matcher.getMatch();
List<Tree> leaves = match.getLeaves();
System.out.println(leaves);
// Some Guava magic.
String nounPhrase = Joiner.on(' ').join(Lists.transform(leaves, Functions.toStringFunction()));
result.add(nounPhrase);
List<LabeledWord> labeledYield = match.labeledYield();
System.out.println("labeledYield: " + labeledYield);
}
return result;
}