注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

陈钟鸣的博客

独立之精神,自由之思想.

 
 
 

日志

 
 

lucene+sen的完整文档  

2008-03-18 16:41:57|  分类: java |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
n は、Java で実装された形態素解析器で、工藤拓さんによりオープンソース(LGPL)で開発されている形態素解析MecabJavaポーティングしたライブラリです。

Sen - FrontPage

ではでは、インストールして使ってみる。

Wikiインストールガイドがあるけど、Eclipseでやったほうが楽だと思うので、Eclipse版のセットアップ方法を書いてみる。

前提条件

ダウンロード

まずはここからSenをダウンロードしてくる。

今回はsen-1.2.2.1.zipを使う。

インポート

sen-1.2.2.1.zip解凍して、Eclipseのworkspaceに置く。ディレクトリ名はsenにリネームする。

メニューのファイルからインポートを選択して、「既存プロジェクトをワークスペースへ」を選択する。

さっき置いたsenディレクトリを指定して、インポート完了。

辞書作成

build.xmlにあるPerlのパスを変更する。

<property name="perl.bin" value="/usr/bin/perl"/>

 ↓

<property name="perl.bin" value="C:/Perl/bin/perl.exe"/>

sen

 └dic

  └build.xml

dic配下のbuild.xmlを右クリックして、Antビルドを選択する。

# Antビルドが2つあると思うけど、どっちでもいい。

# ウィザードが出てきたら、デフォルトのまま完了でOK。

ちょっと長いけど、コンソールにこんな感じのメッセージが出てくれば辞書の出来上がり。

Buildfile: E:\workspace\sen\dic\build.xml
prepare-proxy:
prepare-archive:
prepare-dics0:
prepare-dics:
download:
[get] Getting: http://chasen.aist-nara.ac.jp/stable/ipadic/ipadic-2.6.0.tar.gz
[get] To: E:\workspace\sen\dic\ipadic-2.6.0.tar.gz
melt:
[gunzip] Expanding E:\workspace\sen\dic\ipadic-2.6.0.tar.gz to E:\workspace\sen\dic\ipadic-2.6.0.tar
[untar] Expanding: E:\workspace\sen\dic\ipadic-2.6.0.tar into E:\workspace\sen\dic
[delete] Deleting: E:\workspace\sen\dic\ipadic-2.6.0.tar
prepare:
dics0:
[exec] ipadic-2.6.0/Adj.dic ...
[exec] ipadic-2.6.0/Adnominal.dic ...
[exec] ipadic-2.6.0/Adverb.dic ...
[exec] ipadic-2.6.0/Auxil.dic ...
[exec] ipadic-2.6.0/Conjunction.dic ...
[exec] ipadic-2.6.0/Filler.dic ...
[exec] ipadic-2.6.0/Interjection.dic ...
[exec] ipadic-2.6.0/Noun.adjv.dic ...
[exec] ipadic-2.6.0/Noun.adverbal.dic ...
[exec] ipadic-2.6.0/Noun.demonst.dic ...
[exec] ipadic-2.6.0/Noun.dic ...
[exec] ipadic-2.6.0/Noun.nai.dic ...
[exec] ipadic-2.6.0/Noun.name.dic ...
[exec] ipadic-2.6.0/Noun.number.dic ...
[exec] ipadic-2.6.0/Noun.org.dic ...
[exec] ipadic-2.6.0/Noun.others.dic ...
[exec] ipadic-2.6.0/Noun.place.dic ...
[exec] ipadic-2.6.0/Noun.proper.dic ...
[exec] ipadic-2.6.0/Noun.verbal.dic ...
[exec] ipadic-2.6.0/Others.dic ...
[exec] ipadic-2.6.0/Postp-col.dic ...
[exec] ipadic-2.6.0/Postp.dic ...
[exec] ipadic-2.6.0/Prefix.dic ...
[exec] ipadic-2.6.0/Suffix.dic ...
[exec] ipadic-2.6.0/Symbol.dic ...
[exec] ipadic-2.6.0/Verb.dic ...
create:
[java] [INFO] MkSenDic - (1/7): reading connection matrix ...
[java] [INFO] MkSenDic - connection file = connect.csv
[java] [INFO] MkSenDic - charset = EUC_JP
[java] [INFO] MkSenDic - (2/7): building type dictionary ...
[java] [INFO] MkSenDic - (3/7): writing conection matrix (5 x 1281 x 701 = 4489905) ...
[java] [INFO] MkSenDic - (4/7): reading morpheme information ...
[java] [INFO] MkSenDic - load dic: dic.csv
[java] [INFO] MkSenDic - 50000...
[java] [INFO] MkSenDic - 100000...
[java] [INFO] MkSenDic - 150000...
[java] [INFO] MkSenDic - 200000...
[java] [INFO] MkSenDic - 250000...
[java] [INFO] MkSenDic - 300000...
[java] [INFO] MkSenDic - 350000...
[java] [INFO] MkSenDic - (5/7): sorting lex...
[java] [INFO] MkSenDic - (6/7): writing token...
[java] [INFO] MkSenDic - key size = 378227
[java] [INFO] MkSenDic - (7/7): building Double-Array (size = 325254) ...
[java] [INFO] DoubleArrayTrie - save time = 0.953[s]
[java] [INFO] MkSenDic - total time = 155[ms]
BUILD SUCCESSFUL
Total time: 3 minutes 21 seconds

無理やりJavaプロジェクト化

sen配下にあるproject.xmlは以下のようになっている。

<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>sen</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
</buildSpec>
<natures>
</natures>
</projectDescription>

これではJavaプロジェクトにならない。無理やりJavaプロジェクトにしてしまう。

<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>sen</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jdt.core.javanature</nature>
</natures>
</projectDescription>

すると、わけのわからないプロジェクトが出来上がる。

ソースフォルダ修正

senを右クリックして、プロパティを選択する。Javaのビルド&12539;パスを選択して、ソースタブを選択する。

なんとsenがソースフォルダに指定されている。これではだめなので修正する。

まずはsenを除去する。

次にフォルダーの追加ボタンを押す。

sen/src配下のjavaとtestのチェックボックスを選択する。

デフォルト出力フォルダーの参照ボタンを押して、sen/binを選択する。

そしたらOKを押す。これでできたぁと思いきや、エラーがいっぱいでてくる。残念。

ビルド&12539;パス修正

sen/lib/commons-logging.jarを右クリックして、ビルド&12539;パス→ビルド&12539;パスに追加を選択する。

sen/lib/sen.jarを右クリックして、ビルド&12539;パス→ビルド&12539;パスに追加を選択する。

これでプロジェクトの設定は完了。

Eclipseを使ったほうが面倒?いやいや、後々生産性が上がって、便利さに感動するのだと自分に言い聞かせる。

サンプルプログラム実行

これでやっとセットアップ完了。

それではサンプルプログラムを実行してみる。

デフォルト&12539;パッケージにあるStringTaggerDemo.javaを実行してみる。

StringTaggerDemo.javaを右クリックして、実行→Javaアプリケーション

done.

Please input Japanese sentence:

java.lang.IllegalArgumentException: E:\workspace\sen\null\conf\sen.xml (指定されたパスが見つかりません。)

at net.java.sen.StringTagger.readConfig(StringTagger.java:304)

at net.java.sen.StringTagger.init(StringTagger.java:145)

at net.java.sen.StringTagger.<init>(StringTagger.java:95)

at net.java.sen.StringTagger.getInstance(StringTagger.java:133)

at net.java.sen.StringTagger.getInstance(StringTagger.java:100)

at StringTaggerDemo.main(StringTaggerDemo.java:33)

はい。エラーですね。

Taggerを取得する際には、senをインストールしたディレクトリをsen.homeプロパティに設定して下さい。JVM起動時に次のオプションをつけるか

> java -Dsen.home=/usr/local/sen

コード内で次のように設定して下さい。

System.setProperty("sen.home", "/usr/local/sen");

Sen - FrontPage

ほーい。

StringTaggerDemo.javaを開く。とりあえずCtl+Shift+fでコード整形する。

29行目にsetPropertyを追加する。

 public static void main(String args[]) {
System.setProperty("sen.home", "./");
try {

相対パスで指定したけど

  System.setProperty("sen.home", "E:/workspace/sen/");

でも

  System.setProperty("sen.home", "E:\\workspace\\sen\\");

でもOK。僕のワークスペースはE:\workspace。プロジェクト名はsen。

これで本当に準備完了。

StringTaggerDemo.javaを右クリックして、実行→Javaアプリケーション

done.

Please input Japanese sentence:

2007/12/11 0:15:48 net.java.sen.Dictionary <init>

情報: token file = E:\workspace\sen\dic/token.sen

2007/12/11 0:15:48 net.java.sen.Dictionary <init>

情報: time to load posInfo file = 16[ms]

2007/12/11 0:15:48 net.java.sen.Dictionary <init>

情報: double array trie dictionary = E:\workspace\sen\dic/da.sen

2007/12/11 0:15:48 net.java.sen.util.DoubleArrayTrie load

情報: loading double array trie dict = E:\workspace\sen\dic/da.sen

2007/12/11 0:15:50 net.java.sen.util.DoubleArrayTrie load

情報: loaded time = 1.25[ms]

2007/12/11 0:15:50 net.java.sen.Dictionary <init>

情報: pos info file = E:\workspace\sen\dic/posInfo.sen

2007/12/11 0:15:50 net.java.sen.Dictionary <init>

情報: time to load pos info file = 0[ms]

2007/12/11 0:15:50 net.java.sen.Tokenizer loadConnectCost

情報: connection file = E:\workspace\sen\dic\matrix.sen

2007/12/11 0:15:50 net.java.sen.Tokenizer loadConnectCost

情報: time to load connect cost file = 328[ms]

こんなのがでてくるので、コンソールに日本語を打ち込んでみる。

# 半角/全角で日本語入力ができなければ、Alt+半角/全角で日本語入力できるはず。

すもももももももものうち」を入力してみる。

すもももももももものうち

すもも (すもも) 名詞-一般(0,3,3) スモモ スモモ

も (も) 助詞-係助詞(3,4,1) モ モ

もも (もも) 名詞-一般(4,6,2) モモ モモ

も (も) 助詞-係助詞(6,7,1) モ モ

もも (もも) 名詞-一般(7,9,2) モモ モモ

の (の) 助詞-連体化(9,10,1) ノ ノ

うち (うち) 名詞-非自立-副詞可能(10,12,2) ウチ ウチ

できたぁ。大変といえば大変。Eclipseに慣れてれば、けっこう簡単。


けっこうちゃんと書いてみたのは、以前Senを使ったけど、実行結果しか書いていなくて、最近セットアップにちょっと手間取ったから。

ちゃんと書くのは大変だ。

形態素解析だけできても、実はあまり楽しくない。

「も」が「助詞-係助詞」だといわれても、よくわからない。

というわけで、今度はマルコフ連鎖と組み合わせて楽しくしてみよー。

# いつか書くはず&65381;&65381;&65381;。

  评论这张
 
阅读(118)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017