スポンサーサイト

一定期間更新がないため広告を表示しています

スポンサードリンク | - | | - | - | - | - |

【重要】lucene-gosenの次期リリースについて

lucene-gosenを利用して頂いてる皆様に連絡があります。

連絡事項


次期lucene-gosenのリリース(2.0を予定)にて、org.apache系のパッケージ名および、クラス名の変更を行います。
Lucene/Solrの次期リリース版である3.6.0以降では、lucene-gosen 2.0(予定)を利用するようにしてください。

経緯


Twitterでは少しずつツイートしていますが、Lucene/Solr 3.6から日本語の形態素解析器がLucene/Solrにて用意されることになりました。
ベースとなっているのは、Atilika社が開発したKuromojiという形態素解析器です。
Lucene/SolrにコントリビュートされたタイミングではKuromojiAnalyzerなど、Kuromojiという名称が残った形で取り込みが行われました。
その後、LUCENE-3909にて、Kuromojiではなく、一般的な名称(Japanese*)に変更する提案が行われました。
この提案で、luene-gosenが利用しているクラス名、パッケージ名と大半のクラスが衝突してしまうこととなりましす。
今後も、lucene-gosenを利用していただけるように、lucene-gosenのIssueを発行し、
現在、lucene-gosenのtrunkにてパッケージ名の変更及びクラス名の変更作業を行なっています。
正式にリリースするタイミングになりましたら、再度連絡いたします。

ブランチなどについて


現時点ではパッケージ名、クラス名の変更はリポジトリの以下のものについてのみ作業を行う予定です。
  • trunk
  • branches/4x
現時点でのリリース版(1.2系)のソースについてはbranches/rel-1.2にて、これまで同様のクラス名、パッケージ名のまま変更を行いません。
1.2系についてはこちらをご覧下さい。

また、当ブログにて、提供しているSolr入門のサンプルに利用可能なschema.xmlなどの記事についてもLucene/Solr3.6がリリースされた際には再度修正して掲載いたします。
Kuromojiの利用方法もあわせて記載したいです。


参考:
lucene-gosenとKuromojiの機能などの比較についてはこちらを参考にしてください。
johtani | lucene-gosen | 02:39 | comments(2) | trackbacks(0) | - | - |

lucene-gosenとSynonymFilterを利用するときの注意点(問題点編)

久々にlucene-gosenの話です。
しかも、あんまり嬉しくない話しです。

すでにissueをアップしていますが、lucene-gosenとSynonymFilterを併用する場合に、特定の条件下でNullPointerExceptionが発生してしまいます。

条件は以下の組み合わせになります。
  • Solr 3.5.0以前
  • lucene-gosen1.2.0 - 1.2.1の辞書なしjar
  • SynonymFilterFactoryにてtokenizerFactoryを指定

根本的にはSolr側の問題のようです。SOLR-2909としてissueが上がっています。

SynonymFilterFactoryでは、類義語の設定ファイルの単語を読み込むときにtokenizerFactoryを指定できます。
このとき、SynonymFilterFactory内部でtokenizerFactoryに指定されたFactoryのクラスが読み込まれ、 インスタンス化されて、Tokenizerが作成されます。
この、Tokenizerのインスタンス化の処理シーケンスに問題があります。
schema.xmlの<tokenizer>タグで指定されたTokenizerFactoryでは、ResourceLoaderAwareインタフェースのinform(ResourceLoader loader)メソッドが実行されます。
このinform()メソッドがSynonymFilterFactoryのToeknizerのインスタンス化の場合に実行されません。
lucene-gosenのJapaneseTokenizerFactoryではこのinform()メソッドでdictionaryDirのパスの読み込みを行なっています。(このへん

上記の条件では、NullPointerExceptionが発生すると書きました。
辞書を内包したjarファイルを利用している場合、NullPointerExceptionが発生しなくても次のような問題点があります。こちらの問題は見た目は動いているように見えてしまうので注意が必要です。
すべて、SynonymFilterを利用する時点でも問題点になります。
  • compositePOS設定が類義語辞書読み込み時に無効
  • dictionaryDir設定が類義語辞書読み込み時に無効(=jarに内包されている辞書で動作する)

一見動いているように見えるかもしれませんが、望んでいてる動作になっていない可能性があるので注意が必要です。


解決策(まだ途中)

先程書きましたが、基本的にはSolr側の修正をするのが妥当です。
SolrのJIRAにパッチもアップされました。
こちらのパッチをSolrに適用し、SynonymFilterFactoryを次のように指定することで問題を回避することが可能になります。

 <tokenizer class="solr.JapaneseTokenizerFactory" compositePOS="compositePOS.txt"
  dictionaryDir="dictionary/naist-chasen"/>
 ...
  <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" 
    expand="true" tokenizerFactory="solr.JapaneseTokenizerFactory" 
    compositePOS="compositePOS.txt" dictionaryDir="dictionary/naist-chasen"/>
 ...
SynonymFilterFactoryの設定にcompositePOS、dictionaryDirを追加します。
ここの設定は<tokenizer>タグで指定された設定と同じ物を指定します。
以上で問題なく動作することになります。

ただし、この方法はSolrにパッチを当てなければいけません。
Solrにパッチを当てるのもなかなかな作業だと思います。
ということで、どうにかlucene-gosen側だけでも対応出来る形にしたいなぁと考えているところです。
残念ながら、まだ考えているだけですので、もう少し提供できるのは先になってしまいますが。。。
現時点では、次の方法を考え中です。
  1. informメソッドを呼ぶフラグを追加して、どうにかしてinformメソッドを呼び出す
  2. SynonymFilterの修正版をlucene-gosenに内包して提供する
できれば、a.にて対応できればと思っています。
最悪、b.の方法かと。
悩んでいる間にSolrの次のバージョンが出てしまわないように出来るだけ早く対応しようと思っています。
他にも問題点や気になる点があれば、日本語、英語を問わないので、気兼ねなくissueに上げてもらうか、Twitterで私宛にメンションしてもらえればと。
(あ、issue23へのパッチでもいいですよ!)
続きを読む >>
johtani | lucene-gosen | 01:41 | comments(1) | trackbacks(0) | - | - |

lucene-gosenのLucene/Solr4.0対応ブランチ更新

先日のSolr勉強会でLucene/Solr4.x系のlucene-gosenについて質問を受けていたのを忘れないように(年越しちゃいました、すみません。)先週金曜日(1/6)にissueに登録しました。
まずは忘れないようにと思って、登録だけして3連休に突入したのですが、Robertさんが1/7に対応してくれました。

Lucene/Solr 4.x系では3.x系とはパッケージやメソッドが変更されるなど少し異なる部分があります。
lucene-gosenでは、プロジェクトのページにもあるとおり、4.x系にも対応しています。
ただ、この4x系に対応したブランチが、2011年5月から放置されていました。

ということで、Lucene/Solr 4.0系でlucene-gosenを利用されている方、これから利用される方は、この4x系に対応したブランチを利用してください。
なお、このブランチにはLucene/Solrのtrunk (r1228509)のSNAPSHOT版のjarファイルが利用されています。

今後はlucene-gosen側でバグ修正や機能追加を行った場合にも4xブランチを更新していく予定です。
※ただし、Lucene/Solr 4.0が正式リリースされていないため、頻繁にSNAPSHOTのjarファイルを入れ替えることはこなわないと思います。
johtani | lucene-gosen | 23:41 | comments(0) | trackbacks(0) | - | - |

1.2.1リリースしました

lucene-gosenの最新版(1.2.1)をリリースしました。

プロジェクトページよりダウンロードが可能です。

今回の修正では、特定文字列でメモリの使用量が爆発してしまうバグへの対処となっています。
1.2.1以前のバージョンを利用している場合は最新版を利用するようにしてください。
johtani | lucene-gosen | 12:15 | comments(0) | trackbacks(0) | - | - |

「Apache Solr入門」のサンプルのlucene-gosen対応(1章から4章)

先週末から勤労感謝の日まで風邪で寝こんでました。。。
みなさん、朝晩、冷え込みが激しいので風邪には気をつけてください。

季節の言葉も入れたので本題です。
つい最近、「Apache Solr入門」のサンプルをlucene-gosenでどうやって動かすんですかー?という質問を受けました。
確かに、「Apache Solr入門」を書いたのはSolrのバージョンが1.4が出る直前でしたし、lucene-gosenは存在せず、 当時はSenを元にした日本語の形態素解析のサンプルとなっていました。
そのSenも入手しづらくなってきており、私もlucene-gosenのプロジェクトに携わるようになってきてある程度時間が 経ちました。
せっかくなので、サンプルのschema.xmlだけでも最新版(Solr 3.4 + lucene-gosen-1.2.0-ipadic)のものを用意しました。
なお、あくまでも、3.xでlucene-gosenを利用する場合の「Apache Solr入門」のサンプルプログラムの変更点(とりあえず、4章まで)の違いについて記述します。
申し訳ございませんが、1.4と3.xの違いについての説明はここでは行いません。

以下では、各章でschema.xmlに関連する記載のある部分を抜粋して、変更点と変更したschema.xmlのリンクを用意しました。参考にしてもらえればと思います。

1章

1.6.1 N-gram(17ページ)
1.6.1の手順に変更はありません。
サンプルプログラムが入っているZip「solrbook.zip」のintroduction/ngram/schema.xmlファイルの代わりに
こちらのschema.xmlを利用してください。

1.6.2 形態素解析(18ページ〜20ページ中盤まで)
手順が大きく変わります。
Senを利用する場合、Senの辞書のビルド、Senのjarファイルの配置、Senを利用するためのTokenizerクラスを含んだサンプルjarの配置という作業があります。
lucene-gosenではコンパイル済みの辞書がjarファイルに含まれています。
また、Solr向けのTokenizerもlucene-gosenのjarファイルに含まれています。
lucene-gosenを利用して形態素解析を体験するための手順は次の流れになります。
なお、schema.xmlについては上記N-gramでダウンロードしたschema.xmlに形態素解析の設定もあわせて記載してあります。

jarファイル(lucene-gosen-1.2.0-ipadic.jar)をダウンロードして、$SOLR/example/solr/lib(libディレクトリがない場合は作成)にコピーします。
コピーが終わりましたら、次のように$SOLR/exampleディレクトリでSolrを起動します。
(-Dsen.homeは必要なし)

$ java -jar start.jar

あとは、書籍の記述にしたがって管理画面のAnalysis画面で動作を確認します。
ほぼ、図1-6と同じ結果になっていると思います。
(lucene-gosenで出力される情報には本書のサンプルよりも多くの情報が含まれています。また、サンプルでは、形態素解析の後の単語に基本形を採用しているため、「な」が「だ」として出力されています。基本形を出力する場合は後述するこちらで紹介したTokenFilterを利用すれば可能です。)

2章

2.1.3 schema.xmlのバージョン(27ページ)
Solr3.xではschema.xmlのファイルの最新バージョンは1.4になっています。

2.2.3 代表的なトークナイザ(35ページ)
solrbook.analysis.SenTokenizerFactoryは必要ありません。
先ほども説明しましたが、lucene-gosenにはSolr向けのトークナイザが用意されています。
solr.JapaneseTokenizerFactoryがそれに該当します。

2.2.4 代表的なトークンフィルタ(37ページ)
以下の2つについてはlucene-gosenに同等のトークンフィルタが存在します。
  • solrbook.analysis.KatakanaStemFilterFactory
  • solrbook.analysis.POSFilterFactory
それぞれ、次のものがlucene-gosenにあるので、こちらを利用します。
  • solr.JapaneseKatakanaStemFilterFactory
  • solr.JapanesePartOfSpeechStopFilterFactory
2章向けのschema.xmlはこちらです。その他のtxtファイルについては、特に変更はありません。

3,4章は特に変更はありません。Solrの起動の仕方にだけ注意してください。(-Dsen.homeは必要ありません)

以上が4章までの修正点になります。
動作しないなどあれば、コメントください。
サンプルアプリについてはまた後日余裕があれば。。。
johtani | lucene-gosen | 03:00 | comments(3) | trackbacks(0) | - | - |

1.2.0リリース

lucene-gosenの最新版(1.2.0)をリリースしました。

プロジェクトページよりダウンロードが可能です。

新規追加機能についてはこちらのエントリを御覧ください。

バグなどありましたら、容赦なく報告をいただけると助かります。
johtani | lucene-gosen | 15:46 | comments(0) | trackbacks(0) | - | - |

辞書の外部化とLucene/Solr3.4対応

すぐやりますと言いつつ、はや1ヶ月。。。
腰が重い、ダメエンジニアですね。。。

すみませんでした。。。
ようやくtrunkにコミットしました。
すぐにリリース版を用意すると思います。

1ヶ月もあいてしまったので、追加した機能に関するまとめと、
用途別の利用方法を記載しておきます。
(lucene-gosenのWikiにもそろそろ書かないとなぁ。日本語でもいいから。)

追加した機能
これまでのlucene-gosenはjarに辞書を含む形でライブラリを提供していました。
ただ、この場合、カスタム辞書を利用している環境ではカスタム辞書を修正し、ビルドしなおすたびに、 jarファイルを作成しなければなりません。
また、jarファイルをSolrなどに配布する必要も出てきます。
この手間を考慮して、辞書を外部ディレクトリで指定することができるようにしたものが 今回の修正になります。
また、修正の過程で同一VM内で異なる辞書を使えるようにする機能も副産物として生まれました。
今回追加した機能は次のようなものになります。

  • 辞書を含まないjarのビルドおよび提供
  • ディレクトリ指定による辞書の指定
  • 同一VM内での複数辞書の利用
  • 辞書リビルド用のAntターゲットの追加
  • Lucene/Solr jarファイルの最新化(3.4.0対応)

ディレクトリ指定による辞書の指定ですが、以下のような形になります。
まずは、LuceneのTokenizerでの指定方法です。
「辞書のディレクトリ」という引数が追加になっています。
ここに、辞書ディレクトリ(*.senファイルが存在するディレクトリ)を相対/絶対パスで指定します。
...
Tokenizer tokenizer = new JapaneseTokenizer(reader, null, "辞書のディレクトリ");
...

つぎは、Solrでの設定の方法です。
schema.xmlにて次のような設定を行います。
...

  
    ...
    <tokenizer class="solr.JapaneseTokenizerFactory" compositePOS="compositePOS.txt" dictionaryDir="辞書のディレクトリ"/>
    ...
  

...  

schema.xmlの設定については、example/schema.xml.snippetにも説明がありますので、こちらもあわせて参考に。
なお、Solrの設定については、先ほどのLuceneでの辞書のディレクトリの指定方法(絶対/相対パス)に加えて、 $SOLR_HOME/conf からの相対パスでの指定も可能になっています。

Antのターゲットについて
辞書なしjarファイルを作成するターゲットなどを追加しています。
実際に追加したターゲットは以下のとおりです。

ターゲット名 説明
nodic-jar 辞書なしのjarファイルを生成するためのターゲット。辞書のダウンロード、コンパイルは行いません。
rebuild-dic lucene-gosenのビルド済み辞書(.senファイル)を削除してから辞書のコンパイル(ビルド)を行います。-Ddictypeにより辞書のタイプ(ipadic|naist-chasen)の指定が必要です。また、-Dcustom.dicsによりカスタム辞書の指定もあわせて可能です。
build-dic-ipadic テスト用に追加。-Ddictype=ipadicを指定してbuild-dicを実行。
build-dic-naist-chasen ついでに追加。-Ddictype=naist-chasenを指定してbuild-dicを実行。

最後の2つはあまり関係ありません。内部的に有ると便利だったため、作りました。
重要なのは最初の2つです。
ひとつめの「nodic-jar」は辞書を含まないjarファイルをビルドします。
このjarファイル+辞書の入ったディレクトリを利用することで、辞書の外部化が可能となります。

そして、「rebuild-dic」です。こちらは、以前記事に書きましたが、カスタム辞書のコンパイルが思いの外面倒だったので、ターゲットを追加しました。
次のように指定することで、辞書のリビルドが可能です。
$ ant -Ddictype=naist-chasen -Dcustom.dcs="custom1.csv custom2.csv" rebuild-dic

提供されるjarファイルについて

提供されるjarファイルは次のようになる予定です。
1番目のjarファイルが今回追加になる、辞書なしのjarファイルになります。
  • lucene-gosen-1.x.x.jar
  • lucene-gosen-1.x.x-ipadic.jar
  • lucene-gosen-1.x.x-naist-chasen.jar

用途別の利用方法
利用用途別に利用するjarファイルやantのターゲットを利用シーンを交えて想定を書いてみます。
Solrでの利用シーンを想定します。

お手軽に使う。辞書ありjarファイルで一発インストール。
これまでどおりの使い方になります。
辞書込みのjarファイルを利用すれば、すぐに利用可能になります。

カスタム辞書を使い倒す。定期的に辞書をメンテナンス。
定期的にシステム固有の単語が増える(例:製品名、新語など)場合です。
  • 利用するjar:lucene-gosen-1.x.x.jar
  • 辞書のコンパイル+配置:ant -Ddictype=naist-chasen -Dcustom.dics="custom1.csv" rebuild-dir
  • Solrの該当コアのRELOAD

Solrのマルチコア環境を利用します。なお、sharedLib設定にlucene-gosen-1.x.x.jarを配置すると、辞書の再読み込みができないので注意してください。
設定は、上記のようにTokenizerFactoryの設定でdictionaryDirにて辞書のディレクトリを設定しておきます。
カスタム辞書に単語を追加後、antにて、辞書のリビルドを行います。
リビルドした辞書ファイルを必要に応じて対象の辞書ディレクトリにコピーします。(ビルド後のディレクトリをそのまま利用している場合はコピーの必要はないです。)
最後に、Solrの該当コアのリロードを行います。(リロードの仕方はこちらを参考に。)
コアのリロードにより、辞書の再読み込みが行われるので、リロード後から新しい辞書が適用されます。

異なる辞書を使い倒す。TokenizerごとにdictionaryDir設定するぞ
1つのSolrで異なる辞書を使ったフィールドを使いたい場合です。
ipadicとnaist-chasenといった異なる場合はあまり想定できないですが、カスタム辞書の部分が異なるという形が想定できるでしょうか。(例:製品名のフィールド、企業名のフィールド。。。など)
  • 利用するjar:lucene-gosen-1.x.x.jar
  • 設定:schema.xmlに異なるdictionaryDirを設定したTokenizerFactoryを設定

上記、カスタム辞書の定期更新も一緒に行うことも可能です。コアをリロードすれば、リロードしたコアで利用している 辞書がすべてリロードされます。

最後に
遅くなってしまいましたが、ようやく、trunkにコミットしました。
できるだけ速く、リリースしますので、もう少々お待ちを。

Solrのconfディレクトリからの指定については、@shinobu_aokiさんにパッチを提供してもらいました。
また、trunkにコミットしていないパッチを適用して記事を書いてくれた方もいらっしゃいました。こちらもあわせて参考に。私より説明が上手です。
Java製形態素解析ライブラリ「lucene-gosen」を試してみる
johtani | lucene-gosen | 01:12 | comments(0) | trackbacks(0) | - | - |

lucene-gosenで文章からキーワード抽出(イレギュラー?)

昨日、文章から特定の単語(リストあり)を探したいという話を聞き、lucene-gosenでもできるねぇという話になりました。
まぁ、考えてみればごくごく当たり前なのですが。。。(その筋の方たちにしてみれば常識なのかもしれないですが。。。)
一応やってみたので、こんなこともできるなという一例ですということで、記録を残しておきます。

今回の例文として野田首相の所信表明演説の一部を活用させてもらいます。
単語のリストは次のようにします。
  • 内閣総理大臣
  • 正心誠意
  • 東日本
  • 日本

今回も結果をわかりやすくするためにSolrのanalysis画面を利用します。
作業手順は以下のとおり。
  1. dictionary.csvの編集
  2. 辞書のコンパイル
  3. fieldTypeの定義(Solrのschema.xmlの設定)
  4. 文章からキーワード抽出(Solrのanalysis画面)

1.dictionary.csvの編集
今回はnaist-chasenディレクトリで作業します。
なお、今回利用するlucene-gosenはここで紹介した辞書分離バージョンです。(はやくtrunkにコミットせねば。。。)
dictionary.csvを先ほど上げた単語だけのエントリに変更します。
キーワードだけを抽出したいので、他の単語は必要ないからです。

"内閣総理大臣",1,名詞,一般,*,*,*,*,"内閣総理大臣","ナイカクソウリダイジン","ナイカクソウリダイジン"
"正心誠意",1,名詞,一般,*,*,*,*,"正心誠意","セイシンセイイ","セイシンセイイ"
"東日本",1,名詞,一般,*,*,*,*,"東日本","ヒガシニホン","ヒガシニホン"
"日本",1,名詞,一般,*,*,*,*,"日本","ニホン","ニホン"

2.辞書のコンパイル
先ほど作成した辞書をコンパイルし、lucene-gosen用バイナリ辞書を作成します。

 $ cd $LUCENE_GOSEN_HOME¥dictionary
 $ ant -Ddictype=naist-chasen clean-sen compile 

3.fieldTypeの定義(Solrのschema.xmlの設定)
Solrのschema.xmlにlucene-gosenを利用するフィールドタイプを定義します。
追加するのは次の通り

    <fieldType name="text_ja" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="false">
      <analyzer>
        <tokenizer class="solr.JapaneseTokenizerFactory" compositePOS="compositePOS.txt" dictionaryDir="keyword-dic"/>
        <filter class="solr.JapanesePartOfSpeechKeepFilterFactory" tags="keeptags_ja.txt" enablePositionIncrements="true"/>
      </analyzer>
    </fieldType>

また、ここで定義しているcompositePOS.txt、keeptags_ja.txtは次のようになります。

compositePOS.txt
未知語

keeptags_ja.txt
名詞-一般

未知語がバラバラに出現しないようにして見やすくするためと、必要な単語(今回は「名詞-一般」しか利用しないため。)だけを抽出したいための設定です。

4.文章からキーワード抽出(Solrのanalysis画面)
あとは、analysis画面で解析して見るだけになります。
キーワード抽出結果
ということで、辞書に登録された単語だけが抽出されてますね。
この例ではインデックスに登録となりますが。
ただし、「東日本」「日本」のような一部を含む単語の場合、「東日本」が見つかった場合は「日本」は抽出されません。
あくまでも、ベストな解が見つかるのみという形です。
すべての単語を出したい場合はもう少しやり方を考えたほうがいいかもしれません。
(まぁ、このやり方でキーワードを抽出するかも考えたほうがいいかもしれませんが。。。)
最近、頭が硬くなってきてるなぁと実感してしまいました。まぁ、こんな使い方もあるかなぁと。
もっと頭を柔らかくして問題を解けるけるようになりたいなぁと。
johtani | lucene-gosen | 12:17 | comments(0) | trackbacks(0) | - | - |

辞書分離のテストケース追加と残タスク

すぐにテストケース追加しますといいつつ、はや一週間。

ようやく仕事が落ち着いたので、テストケースを追記しました。まだパッチの段階です。
一応、異なる辞書の読み込みのテストケースなどを追加し、テストケース追加時点で いくつか気になったところもあったので、ついでに修正を加えました。
一応、辞書の分離+複数辞書対応については現時点ではこんなところかと。

あと、もう1項目対応してからtrunkに取り込む予定です。
対応する項目とは以下の項目です。
  • カスタム辞書ビルドの簡易化

以前の記事にも書いていますが、カスタム辞書のビルドが思いのほか手間がかかります。
辞書の外部化は対応したのですが、せっかく辞書が外部化できたのですから、コマンド(ant?)で一発で カスタム辞書を含んだビルドをしたくなるのが人情です。
辞書なしのjarファイルもあることなので、すぐに対応可能かと。
ということで、今週中には対応する予定です(宣言しないとまた先延ばしになりそう)

忘れてそうだったらTwitterやコメントでツッコミを入れてもらえると助かります。

johtani | lucene-gosen | 01:56 | comments(0) | trackbacks(0) | - | - |

複数辞書の読み込み機能追加(仮)

先日、辞書のjarファイルからの分離についてパッチと記事を書きました。

IssueにあげていたパッチをRobertさんが見ていたらしく、次のようなコメントをもらいました。

Maybe if we change SenFactory.getInstance to use a ConcurrentHashMap then you can easily use multiple dictionaries at the same time?
「SenFactory.getInstanceメソッドでConcurrentHashMap使ったら複数辞書対応できるんじゃない?」(訳)
たしかに。。。
なんで思いつかなかったのだろう。。。

ということで、実装してみました。
パッチはこちら

使い方ですが、先日の記事と代わりはありません。
ただし、あった制限事項が次のようになります。
  • マルチコアの設定でsharedLibにlucene-gosenのjarを含まない
  • 同一コア内で異なるdictinaryDirの指定はできない

ソースの変更点ですが、ものすごく単純です。
dictionaryDirに指定された文字列をキー、その辞書ディレクトリを利用したSenFactoryのインスタンスを値に持つmapをSenFactory内に保持します。
あとは、SenFactoryのgetInstance(String dictionaryDir)メソッドで取得する際にmapに対応するインスタンスがあれば、そのインスタンスをなければ、dictionaryDirから辞書を読み込んでインスタンス生成してmapにキャッシュしつつ返すという実装に変えただけです。
ということで、次のようなIPADICとNAIST-JDIC for ChaSenを同時に使う設定も可能となります。
    <fieldType name="text_ja_ipadic" class="solr.TextField" positionIncrementGap="100">
      <analyzer>
        <tokenizer class="solr.JapaneseTokenizerFactory" dictionaryDir="/tmp/lucene-gosen/dictionary/ipadic"/>
      </analyzer>
    </fieldType>
    <fieldType name="text_ja_naist_chasen" class="solr.TextField" positionIncrementGap="100">
      <analyzer>
        <tokenizer class="solr.JapaneseTokenizerFactory" dictionaryDir="/tmp/lucene-gosen/dictionary/naist-chasen"/>
      </analyzer>
    </fieldType>

あと、注意事項です。
普通に考えるとわかることですが、辞書を複数読み込めるようになったことで、読み込んだ複数の辞書をメモリに保持することになります。ですので、今までよりも多くのメモリを利用するので、Heapのサイズには注意が必要です。
例のごとく(ほんとよくない。。。)テストコードを書いていない状態のパッチをまずはアップしました。
テスト書かないと。。。次回はテストコードかきましたと言う報告をしたいな

あと、Robertさんのコメントの前に@shinobu_aokiさんからJapaneseTokenizerFactoryの設定では辞書のディレクトリを$SOLR_HOME/confからの相対パスで記述できるというパッチもいただいています。
この部分については先日と使い方が異なります。
(すみません、まだきちんとソースを見れてないです。。。)

johtani | lucene-gosen | 10:34 | comments(2) | trackbacks(0) | - | - |
2/4PAGES | << >> |

07
--
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
--
>>
<<
--
PR
RECOMMEND
[改訂新版] Apache Solr入門 ~オープンソース全文検索エンジン (Software Design plus)
[改訂新版] Apache Solr入門 ~オープンソース全文検索エンジン (Software Design plus) (JUGEMレビュー »)
大谷 純,阿部 慎一朗,大須賀 稔,北野 太郎,鈴木 教嗣,平賀 一昭
Solr 4系に対応した改訂版を出しました!興味ある方はぜひ。
RECOMMEND
Apache Solr入門 ―オープンソース全文検索エンジン
Apache Solr入門 ―オープンソース全文検索エンジン (JUGEMレビュー »)
関口 宏司,三部 靖夫,武田 光平,中野 猛,大谷 純
RECOMMEND
RECENT COMMENT
  • ポモドーロ回してます。(ポモドーロテクニック入門読みました)
    おーたに (05/07)
  • Lucene 4.3.0のChangesにあるChanges in backwards compatibility policyが気になったので訳してみた。
    おーたに (04/26)
  • メインMBAをMountain Lionにアップデート(いろいろ確認中)
    おーたに (09/04)
  • メインMBAをMountain Lionにアップデート(いろいろ確認中)
    m_nori (09/03)
  • メインMBAをMountain Lionにアップデート(いろいろ確認中)
    おーたに (09/03)
  • メインMBAをMountain Lionにアップデート(いろいろ確認中)
    ho4kawa (09/03)
  • メインMBAをMountain Lionにアップデート(いろいろ確認中)
    おーたに (09/03)
  • メインMBAをMountain Lionにアップデート(いろいろ確認中)
    まろか (09/03)
  • Lucene/Solr 3.6.0リリース / 「Apache Solr入門」のサンプルのKuromojiとlucene-gosen対応(1章)
    おーたに (08/07)
  • Lucene/Solr 3.6.0リリース / 「Apache Solr入門」のサンプルのKuromojiとlucene-gosen対応(1章)
    moco (08/07)
RECENT TRACKBACK
MOBILE
qrcode
OTHERS