正規化の詳細と各種動作モード
既に、「検索の仕組み」-「正規化」 にて正規化の解説をおこなっていますが、本章で改めて詳しく解説します。またその正規化を制御する方法も合わせて解説します。また後半では正規化以外の各種モードの制御について解説します。
MindSearchはドキュメントを「文」単位で切り出します。その際、行頭の字下げや改行コードを一旦取り払うことで1本になった「文」を切り出します。以下は例です。
(原文)
―――――――――――――――――――――――――――――――――――――――
□□□□今度の「ふたりのベロニカ」はそれらとはまったく違った、優しく幻<cr/lf>
□□□想的なファンタジーなのである。体制が激変したことと決して無関係で<cr/lf>
□□□はないという、この一つの芸術作品を私は讃えずにはいられない。<cr/lf>
―――――――――――――――――――――――――――――――――――――――
(切り出し)
―――――――――――――――――――――――――――――――――――――――
(文1) 今度の「ふたりのベロニカ」はそれらとはまったく違った、優しく幻想的なファンタジーなのである。
(文2) 体制が激変したことと決して無関係ではないという、この一つの芸術作品を私は讃えずにはいられない。
―――――――――――――――――――――――――――――――――――――――
原文を読み出して「文」を切り出す際、句点に注目していますが、句点以外にも検査しています。文末の認識は以下の通りです。
- 全角または半角の「。」(句点)
- 全角または半角の「.」(ピリオド)
但し、前文字がピリオドであるか、次の文字がピリオドまたは英数字である場合は終わりとはみなしません
- 空行を見つけた
- (HTMLの場合) <TR>〜</TR>までを1文とみなす
括弧で括られた中に「。」「.」があっても文の終了とはみなしません。またその括弧による抑止は全ての開き括弧文字から閉じ括弧文字までですが種類は問わず、ネストの管理もしませんので閉じ括弧文字が現れたら解除するというレベルです。
また上の定義では文の長さが規定できませんから、256文字(バイトではなく論理的文字単位)で強制的に文が区切られそれ以降は次の文となります。
注:この先で解説する機能の多くは、モードの指定で有効・無効を切り替えられます。実際に対話しながら本解説を確認している場合であれば、「CMD:モード確認」 を実行することで現在の全モードを確認できます。
記号の処理
文章中の記号は、たった1字で重要な意味を持つものと、単なる飾りの意味程度のものなど何種類かに分類できます。前者は検索対象とすべきですが、後者はそれ自身を検索することは考えにくく、MindSearchは後者については無視する方向で正規化をおこなっています。以下にまとめます。
------------------------------------------------------
(削除するもの(オプション指定))
A1B1 / ←スラッシュ
A1D1 − ←ハイフン
(空白に置換するもの)
A1A1 、 ,
A1B1 \
A1C1 〜 ‖ | … ‥ ‘ ’ “ ” ( ) 〔 〕 [ ] {
A1D1 } 〈 〉 《 》 「 」 『 』 【 】
A1E1 > ° ′ ″
A1F1 ☆ ★ ○ ● ◎ ◇
A2A1 ◆ □ ■ △ ▲ ▽ ▼ ※ 〒 → ← ↑ ↓ 〓 ・ ・
A2B1 ・ ・ ・ ・ ・ ・ ・ ・ ・ ∈ ∋ ⊆ ⊇ ⊂ ⊃ ∪
A2C1 ∩ ・ ・ ・ ・ ・ ・ ・ ・ ∧ ∨ ¬ ⇒ ⇔ ∀ ∃
A2D1 ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ∠ ⊥ ⌒ ∂ ∇
A2E1 ≡ ≒ ≪ ≫ √ ∽ ∝ ∵ ∫ ∬ ・ ・ ・ ・ ・ ・
A2F1 �� Å ‰ ♯ ♭ ♪ † ‡ ¶ ・ ・ ・ ・ ◯
(そのまま生かしとするもの)
上記以外の記号すべて
------------------------------------------------------
上記を補足します。スラッシュとハイフンは正規化時に「トルツメ」することができます。以下のような表記の揺れを吸収するためです。
PS/2 = PS2
MD−DOS = MSDOS
スラッシュの削除はモード名称「スラッシュ外し」をオンにすることで有効化できます(デフォルトはオフです)。
ハイフンの削除はモード名称「ハイフン外し」をオンにすることで有効化できます(デフォルトはオフです)。
上の図で「空白に置換するもの」とある多くの記号があります。1字ごとに空白に置換するのではなく、複数の空白は1字の空白に置き換えてしまいます。これは表記の揺れの吸収というよりは、正規化文から無駄な文字(飾り目的の文字)を省く目的のほうが強いです。以下のようになります。
□■□■横浜駅□■□■ → (インデックス作成時) → _横浜駅_
→ (検索時) → 横浜駅
この「空白に置換するもの」の記号処理はモードで制御することはできず、固定です。
英字の処理
英単語2語の連接の正規化
ここ10年ぐらいの動きですが、たとえば、
Windows XP を WindowsXP と書く
Mind Search を MindSearch と書く
というケースがよくあります。本来は2語となるべきものをわざと密着させたものです。この表記の揺れを吸収するため、MindSearchでは、
英大文字−(1)→英小文字−(2)→英大文字
というシーケンスを検出し、(2)の箇所に強制的に空白を挿入することで両者を同一視できるようにしています。
数字は英大文字と同じ扱いにするため、Windows 2000 = Windows2000 にも適用されます。
この正規化はモード名称「英単語正規化」をオンにすることで抑制できます(デフォルトはオフです)。
その他の英字正規化
たとえば、
USB2.0 = USB 2.0
を同一視するため、英大が2文字以上連続した直後の数字の出現時には空白を挿入します。前半が英1字の場合には適用されないため、
A5版 ≠ A 5版
となります。
この正規化はモード名称「英単語正規化」をオンにすることで抑制できます(デフォルトはオフです))。
次に、前行末から次行頭にかけて英字がまたがるときは空白を挿入します。文切り出し時に行末コードを一旦削除して1本の文に再構成する処理が「やりすぎ」となって、本来は分かれているべき英単語の2語が連接してしまうことを防ぐ働きをします。
などLEFT=TO<cr/lf>
DAYRIGHT=123<cr/lf>
という原文から、
などLEFT=TODAYRIGHT=123
という文切り出しをし、存在しないはずの「TODAY」という語が出現してしまう間違いを回避するためです。日本語は語中で改行してしまうことはよくありますが、英語の語中ではそのようなことはしないためこのルールで回避できます。
この正規化は常におこなわれ制御することはできません。
漢数字と算用数字の同一視
(形式)
CMD:漢数字正規化をオン
CMD:漢数字正規化をオフ ←デフォルトはこれです
「〇、一、二、三、四、五、六、七、八、九」の10種類の漢数字について、算用数字と同一視させることができます。デフォルトではこの正規化機能はオフですが上記コマンドでモードを変えることで有効化できます。
このモードをオンにすると、次の2語は同一であると認識されるようになります。
二丁目九番六号 = 2丁目9番6号
平仮名とカタカナの同一視
(形式)
CMD:平仮名カタカナ同一視をオン
CMD:平仮名カタカナ同一視をオフ ←デフォルトはこれです
上記モードをオンにすることで文中の平仮名/カタカナを同一視します。
にんにく = ニンニク
次のセクションで解説するカタカナ正規化は平仮名→カタカナ正規化を行った後に適用されるため、平仮名の語に対しても有効となります。
ほーむ(平仮名) → ホーム(カタカナ) → ホウム(最終正規化)
カタカナ正規化とは
日常よく使われるカタカナ語の揺らぎはかなり大きく、検索漏れを引き起こす要因となっています。たとえば日常的に複数の表記が使われるような単語を用いて某検索サイトから検索したときのヒット件数は次のとおりになりました。
| プラスチック | 62056(90.6) | ←→ | プラスティック | 6422(0.94) |
| テレフォンバンキング | 735(61.6) | ←→ | テレホンバンキング | 458(38.4) |
| ダイヤモンド | 41341(77.4) | ←→ | ダイアモンド | 12084(22.6) |
| ミロのビーナス | 245(51.3) | ←→ | ミロのヴィーナス | 233(48.7) |
| ツィゴイネルワイゼン | 370(61.5) | ←→ | チゴイネルワイゼン | 232(38.5) |
| キヤノン | 24084(60.3) | ←→ | キャノン | 15873(39.7) |
| キャンディ | 9104(85.8) | ←→ | キャンデー | 1508(14.2) |
ここで、カッコ内の数字は両者を同一としたときの合計値を分母とした百分率ですが、単語によっては、二つの表記がほぼ半々で使われている場合もあります。
この結果は、「ミロのビーナス」の情報を得ようとした場合、うっかり、複数の表記が有ることに気付かなかったならば、半分近くの情報を取り損なってしまうことを示しています。
そもそも、外来語のカタカナ表記は音をカタカナで表わしたものなので、ある程度の揺らぎが生じるのは仕方ないことです。また、既に多くの情報がそれによって書かれている訳ですから、どちらかが誤用であるとして片付けることもできません。
二つの表記くらいなら注意すれば済むかもしれませんが、単語によってはより多くの表記が存在する場合もあります。たとえば、「ディーゼルエンジン」という時の「ディーゼル」は次のような多数の書き方が存在します。
ディーゼル
ジーゼル
ヂーゼル
デーゼル
デイゼル
MindSearchでは、カタカナ語を検索する際のユーザ負担を軽減するためにカタカナ語に対してかなり徹底した正規化をおこないます。カタカナ正規化を適度に行うと、前記の7例については両者を同一視することが可能となります。また「ディーゼル」の例は最後の「デイゼル」を除き同一視されますから、カタカナ表記の揺れによる検索漏れを大幅に減らすことができます。
カタカナ正規化は、次項のカタカナ正規化制御文を使って、正規化レベルをコントロールすることで行います。これにより、用途に合わせたカタカナ正規化を行うことが可能です。
カタカナ正規化のコマンド
カタカナの正規化のために次のようなコマンドが利用できます。
中黒外しをオン/オフ
(形式)
CMD:中黒外しをオン ←デフォルトはこれです
CMD:中黒外しをオフ
カタカナ語間の中黒を外して正規化します。
ビル・ゲイツ = ビルゲイツ
末尾音引き除去をオン/オフ
(形式)
CMD:末尾音引き除去をオン ←デフォルトはこれです
CMD:末尾音引き除去をオフ
カタカナ語間の中黒を外して正規化します。
サーバー = サーバ
カタカナ正規化レベル設定
(形式)
CMD:nをカタカナ正規化レベル設定
ここで、nは0〜3の値で、それぞれ次の意味を持ちます。
n = 0...カタカナ正規化を行わない
= 1...弱い正規化を行う(デフォルト)
= 2...標準的な正規化を行う
= 3...強い正規化を行う
n=1
次のような正規化が行われます。このレベルは主として文字単位で正規化を行うもので弱い正規化といえます。
1)「ヰ」と「イ」を同一視します。
2)「ヱ」と「エ」を同一視します。
3)「ヂ」と「ジ」を同一視します。
4)「ヅ」と「ズ」を同一視します。
5)小文字の「ヮ」と「ア」を同一視します。
6)小文字の「ァィゥェォャュョッヵヶ」を大文字と同一視します。
7)「チ」と「ツィ」と「ティ」を同一視します。
8)「ク」+「サorシorスorソ」と「キ」「サorシorスorソ」をを同一視します。
9)「イ列音+長音」と「イ列音+イ」を同一視します。
10)「ウ列音+長音」と「ウ列音+ウ」を同一視します。
11)「エ列音+長音」と「エ列音+イorエ」を同一視します。
12)「オ列音+長音」と「オ列音+ウ」を同一視します。
13)小文字の「ァィェォ」が後続しない「ヴ」と「ブ」を同一視します。
14)「ヴァ」と「バ」を同一視します。
15)「ヴィ」と「ビ」を同一視します。
16)「ヴェ」と「ベ」を同一視します。
17)「ヴォ」と「ボ」を同一視します。
※8)は例えば、「エキストラ」と「エクストラ」を同一視するためのものです。
※9),10)は例えば、「フロッピー」と「フロッピィ」、「ボーリング」と「ボウリング」を同一視するためのものです。
※「○列音」とは、その文字の母音が○である文字をいいます。例えば、「イ・キ・シ・チ・ニ・ヒ・ミ」はイ列音です。
n=2
このレベルでは拗音を含めた正規化が行われます。このレベルは拗音付きの文字を別の表記と同一視するので、正規化レベル=1に比べると、かなり強い正規化となります。なお、正規化レベル=2は正規化レベル=1を包含します。
1)「ヴァ」と「ヴア」と「バ」を同一視します。
2)「ヴィ」と「ヴイ」と「ビ」を同一視します。
3)「ヴェ」と「ヴエ」と「ベ」を同一視します。
4)「ヴォ」と「ヴオ」と「ボ」を同一視します。
5)「ファ」と「ハ」を同一視します。
6)「フィ」と「ヒ」を同一視します。
7)「フュ」と「ヒュ」を同一視します。
8)「フェ」と「ヘ」を同一視します。
9)「フォ」と「ホ」を同一視します。
10)「グァ」と「ガ」を同一視します。
11)「シェ」と「セ」を同一視します。
12)「ジェ」と「ゼ」を同一視します。
13)「トゥ」と「ト」と「ツ」を同一視します。
14)「ディ」と「ジ」と「デ」を同一視します。
15)「ドゥ」と「ド」と「ズ」を同一視します。
16)「デュ」と「ジュ」を同一視します。
17)「テュ」と「チュ」を同一視します。
18)「イェ」と「エ」を同一視します。
19)促音「ッ」を「ッ」が存在しない場合と同一視します。
※19)は例えば、「ピーナツ」と「ピーナッツ」を同一視するためのものです。
n=3
このレベルでは正規化レベル=1、2に加え、主として長音に関する正規化が行われます。このレベルはMindSearchが行うカタカナ正規化の最強のものです。
1)「ア」列音直後の長音を除去します。
2)「イorエ列音+ヤ」と「イorエ列音+ア」を同一視します。
※2)は例えば、「ダイヤ」と「ダイア」を同一視するもので、長音とは無関係ですが、2語以上からなるカタカナ語で「〜イ・ヤ〜」のようなときに正規化を行うと後半部を検索語に指定したときに部分ヒットしなくなるため、デフォルトよりもレベルを上げるために、ここにおいてあります。
カタカナ正規化とインデックスとの関係
MindSearchがインデックスを作成する場合、カタカナ正規化レベルを対象となる文書に適用した上でインデックスを作成します。このため、インデックス作成時と検索時で異なるカタカナ正規化レベルを使うとマッチしない場合があります。たとえば正規化レベル"3"でインデックス作成を行い、正規化レベル"1"または"2"で末尾以外に長音が混じったカタカナ語を検索しても絶対にヒットしません。インデックス化時点で原文の長音が全て削除されているためです。
このように、インデックス作成時のカタカナ正規化レベルよりも低いレベルでインデックス検索を行った場合ミスヒットが生じますから、インデックス作成時のカタカナ正規化レベルと同等または高い値で検索を行うことが必要です。
(形式)
CMD:<モード名>[と<モード名>と...]をオン
CMD:<モード名>[と<モード名>と...]をオフ
(例)
CMD:中黒外しをオフ ←単一のモード変更
CMD:タイトル出力と文出力エンコードをオン ←複数のモードを一度に変更
指定したモードをオン/オフします。モードの名前と意味は以下の通りです。
| --------------------------------------------------------------------------------- |
| 各種モード |
初期値 |
モードの意味 |
| --------------------------------------------------------------------------------- |
| (正規化) |
|
| スラッシュ外し |
オフ |
全角および半角のスラッシュ(/'、'/')を除去する(オン)かしない(オフ)かを指定します。
|
| ハイフン外し |
オフ |
全角および半角のハイフン('-'、'−')を除去する(オン)かしない(オフ)かを指定します。
|
| 英単語正規化 |
オフ |
キーワードおよび対象ファイルの正規化時に英単語間に空白挿入する(オン)かしない(オフ)かを指定します。
|
| 中黒外し |
オン |
カタカナ語の中にある中黒(「・」)を削除します
|
| 末尾音引き除去 |
オン |
カタカナ列末尾の音引きを除去する(オン)かしない(オフ)かを指定します。
|
| 漢数字正規化 |
オフ |
漢数字(三や四など)を算用数字と同一視します。
|
| 平仮名カタカナ同一視 |
オフ |
平仮名とカタカナを同一視します。
|
| (検索結果の出力) |
|
| ベースパス出力 |
オフ |
ヒットした文を出力するとき、SS:レスポンス中に検索ベースパスを記入します。オフの場合は空文字となります。
|
| 上位URL出力 |
オフ |
ヒットした文を出力する際、SS:レスポンス中にファイル名を出力しますが、そのファイル名先頭に、インデックス作成時に指定した文字列(「上位URL」)を付加します。
|
| ソートキー出力 |
オン |
ヒットした文を出力する際、SS:レスポンス中に検索された時のソートキーを出力します。オフの場合は空文字となります。
|
| タイトル出力 |
オフ |
HTMLコンテンツを検索し、ヒットした文を出力する際、SS:レスポンスの直後にタイトル専用のブロックを出力します(ES:1で終端)。
|
| ヒットセンテンス出力 |
オン |
ヒットした文(サマリ)を出力します(デフォルトはオン)。
これをオフすると、GETコマンドに対するレスポンスとしてSS:のみが返されるようになり、SB:/SR:/ES:の返送は省略されるようになります。データベースのインデックス検索において、ヒットしたレコード群のプライマリキーのみ手早く収集したい場合に用いると有効です。
|
| 文出力エンコード |
オフ |
Webアプリケーションで意味を持ちます。
ヒットした文を出力する際、SB:/SR:レスポンス中の文内容に含まれる文字のうち、HTML出力としてそのままでは使えない幾つかの文字をエンコードします。
−−−−−−−−−−−−−−−−−−−−−−−−−−
TAB → 	
0x0c → 
< → <
> → >
& → &
" → "
Space → (2文字以上続いたの場合のみ)
−−−−−−−−−−−−−−−−−−−−−−−−−−
|
| (その他) |
|
| 代替絞り込み使用 |
オフ |
インデックス作成時に作用し、テキスト先頭行を(もし記述が有れば)代替絞り込みキーの指定行と解釈します。
|
| --------------------------------------------------------------------------------- |
オン/オフコマンドではなく、値を指定するようなモード設定として以下のものがあります。
最大検索数設定
(形式)
CMD:nを最大検索数設定
(例)
CMD:300を最大検索数設定
(レスポンス)
OK:
検索コマンドを実行すると、インデックスに含まれるすべてのヒットドキュメントを探しに行きますが、検索キーワードによっては(英字やカナの2文字などがそうなります)何万件以上のヒットを生むものもあります。このようなケースで検索時間が長くなるのを防ぐため、探すドキュメント数の上限を指定できるようになっています。デフォルトでは1000件です。
ここに比較的小さな値を指定するとサーバーの負荷を軽減するのに役立ちます。小さな値が指定されていれば検索コマンド(プロセス)が早く終了するからです。
最大検索数取得
(形式)
CMD:最大検索数取得
(レスポンス)
OK:500
現在の最大検索数をアプリケーションが知ることができます。
精密検索数設定
(形式)
CMD:nを精密検索数設定
(例)
CMD:300を精密検索数設定
(レスポンス)
OK:
前記の「最大検索数」と似たものですが、こちらでは後にGETコマンドで取得可能なヒット数を制限するものです。精密検索数は最大検索数より小さな値である必要があります。デフォルトでは1000件です。
精密検索数取得
(形式)
CMD:精密検索数取得
(レスポンス)
OK:500
現在の精密検索数をアプリケーションが知ることができます。
エンジン側タイムアウト設定
(形式)
CMD:nをエンジン側タイムアウト設定
(例)
CMD:30をエンジン側タイムアウト設定
(レスポンス)
OK:
MindSearch Hyper がアプリケーションからのコマンド待ちを打ち切るタイムアウトを指定します。デフォルトでは60秒が設定されています。
0を指定した場合は無限待ち(タイムアウト検出無し)となり、さらに MindSearchデーモンがおこなう派生検索プロセスの長時間滞在の監視(56秒以上経過で派生検索プロセスをkill)が行われなくなります。
実験用にクライアントアプリケーションを長時間エンジンに接続したままにしたい場合に利用してください。
通信文字種の指定
(形式)
CHR:sjis
CHR:euc
アプリケーションとMindSearchとの通信の文字コードを切り替えます。詳しくはセクション 「CHR」コマンド(文字コード指定)」 を参照願います。
モード確認
(形式)
CMD:モード確認
(レスポンス例)
DT:(正規化フラグ)中黒外し=1 漢数字正規化=0 大小正規化=1(固定) 全半正規化=
1(固定) 平仮名カタカナ同一視=0 ハイフン外し=0 スラッシュ外し=0 英単語正規化=0 末
尾音引き除去=1
GET ←アプリケーションからの送信
DT:(各種モード)SJIS入出力=0 カタカナ正規化レベル=1 ソートキータイプ=D
-------- 絞り込みキータイプ=---- 代替絞り込み使用=0 ヒットソート対象=1 ヒットソ
ート順(1:昇2:降)=2 最大検索数=1000 精密検索数=1000 ベースパス出力=0 上位URL出
力=0 ソートキー出力=1 タイトル出力=0 ヒットセンテンス出力=1 文出力エンコード=0
消費時間出力=1 エンジン側タイムアウト(秒)=0 検索中断=0
GET ←アプリケーションからの送信
DT:(カタカナ正規化フラグ) 旧カナ正規化=1 カナ小文字正規化=1 エクス正規化=
1 チ正規化=1 長音・イ正規化=1 弱いヴ正規化=1 イヤ正規化=0 長音除去=0 強いヴ正規
化=0 ファ正規化=0 グァ正規化=0 シェジェ正規化=0 ツトゥ正規化=0 ディジ正規化=0 イ
ェ正規化=0 ッ有無同一視=0 長音・イエ正規化=0
OK:
現在の各種モードを確認するためのコマンドです。アプリケーションで使うことよりも、msclientのような(テスト用の)対話型クライアントでキーボードから打ち込んで使うことを意図しています。
コマンドを送出すると何度かに分けてDT:レスポンスが返されます。「DT:」の次の文字以降が情報です。アプリケーションはDT:を処理し終わるごとに「GET」を送信してください。最後に「OK:」を受信したらコマンド終了です。
Copyright(C) 2000-2009 Scripts Lab. Inc.