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