0

スタンフォードパーサーを使用して、特定の文で複数の名詞句を見つけたいです。私はJavaを使用しています。

例文:

画質は本当に良いです。

次に、「画質」を抽出する必要があります。

依存関係ツリーをたどって目的の結果を得る方法はありますか?
また、スタンフォードパーサーは XML 形式の文にタグを付けることができますか?

4

2 に答える 2

5

すべての名詞句を検索する場合は、依存関係の表現ではなく、句構造解析ツリーを使用することで、おそらく最も簡単に実行できます。Treeオブジェクトのノードを手動で反復してlabel()。value()が「NP」であるかどうかを確認するか、「@ NP」のTregexPatternを使用してから、TregexMatcherを使用してNPを反復することができます。

次のコマンドラインフラグを使用して、パーサーからXML形式の出力を取得できます。

-outputFormatOptions xml

または、コード内で「xml」のオプション文字列を使用してTreePrintオブジェクトを作成します。

于 2012-01-30T07:33:15.730 に答える
2

@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;
}
于 2014-11-27T00:19:45.633 に答える