2年くらい前は結構Solr使ってたんだけど↓今では遠い昔のようであんまり記憶にございません、とw
- Solrをイジった備忘録その1(データ投入編)
- Solrをイジった備忘録その2(TomcatでLog4Jでログ出力)
- Solrをイジった備忘録その3(レプリケーション編)
- Solrをイジった備忘録その4(Apache/文字コード)
- SolrにRequestHandlerを追加する
- SolrのレプリケーションでSnapPull failedエラー
- Solrの範囲検索は結構重い(まぁ、そりゃそうか。。)
またSolrをイジるようになるかも的な感じなので、久しぶりにググってたら、
↓をのブログを発見して、lucene-gosenってとてもナイスっぽい感じなのでイジってみました。
Java製形態素解析ライブラリ「lucene-gosen」を試してみる
■ lucene-gosenを単体で動かす
とりあえずSolr行く前に上記のブログに習ってlucene-gosenを単体で試してみます。
http://code.google.com/p/lucene-gosen/にアクセスしてみると、
↓のようにSolr3.5~って感じになっているようです。

ダウンロードページに行くと↓がダウンロード出来るようになっています。
・Naist(奈良先端科学技術大学院大学)のChasen辞書付きのjar
・IPA(独立行政法人 情報処理推進機構)の辞書付きのjar
・辞書なしのjar

Naistは職場でお世話になってるid:tullioの母校という事でそっちにしてみました。
とりあえずMavenでjarファイル落としてきたいわけなんですが、
↓のチケットみるとまだって事なんですかね~
Issue 20: Register maven central repository
ってことで↓こんな感じでローカルにインストールしましたよ、と。
#Maven3じゃないの?とかそういうのは置いておいてw
>C:apache-maven-2.2.1binmvn install:install-file -DgroupId=org.apache.lucene -DartifactId=lucene-gosen-naist-chasen -Dversion=1.2.1 -Dpackaging=jar -Dfile=C:UsersoreoreDownloadslucene-gosen-1.2.1-naist-chasen.jar
[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: 'install'.
Downloading: http://repo1.maven.org/maven2/org/apache/maven/plugins/maven-install-plugin/2.2/maven-install-plugin-2.2.pom
Downloading: http://repo1.maven.org/maven2/org/apache/maven/plugins/maven-install-plugin/2.2/maven-install-plugin-2.2.jar
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Default Project
[INFO] task-segment: [install:install-file] (aggregator-style)
[INFO] ------------------------------------------------------------------------
Downloading: http://repo1.maven.org/maven2/org/codehaus/plexus/plexus-digest/1.0/plexus-digest-1.0.pom
Downloading: http://repo1.maven.org/maven2/org/codehaus/plexus/plexus-components/1.1.7/plexus-components-1.1.7.pom
Downloading: http://repo1.maven.org/maven2/org/codehaus/plexus/plexus-digest/1.0/plexus-digest-1.0.jar
[INFO] [install:install-file {execution: default-cli}]
[INFO] Installing C:UsersoreoreDownloadslucene-gosen-1.2.1-naist-chasen.jar to C:Usersoreore.m2repositoryorgapachelucenelucene-gosen-nais
t-chasen1.2.1lucene-gosen-naist-chasen-1.2.1.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 4 seconds
[INFO] Finished at: Fri Feb 10 18:37:44 JST 2012
[INFO] Final Memory: 4M/122M
[INFO] ------------------------------------------------------------------------
でもって、pom.xmlに↓のように定義を入れてやります。
<dependency> <groupId>org.apache.lucene</groupId> <artifactId>lucene-gosen-naist-chasen</artifactId> <version>1.2.1</version> </dependency>
↓みたいなコード書いてanalyzeしようとしたら、なんかdeprecatedとか言われて、、

↓ソースみてみたら、あー、そーゆー風な感じなんですねぇ的な。
#こーやってソース追ってるだけで、フィルター的に前処理とか後処理とか
#ちゃんとしてるよねぇって気がしてきたりします。
/**
* Decompose a string into its most likely constituent morphemes
*
* @param surface The string to analyse
* @return An array of {@link Token}s representing the most likely morphemes
* @throws IOException
*/
public List<Token> analyze(String surface, List<Token> reuse) throws IOException {
Sentence sentence = new Sentence(surface.toCharArray());
filterPreProcess(sentence);
List<Token> tokens = viterbi.getBestTokens(sentence, reuse);
tokens = filterPostProcess(tokens);
return tokens;
}
/**
* @deprecated use {@link #analyze(String, List)} instead.
*/
@Deprecated
public List<Token> analyze(String surface) throws IOException {
return analyze(surface, new ArrayList<Token>());
形態素解析した結果を出力してみます。
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import net.java.sen.SenFactory;
import net.java.sen.StringTagger;
import net.java.sen.dictionary.Token;
public class App
{
public static void main( String[] args )
{
// 辞書は内包されてるのでnullでOKみたいです。
StringTagger tagger = SenFactory.getStringTagger(null);
String str = "今夜はみんなでカレーを食べに行きます。";
List tokens = new ArrayList();
try {
tokens = tagger.analyze(str, tokens);
} catch (IOException e) {
e.printStackTrace();
}
// 名詞だけ抽出してみる
for (Token token : tokens) {
if (token.getMorpheme().getPartOfSpeech().contains("名詞")) {
System.out.println("= = = = =");
System.out.println("surface : " + token.getSurface());
System.out.println("partOfSpeech : " + token.getMorpheme().getPartOfSpeech());
System.out.println("readings : " + token.getMorpheme().getReadings());
}
}
}
}
イイ感じです。
= = = = = surface : 今夜 partOfSpeech : 名詞-副詞可能 readings : [コンヤ] = = = = = surface : みんな partOfSpeech : 名詞-代名詞-一般 readings : [ミンナ] = = = = = surface : カレー partOfSpeech : 名詞-一般 readings : [カレー]
—
技術評論社
売り上げランキング: 26985



コメント
[…] « lucene-gosenを試してみる その1 […]
[…] Checkここのところ↓のようにlucene-gosenをいじっていますが、 lucene-gosenを試してみる その1 lucene-gosenを試してみる その2 […]