JAWJAW (JAva Wrapper for JApanese Wordnet) は日本語 WordNet データベースの Java API で、単語の上位語、下位語、定義、訳などの言語知識が簡単に取得できます。
日本語 WordNet のウェブサイトで配布されているデータベースに対し、プログラムがデータベースを意識しなくてもデータにアクセスできるようなAPIです。一般的な Java プログラマー用のシンプルな API と、自然言語処理アプリケーション開発者用の API の両方を提供しています。
JAWJAW: Java Wrapper for Japanese WordNet
日本語 | English
Last modified: 2013-03-20
はじめに
シンプル版 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 の種類と数をまとめました。
また、登録されている概念や語数は以下の通り。
サンプルコード:
出力:
データモデル:
利用可能な概念関係:
日本語 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
こちらをご覧ください。
ダウンロード
利用方法
データベースを別途日本語 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"でテストが実行できます。
履歴
- 1.0.2 (2013-03-19) - JarファイルからWordNet DBを展開せずに"jdbc:sqlite::resource"で読み込むことで初期化時間大幅短縮。m2eclipseからm2eへ対応。
- 1.0.0 (2011-10-16) - Project Hosting on Google Codeにて公開
- 2009-03-23初公開
追加予定機能
- 単語間の意味の近さを測るメソッド → 2011年10月にWS4J(WordNet Similarity for Java)を公開しました。
- コマンドラインインターフェイス
- ウェブインターフェイス
連絡先
カーネギーメロン大学 嶋英樹
Email: hideki at cs.cmu.edu
Email: hideki at cs.cmu.edu