JAWJAW: Java Wrapper for Japanese WordNet

日本語 | English
Last modified: 2013-03-20

はじめに

JAWJAW (JAva Wrapper for JApanese Wordnet) は日本語 WordNet データベースの Java API で、単語の上位語、下位語、定義、訳などの言語知識が簡単に取得できます。

日本語 WordNet のウェブサイトで配布されているデータベースに対し、プログラムがデータベースを意識しなくてもデータにアクセスできるようなAPIです。一般的な Java プログラマー用のシンプルな API と、自然言語処理アプリケーション開発者用の API の両方を提供しています。

シンプル版 API

ファサードクラスを呼び出すだけでOK。メソッド一覧はこちらをご覧ください。

サンプルコード:
public class SimpleDemo {
	private static void run( String word, POS pos ) {
		// ファサードから日本語 WordNet にアクセス
		Set<String> hypernyms = JAWJAW.findHypernyms(word, pos);
		Set<String> hyponyms = JAWJAW.findHyponyms(word, pos);
		Set<String> consequents = JAWJAW.findEntailments(word, pos);
		Set<String> translations = JAWJAW.findTranslations(word, pos);
		Set<String> definitions = JAWJAW.findDefinitions(word, pos);
		// 結果表示(多義語はごっちゃになっています)
		System.out.println( "hypernyms of "+word+" : \t"+ hypernyms );
		System.out.println( "hyponyms of "+word+" : \t"+ hyponyms );
		System.out.println( word+" entails : \t\t"+ consequents );
		System.out.println( "translations of "+word+" : \t"+ translations );
		System.out.println( "definitions of "+word+" : \t"+ definitions );		
	}
	public static void main(String[] args) {
		// "買収"(動詞)という単語から得られる関係の一部をデモします
		SimpleDemo.run( "買収", POS.v );
	}
}

出力:

自然言語処理アプリケーション開発者向け API

DAO (データアクセスオブジェクト)を使って直接データベースの内容にアクセスすることもできます。

データモデル:
日本語 WordNet の DB スキーマから起こしたドメインモデルです。本 API ではそれぞれのデータオブジェクトとその DAO を提供しています。また、pos と link と lang 属性は Enum クラスとして実装しました。

利用可能な概念関係:
日本語 WordNet v0.9 の synlink テーブルに登録されている link の種類と数をまとめました。

link link description #
also See also 2692
syns Synonyms 0
hype Hypernyms 89089
inst Instances 8577
hypo Hyponym 89089
hasi Has Instance 8577
mero Meronyms 0
mmem Meronyms --- Member 12293
msub Meronyms --- Substance 979
mprt Meronyms --- Part 9097
holo Holonyms 0
hmem Holonyms --- Member 12293
hsub Holonyms --- Substance 797
hprt Holonyms -- Part 9097
attr Attributes 1278
sim Similar to 21386
enta Entails 408
caus Causes 220
dmnc Domain --- Category 6643
dmnu Domain --- Usage 967
dmnr Domain --- Region 1345
dmtc In Domain --- Category 6643
dmtu In Domain --- Usage 967
dmtr In Domain --- Region 1345
ants Antonyms 0

また、登録されている概念や語数は以下の通り。
  • 49,190 概念 (synsets)
  • 85,966 語
  • 156,684 語義 (synsetと単語のペア)

サンプルコード:
public class AdvancedDemo {
	private static void run( String word, POS pos ) {
		// 日本語 WordNet に直接アクセスし、生データを処理
		List<Word> words = WordDAO.findWordsByLemmaAndPos(word, pos);
		List<Sense> senses = SenseDAO.findSensesByWordid( words.get(0).getWordid() );
		String synsetId = senses.get(0).getSynset();
		Synset synset = SynsetDAO.findSynsetBySynset( synsetId );
		SynsetDef synsetDef = SynsetDefDAO.findSynsetDefBySynsetAndLang(synsetId, Lang.eng);
		List<Synlink> synlinks = SynlinkDAO.findSynlinksBySynset( synsetId );
		// 結果表示
		System.out.println( words.get(0) );
		System.out.println( senses.get(0) );
		System.out.println( synset );
		System.out.println( synsetDef );
		System.out.println( synlinks.get(0) );
	}
	public static void main(String[] args) {
		// "自然言語処理"(名詞)という単語から得られる関係の一部をデモします
		AdvancedDemo.run( "自然言語処理", POS.n ); 
	}
}

出力:

Javadoc

こちらをご覧ください。

ダウンロード

こちらから、jar ファイルをダウンロードしてください。(ライセンス: Apache License, Version 2.0

利用方法

データベースを別途日本語 WordNet のウェブサイトからダウンロードし、"src/main/resources/wnjpn.db" (元ファイルがwnjpn-0.9.dbのようにバージョンを含む場合は要リネーム)というように src/main/resources ディレクトリに設置してください。JDK5以上で動作します。コンパイルおよびライブラリ(sqlite-jdbc-3.7.2.jar, junit-4.7.jar)の取得は Maven2 のご利用をお勧めします。pom.xml が含まれていますので、"mvn compile"でライブラリ依存解決とコンパイル、"mvn test"でテストが実行できます。

履歴

追加予定機能

  • 単語間の意味の近さを測るメソッド → 2011年10月にWS4J(WordNet Similarity for Java)を公開しました。
  • コマンドラインインターフェイス
  • ウェブインターフェイス

連絡先

カーネギーメロン大学 嶋英樹
Email: hideki at cs.cmu.edu