Ground Sunlight

Windowsで作る - PHPプログラミングの開発環境

ユーザ用ツール

サイト用ツール


mroonga:10.7:config

差分

このページの2つのバージョン間の差分を表示します。

この比較画面にリンクする

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
mroonga:10.7:config [2020/11/09 18:05]
y2sunlight [トークナイザー(パーサ)]
mroonga:10.7:config [2020/11/11 10:00] (現在)
y2sunlight [TokenMecab]
行 1: 行 1:
-> 編集中 
- 
 ====== Mroonga9.12 全文検索の構成 ====== ====== Mroonga9.12 全文検索の構成 ======
 Version 9.12 (MariaDB 10.4.12) Version 9.12 (MariaDB 10.4.12)
行 52: 行 50:
 |リンゴ|りんご|カタカナ <nowiki>=></nowiki> ひらがな| |リンゴ|りんご|カタカナ <nowiki>=></nowiki> ひらがな|
  
-結論から先に言うと、ノーマライザーとして [[https://groonga.org/ja/docs/reference/normalizers/normalizer_auto.html|NormalizerAuto]] をべきです。以下、チュートリアルに従ってその理由を説明します。+結論から先に言うと、ノーマライザーとしては [[https://groonga.org/ja/docs/reference/normalizers/normalizer_auto.html|NormalizerAuto]] を使用すべきです。以下、チュートリアルに従ってその理由を説明します。
  
 \\ \\
行 211: 行 209:
  
 ^トークナイザー^説明^ ^トークナイザー^説明^
-|none| | +|none|トークナイズしません。
-|TokenDelimit| | +|TokenDelimit|空白区切りでトークナイズします。| 
-|TokenBigram| | +|TokenRegexp|正規表現検索をサポートするトークナイザーです。| 
-|TokenTrigram| | +|TokenUnigram|ユニグラム(1-Gram)でトークナイズします。
-|TokenMecab| |+|TokenBigram|バイグラム(2-Gram)でトークナイズします。
 +|TokenTrigram|トリグラム(3-Gram)でトークナイズします。
 +|TokenMecab|MeCabを用いてトークナイズします。| 
 + 
 +デフォルトのパーサは以下で確認できます: 
 + 
 +<code sql> 
 +SHOW VARIABLES LIKE 'mroonga_default_tokenizer'; 
 +</code> 
 + 
 +デフォルトのトークナイザーはビルド時や ''my.cnf'' ( Windowsでは''my.ini'' )で指定できます。このオプションを指定しないときは ''TokenBigram'' になります。my.cnf では以下のようにして指定します。 
 + 
 +my.cnf: 
 + 
 +<code ini> 
 +[mysqld] 
 +mroonga_default_tokenizer=TokenMecab 
 +</code>
  
 \\ \\
  
-===== トークンフィルタ― =====+==== TokenMecab ==== 
 + 
 +本編で使用している MariaDB with Mroonga (Windows版バイナリ) ではパーサとして形態素解析エンジンの Mecab がバンドルされていて直ぐに利用することができます。Mecab の本体は以下に配置されています: 
 + 
 +<code> 
 +{XAMPP-Folder}/mysql/bin/mecab.exe 
 +</code> 
 + 
 +Mecabの設定ファイル mecabrc の配置場所と内容を以下の示します: 
 + 
 +''{XAMPP-Folder}/mysql/etc/mecabrc''  
 + 
 +<code ini> 
 +; Configuration file of MeCab 
 + 
 +dicdir = $(rcpath)\..\share\mecab\dic\naist-jdic 
 +</code> 
 + 
 +mecabrc では形態素解析で使用する辞書が設定されています。初期設定の辞書としては、Mroongaにバンドルされている [[https://ja.osdn.net/projects/naist-jdic/|naist-jdic]] が指定されています。他の辞書に変えるときは、上の ''dicdir'' を変更するだけです。  
 + 
 +以下は「[[mroonga:10.7:tutorial|検索チュートリアル]]」で示した例を、Mecabのパーサに替えたものです。 
 + 
 +<code sql> 
 +CREATE TABLE diaries_mecab ( 
 +  id INT PRIMARY KEY AUTO_INCREMENT, 
 +  content VARCHAR(255), 
 +  FULLTEXT INDEX (content) COMMENT 'tokenizer "TokenMecab"' 
 +) ENGINE = Mroonga COLLATE utf8_unicode_ci; 
 +  
 +INSERT INTO diaries_mecab (content) VALUES ("今日の天気は晴れでしょう。"); 
 +INSERT INTO diaries_mecab (content) VALUES ("今日の天気は雨でしょう。"); 
 +INSERT INTO diaries_mecab (content) VALUES ("明日の東京都の天気は晴れでしょう。"); 
 +INSERT INTO diaries_mecab (content) VALUES ("明日の京都の天気は雨でしょう。"); 
 +</code> 
 + 
 +以下の検索を実行します: 
 + 
 +<code sql> 
 +SELECT * FROM diaries_mecab WHERE MATCH(content) AGAINST('明日 京都 天気'); 
 +</code> 
 + 
 +結果は以下のように出力されます: 
 +<code sql> 
 +明日の京都の天気は雨でしょう。 
 +</code> 
 + 
 +検索チュートリアルの[[mroonga:10.7:tutorial#自然言語検索|例]]では、トークナイザーがバイグラム (TokenBigram) だったので、「明日の東京都の天気は晴れでしょう。」にもヒットしてしまいましたが、Mecabの場合は形態素解析により「東京都」と「京都」を区別するのでこのような現象は起こりません。 
 + 
 +「明日の東京都の天気は晴れでしょう。」がバイグラムとMecabとでどのようにトークン化をされるかを確認するには、以下のようにSELECT文からGroongaコマンドを使います。 
 + 
 +バイグラムの場合: 
 + 
 +<code sql> 
 +SELECT mroonga_command('tokenize TokenBigram "明日の東京都の天気は晴れでしょう。"'); 
 +</code> 
 + 
 +<code json> 
 +
 +  {"value":"明日","position":0,"force_prefix":false,"force_prefix_search":false}, 
 +  {"value":"日の","position":1,"force_prefix":false,"force_prefix_search":false}, 
 +  {"value":"の東","position":2,"force_prefix":false,"force_prefix_search":false}, 
 +  {"value":"東京","position":3,"force_prefix":false,"force_prefix_search":false}, 
 +  {"value":"京都","position":4,"force_prefix":false,"force_prefix_search":false}, 
 +  {"value":"都の","position":5,"force_prefix":false,"force_prefix_search":false}, 
 +  {"value":"の天","position":6,"force_prefix":false,"force_prefix_search":false}, 
 +  {"value":"天気","position":7,"force_prefix":false,"force_prefix_search":false}, 
 +  {"value":"気は","position":8,"force_prefix":false,"force_prefix_search":false}, 
 +  {"value":"は晴","position":9,"force_prefix":false,"force_prefix_search":false}, 
 +  {"value":"晴れ","position":10,"force_prefix":false,"force_prefix_search":false}, 
 +  {"value":"れで","position":11,"force_prefix":false,"force_prefix_search":false}, 
 +  {"value":"でし","position":12,"force_prefix":false,"force_prefix_search":false}, 
 +  {"value":"しょ","position":13,"force_prefix":false,"force_prefix_search":false}, 
 +  {"value":"ょう","position":14,"force_prefix":false,"force_prefix_search":false}, 
 +  {"value":"う。","position":15,"force_prefix":false,"force_prefix_search":false}, 
 +  {"value":"。","position":16,"force_prefix":false,"force_prefix_search":false} 
 +
 +</code> 
 + 
 +Mecabの場合: 
 + 
 +<code sql> 
 +SELECT mroonga_command('tokenize TokenMecab "明日の東京都の天気は晴れでしょう。"'); 
 +</code> 
 + 
 +<code json> 
 +
 +  {"value":"明日","position":0,"force_prefix":false,"force_prefix_search":false}, 
 +  {"value":"の","position":1,"force_prefix":false,"force_prefix_search":false}, 
 +  {"value":"東京","position":2,"force_prefix":false,"force_prefix_search":false}, 
 +  {"value":"都","position":3,"force_prefix":false,"force_prefix_search":false},  
 +  {"value":"の","position":4,"force_prefix":false,"force_prefix_search":false}, 
 +  {"value":"天気","position":5,"force_prefix":false,"force_prefix_search":false}, 
 +  {"value":"は","position":6,"force_prefix":false,"force_prefix_search":false}, 
 +  {"value":"晴れ","position":7,"force_prefix":false,"force_prefix_search":false}, 
 +  {"value":"でしょ","position":8,"force_prefix":false,"force_prefix_search":false}, 
 +  {"value":"う","position":9,"force_prefix":false,"force_prefix_search":false}, 
 +  {"value":"。","position":10,"force_prefix":false,"force_prefix_search":false}] 
 +
 +</code> 
 + 
 +\\ 
 + 
 + 
 +===== トークンフィルター ===== 
 + 
 +Mroongaではトークン化の後に、トークンに所定の処理を行うトークンフィルターを指定することができます。トークンフィルターを CREATE TABLE 文の中で指定するには、''COMMENT'' を使用した以下の構文を使用します: 
 + 
 +<code sql> 
 +FULLTEXT [INDEX] [インデックス名] (カラム1,...) COMMENT 'token_filters "フィルター名"' 
 +</code> 
 + 
 +以下の3つの組込みフィルターを使用できます。詳しくはGroongaの[[https://groonga.org/ja/docs/reference/token_filters.html|ドキュメント]]を参照して下さい。
  
-> TODO+  * [[https://groonga.org/ja/docs/reference/token_filters/token_filter_nfkc100.html|TokenFilterNFKC100]] \\  NormalizerNFKC100 と同じ正規化をトークン化後に使用できます。\\  
 +  * [[https://groonga.org/ja/docs/reference/token_filters/token_filter_stem.html|TokenFilterStem]] \\ トークンをステミングします(語形の変化を取り除き、同一の単語表現に変換する処理)。\\  
 +  * [[https://groonga.org/ja/docs/reference/token_filters/token_filter_stop_word.html|TokenFilterStopWord]]  \\ トークンからストップワードを除去します。
  
 \\ \\
mroonga/10.7/config.1604912706.txt.gz · 最終更新: 2020/11/09 18:05 by y2sunlight