エンターテイメント!!

遊戯王好きのJavaエンジニアのブログ。バーニングソウルを会得する特訓中。

WordNetの試し実装

きっかけ

文章を解析するようになったけど、意味合い的に同じなのかチェックしたくなるだろうって思って、実装について調べた。

実装

build.gradle

group 'kuropaper'
version '1.0-SNAPSHOT'

apply plugin: 'java'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'
    // https://mvnrepository.com/artifact/de.sciss/ws4j
    compile group: 'de.sciss', name: 'ws4j', version: '0.1.0'
}

resources

src/main/resoces 配下に、下記リンクのjawjaw.conf, similarity.confを置く。
たぶん、クラスパスが通っている箇所なら、どこでも大丈夫だと思う。

ws4j/config at master · Sciss/ws4j · GitHub

そんでもって、同じディレクトリにwnjpn-0.9.dbっていう辞書のDBファイルを置く。
中身は、Sqliteらしい。

http://compling.hss.ntu.edu.sg/wnja/data/1.1/wnjpn.db.gz

かなり大きなファイルなので、githubとかにあげるときは、要注意。

mainファイル

mainとなる実装。
とりあえず、下記をコピペ。

import edu.cmu.lti.jawjaw.JAWJAW;
import edu.cmu.lti.jawjaw.pobj.*;
import java.util.Set;

public class Sample {
    public static void main(String[] args) {
        // "買収"(動詞)という単語から得られる関係の一部をデモします
        new Sample().run( "買収", POS.v );
    }

    private 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 );
    }
}

思ったこと

似たような文言を取ってこれる。
うまく使えば、文章の近似性を求められそうな気がする。

不満点は、初期化処理に10秒くらい時間がかかること。。。
どうにかならんもんかね?
SqliteのDBファイルをメモリ展開しているみたいだが、毎回DBアクセスだと遅いのだろうか?

実装にかなり疑問がある。

あまり、偉そうなことは言えないが。。。

実運用にするようになったら、考えよう。。。

参考サイト

日本語WordnetのJavaフロントエンドを利用して,類義語の検索を行った. - へっぽこ修士の忘れ物

WordNetをJavaから使う | Apitore blog

日本語 Wordnet