(57)【特許請求の範囲】
【請求項１】
検索対象の複数の文書データから抽出された「Ｎ文字の文字列であるＮグラム（Ｎは自然数）」のうち、Ｎ＝１〜ｋ−１のｋ−１個（ｋは自然数）のＮグラムについては当該Ｎグラムが含まれる出現文書番号を構成要素とし、Ｎ＝ｋのＮグラムについては前記複数の文書データ中の出現位置情報を構成要素とする転置インデックスを記憶する記憶手段と、
検索文字列がｋ文字以上のときは、Ｎ＝ｋのＮグラムを使用して、前記検索文字列からＮグラムを抽出し、前記検索文字列がｋ文字未満のときは、前記検索文字列をＮグラムとして抽出するＮグラム抽出手段と、
検索文字列がｋ文字以上のときは、前記検索文字列から抽出されたＮグラムについて、前記転置インデックスの出現位置情報に基づいて、前記複数の文書データのうちから前記検索文字列を含む文書データを特定し、前記検索文字列がｋ文字未満のときは、前記転置インデックスの出現文書番号に基づいて、前記複数の文書データのうちから前記検索文字列を含む文書データを特定する文書特定手段と、
を備えることを特徴とする検索装置。
【請求項２】
前記転置インデックスは、前記複数の文書データから抽出されたＮグラムのそれぞれについて、前記複数の文書データ中の出現頻度情報をさらに構成要素とし、
前記文書特定手段は、前記出現頻度情報に基づいて、前記検索文字列から抽出されたＮグラムのうち、出現頻度の少ないＮグラムから順に、文書データの特定に用いる、
ことを特徴とする請求項１に記載の検索装置。
【請求項３】
複数の検索文字列の論理積による検索の場合に、前記文書特定手段は、前記転置インデックスの出現頻度情報に基づいて、出現頻度の少ないＮグラムを有する検索文字列から順に、文書データの特定に用いる、
ことを特徴とする請求項２に記載の検索装置。
【請求項４】
検索対象の複数の文書データから抽出された「Ｎ文字の文字列であるＮグラム（Ｎは自然数）」のうち、Ｎ＝１〜ｋ−１のｋ−１個のＮグラムについては当該Ｎグラムが含まれる出現文書番号を構成要素とし、Ｎ＝ｋのＮグラムについては前記複数の文書データ中の出現位置情報を構成要素とする転置インデックスを記憶する記憶手段を備えるコンピュータを、
検索文字列がｋ文字以上のときは、Ｎ＝ｋのＮグラムを使用して、前記検索文字列からＮグラムを抽出し、前記検索文字列がｋ文字未満のときは、前記検索文字列をＮグラムとして抽出するＮグラム抽出手段、
検索文字列がｋ文字以上のときは、前記検索文字列から抽出されたＮグラムについて、前記転置インデックスの出現位置情報に基づいて、前記複数の文書データのうちから前記検索文字列を含む文書データを特定し、前記検索文字列がｋ文字未満のときは、前記転置インデックスの出現文書番号に基づいて、前記複数の文書データのうちから前記検索文字列を含む文書データを特定する文書特定手段、として機能させるためのコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の文書から、指定された検索語を有する文書を検索する検索装置、ならびに、コンピュータプログラムに関する。
【背景技術】
【０００２】
文書の電子化の増大に伴い、これまでに蓄積されてきた大量の文書群から所望の文書を見つけ出す検索技術の重要性が高まっている。
【０００３】
英語などの多くの言語においては、単語を索引単位として索引ファイルを作成して、これを用いて高速な検索処理を実現することが一般的である。しかし、日本語の場合、スペース等によって単語の切れ目が明示的に示されないため、しばしば、Ｎグラムを索引単位とする方法が用いられている。
【０００４】
Ｎグラムとは、連続するＮ文字からなる部分文字列のことである。Ｎグラムによる索引ファイル（以下、転置インデックスと呼称する）の作成には、文字列にのみ基づくため、単語を認識する必要がない。しかし、検索処理される検索語が複数のＮグラムに分割されて処理されるので、検索時間が増大するという問題がある。
【０００５】
特に、短い検索語の検索の場合には、検索時間の増大が顕著になる。なぜなら、例えば１文字の検索語をＮ≧２のＮによりＮグラム検索する場合、転置インデックスに登録されているＮグラムのうち先頭１文字目が検索語に一致する全てのＮグラムとの論理和を検索条件としなければならず、検索条件が大きく膨れ上がってしまうからである。
【０００６】
さらに、このような短い検索語と、別の検索語とを、論理積演算（ＡＮＤ演算）で組み合わせて検索する場合には、さらに検索時間が増大する。これはなぜなら、ＡＮＤ演算を行う前に、上述した全てのＮグラムの論理和に対する文書集合を中間結果として保持しておく必要があるからである。
【０００７】
このような問題に対し、非特許文献１において、検索処理の高速化の技術が開示されている。具体的に、非特許文献１では、短い検索語を含む複数の検索語を、ＡＮＤ演算子で結合した条件における検索において、別の等価な演算に変形することで、検索処理の高速化を行う。
【先行技術文献】
【非特許文献】
【０００８】
【非特許文献１】小川泰嗣，松田透，橋本信次，”Ｎ−ｇｒａｍ索引における複合検索条件の効率的な処理方法”，情報処理学会論文誌，Vol.40，No.SIG5，pp.43-53，May，1999
【発明の概要】
【発明が解決しようとする課題】
【０００９】
このような短い検索語が係る処理において、より単純な処理によって高速化を実現したい、との要望がある。すなわち、携帯電話や小型電子機器に搭載された小型の電子辞書等といった、搭載ＣＰＵ性能が低く、搭載ＲＡＭサイズが小さく、またフラッシュメモリの１アクセス当たりの読み込みサイズが小さい場合においても、効率的な検索を実現したい、というものである。
【００１０】
そして、非特許文献１に開示されている別の等価な演算に変形する方法は、複数の検索語に１文字の検索語が含まれていた場合には、必ずしも有効とはならない場合がある。一方で、実際に検索を行う場面では、１文字のような短い検索語と他の検索語とのＡＮＤ演算で検索する状況は少なくないと考えられる。
【００１１】
本発明は、以上のような課題を解決するためのものであり、複数の文書から、指定された検索語を有する文書を効率的に検索するのに好適な検索装置、ならびに、コンピュータプログラムを提供することを目的とする。
【課題を解決するための手段】
【００１２】
本発明にかかる検索装置は、
検索対象の複数の文書データから抽出された「Ｎ文字の文字列であるＮグラム（Ｎは自然数）」のうち、Ｎ＝１〜ｋ−１のｋ−１個（ｋは自然数）のＮグラムについては当該Ｎグラムが含まれる出現文書番号を構成要素とし、Ｎ＝ｋのＮグラムについては前記複数の文書データ中の出現位置情報を構成要素とする転置インデックスを記憶する記憶手段と、
検索文字列がｋ文字以上のときは、Ｎ＝ｋのＮグラムを使用して、前記検索文字列からＮグラムを抽出し、前記検索文字列がｋ文字未満のときは、前記検索文字列をＮグラムとして抽出するＮグラム抽出手段と、
検索文字列がｋ文字以上のときは、前記検索文字列から抽出されたＮグラムについて、前記転置インデックスの出現位置情報に基づいて、前記複数の文書データのうちから前記検索文字列を含む文書データを特定し、前記検索文字列がｋ文字未満のときは、前記転置インデックスの出現文書番号に基づいて、前記複数の文書データのうちから前記検索文字列を含む文書データを特定する文書特定手段と、
を備えることを特徴とする。
【００１５】
上記検索装置において、
前記転置インデックスは、前記複数の文書データから抽出されたＮグラムのそれぞれについて、前記複数の文書データ中の出現頻度情報をさらに構成要素とし、
前記文書特定手段は、前記出現頻度情報に基づいて、前記検索文字列から抽出されたＮグラムのうち、出現頻度の少ないＮグラムから順に、文書データの特定に用いる、
ことが望ましい。
【００１６】
上記検索装置において、
複数の検索文字列の論理積による検索の場合に、前記文書特定手段は、前記転置インデックスの出現頻度情報に基づいて、出現頻度の少ないＮグラムを有する検索文字列から順に、文書データの特定に用いる、
ことが望ましい。
【００１７】
本発明にかかるコンピュータプログラムは、
検索対象の複数の文書データから抽出された「Ｎ文字の文字列であるＮグラム（Ｎは自然数）」のうち、Ｎ＝１〜ｋ−１のｋ−１個のＮグラムについては当該Ｎグラムが含まれる出現文書番号を構成要素とし、Ｎ＝ｋのＮグラムについては前記複数の文書データ中の出現位置情報を構成要素とする転置インデックスを記憶する記憶手段を備えるコンピュータを、
検索文字列がｋ文字以上のときは、Ｎ＝ｋのＮグラムを使用して、前記検索文字列からＮグラムを抽出し、前記検索文字列がｋ文字未満のときは、前記検索文字列をＮグラムとして抽出するＮグラム抽出手段、
検索文字列がｋ文字以上のときは、前記検索文字列から抽出されたＮグラムについて、前記転置インデックスの出現位置情報に基づいて、前記複数の文書データのうちから前記検索文字列を含む文書データを特定し、前記検索文字列がｋ文字未満のときは、前記転置インデックスの出現文書番号に基づいて、前記複数の文書データのうちから前記検索文字列を含む文書データを特定する文書特定手段、として機能させる。
【発明の効果】
【００１８】
本発明によれば、複数の文書から、指定された検索語を有する文書を効率的に検索するのに好適な検索装置、ならびに、コンピュータプログラムを提供することができる。
【図面の簡単な説明】
【００１９】
【図１】検索装置の概要構成図である。
【図２Ａ】検索装置が構成されるコンピュータ装置の概要構成の１例を示す図である。
【図２Ｂ】検索装置が構成されるコンピュータ装置の概要構成の別の例を示す図である。
【図３Ａ】本実施形態に係る検索処理の流れを示す第１のフローチャートである。
【図３Ｂ】本実施形態に係る検索処理の流れを示す第２のフローチャートである。
【図３Ｃ】本実施形態に係る検索処理の流れを示す第３のフローチャートである。
【図４】転置インデックスの具体的な構成を示す図である。
【発明を実施するための形態】
【００２０】
以下、本発明の実施形態に係る検索装置について説明する。以下に説明する実施形態は説明のためのものであり、本発明の範囲を制限するものではない。
【００２１】
以下、図１を参照して実施形態１に係る検索装置１０について説明する。
【００２２】
検索装置１０は、記憶部１１と、入力部１２、Ｎグラム抽出部１３と、文書特定部１４と、出力部１５と、を備える。
【００２３】
記憶部１１は、検索対象の複数の文書データから抽出されたＮグラムについて、複数の文書データ中の出現位置と出現頻度とを構成要素とする転置インデックスを、Ｎの異なる複数のＮグラムについて記憶する。記憶部１１は、例えば、ハードディスク装置によって構成される。
【００２４】
Ｎの異なる複数のＮグラムとは、例えばＮ＝１のモノグラムとＮ＝２のバイグラムが対応することが典型的である。すなわち、Ｎｄｏｃ文字の文字列から構成される文書データからは、Ｎｄｏｃ個（＝Ｎｄｏｃ−１＋１個）のモノグラムとＮｄｏｃ−１個（＝Ｎｄｏｃ−２＋１個）のバイグラムが抽出される。これらの抽出を複数の文書データの数だけ行い、そしてそれぞれの出現位置情報を記載した転置インデックスが、記憶部１１に記憶される。
【００２５】
入力部１２は、ユーザから検索文字列を受け付ける。具体的には、キーボードやタッチパネル等の入力装置によってユーザが入力した検索文字列を受付ける。そして、受け付けた検索文字列を、Ｎグラム抽出部１３へ供給する。
【００２６】
Ｎグラム抽出部１３は、入力部１２によって受け付けられた検索文字列から、Ｎの異なる複数のＮグラムのうち、検索文字列の文字数に応じて使用するＮグラムを変化させて、検索文字列からＮグラムを抽出する。すなわち、コンピュータ装置のＣＰＵなどによって、検索文字列を構成するＮグラムのうち、抽出可能なものを抽出する。そして、抽出されたＮグラムを、文書特定部１４へ供給する。
【００２７】
具体的に、上記の例のように、転置インデックスにモノグラムとバイグラムの出現位置情報が記憶されている場合では、ユーザが１文字の検索文字列を入力したときはモノグラムを、２文字以上の検索文字列を入力したときはバイグラムを、検索文字列から抽出する。すなわち、ユーザが入力する検索文字列の文字数に応じて、検索処理を効率的に行うことのできるＮグラムを適切に選択する。
【００２８】
文書特定部１４は、Ｎグラム抽出部１３によって抽出されたＮグラムと、記憶部１１に記憶されている転置インデックスの出現位置情報に基づいて、複数の文書データのうちから検索文字列を含む文書データを特定する。そして、特定された文書データを、出力部１５へ供給する。
【００２９】
すなわち、上述したＮグラム抽出部１３により検索文字列から抽出されたＮグラムについて、転置インデックスの出現位置情報を基にして、複数の文書データのうちから検索文字列を含む文書データを特定する。
【００３０】
出力部１５は、文書特定部１４により特定された文書データを受け、ユーザへ出力する。具体的には、例えばディスプレイ等の出力装置を用いて、文書データの情報を出力する。
【００３１】
以下、図２Ａおよび図２Ｂを用いて、図１に示した検索装置１０が物理的に構成される一般的なコンピュータ装置の概要構成を説明する。
【００３２】
図２Ａにおいて、コンピュータ装置２０は、ＣＰＵ（Central Processing Unit）２１、ＲＯＭ（Read Only Memory）２２、ＲＡＭ（Random Access Memory）２３、ＨＤＤ（Hard Disk Drive）２４、入力装置２５、出力装置２６、通信制御装置２７により構成される。各構成要素は、命令やデータを転送するための伝送経路であるシステムバスにより、相互に接続されている。
【００３３】
ＣＰＵ２１は、コンピュータ装置２０全体の動作を制御し、各構成要素と接続され制御信号やデータをやりとりする。
【００３４】
ＲＯＭ２２は、コンピュータ装置２０全体の動作制御に必要なコンピュータプログラムや各種データを記憶する。特に本実施形態では、検索処理のため必要なコンピュータプログラムや各種データを記憶する。
【００３５】
ＲＡＭ２３は、データやコンピュータプログラムを一時的に記憶するためのもので、ＲＯＭ２２から読み出したコンピュータプログラムやデータ、その他処理の進行に必要なデータが保持される。
【００３６】
ＨＤＤ２４は、検索処理の動作のために必要なデータ等を記憶するためのもので、特に本実施形態では、検索対象の複数の文書データ２８、および、複数の文書データ２８から抽出されたＮグラムのそれぞれについて、複数の文書データ２８中の出現位置と出現頻度とを構成要素とする転置インデックス２９、を記憶する記憶部１１として動作することが想定される。
【００３７】
入力装置２５は、例えばキーボードやタッチパネル等によって構成され、ユーザからの入力を受け付ける。本実施形態では、入力部１２を構成し、ユーザが入力した検索文字列を受け付ける。
【００３８】
出力装置２６は、例えばディスプレイ等によって構成され、コンピュータ装置２０の処理結果を出力する。本実施形態では、出力部１５を構成し、特定された検索文字列を含む文書データ２８を、ユーザへ出力する。
【００３９】
通信制御装置２７は、コンピュータ装置２０をインターネット等のコンピュータ通信網に接続するためのものであり、コンピュータ通信網に接続してデータをやり取りする場合に必要となる。例えば、本実施形態において、上述したＨＤＤ２４に記憶されている検索対象の複数の文書データ２８は、通信制御装置２７を介して取得できるようにすることも可能である。
【００４０】
本実施形態では、複数の文書データ２８は、ＨＤＤ２４内ではなく、コンピュータ装置２０の外に存在していてもよい。この例について、図２Ｂを用いて説明する。
【００４１】
図２Ｂは、図２Ａと同様な図であるが、この例では、複数の文書データ２８はＨＤＤ２４には存在せず、コンピュータ装置２０の外に存在する。この場合、通信制御装置２７によりコンピュータ通信網を介して文書データ２８へ接続することになる。
【００４２】
そのため、図２Ｂの実施形態では図２Ａでのものに比べ、コンピュータ装置２０内に文書データ２８を記憶する必要がなく、インターネットに適切に接続可能な環境であれば、小型の電子辞書のような限られた容量の装置においても実現しやすくなる。
【００４３】
このような構成によって実現される検索装置１０について、具体的な検索処理の詳細を、以下に図３Ａ〜図３Ｃを用いて説明していく。
【００４４】
最初に図３Ａにおいて、検索処理が開始されると、まず検索装置１０は、入力部１２によってユーザから検索語を受け付ける（ステップＳ３０１）。ここで、ユーザから受け付ける検索語は、１語であってもよいし、複数の検索語を受け付けてもよい。
【００４５】
複数の検索語を受け付けた場合、複数の検索語の論理積、論理和、否定論理積など、演算方法に種類があり、以下では論理積演算の場合について詳述するが、本実施形態ではこれに限定されず、その他の演算方法による検索を行ってもよいものとする。
【００４６】
次に、Ｎグラム抽出部１３によって、受け付けられた検索語のそれぞれから、Ｎグラムを抽出する処理に入る。ここでまず、検索語の文字数（Ｍ文字とする）に着目し、ある閾値ｋを用いて、ｋ文字以上かどうかを判定する（ステップＳ３０２）。
【００４７】
ここで閾値ｋは、検索装置１０において予め定められている値であり、ｋ＝２、ｋ＝３、あるいはそれ以外の２以上の自然数の値をとるが、以下では説明のために、その都度ｋ＝２やｋ＝３、ｋ＝４などの場合を用いて説明をする。
【００４８】
ｋ文字以上と判定された場合（ステップＳ３０２；ＹＥＳ）、検索語からＮ＝ｋのＮグラムを抽出する（ステップＳ３０３）。このとき、Ｍ文字の検索語について、先頭の文字から順に１文字ずつずらしながら抽出可能なＮグラムを抽出する。すなわち、Ｍ文字の検索語からは、Ｍ−Ｎ＋１個のＮグラムが抽出される。
【００４９】
一方、ｋ文字以上でないと判定された場合（ステップＳ３０２；ＮＯ）、検索語から、検索語の文字数に等しいＮのＮグラムを、すなわちＭ文字の検索語ではＮ＝ＭのＮグラムを、抽出する（ステップＳ３０４）。このとき抽出されるＮグラムは、１個、すなわち検索語そのもののＭ文字列だけである。
【００５０】
上記ステップＳ３０３またはステップＳ３０４の後、すべての検索語を処理したかを判定する（ステップＳ３０５）。処理していなければ（ステップＳ３０５；ＮＯ）、ステップＳ３０２へ戻る。すなわち、ステップＳ３０２〜Ｓ３０５はループ構造をなし、検索語の数だけ繰り返し行われる。そして、検索語ごとにそれぞれＮグラムが抽出される。
【００５１】
ここまでのＮグラム抽出部１３による処理の具体例として、ステップＳ３０１において、ユーザから「雨」、「高速化」、「全文検索処理」の３個の検索語を受け付けた場合を用いて説明する。
【００５２】
まず上記の閾値ｋ＝２の場合について考える。
最初の検索語「雨」は１文字列であるので、ステップＳ３０２での判定はＮＯとなり、ステップＳ３０４へ移行し、Ｎ＝１のＮグラム（モノグラム）が抽出される。すなわち、「雨」というモノグラムが１個、抽出される。
次にステップＳ３０５でステップＳ３０２へ戻り、次の検索語「高速化」は３文字列であるので、ステップＳ３０２での判定はＹＥＳとなり、ステップＳ３０３へ移行し、Ｎ＝２（＝ｋ）のＮグラム（バイグラム）が抽出される。すなわち、「高速」、「速化」というバイグラムが２個（３−２＋１個）、抽出される。
再びステップＳ３０２へ戻り、最後の検索語「全文検索処理」は６文字列であるので、ステップＳ３０２での判定はＹＥＳとなり、ステップＳ３０３へ移行し、Ｎ＝２（＝ｋ）のＮグラム（バイグラム）が抽出される。すなわち、「全文」、「文検」、「検索」、「索処」、「処理」というバイグラムが５個（６−２＋１個）、抽出される。
【００５３】
一方、別の例として、上記の閾値ｋ＝４の場合についても考える。
最初の検索語「雨」は１文字列であるので、ステップＳ３０２での判定はＮＯとなり、ステップＳ３０４へ移行し、Ｎ＝１のＮグラム（モノグラム）が抽出される。すなわち、上記と全く同様に、「雨」というモノグラムが１個、抽出される。
次にステップＳ３０５でステップＳ３０２へ戻り、次の検索語「高速化」は３文字列であるので、ステップＳ３０２での判定は同じくＮＯとなり、ステップＳ３０４へ移行し、Ｎ＝３のＮグラム（トリグラム）が抽出される。すなわち、「高速化」というトリグラムが１個、抽出される。
再びステップＳ３０２へ戻り、最後の検索語「全文検索処理」は６文字列であるので、ステップＳ３０２での判定はＹＥＳとなり、ステップＳ３０３へ移行し、Ｎ＝４（＝ｋ）のＮグラムが抽出される。すなわち、「全文検索」、「文検索処」、「検索処理」というＮグラムが３個（６−４＋１個）、抽出される。
【００５４】
このようなＮグラム抽出部１３による各検索語からのＮグラム抽出処理が終わると、次に図３Ａにおいて、頻度を導出する処理へ移行する。
【００５５】
まず、抽出された各検索語のＮグラムについて、出現頻度を抽出する（ステップＳ３０６）。すなわち、記憶部１１に記憶されている転置インデックス２９の出現頻度情報を用い、複数の文書データ２８中での出現頻度を抽出する。
【００５６】
ここで、図４を用いて、転置インデックス２９の具体的な構成を説明する。本図に示すように、転置インデックス２９は、Ｎグラム文字列パターンに関するファイル（pattern.idx）、出現位置情報に関するファイル（position.idx）、文書番号に関するファイル（number.idx）の３つのファイルから構成される。
【００５７】
Ｎグラム文字列パターンに関するファイル（pattern.idx）には、複数のＮの異なるＮグラムについて、Ｎグラム文字列パターンと出現位置情報格納アドレスとが対応して記載されている。図４では例として、バイグラムとモノグラムについて、それぞれ複数の文書データ２８中に存在する文字列パターンの数だけ、その出現位置情報格納アドレスが記載されている。本実施形態ではバイグラムとモノグラムの２個に限られず、一般にＮ＝１〜ｋのｋ個のＮグラムについて記載されていてもよい。
【００５８】
すなわち、上述したような最も典型的な例であるｋ＝２の場合では、転置インデックス２９はモノグラムとバイグラムの２個について出現位置情報格納アドレスを記憶する。そして、ユーザから入力された検索文字列が２文字以上のときはバイグラムを、２文字未満（すなわち１文字）のときはモノグラムを、それぞれ検索文字列から抽出して、それぞれ転置インデックス２９に記憶されているバイグラムまたはモノグラムの出現位置情報格納アドレスを参照して、検索文字列が含まれる文書を特定することになる。
【００５９】
一方、ｋ＝３の場合では、転置インデックス２９はモノグラムとバイグラムとトリグラム（Ｎ＝３のＮグラム）の３個について出現位置情報格納アドレスを記憶することになる。このときは、ユーザから入力された検索文字列が３文字以上のときはトリグラムを、２文字のときはバイグラムを、１文字のときはモノグラムを、それぞれ検索文字列から抽出して、それぞれ転置インデックス２９に記憶されているトリグラム、バイグラム、モノグラムのいずれか対応するものの出現位置情報格納アドレスを参照して、検索文字列が含まれる文書を特定することになる。
【００６０】
その結果、ユーザから受け付けられた検索文字列が、例えば１文字のような短い検索文字列であったとしても、必ず検索文字列の文字数以下のＮグラムを用いた検索処理が可能となる。これは、Ｎグラムを用いた検索処理において一般的に効率的な検索が行うことが困難な、使用するＮグラムより文字数の少ない検索文字列での検索を、避けることが可能となり、検索処理の効率化につながる。
【００６１】
出現位置情報に関するファイル（position.idx）には、上記pattern.idxに記載された各Ｎグラム文字列パターンについての、出現頻度と出現位置情報、または出現頻度と出現文書番号情報が記載されている。図４での例では、バイグラムとモノグラムが記載されている場合について対応しており、バイグラムの文字列パターンに対しては出現頻度と出現位置情報が、モノグラムの文字列パターンに対しては出現頻度と出現文書番号情報が記載されている。ここでも本実施形態では、バイグラムとモノグラムの２個に限られず、上記pattern.idxに対応して、一般にｋ個のＮグラムについて記載されていてもよい。その場合、Ｎが最も大きいＮ＝ｋのＮグラム文字列パターンに対しては出現頻度と出現位置情報が、それ以外のＮ＝１〜ｋ−１のＮグラム文字列パターンに対しては出現頻度と出現文書番号情報が記載されることになる。
【００６２】
ここで、Ｎ＝１〜ｋ−１のｋ−１個のＮグラム文字列パターンに対して、出現位置でなく出現文書番号を用いている理由について詳述すると、Ｎグラム抽出部１３によって検索文字列から抽出されたＮグラムは、転置インデックス２９の出現位置情報を参照しながら、文書特定部１４において抽出されたＮグラムがどの文書データ２８に含まれているかを特定していく。
【００６３】
ここでＮ＝ｋのＮグラムは、ｋ文字以上（Ｍ文字とする）の検索文字列から、複数（Ｍ−Ｎ＋１個）抽出される。そのため、複数のＮグラムが全て含まれている文書データ２８が見つかったとしても、文書データ２８の中で互いに離れた位置に存在していたら、それは見つけたい検索文字列を構成するものではないことになる。これを避けるため、文書データ２８内の位置に着目し、Ｍ−Ｎ＋１個の複数のＮグラムが検索文字列を構成するように連続に位置しているかを調べる必要がある。
【００６４】
それに対しＮ＝１〜ｋ−１のＮグラムでは、抽出されるＮグラムは必ず１個なので、上述したような位置の連続性を調べる必要がない。すなわち、Ｎグラムが出現する文書データ２８さえ見つかれば、それはそのまま検索文字列が存在する文書データ２８だと特定できる。そのため、Ｎ＝１〜ｋ−１のＮグラムに対しては、転置インデックス２９には詳細な出現位置情報ではなく出現文書番号情報を構成要素とすることで、文書データ２８内の位置から文書データ２８を特定するという処理をとることなく、直接文書データ２８を特定することができるようになり、処理の効率化につながる。
【００６５】
そのため、以下では、Ｎ＝１〜ｋ−１のＮグラム文字列パターンに対して、出現位置でなく出現文書番号を用いた実施形態について説明するが、本実施形態では、すべてのＮのＮグラム文字列パターンに対して出現位置情報を用いることを妨げるものではない。
【００６６】
文書番号に関するファイル（number.idx）には、複数の文書データ２８のそれぞれについて、文書番号と各文書の先頭文字位置が記載されている。ここで、上記position.idxでの出現位置と、number.idxでの各文書の先頭文字位置は、検索対象の文書群を文書番号順に並べたテキストの先頭文字位置を基準とした位置である。
【００６７】
すわなち、後述する文書特定部１４での処理において、Ｎグラム文字列パターンの出現位置と各文書の先頭文字位置の大小を比べることで、各Ｎグラム文字列パターンがどの文書データ２８中にあるのかを特定することになる。
【００６８】
このような転置インデックス２９を参照して、上記ステップＳ３０６では、抽出された各検索語のＮグラムについて、出現頻度を抽出する。
【００６９】
そして、各検索語について、最少出現頻度のＮグラムを導出する（ステップＳ３０７）。すなわち、上記ステップＳ３０６で抽出された各検索語の各Ｎグラムについての出現頻度を比較して、各検索語ごとに複数の文書データ２８中での出現頻度が最も少ないＮグラムを導出する。
【００７０】
具体的な例として、上述した「雨」、「高速化」、「全文検索処理」の３個の検索語を受け付けた例における、閾値ｋ＝２の場合について考える。
【００７１】
ステップＳ３０６においては、転置インデックス２９を用いて、抽出された各Ｎグラム（モノグラムまたはバイグラム）「雨」、「高速」、「速化」、「全文」、「文検」、「検索」、「索処」、「処理」の複数の文書データ２８中での出現頻度を抽出する。ここでは例えば、「雨」３回、「高速」１５回、「速化」５回、「全文」１０回、「文検」５回、「検索」９回、「索処」４回、「処理」１３回、のような出現頻度の結果が得られる。
【００７２】
この結果を受けてステップＳ３０７では、各検索語ごとに最少出現頻度のＮグラム（モノグラムまたはバイグラム）を導出する。
最初の検索語「雨」については、モノグラム「雨」１個なので、これが最少出現頻度のＮグラム（モノグラム）となる。
次の検索語「高速化」については、２個のバイグラム「高速」と「速化」があり、出現頻度は「速化」５回の方が「高速」１５回よりも少ないため、「速化」が最少出現頻度のＮグラム（バイグラム）となる。
最後の検索語「全文検索処理」については、５個のバイグラムのうち、「索処」４回が最少であるため、「索処」が最少出現頻度のＮグラム（バイグラム）となる。
【００７３】
ここで、最少出現頻度のＮグラムが複数あるときは、いずれか１個、典型的には検索文字列の位置が前方にあるもの、を導出する。また、最少出現頻度がゼロのＮグラムが１つでも存在する場合には、複数の文書データ２８中に検索文字列が存在しないということになるので、以下のステップに進まずに、典型的には「検索語が見つかりませんでした。」等をユーザへ出力して、処理を終了する（図示せず）。
【００７４】
ここまでの処理を受けて、図３Ａでは、各検索語にて導出された最少出現頻度を比べ、最少値を有する検索語を、基準検索語とし、それ以外の検索語を、検証検索語とする（ステップＳ３０８）。
【００７５】
すなわち具体的には、上記３個の検索語について導出された３個の最少出現頻度のＮグラム「雨」、「速化」、「索処」の出現頻度を比較する。出現頻度３回のモノグラム「雨」が他の２個のバイグラム「速化」５回、「索処」４回と比べて少ないため、検索語「雨」が基準検索語となり、それ以外の２個の検索語「高速化」と「全文検索処理」が検証検索語となる。
【００７６】
図３Ａでの処理はここで終了し、上記の結果得られた情報を用いて、ここからフローチャートは図３Ｂでの文書特定部１４の処理へ移行する。以下の処理では、まず基準検索語を含む文書データ２８を絞り込み、その後で絞り込まれた文書データ２８に、検証検索語が含まれているかどうかを判定することで、最終的にすべての検索語が含まれている文書データ２８を特定していく。そのため、ステップＳ３０８において、最少出現頻度が最少値のＮグラムを有する検索語を基準検索語とすることで、処理の早期の段階で文書データ２８を少数に絞り込むことが可能となる。以下、詳述する。
【００７７】
図３Ｂにおいて、まず、基準検索語の文字数（Ｍ文字とする）に着目し、図３ＡでのステップＳ３０２でのものと同様の閾値ｋを用いて、ｋ文字以上かどうかを判定する（ステップＳ３０９）。
【００７８】
ここでは上述した具体例をそのまま用いて、基準検索語が「雨」であり、閾値ｋ＝２の場合について考える。このとき、基準検索語の文字数（１文字）は２文字以上でないので（ステップＳ３０９；ＮＯ）、ステップＳ３１０へ移行する。
【００７９】
そして、記憶部１１に記憶されている転置インデックス２９を参照して、基準検索語「雨」を構成する１個のモノグラム「雨」の出現文書番号を読み込んで、出現候補文書番号を導出する（ステップＳ３１０）。ここでは、モノグラム文字列「雨」を含む文書データ２８は通常は複数存在するので、出現候補文書番号も複数存在することになるが、ここではまず、最初に導出された１個の出現候補文書番号に着目する。そして、図３Ｃへと移行する。
【００８０】
図３Ｃでは、検証検索語に着目した繰り返し処理に入る。まず、１個の検証検索語の文字数（Ｍ文字とする）に着目し、図３ＡでのステップＳ３０２および図３ＢでのステップＳ３０９でのものと同様の閾値ｋを用いて、ｋ文字以上かどうかを判定する（ステップＳ３１４）。
【００８１】
ここでも引き続き上述した閾値ｋ＝２の具体例を用いて説明する。２個の検証検索語「高速化」と「全文検索処理」のうち１個に着目して、２文字以上かどうかを判定する。本実施形態では最初にどちらに着目することも可能であるが、ステップＳ３０６にて導出された互いの最少出現頻度のＮグラム（バイグラム）「速化」（５回）と「索処」（４回）を比べて、より少ない方から着目した方が、より早期に文書データ２８を絞り込むことができ、処理の効率化につながる。したがって、ここでは最初に「全文検索処理」に着目して、以下説明する。
【００８２】
検証検索語「全文検索処理」は、２（＝ｋ）文字以上であるので（ステップＳ３１４；ＹＥＳ）、次に、ステップＳ３０３にて抽出された「全文検索処理」の５個のバイグラムのうち、最小出現頻度のバイグラムの出現位置を読み込んで、出現候補文書番号の文書内か評価する（ステップＳ３２０）。すなわち、すでにステップＳ３０６にて導出された最少出現頻度のバイグラム「索処」に着目し、転置インデックス２９を参照して、出現位置を読み込む。
【００８３】
そして、バイグラム「索処」のある出現位置が、出現候補文書番号の文書内の先頭位置以上であるかを判定する（ステップＳ３２１）。先頭位置以上でなければ（ステップＳ３２１；ＮＯ）、この出現位置にあるバイグラム「索処」は、出現候補文書の中にあることはありえないので、ステップＳ３２０へ戻って、次のバイグラム「索処」の出現位置が出現候補文書番号の文書内であるかを判定し直す。この繰り返し処理を、先頭位置以上の出現位置が見つかるまで行う。
【００８４】
もしここで、バイグラム「索処」についての転置インデックス２９内のすべての出現位置が、出現候補文書番号の文書内の先頭位置以上となっていなければ、基準検索語「雨」と検証検索語「全文検索処理」を同時に含む文書データ２８が存在しないということを意味し、検索語が見つからなかった旨を適切にユーザへ出力して、処理はここで終了する（図示せず）。
【００８５】
一方、ある出現位置が先頭位置以上であれば（ステップＳ３２１；ＹＥＳ）、今度は同じ出現位置が、出現候補文書番号の文書内の最終位置以下であるかを判定する（ステップＳ３２２）。すなわち、ステップＳ３２１とステップＳ３２２の２つの判定を満たした出現位置が、出現候補文書番号の文書内にあると判定される。
【００８６】
ここで、最終位置以下でなければ（ステップＳ３２２；ＮＯ）、バイグラム「索処」についての転置インデックス２９内にあるこれ以降の出現位置も、最終位置以下ではないと判断できるので、現在着目している出現候補文書には、検証検索語「全文検索処理」は存在しないことを意味することになる。
【００８７】
すなわち、現在着目している出現候補文書における処理は終了し、次に全ての出現候補文書番号を評価したかを判定する（ステップＳ３２７）。ここで未評価の出現候補文書番号があれば（ステップＳ３２７；ＹＥＳ）、処理はステップＳ３０９まで戻り、再びステップＳ３１０にて基準検索語における未評価の出現候補文書番号を導出する。そしてその出現候補文書番号に着目し直して、検証検索語における上記ステップＳ３１４、Ｓ３２０〜Ｓ３２２での処理を行う。
【００８８】
そして、ステップＳ３２１とステップＳ３２２の２つの判定を満たしたバイグラム「索処」の出現位置が存在した場合（ステップＳ３２２；ＹＥＳ）、次に検索語全体が出現候補文書内に存在するかを判定する。すなわち、検証検索語「全文検索処理」を構成する５個のバイグラム「全文」、「文検」、「検索」、「索処」、「処理」の出現位置を転置インデックス２９を参照して読み込み（ステップＳ３２３）、各出現位置が「全文検索処理」を構成するような連続性があるかを判定する（ステップＳ３２４）。
【００８９】
ここで連続性を判定する際に、ステップＳ３０６にて抽出された各バイグラムの出現頻度を用いて、出現頻度の少ないバイグラムから出現位置を読み込むと、より効率的な処理が可能となる。また、連続性の評価には、必ずしも上記５個すべてのバイグラムを使用しなければならないわけではなく、最小限に検索語を被覆するように、「全文」、「検索」、「処理」の３個のみを読み込めば、連続性の評価は可能である。本実施形態では、これらを制限するものではなく、いずれの形態も可能である。
【００９０】
連続性がないと判定された場合（ステップＳ３２４；ＮＯ）、現在着目している出現候補文書内には検証検索語が存在しないということになるので、ステップＳ３２７へ移行し、
次に未評価の出現候補文書番号があるかを判定し直して、あれば再び未評価の出現候補文書番号に着目し直すことになる。
【００９１】
一方、連続性があると判定された場合（ステップＳ３２４；ＹＥＳ）、現在着目している出現候補文書中には、基準検索語「雨」と検証検索語「全文検索処理」が、ともに存在することになる。ここで全ての検証検索語を評価したかを判定する（ステップＳ３２５）。今回の具体例においては、まだ検証検索語「高速化」については評価していない（ステップＳ３２５；ＮＯ）。したがって、ステップＳ３１４まで戻り、検証検索語「高速化」について、上記ステップＳ３１４、Ｓ３２０〜Ｓ３２４までの処理を同様に行うことになる。
【００９２】
そして検証検索語「高速化」について、処理がステップＳ３２５まで到達したとき、全ての検証検索語を評価し終わり（ステップＳ３２５；ＹＥＳ）、３個の検索語「雨」、「高速化」、「全文検索処理」をいずれの含む文書データ２８が、１個特定されたことになる。したがって、特定された出現候補文書番号を保持（ステップＳ３２６）する。
【００９３】
そして処理はステップＳ３２７へ移行し、未評価の出現候補文書番号があるかを判定する。すなわち、未評価の出現候補文章番号がなくなるまで、上述した「雨」を基準検索語とし、「高速化」と「全文検索処理」を検証検索語として組み合わせた処理を繰り返して、３語を含むすべての文書データ２８を特定する。
【００９４】
全ての出現候補文書番号を評価し終われば（ステップＳ３２７；ＮＯ）、保持された全ての出現候補文書番号をユーザへ出力し（ステップＳ３２８）、処理を終了する。すなわち、ここで検索結果がユーザへ適切に出力される。
【００９５】
ここまで一通り、「雨」を基準検索語とし、「高速化」と「全文検索処理」を検証検索語とした３語の論路積による検索について説明してきたが、次の例として、基準検索語が１文字でないとき、すなわち、基準検索語を「全文検索処理」とし、「雨」と「高速化」を検証検索語とした場合の検索について説明する。
【００９６】
図３ＡでのステップＳ３０８までの処理によって、「全文検索処理」が基準検索語とされたとき、図３Ｂへ移行し、この６文字の基準検索語は２（＝ｋ）文字以上なので（ステップＳ３０９；ＹＥＳ）、この基準検索語を含む出現候補文書番号を導出する処理に入る。
【００９７】
すなわち、基準検索語「全文検索処理」を構成する５個のバイグラム「全文」、「文検」、「検索」、「索処」、「処理」の出現位置を転置インデックス２９を参照して読み込み（ステップＳ３１１）、各出現位置が「全文検索処理」を構成するような連続性があるかを判定する（ステップＳ３１２）。ここでの処理は、上述したステップＳ３２３〜Ｓ３２４と同様であり、出現頻度の少ないバイグラムから出現位置を読み込むことや、最小限に検索語を被覆するように使用するバイグラムを選ぶことなど、複数の形態が可能である。
【００９８】
連続性がないと判定された場合（ステップＳ３１２；ＮＯ）、ステップＳ３１１へ戻る。すなわち、連続性があると判定されるまで繰り返す。ここでもし、すべての出現位置について連続性がないと判定されれば、この検証検索語はいずれの文書データ２８にも含まれていないことを意味し、検索語が見つからなかった旨を適切にユーザへ出力して、処理はここで終了する（図示せず）。
【００９９】
連続性があると判定された場合（ステップＳ３１２；ＹＥＳ）、その連続性のあった出現位置から、転置インデックス２９を参照して、出現候補文書番号を導出する（ステップＳ３１３）。そして図３Ｃでの検証検索語の処理へ移行する。
【０１００】
ここではまず、検証検索語である「雨」と「高速化」のうち１個に着目する。「高速化」に着目した場合、この３文字の検証検索語は２（＝ｋ）文字以上であるので（ステップＳ３１４；ＹＥＳ）、上記で詳述したステップＳ３２０〜Ｓ３２６による処理を行う。ここで、検証検索語「高速化」が含まれる文書データ２８が１つ特定され、ステップＳ３２５へ到達したとき、まだ残りの検証検索語「雨」を評価してないため（ステップＳ３２５；ＮＯ）、ステップＳ３１４へ戻り、検証検索語「雨」の処理へ移行する。
【０１０１】
そして、検証検索語「雨」は２文字以上ではないので（ステップＳ３１４；ＮＯ）、ここからステップＳ３１５〜Ｓ３１９による文書特定処理へ移行する。
【０１０２】
まず、転置インデックス２９を参照して、検証検索語「雨」を構成する１個のモノグラム「雨」の出現文書番号を読み込んで、出現候補文書番号と比較する（ステップＳ３１５）。
【０１０３】
そして、出現文書番号が、出現候補文書番号以上であるかを判定する（ステップＳ３１６）。出現候補文書番号以上でなければ（ステップＳ３１６；ＮＯ）、この出現文書番号の文書にあるモノグラム「雨」は、出現候補文書の中にあることはありえないので、ステップＳ３１５へ戻って、次のモノグラム「雨」の出現文書番号が出現候補文書番号以上であるかを判定し直す。この繰り返し処理を、出現候補文書番号以上の出現文書番号が見つかるまで行う。
【０１０４】
もしここで、モノグラム「雨」についての転置インデックス２９内のすべての出現文書番号が、出現候補文書番号以上となっていなければ、基準検索語「全文検索処理」と検証検索語「雨」を同時に含む文書データ２８が存在しないということを意味し、検索語が見つからなかった旨を適切にユーザへ出力して、処理はここで終了する（図示せず）。
【０１０５】
一方、ある出現文書番号が出現候補文書番号以上であれば（ステップＳ３１６；ＹＥＳ）、今度は同じ出現文書番号が、出現候補文書番号と等しいかを判定する（ステップＳ３１７）。
【０１０６】
ここで等しくなければ（ステップＳ３１７；ＮＯ）、モノグラム「雨」についての転置インデックス２９内にあるこれ以降の出現文書番号も、出現候補文書番号と等しくならないと判断できるので、現在着目している出現候補文書における処理は終了し、次に全ての出現候補文書番号を評価したかの判定（ステップＳ３２７）へ移行する。
【０１０７】
一方、等しければ（ステップＳ３１７；ＹＥＳ）、現在着目している出現候補文書中には、基準検索語「全文検索処理」と検証検索語「雨」が、ともに存在することになる。ここで全ての検証検索語を評価したかを判定する（ステップＳ３１８）。未評価の検証検索語があれば（ステップＳ３１８；ＮＯ）、再びステップＳ３１４へ戻り、未評価の検証検索語についての処理を行う。今回の具体例においては、全ての検証検索語を評価したことになり（ステップＳ３１８；ＹＥＳ）、この時点で３個の検索語「雨」、「高速化」、「全文検索処理」をいずれの含む文書データ２８が、１個特定されたことになる。したがって、特定された出現候補文書番号を保持（ステップＳ３１９）する。
【０１０８】
そして処理はステップＳ３２７へ移行し、未評価の出現候補文書番号があるかを判定する。すなわち、上述した先の具体例で既に説明したように、未評価の出現候補文章番号がなくなるまで、すべての文書データ２８を特定する処理を繰り返し、全ての出現候補文書番号を評価し終われば（ステップＳ３２７；ＮＯ）、保持された全ての出現候補文書番号をユーザへ出力し（ステップＳ３２８）、処理を終了する。
【０１０９】
以上で、ここでの例である、基準検索語「全文検索処理」、検証検索語「雨」、「高速化」で検索した場合における処理が終了したことになる。
【０１１０】
ここまでフローチャートで説明してきた処理によって、「雨」のような１文字の短い検索語を含む複数の検索語の論理積演算による検索処理が行われることになる。すなわち、転置インデックス２９にはＮ＝１〜ｋのｋ個のＮグラムについての情報が記憶され、検索語の長さに応じて、必ず検索語の文字数を上回らないＮグラムを使用する。これにより、Ｎグラムを用いた検索処理において一般的に効率的な検索が行うことが困難な、短い検索語の検索、特に短い検索語を含む複数の検索語の論理積演算による検索において、効率的な検索が可能となる。
【０１１１】
その際、転置インデックス２９には、Ｎグラムについての情報が、ｋ個分記憶されなければならないので、通常の１種類のＮグラムのみを記憶する処理方法に比べて、大きな記憶領域を必要とするが、例えば、本実施形態において典型的な値であるｋ＝２（モノグラムとバイグラム）の場合、モノグラムにおいては、出現位置ではなく文書番号を記憶することで、記憶領域の増大量を最小限に抑えることができる。
【０１１２】
特に、１文字のような短い検索語と、他の検索語を組み合わせた論理積による検索は、実際には頻繁に行われるものであり、上記のように、１文字の検索語についてはモノグラムで、それ以上の文字数の検索語についてはバイグラムで、それぞれ検索処理を行なえば、記憶領域の増大量の最小限な抑制と、高速な処理速度との、両立が可能となる。
【０１１３】
これにより、例えば、携帯電話や小型電子機器に搭載された小型の電子辞書等といった限られた資源、すなわち搭載ＣＰＵの処理速度が低く、容量が小さい場合においても、効率的な検索を実現することが可能になる。
【０１１４】
また、本発明での実施形態は、上述した実施形態に加え、上記検索装置１０としてコンピュータ装置２０を機能させるためのコンピュータプログラムであってもよい。
【０１１５】
上記コンピュータプログラムは、コンパクトディスク、フレキシブルディスク、ハードディスク、光磁気ディスク、ディジタルビデオディスク、磁気テープ、半導体メモリ等のコンピュータ読取可能な情報記憶媒体に記憶することができる。
【０１１６】
また、上記コンピュータプログラムは、コンピュータプログラムが実行されるコンピュータ装置２０とは独立して、コンピュータ通信網を介して配付・販売することができる。また、上記情報記憶媒体は、コンピュータ装置２０とは独立して配付・販売することができる。
【符号の説明】
【０１１７】
１０…検索装置、１１…記憶部、１２…入力部、１３…Ｎグラム抽出部、１４…文書特定部、１５…出力部、２０…コンピュータ装置、２１…ＣＰＵ、２２…ＲＯＭ、２３…ＲＡＭ、２４…ＨＤＤ、２５…入力装置、２６…出力装置、２７…通信制御装置、２８…文書データ、２９…転置インデックス
【図１】
0005533197.tif 000002
【図２Ａ】
0005533197.tif 000003
【図２Ｂ】
0005533197.tif 000004
【図３Ａ】
0005533197.tif 000005
【図３Ｂ】
0005533197.tif 000006
【図３Ｃ】
0005533197.tif 000007
【図４】
0005533197.tif 000008