0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

NLP4J [002] Javaで Yahoo! デベロッパーネットワーク 日本語係り受け解析(V1)を利用して日本語の構文解析をしてみる

Last updated at Posted at 2019-10-25

Indexに戻る : [001]形態素解析 > [002]構文解析 > [003]品詞の統計処理

■追記

Yahoo! の構文解析APIについてV1が終了しましたのでこの記事は参考としてのみ置いておきます。
詳しくは
【重要】テキスト解析Web APIにおける日本語係り受け解析API仕様変更のお知らせ - Yahoo!デベロッパーネットワーク
https://developer.yahoo.co.jp/changelog/web_apiapi.html
をご覧ください。


NLP4J を使ってJavaで日本語の構文解析(係り受け解析)をしてみます。

構文解析ができると「車が急に止まった」というテキストから
・「車が→止まった」
・「急に→止まった」
というような情報を抽出することができます。

#Maven

<dependency>
  <groupId>org.nlp4j</groupId>
  <artifactId>nlp4j</artifactId>
  <version>1.0.0.0</version>
</dependency>

#Code1

import nlp4j.Keyword;
import nlp4j.KeywordWithDependency;
import nlp4j.impl.DefaultNlpServiceResponse;
import nlp4j.yhoo_jp.YJpDaService;
public class HelloNLP4JDA {
		// 自然文のテキスト
		String text = "車が急に止まった。";
		// 係り受け解析
		YJpDaService service = new YJpDaService();
		// 係り受け解析の結果を取得する
		DefaultNlpServiceResponse response = service.process(text);
		for (Keyword kwd : response.getKeywords()) {
			if (kwd instanceof KeywordWithDependency) {
				// 係り受け解析の結果を出力する
				System.err.println(((KeywordWithDependency) kwd).toStringAsDependencyTree());
			}
		}
}

#Output1
このような感じで出力できます。簡単ですね!

-sequence=6,lex=null,str=。
	-sequence=5,lex=null,str=た
		-sequence=4,lex=null,str=止まっ
			-sequence=2,lex=null,str=が
				-sequence=1,lex=null,str=車
			-sequence=3,lex=null,str=急に

#Code2
キーワードのオブジェクトを操作することで細かい結果を調べることができます。

	public static void main(String[] args) throws Exception {
		// 自然文のテキスト
		String text = "車が急に止まった。";
		// 係り受け解析
		YJpDaService service = new YJpDaService();
		// 係り受け解析の結果を取得する
		DefaultNlpServiceResponse response = service.process(text);
		for (Keyword kwd : response.getKeywords()) {
			if (kwd instanceof KeywordWithDependency) {
				// 係り受け解析の結果を出力する
				print((KeywordWithDependency) kwd, 0);
			}
		}
	}

	static void print(KeywordWithDependency kwd, int depth) {
		System.err.println(depth + ":" + kwd.getStr());
		for (KeywordWithDependency kwd2 : kwd.getChildren()) {
			print(kwd2, depth + 1);
		}
	}

#Output2

0:。
1:た
2:止まっ
3:が
4:車
3:急に

簡単ですね!

#Indexに戻る
NLP4J のご紹介 - [000] Javaで自然言語処理 Index

#プロジェクトURL
https://www.nlp4j.org/
NLP4J_N_128.png


0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?