More Related Content
Similar to Lucene gosenの紹介 solr勉強会第7回 (20)
Lucene gosenの紹介 solr勉強会第7回
- 2. u 所属:㈱シーマーク
u 氏名:大谷 純
u twitter:@johtani
u ブログ:
http://johtani.jugem.jp
u 「Apache Solr入門」
の著者の一人
u lucene-gosenのcommitter
- 3. u Solrのインデックスについて
u 形態素解析について
u lucene-gosenの機能
u デモ
- 4. u Solrのインデックスについて
u 形態素解析について
u lucene-gosenの機能
u デモ
- 5. u Solr:Lucene(全文検索ライブラリ)を活用した検
索エンジンサーバ
u ApacheプロジェクトのOSS
u Javaで実装
u 検索補助のためのツールがいっぱい
u 転置インデックス方式による全文検索
- 6. 1
カツオはサザエの弟
対象とする文章(ドキュメント)に
2
サザエはワカメの姉
IDを付与
カツオ
1
は
1
サザエ
1
の 1
弟 1
文章を単語に分割し、
サザエ
2
は
2
ワカメ
2
の 2
姉 2
単語:ドキュメントIDと整理
の
1
2
ワカメ
2
単語をキー、ドキュメントIDの
は
1
2
弟 1
配列を値とする表を作成
=
カツオ
1
姉 2
転置インデックス
サザエ
1
2
- 7. u 単語に区切るにはスペースで区切ればいい。
This is a pen.
This
is
a pen
.
u じゃあ、日本語は???
- 8. u Lucene/Solrのインデックスについて
u 形態素解析について
u lucene-gosenの機能
u デモ
- 9. u Lucene/Solrで最初から使えるのはN-gram
CJKTokenizer、NGramTokenizer
u N-gramとはN(≧1)文字ずつ単語にすること
サザエはワカメの姉
N=2で単語分割
サザ
ザエ
エは
はワ
ワカ
カメ
メの
の姉
- 10. u メリット
u 辞書が不要=流行語に強い
u デメリット
u 「カメ」で検索して「ワカメ」もヒット
意味のある単位で区切っているわけではないの
でノイズが多くなる
u 単語数が多い
- 11. u 形態素:意味のある最小単位の文字列
u 形態素(単語)に文章を分割し、品詞情報(動
詞、名詞など)を付与すること=形態素解析
u 大量コーパスから学習した言語モデルを元に
している辞書を利用して確率的にもっともらし
い単語の分割を出力できる
- 12. u メリット
u 意味のある単語が出現
u 品詞情報を活用可能
(名詞だけ取り出すとか可能)
u デメリット
u 辞書に載っていない単語を抽出しにくい
u 辞書のメンテナンスコストあり
- 13. u JUMAN
- 京大で開発。独自辞書。付加情報が豊富。
u ChaSen(茶筅)
- JUMANを元に開発。IPA辞書。コスト推定機能付き。
u MeCab(和布蕪)
- ChaSenを元に開発。IPA辞書。コスト推定機能付き。未知語処
理が外部ファイル定義。日本で最も利用されている形態素解析器
u KyTea(キューティー)
- 京大で開発。MeCabなどとは異なる仕組み
(※ごめんなさい、勉強不足で仕組みはわかってないです。)
- 14. u Sen : MeCabのJava移植版
→現在、バイナリ版はダウンロード出来ない
u GoSen : Senの後継
→現在、サイトがない
u cmecab-java : MeCabのJNIバインディング
→ダウンロード可能(ただし、MeCabも必要)
u Kuromoji
→ATILIKA社作成。LuceneにContributeされた。
- 15. u Lucene/Solrのインデックスについて
u 形態素解析について
u lucene-gosenの機能
u デモ
- 16. u Sen→GoSen→lucene-gosen(現在)
u Lucene/SolrのコミッターRobert Muirさんが
GoSenを引き取りメンテナンス開始
u Google Codeのプロジェクトとして公開
http://code.google.com/p/lucene-gosen/
- 17. u LGPLライセンス
u Lucene/Solr(3.x以上)ですぐに利用可能
u jarファイルに辞書も内包
u ipadic、NAIST JDicの2つの辞書を選択可
u カスタム辞書を追加できる
u LuceneのAttributeベースのToken解析
- 18. PSVitaを買ってしまって、とても眠いです。
入力文をTokenに分解
PSVita
を 買っ
て
しまっ
て
、
とても
眠い
です
。
Tokenの変換・削除、追加
PSVita
を 買っ
て
しまっ
て
、
とても
眠い
です
。
PSVita
を 買っ
て
しまっ
て
とても
眠い
です
- 19. u schema.xml設定例:
<fieldType name=”text_ja_morph” class=”solr.TextField”
positionIncrementGap=”100”
autoGeneratePhraseQueries=”false>
<analyzer>
<tokenizer class=”solr.JapaneseTokenizerFactory” />
</analyzer>
</fieldType>
u 辞書内包のjarを利用している場合はこれだ
け
- 20. u 単語(Token)を「品詞」(POS)により「合成」
(composite)する機能。
u Tokenizerに与えられた設定の品詞情報をも
とに単語をくっつけて1つの単語にする
u schema.xml設定例:
<tokenizer class=”solr.JapaneseTokenizerFactory”
compositePOS=”設定ファイル名”/>
- 21. u 設定ファイル記述内容:
連結品詞名
構成品詞名1
構成品詞名2
...
構成品詞名n
- 連結品詞名:合成後に出力されるTokenの品詞名
- 構成品詞名:合成したい品詞名
(スペース区切りで複数指定可能)
u 設定ファイル例:
名詞-数
未知語
記号-アルファベット
- 22. u 外部の辞書を指定可能(jar内包の辞書以外
が利用可能)
u 複数の辞書を利用可能(同一Solr内部で異
なる辞書を設定可能)
u schema.xml設定例:
<tokenizer class=”solr.JapaneseTokenizerFactory”
dictionaryDir=”辞書ディレクトリ”/>
- 23. u Tokenizerが出力したTokenを操作(追加・
削除・増幅など)するためのフィルタ
u 複数のフィルタを設定した順に適用可能
- 24. Filter名
概要
JapaneseWidthFilter
全角のASCII文字を半角に、半角カタカ
ナを全角にするフィルタ
JapanesePunctuationFilter
区切り文字、記号などを除外するフィルタ
JapanesePartOfSpeechStopFilter
設定ファイルに記載した品詞に該当する
Tokenを除外するフィルタ
JapanesePartOfSpeechKeepFilter
設定ファイルに記載した品詞に該当する
Token"以外"を除去フィルタ
JapaneseBasicFormFilter
Tokenを基本形に変換するフィルタ
JapaneseKatakanaStemFilter
カタカナの長音(ー)の正規化フィルタ
- 25. u 全角のASCII文字を半角に、半角カタカナを全
角にするフィルタ
※lucene-gosenのTokenizer以外でも利用可能
u schema.xml設定:
<filter class="solr.JapaneseWidthFilterFactory"/>
u 例:
「Computer」 → 「Computer」
「コンピュータ」 → 「コンピュータ」
- 26. u 区切り文字、記号などを除外するフィルタ
※lucene-gosenのTokenizer以外でも利用可能
u schema.xml設定:
<filter class="solr.JapanesePunctuationFilterFactory"
enablePositionIncrements="true"/>
u 例:
「Wi-fi」 → 「Wi」「-」「fi」 → 「Wi」「fi」
「トム・クルーズ」 → 「トム」「・」「クルーズ」 → 「トム」「クルーズ」
※JavaのCharacterクラスの以下の定数に相当する文字が除外対象となります。SPACE_SEPARATOR、
LINE_SEPARATOR、PARAGRAPH_SEPARATOR、CONTROL、FORMAT、DASH_PUNCTUATION、
START_PUNCTUATION、END_PUNCTUATION、CONNECTOR_PUNCTUATION、
OTHER_PUNCTUATION、MATH_SYMBOL、CURRENCY_SYMBOL、MODIFIER_SYMBOL、
OTHER_SYMBOL、INITIAL_QUOTE_PUNCTUATION、FINAL_QUOTE_PUNCTUATION
- 27. u 設定ファイルに記載した品詞に該当するTokenを除外するフィルタ
u schama.xml設定:
<filter class=“solr.JapanesePartOfSpeechStopFilterFactory”
tags="設定ファイル" enablePositionIncrements="true"/>
u 設定ファイル例:
感動詞
フィラー
記号-句点
記号-読点
u 例:
「えーと、おはよう。トム・クルーズ」 → 「トム」「・」「クルーズ」
- 28. u 設定ファイルに記載した品詞に該当するToken以外を除外する
フィルタ
u schama.xml設定:
<filter class=“solr.JapanesePartOfSpeechKeepFilterFactory”
tags="設定ファイル" enablePositionIncrements="true"/>
u 設定ファイル例:
感動詞
フィラー
記号-句点
記号-読点
u 例:
「えーと、おはよう。トム・クルーズ」
→ 「えーと」「、」「おはよう」「。」
- 29. u Tokenを基本形に変換するフィルタ
u schema.xml設定例:
<filter class="solr.JapaneseBasicFormFilterFactory"/>
u 例:
「悲しきトム・クルーズ」
→「悲しい」「トム」「・」「クルーズ」
- 32. u Apache Solr入門
u MeCabのわかりやすい資料:
http://www.jtpa.org/files/MeCab.pdf
u IPA品詞体系一覧:
http://www.unixuser.org/~euske/doc/
postag/#chasen