Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Lucene gosenの紹介 solr勉強会第7回

13,779 views

Published on

lucene-gosen の紹介資料

Published in: Technology
  • Login to see the comments

Lucene gosenの紹介 solr勉強会第7回

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

×