図3  インデックス作成時の平均CPU使用率<BR>インデックス作成から終了までのCPU使用率の平均値。
図3 インデックス作成時の平均CPU使用率<BR>インデックス作成から終了までのCPU使用率の平均値。
[画像のクリックで拡大表示]
図4  仮想メモリーに対する読み書き回数&lt;BR&gt;メモリーの消費量が多いほど,仮想メモリーに対する書き出し/読み込みが増える。
図4 仮想メモリーに対する読み書き回数<BR>メモリーの消費量が多いほど,仮想メモリーに対する書き出し/読み込みが増える。
[画像のクリックで拡大表示]

 デスクトップ検索は,なるべくユーザーの作業に影響を与えずにインデックスを作成できるかが使い勝手を左右する。インデックス作成では,ファイルを読み込んで単語を抽出してインデックスを更新する作業が生じる。CPU,メモリー,そしてハードディスクの各リソースを消費する。そこでCPU使用率,メモリーの負荷,そしてインデックスの作成時間とその容量を測定した。

 測定機はSpotlightを除く製品が1.26 GHz動作のCeleron Mを搭載するノートパソコン。メモリーは256Mバイトである。SpotlightはMac OS X 10.4 Tigerの機能であるため,測定機は米Apple Computer社のPowerBook G4になる。マイクロプロセッサは1.67GHz動作のPowerPC G4で,メモリーは512 Mバイト。ハードウェア,OSとも異なるため,両者の結果を直接比較することはできない。

CPU負荷低いファイルの直接解析

 CPU使用率は,インデックス作成開始から終了までの平均を測った(図3[拡大表示])。MSNサーチツールバーwith Windowsデスクトップサーチが約72%で最も負荷が高い。サーチクロス 2.0も約71%とCPU使用率が高かった。両者と他製品との違いは,インデックス作成の方法にある。

 一般にテキストの抽出は,アプリケーション・ソフトごとに異なっているテキストの格納方法に応じて処理を変える必要がある。テキストを格納する場所,圧縮格納のアルゴリズムなどについて,検索ソフトの開発元は何百種類ものファイル形式に対応しなくてはならない。

 ただファイルのどの部分に,どのような形式でテキストを格納しているかは,アプリケーション・ソフトの開発元が熟知している。そこでMicrosoftは,テキスト抽出のAPIを備えるプラグインの仕様を「IFilter」として公開。Adobe Systemsやジャストシステムが自社アプリケーション・ソフト用のIFilterをWebで配布している。

 IFilterは実行形式ファイル(DLL)として機能する。IFilterがファイルの内容を解釈し,検索ソフトのインデックス作成機構の要求に応じてテキストデータを渡す。このIFilterによるPDF文書からのテキスト抽出処理がオーバーヘッドとなっているようだ。

 もう一つのサーチクロス 2.0はインデックス対象のファイルを,ファイルに関連付けられたアプリケーション・ソフトで実際に開くことでテキストを取り出している。IFilterの場合と同様に,アプリケーション・ソフトの実行ファイルをOLEのAPIで呼び出し,テキストデータを抽出する。

メモリーを消費する形態素解析

 続いて,メモリーに対する負荷を仮想メモリーに対する読み書き回数で見た。検索ソフトが使用するメモリー空間が大きいほど,ハードディスク上の仮想メモリーに対する読み書きが増える。

 仮想メモリーへの読み書きが多かったのは,Googleデスクトップ検索とConceptSearch(図4[拡大表示])。この二つの共通点は,単語の抽出方式に「形態素解析」を採用しているところにある*2

 日本語の文章は,単語と単語の間を区切る記号が明確ではない。英語であれば,単語と単語の間はスペースやコロンで区切られている。しかし日本語は「技術の真髄を問う」といったように文字が連続する。人間が見れば「技術/の/真髄/を/問う」と区切るのは簡単だが,コンピュータの場合は何らかの手法で単語に分割する作業が必要になる。

 検索ソフトでは,大きく二つの手法を採る。一つは意味を持つ最小単位(形態素)に文字列を区切る「形態素解析」を使う方法。「技術」や「真髄」といった単語を持つ辞書を使い,辞書に基づいて単語を切り出す。もう一つは2~3文字ずつをひとかたまりにして「技術」「術の」「の真」「真髄」「髄を」「を問」「問う」のように分割する「n-gram」と呼ばれる方法。形態素解析をする2ソフトは,辞書の読み込みとその照合にメモリーを消費しているようだ。

 形態素解析のメリットは,日本語として意味のある単語のみを抽出できるところ。半面,辞書にない単語はインデックスに反映されない。一方のn-gram方式のメリットは,辞書にない単語もインデックスに反映できる点。その代償として,検索結果にノイズが増える。例えば「京都」を検索した際に,「東京都」という文字列を含むファイルも検索結果に表れる。