スポンサーサイト

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

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

lucene-gosen4.3.0をリリースしました。(Lucene/Solr4.3.0以上での利用が可能です)

Lucene/Solr 4.3.0がリリースされた(LuceneのChangesSolrのChanges)ので、lucene-gosen 4.3.0をリリースしました。(ダウンロードはこちら
なお、lucene-gosen 4.3.0ですが、Lucene/Solr 4.2.1以下のバージョンのLucene/Solrでは利用できません。
注意してください。
また、lucene-gosen 4.2.1もLucene/Solr 4.3.0では動作しませんので注意が必要です。

現時点(2013/05/06)では、lucene-gosen 4.3.0はLucene/Solr 4.3.0でのみ利用できます。
これは、先日のエントリにも書きましたが、LuceneにてAPIの変更が行われたためとなります。
いくつかのクラスおよびメソッドが廃止されたため、下位互換が保てない変更が入っているためです。

独自のTokenizerやTokenizerFactory、TokenFilterFactory、CharFilterFactoryを作成されている方は、Lucene/Solrのバージョンアップを行う際は注意が必要です。

johtani | lucene-gosen | 23:25 | comments(0) | trackbacks(0) | - | - |

Lucene/Solr 4.0.0リリース&lucene-gosenの4.0対応

Lucene/Solr 4.0.0リリース

ついに、Lucene/Solr4.0.0がリリースされました。
MLで流れていましたが、3年越しのリリースだったようです。
コミッターの方々、JIRAにバグ報告をした方々、お疲れ様でした。

ということで、ちょっと忙しくなりそうです。。。
4.0の機能を調べたりもしたいですし、すこしずつ紹介もしたいです。

本家サイトのニュースはこちら

lucene-gosenの4.0対応版について

lucene-gosenも4.0正式版のjarを利用したバージョンを公開する予定です。
branches/4xでは、すでに作業を行なっており、jarファイルの差し替えは終了しています。
お急ぎの方は、branches/4xをエクスポートして、ビルドしていただくと利用可能となっています。
なお、Lucene/Solrのバージョンが上がっているため、lucene-gosenのメジャーバージョンも変更し、lucene-gosen-4.0.0としてリリースする予定ですしました。。(順当に行けば、3.0.0ですが、Luceneのメジャーバージョンに合わせたほうがわかりやすいかと思いまして。)
また、現在、trunkが3.6.x対応のソースになっていますが、このあと、現在のbranches/4xのソースをtrunkにする予定です。
3.6.x対応のlucene-gosenについては、branches/lucene-gosen-rel2.0にて作業を行うこととなります。
今後は注意してチェックアウトするようにお願いいたします。


ということで、ダウンロードできるようにしました。
lcuene-gosen-4.0.0*.jarとついているものがLucene/Solr 4.0.0に対応したライブラリになります。
johtani | lucene-gosen | 17:45 | comments(0) | trackbacks(0) | - | - |

lucene-gosenのLucene/Solr4.0-ALPHA対応

Lucene/Solrの4.0.0-ALPHAが7/3にリリースされました。

これに伴い、lucene-goenの4xブランチのjarファイルも4.0-ALPHAのものに置き換え、現在のtrunkの修正もマージしました。
こちらにあります。チェックアウトしてビルドしてから利用してください。

※さすがに、jarをダウンロードできるようにすべきかもなぁ。
あと、Maven登録も。。。
johtani | lucene-gosen | 12:11 | comments(0) | trackbacks(0) | - | - |

lucene-gosenのUniDic対応

Issue 32で上がってきたlucee-gosenのUniDic対応の最初のパッチを書いたので、ブログに残しておきます。

UniDicとは


UniDicとは、日本語テキストを単語に分割し,形態論情報を付与するための電子化辞書です。
UniDicの詳細や特長についてはHPを御覧ください。

残念ながら、UniDicは利用者登録をして、利用規約に従うと利用が可能となります。
ですので、lucene-gosenでは、Ipadicやnaist-chasenの辞書とは異なり自動で辞書をダウンロードする機能はありません。


利用手順


以下が、Unidicの辞書を利用したjarファイルの作成方法となります。

1. lucene-gosenをダウンロードし、パッチを当てる
lucene-gosenのリポジトリからソースをエクスポートし、パッチをダウンロードし、パッチを適用します。
コマンドは以下のとおりです。
svn co . lucene-gosen-trunk-readonly
cd lucene-gosen-trunk-readonly
patch -p0 > ...patch
(パッチに関しては今後正式版をリリースされたら手順からは必要なくなります。)

2. Unidic辞書生成のためのディレクトリを作成「$GOSEN_HOME/dictionary/unidic」
mkdir dictionary/unidic

3. 対象となるUnidicの辞書のソースファイルをダウンロード
利用者登録をし、利用規約に同意の上、以下のファイルをダウンロードします。
「/」に添ってダウンロードページから遷移してダウンロードしてください。
1.3.12個別ファイル/unidic-chasen/unidic-chasen1312src.tar.gz

4. ダウンロードしたtar.gzファイルを「dictionary/unidic/」にコピー
cp .. lucene-gosen-trunk-readonly/dictionary/unidic/

5. Antを実行してjarファイルの作成
ant -Ddictype=unidic
成功すれば、lucene-gosen-trunk-readonly/dist/lucene-gosen-2.1-dev-unidic.jarファイルが生成されます。
あとは、通常通り、SolrやLuceneで利用することが可能です。
以上がjarファイルの作成手順となります。

制約事項(2012/06/18現在)


現在(2012/06/18)時点で公開しているパッチは、以下の制約が存在します。
  • COMPOUNDエントリー未対応
  • 品詞情報(発音)の内容の制限

COMPOUNDエントリー未対応
Unidicの辞書のエントリーの中に1件だけ、COMPOUNDと呼ばれるエントリーが1件だけ存在します。
別々の単語を組み合わせて1単語として扱うことができるようになっているようです。
lucene-gosenでは、残念ながら、このような辞書の形式には対応していません。
1件しか存在しないデータでもあることを鑑みて、今回の辞書構築処理では、スキップするようにしました。

品詞情報(発音)の内容の制限
lucene-gosenの実装上、単語の読みのバリエーション数と発音のバリエーション数には以下の制限が存在します。
「読み」バリエーション数  < 「発音」バリエーション数
「読み」に対応する形で、「発音」がlucene-gosenでは品詞情報としてデータ登録されています。
UniDicのデータには上記制約を満たさないデータが5件ほど存在します。
現在、これら5件のデータについて、「読み」に対応した「発音」データには空文字が表示されるようになっています。

まだ、簡単に動作確認をしただけです。UniDicを利用していて問題など有りましたら連絡、Issueへのアップをしていただけると助かります。
johtani | lucene-gosen | 23:03 | comments(0) | trackbacks(0) | - | - |

lucene-gosen 2.0.2リリース(リソース周りの改善など)

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

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

今回の修正では、@haruyama さんからいただいていたパッチの取り込み(リソース周りの改善など)が主な対応となっています。
また、コンパイルに利用するjarファイルがLucene/Solr3.6.0に変更になっています。(Issueはこちら
3.6.0から追加されたテストケースにて、発生する問題への対処も施したものとなっています。
johtani | lucene-gosen | 17:53 | comments(0) | trackbacks(0) | - | - |

Issue32について(4096の壁)

昨晩に引き続き、情けない内容のブログになってしまいますが。。。

昨晩、書いた記事の調査をしていた時に気づいた、問題になるケースがあったので調査をしていました。
Issue32に登録した内容になります。
拙い英語を振り絞って書いた英語なので、伝わらないかもしれないのでブログに残しておきます。
昨晩の問題点となったクラス(StreamTagger2.java)の内部処理についてです。
lucene-gosenのLucene向けのTokenizerの内部処理では入力文字列の処理を行うのに、「char buffer[]」を用いて 入力文字列をReaderから読み込むときにバッファリングしています。
このバッファリングにて、特定のケースにて、想定していない場所を単語の切れ目と認識してしまう問題が実装上存在しました。
Issue32に記載した内容は次のようになります。

上記バッファは4096文字というサイズで固定になっています。
StreamTagger2クラスでは、この4096文字をオーバーするような文字列の場合に、つぎの処理により、4096文字以下の場所に文章の区切りを探そうとします。

  1. 4096文字以上の文字列が入力される
  2. バッファに入れられるだけの文字(4096文字)をバッファにコピーする。
  3. バッファの後ろから、つぎの5種類の文字を探索し、見つかった場合(場所をkとし、k>0の場合)は、その場所を文章の切れ目と判定して、0からk+1文字目までの文字をStringTaggerを利用して形態素解析する。
  4. あとは、繰り返し
  5. 上記条件に合致しない場合は、4096文字を文章とみなして形態素解析を行います。

ここで、5種類の文字は以下のとおり。
0x000D:CARRIAGE RETURN(CR)
0x000A:LINE FEED(LF)
0x0085:NEXT LINE (NEL)
0x2028:LINE SEPARATOR
0x2029:PARAGRAPH SEPARATOR
見ての通り、制御文字ばかりです。
この5文字以外は切れ目と判断してくれません。
ということで、4097文字の文字列が存在し、上記5種類の文字が一度も出てこない場合、バッファのサイズで文字列が途切れてしまい、想定しない区切り位置で区切られた文章に対して形態素解析が実行されてしまいます.
HTMLから文字列を抜き出して解析したり、長い文書を解析する場合に、改行文字を削除して処理するといったことも考えられます。
上記5種類の文字列のみで文章の区切り位置を判断してしまうのは問題ではないかと。
まずは、4096文字内に「。」句点が存在した場合に、その部分を区切り位置として認識するようなパッチを記載して、Issue32に添付しました。

「。」句点を採用した理由はつぎのとおりです。
StreamTagger2では、上記バッファリングした文字列を更に、BreakIterator.getSentenceIterator(Locale.JAPANESE)にて取得したBreakIteratorにて文節単位に区切ってから、各文節ごとに形態素解析を実施しています。
ということは、BraekIteratorにて分節の区切りとして判断される文字については、上記の文字種に追加しても問題無いという判断からです。
ただし、この修正でも、純粋に4096文字以上、句点が出てこない場合には区切り位置がおかしなことになってしまいますが。。。
もう少し、BreakIteratorの挙動を調べて、他にも利用可能な区切り文字が存在しないかを調査していく予定です。。。

1年以上コミッターをやっているのに、こんなことも理解していないのかよいうツッコミを受けてしまいそうでなんとも情けない話です。。。
まずは、現状報告でした。
johtani | lucene-gosen | 01:21 | comments(0) | trackbacks(0) | - | - |

trunkのライブラリ差し替え(Lucene/Solr3.6.0)とランダムテストの失敗について

久々にlucene-gosenを触っています。
trunkのlibにある、jarファイルが3.5ベースだったので、3.6ベースにしてテストをしたところ、
いくつかある、ランダムテストで結果の不整合が検出されたので、調査していました。
先程、trunkに対応版をコミットしました。もう少しテストケースを追加してからリリースします。
おそらく、通常の使い方では問題無いと思います。

Luceneでは、ランダムな文字列を利用したテストが実装されています。
lucene-gosenでもこのテストを利用してランダムなテストをしています。
実際にはtest/以下のorg.apache.luceneパッケージにテストケースがあります。
今回、jarファイルを差し替えた時に、このランダムなテスト実施にて、assertが失敗するケースが発生しました。

原因究明までに、いくつかフェーズがあったので、忘れないように書いておきます。

1.ランダムテストのテストケースにてエラーがassertが失敗するケースが発生
※ただし、成功する場合もあり。

2.該当のテストを再現しつつデバッグ+該当のテストがどんなものかを解読(勉強不足。。。)
※テストは、失敗した場合につぎのようなメッセージが表示され、同じテストが再現可能です。
以下、エラーの出力例。「NOTE: reproduce with: 」のあとにあるantコマンドを実行すれば、同じテストが再現可能です。
    [junit] ------------- Standard Error -----------------
    [junit] TEST FAIL: useCharFilter=false text='wgxznwk'
    [junit] 
    [junit] ===>
    [junit] Uncaught exception by thread: Thread[Thread-3,5,main]
    [junit] org.junit.ComparisonFailure: term 0 expected: but was:
    [junit] 	at org.junit.Assert.assertEquals(Assert.java:125)
    [junit] 	at org.apache.lucene.analysis.BaseTokenStreamTestCase.assertTokenStreamContents(BaseTokenStreamTestCase.java:146)
    [junit] 	at org.apache.lucene.analysis.BaseTokenStreamTestCase.checkAnalysisConsistency(BaseTokenStreamTestCase.java:565)
    [junit] 	at org.apache.lucene.analysis.BaseTokenStreamTestCase.checkRandomData(BaseTokenStreamTestCase.java:396)
    [junit] 	at org.apache.lucene.analysis.BaseTokenStreamTestCase.access$000(BaseTokenStreamTestCase.java:51)
    [junit] 	at org.apache.lucene.analysis.BaseTokenStreamTestCase$AnalysisThread.run(BaseTokenStreamTestCase.java:337)
    [junit] <===
    [junit] 
    [junit] NOTE: reproduce with: ant test -Dtestcase=TestGosenAnalyzer -Dtestmethod=testReliability -Dtests.seed=4ad9618caecb9fb2:d5476c03b8172df:-9c569f70013ffbb -Dargs="-Dfile.encoding=SJIS"
    [junit] ------------- ---------------- ---------------
    [junit] Testcase: testReliability(org.apache.lucene.analysis.gosen.TestGosenAnalyzer):	Caused an ERROR


3.デバッグの結果、Luceneのtest-frameworkにある「MockReaderWrapper」というクラスの影響を確認
LuceneのJIRAのLUCENE-3894にて追加されたクラスであるとわかる。
このクラス、Readerのreadメソッド内部で、ランダムな値を元に長さを途中で返すという実装のReaderになっている。
(全部で18文字の文字列なのだが、ランダムな値を元に、12文字として結果を一旦返すという仕組みが実装されている)

4.lucene-gosenの問題箇所を特定。
Readerが途切れた部分を分節として扱ってしまう実装になっていた。
該当の部分に修正をいれてコミット。

という具合です。
一応、テストを数回走らせてランダムテストが問題なく終了するのを確認はしてあります。
今回の問題に対する、個別のテストケースを追加してから近日中リリースする予定です。
対応が遅くなって申し訳ないです。。。
johtani | lucene-gosen | 01:29 | comments(0) | trackbacks(0) | - | - |

lucene-gosen 2.0.1リリース(Java7対応)

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

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

今回の修正では、Java7でUnicodeのバージョン変更に伴う対応(詳細はこちらを参照)を行なっています。

リソース周りの対応はまた後日。。。すみません。
続きを読む >>
johtani | lucene-gosen | 01:35 | comments(0) | trackbacks(0) | - | - |

lucene-gosenのJava7でのテスト失敗問題の対応

先日、2.0.0リリースの記事にも記載しましたが、Java7でテストケースが失敗する問題がありました。

@haruyamaさんと@hideaki_tさんの協力により問題を解消し、trunkと4xブランチにコミットしました。

issueにも記載しましたが、Java6からJava7にバージョンアップするタイミングで変更されたUnicodeのバージョンが原因でした。
Java6ではUnicodeのバージョンが4.0です。Java7ではUnicodeのバージョンが6.0に変更されています。
今回の問題は「・」(0x30FB)の文字列のCharacter.getType()がCONNECTOR_PUNCTUATIONからOTHER_PUNCTUATIONに変更されたのが原因です。(この変更自体はUnicode 4.1で変更されたみたい)
カタカナ文字種の判別をlucene-gosenのnet.java.sen.tokenizers.ja.JapaneseTokenizerのgetCharClass(char c)メソッドで行なっています。
修正前は、ここで、charの範囲が0x30A0〜0x30FFにある文字でかつ、Character.getType()がCONNECTOR_PUNCTUATIONでないものがカタカナとして判別されていました。
issueの添付ファイルにJava6とJava7で上記範囲の文字のCharacter.getType()のリストを生成して、該当する文字を探した所、「・」(0x30FB)のみであることがわかりました。
ということで、このコードの意図としては、「・」はカタカナではないと判別したかったのだと。
上記の確認を行えたので、ソースコードを修正してコミットしました。
2.0.1としてリリースするかは、Issue29のボリュームを見て考えますので、もう少しお待ちください。


参考にしたサイト:
JavaSE 7でメソッド名に使えなくなった文字
UNICODE CHARACTER DATABASEのHistory
johtani | lucene-gosen | 00:20 | comments(0) | trackbacks(0) | - | - |

【重要】lucene-gosen 2.0.0リリース

先日、宣言したとおり、lucene-gosenのパッケージ名+クラス名の変更を行ったlucene-gosen 2.0.0をリリースしました。
Lucene/Solr 3.6.0のリリースを待つつもりだったのですが、なかなか出ないので先にリリースを行いました。
現時点では、branches/4xについては、パッケージ名、クラス名の修正が追いついていません。
明日までに4xブランチについても修正を反映する予定です。

参考までに、1.2.1から2.0.0への変更点について以下にまとめました。
また、変更に伴い、Solrのschema.xmlに記述するクラス名も変更になります。
schema.xmlのサンプルについてはこちらをご覧下さい。

変更点


まずは、パッケージ名の変更点です。
左が旧パッケージ名、右が新パッケージ名となります。
旧パッケージ名 新パッケージ名
org.apache.lucene.analysis.ja org.apache.lucene.analysis.gosen
org.apache.lucene.analysis.ja.tokenAttributes org.apache.lucene.analysis.gosen.tokenAttributes

また、パッケージ名とは別に、以下のクラス名も変更になっています。
まずは、org.apache.lucene.analysis.gosenのクラス名の変更点です。
旧クラス名 新クラス名
JapaneseAnalyzer.java GosenAnalyzer.java
JapaneseBasicFormFilter.java GosenBasicFormFilter.java
JapaneseKatakanaStemFilter.java GosenKatakanaStemFilter.java
JapanesePartOfSpeechKeepFilter.java GosenPartOfSpeechKeepFilter.java
JapanesePartOfSpeechStopFilter.java GosenPartOfSpeechStopFilter.java
JapanesePunctuationFilter.java GosenPunctuationFilter.java
なし GosenReadingsFormFilter.java
JapaneseTokenizer.java GosenTokenizer.java
JapaneseWidthFilter.java GosenWidthFilter.java

次はorg.apache.solr.analysisです。
旧クラス名 新クラス名
JapaneseBasicFormFilterFactory.java GosenBasicFormFilterFactory.java
JapaneseKatakanaStemFilterFactory.java GosenKatakanaStemFilterFactory.java
JapanesePartOfSpeechKeepFilterFactory.java GosenPartOfSpeechKeepFilterFactory.java
JapanesePartOfSpeechStopFilterFactory.java GosenPartOfSpeechStopFilterFactory.java
JapanesePunctuationFilterFactory.java GosenPunctuationFilterFactory.java
なし GosenReadingsFormFilterFactory.java
JapaneseTokenizerFactory.java GosenTokenizerFactory.java
JapaneseWidthFilterFactory.java GosenWidthFilterFactory.java

また、上記クラスに関連するテストクラスの名前も変更になっています。

以上がクラス名、パッケージ名の対応に関する修正ついてでした。



また、現在、Java7にてテストケースが失敗する問題が見つかっています。
こちらの問題の対応版についても近日中にリリースを行う予定です。

問題点、質問などありましたら、コメントしていただくと回答いたします。


2012-04-03追記
忘れてました、すみません。今回のリリースで、以下の機能が追加されています。
  • Antのパラメータにproxy.user、proxy.passwordの追加
  • GosenReadingsFormFilterの追加
  • TokenAttributeの修正(PronunciationsAttributeImpl、ReadingsAttributeImpl)

Antは認証が必要なプロキシ環境で辞書のビルドを実施するときにユーザ名、パスワードを指定できるようにしました。

GosenReadingsFormFilterは単語を読みに変換するTokenFilterになります。
よみは、辞書に登録してある読みになります。オプションとして、romanizedが指定可能です。指定をすると、よみをローマ字に変換します。

TokenAttributeの修正は、バグフィックスになります。Issueはこちらです。

johtani | lucene-gosen | 19:22 | comments(0) | trackbacks(0) | - | - |
1/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