Gosen で辞書を作るメモ
内容古くなっているかもしれない。
■jar のダウンロード
https://code.google.com/p/lucene-gosen/
このサイトの左下の方の Links の中に External links として「Downloads lucene-gosen 4.8.1」のリンクがあり、Google Drive に遷移するはずなので、そこからダウンロードする。
ページ上部の Download からは古いものがダウンロードできる。罠っぽい。
今回の用途なら lucene-gosen-4.8.1.jar のように辞書の名前のついていない jar を取得すればよい。
ビルドパスに追加しておく。
■ソースのダウンロード(チェックアウト)
辞書生成のために必要。
https://code.google.com/p/lucene-gosen/source/checkout
ここに SVN の URL が書かれているので、チェックアウトする。
dictionary のフォルダを使う。(ので、この用途だとそれ以外は不要っぽい。)
辞書生成
■Ant 準備
Java から ant を使えるようにする。
http://ant.apache.org/bindownload.cgi ダウンロードして ant.jar と ant-launcher.jar をビルドパスに追加しておく。
Eclipse からの実行で「JDK がない」みたいなメッセージのエラーになった場合は、tools.jar をビルドパスに追加すると解消するかもしれない。JDK の下の lib の中にある。Eclipse から実行すると JRE での実行になってしまい tools.jar が見つからないと思われるが、この辺の理解はあいまい。
■追加の辞書ファイル
Java製形態素解析ライブラリ「lucene-gosen」を試してみる
lucene-gosenの辞書編集方法 - エメラルドアオキロック
この辺を参考に。
プリンスメロン,1229,名詞,一般,野菜,*,*,*,プリンスメロン,プリンスメロン,プリンスメロン
こんな感じの CSV ファイルを作る。
メロンよりも桃が好きです。それはそれとして、デフォの辞書のままだと プリンス / メロン の2単語に解釈される。
ビルドの際、追加の csv ファイルの場所はフルパスで指定できるので、配置場所はどこでもよい。(lucene-gosen の外で良い)
2カラム目はコスト。
チェックアウトした lucene-gosen の dictionary の下に ipadic のディレクトリがあり、この中に dictionary.csv というファイルがある。これがデフォルトの辞書になっている。トマトなどの野菜の名称は 3000~4000 くらいのようなので、追加の単語はこれより小さいコストを設定する。
なんとなくで、(int) (2000 / Math.sqrt(Math.sqrt(文字数))) をコストとした。
3カラム目からが品詞の種類。
dictionary.csv と同じディレクトリにある connection.csv に連接コストの定義が書いてあるがなるべく手をつけたくないので、追加の単語の品詞は、デフォで存在するものにする。
今回であれば 名詞,一般,野菜 のように。名詞,野菜,* のようにしてしまうと、連接コストの定義がないためか、追加した単語が出てこなくなってしまう。
■辞書のビルド
lucene-gosen 直下と lucene-gosen/dictionary の下の両方に build.xml が存在する。
辞書のビルドなので使うのは dictionary の下の方。
Java/Ant/Javaから実行する - きのさいと のあたりを参考に。
これで lucene-gosen/dictionary/ipadic に辞書のファイル(*.sen) ができる。
■辞書の利用
■jar のダウンロード
https://code.google.com/p/lucene-gosen/
このサイトの左下の方の Links の中に External links として「Downloads lucene-gosen 4.8.1」のリンクがあり、Google Drive に遷移するはずなので、そこからダウンロードする。
ページ上部の Download からは古いものがダウンロードできる。罠っぽい。
今回の用途なら lucene-gosen-4.8.1.jar のように辞書の名前のついていない jar を取得すればよい。
ビルドパスに追加しておく。
■ソースのダウンロード(チェックアウト)
辞書生成のために必要。
https://code.google.com/p/lucene-gosen/source/checkout
ここに SVN の URL が書かれているので、チェックアウトする。
dictionary のフォルダを使う。(ので、この用途だとそれ以外は不要っぽい。)
辞書生成
■Ant 準備
Java から ant を使えるようにする。
http://ant.apache.org/bindownload.cgi ダウンロードして ant.jar と ant-launcher.jar をビルドパスに追加しておく。
Eclipse からの実行で「JDK がない」みたいなメッセージのエラーになった場合は、tools.jar をビルドパスに追加すると解消するかもしれない。JDK の下の lib の中にある。Eclipse から実行すると JRE での実行になってしまい tools.jar が見つからないと思われるが、この辺の理解はあいまい。
■追加の辞書ファイル
Java製形態素解析ライブラリ「lucene-gosen」を試してみる
lucene-gosenの辞書編集方法 - エメラルドアオキロック
この辺を参考に。
プリンスメロン,1229,名詞,一般,野菜,*,*,*,プリンスメロン,プリンスメロン,プリンスメロン
こんな感じの CSV ファイルを作る。
メロンよりも桃が好きです。それはそれとして、デフォの辞書のままだと プリンス / メロン の2単語に解釈される。
ビルドの際、追加の csv ファイルの場所はフルパスで指定できるので、配置場所はどこでもよい。(lucene-gosen の外で良い)
2カラム目はコスト。
チェックアウトした lucene-gosen の dictionary の下に ipadic のディレクトリがあり、この中に dictionary.csv というファイルがある。これがデフォルトの辞書になっている。トマトなどの野菜の名称は 3000~4000 くらいのようなので、追加の単語はこれより小さいコストを設定する。
なんとなくで、(int) (2000 / Math.sqrt(Math.sqrt(文字数))) をコストとした。
3カラム目からが品詞の種類。
dictionary.csv と同じディレクトリにある connection.csv に連接コストの定義が書いてあるがなるべく手をつけたくないので、追加の単語の品詞は、デフォで存在するものにする。
今回であれば 名詞,一般,野菜 のように。名詞,野菜,* のようにしてしまうと、連接コストの定義がないためか、追加した単語が出てこなくなってしまう。
■辞書のビルド
lucene-gosen 直下と lucene-gosen/dictionary の下の両方に build.xml が存在する。
辞書のビルドなので使うのは dictionary の下の方。
Java/Ant/Javaから実行する - きのさいと のあたりを参考に。
private static final String BUILD_XML = "lucene-gosen/dictionary/build.xmlの場所";
private static final String ADD_DIC_FILE = "追加の単語.csv";
// 辞書のビルド
Project project = new Project();
project.init();
ProjectHelper.getProjectHelper()
.parse(project, new File(BUILD_XML));
project.addBuildListener(getBuildLogger());
project.executeTarget("clean-sen");
project.setNewProperty("dictype", "ipadic");
project.setNewProperty("custom.dics", ADD_DIC_FILE);
project.executeTarget("compile");
private static BuildLogger getBuildLogger() {
BuildLogger buildLogger = new DefaultLogger();
buildLogger.setMessageOutputLevel(Project.MSG_INFO);
buildLogger.setOutputPrintStream(new PrintStream(System.out));
buildLogger.setErrorPrintStream(new PrintStream(System.err));
buildLogger.setEmacsMode(false);
return buildLogger;
}
これで lucene-gosen/dictionary/ipadic に辞書のファイル(*.sen) ができる。
■辞書の利用
private static final String DIC_DIR = "lucen-gosen/dictionary/ipadicの場所";
private static final StringTagger TAGGER = SenFactory.getStringTagger(DIC_DIR);
public static void analyze(String text) throws IOException {
Listtokens = new ArrayList<>();
TAGGER.analyze(text, tokens);
for(Token token : tokens) {
log.info(token.getSurface() + "\t" + token.getMorpheme().getPartOfSpeech());
}
log.info("----------------------------------------");
}
DicUtil.analyze("プリンスメロン"); // プリンスメロン 名詞-一般-野菜
by tokage-shippo
| 2016-01-04 14:56