(57)【特許請求の範囲】
【請求項１】
コンピュータに、
予め定めた出現頻度の高い高頻度単語については、出現頻度が高いほど短い、所定ビット数以下の可変長の圧縮符号を予め割り当て、高頻度単語と可変長の圧縮符号とを対応付けて辞書に登録すると共に、前記高頻度単語のそれぞれに対して登録番号を定め、高頻度単語の分だけ、高頻度単語の登録番号に対応して単語の出現の有無または単語の出現回数を記憶する領域を確保したインデックスを生成し、
処理対象のファイルから単語を抽出し、
抽出された単語が前記高頻度単語である場合、前記辞書に登録された当該単語に対応する可変長の圧縮符号で当該単語を符号化すると共に、前記インデックスの当該高頻度単語の登録番号に対応付けて単語の出現の有無または単語の出現回数を格納し、抽出された単語が高頻度単語以外の単語である場合、抽出された単語に対して前記所定ビット数の固定長の圧縮符号を動的に割り当てて当該単語を符号化すると共に、抽出された単語に対して登録番号を動的に割り当て、割り当てた登録番号に対応付けて当該単語の出現の有無または単語の出現回数を前記インデックスに追加で格納する
処理を実行させることを特徴とするインデックス生成プログラム。
【請求項２】
前記格納する処理は、前記インデックスに、ファイル単位またはファイルの区分けした所定単位に、単語の出現の有無または単語の出現回数を格納する
ことを特徴とする請求項１に記載のインデックス生成プログラム。
【請求項３】
コンピュータに、
前記処理対象のファイルから抽出された単語が属する類語情報毎に、当該類語情報に対応する単語が抽出された回数を、前記インデックスに格納する
処理をさらに実行させることを特徴とする請求項１または２に記載のインデックス生成プログラム。
【請求項４】
コンピュータに、
単語と類語情報とをそれぞれ対応付ける類語データベースを用いて、単語が属する類語情報を特定する処理をさらに実行させ、
前記インデックスに格納する処理は、特定された類語情報毎に、当該類語情報に対応する単語が抽出された回数を、前記インデックスに格納する
ことを特徴とする請求項３に記載のインデックス生成プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、圧縮プログラムおよび検索プログラムに関する。
【背景技術】
【０００２】
検索対象の文字列との関連度が高いファイルを検索する技術が存在する。かかる技術では、インデックスを用いて検索対象の文字列中の単語を含むファイルを特定し、特定したファイル毎に検索対象の文字列との関連度を求める。インデックスとは、各単語が含まれるファイルを表す情報ビット列である。そして、検索対象の文字列との関連度が高い順にファイルを列挙することで候補一覧がランキング形式で表示される。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００４−１１０２７１号公報
【特許文献２】特開平０８−１４７３１１号公報
【特許文献３】特開平０９−２１４３５２号公報
【特許文献４】特開平０５−２４１７７６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
このような検索に用いられるインデックスには、例えば、Ｎグラム（N-Gram）形式のものがある。Ｎグラム形式のインデックスは、ファイルに、Ｎ個の文字が連続したＮグラム文字ごとに、それぞれのＮグラム文字が含まれるか否かを記録したものである。Ｎの値を１とした１グラムは、ユニグラム（uni-gram）とも呼ばれる。Ｎの値を２とした２グラムは、バイグラム（bi-gram）とも呼ばれる。Ｎの値を３とした３グラムは、トライグラム（tri-gram）とも呼ばれる。
【０００５】
例えば、日本語テキストについて、インデックスを１グラム形式とした場合、インデックスのデータサイズを小さく抑えられるものの、検索ノイズが大きい。例えば、１グラム形式のインデックスが、使用頻度の高い８０００個の文字について、各文字がファイルに含まれるかを記録するものとする。このような１グラム形式のインデックスは、８０００個の各文字がファイルに含まれるかを記録すればよいため、インデックスのデータサイズを小さく抑えることができる。しかし、１グラム形式のインデックスは、文字ごとに、ファイルに含まれているかを記録するため、検索ノイズが大きい。例えば、「京都の東部」が記録されたファイルについて１グラム形式のインデックスを生成した場合、インデックスには、「京」、「都」、「の」、「東」、「部」の各文字を含んだことが記憶される。このインデックスを用いて、例えば、「東京」が含まれるか否かを検索した場合、インデックスには、「東」、「京」の各文字を含むことが記録されているため、「東京」が含まれると誤って検索されてしまう。
【０００６】
一方、Ｎグラム形式のインデックスは、Ｎの値が大きいほど検索ノイズが減少するが、インデックスのデータサイズが大幅に大きくなる。例えば、２グラム形式のインデックスは、使用頻度の高い８０００個の文字をそれぞれの組み合わせた２グラム文字ごとに、それぞれの２グラム文字がそれぞれファイルに含まれるかを記録する。例えば、「京都の東部」が記憶されたファイルについて２グラム形式のインデックスを生成した場合、インデックスには、「京都」、「都の」、「の東」、「東部」の各２文字を含むことが記録される。このインデックスを用いて、例えば、「東京」が含まれるか否かを検索した場合、インデックスには、「東京」の２文字を含んだことが記録されていないため、「東京」を含んだファイルとは検索されない。しかし、このような２グラム形式のインデックスは、８０００×８０００個の２グラム文字の組み合わせについて、ぞれぞれの２グラム文字についてファイルに含まれるかを記録するため、１グラム形式の場合と比較して、インデックスのデータサイズが大幅に大きくなる。このように、Ｎグラム形式のインデックスは、検索ノイズの減少と、データサイズの減少にトレードオフの関係がある。
【０００７】
さらに、英文テキストにおいても、例えば、「This  is  a  ball」では、１グラムの「a」は、単語「a」や「ball」に含まれ、２グラムの「is」は、単語「This」や「is」に含まれる。そのため、検索ノイズが大きく、数グラムのインデックスが必要となり、日本語テキストと同じようなトレードオフの関係がある。
【０００８】
そこで、高頻度な単語に着目し、例えば、インデックスが、出現頻度の高い高頻度単語については、それぞれの単語がそれぞれファイルに含まれるかを記録し、高頻度単語以外の単語については単語を構成するＮグラム文字それぞれがファイルに含まれるかを記録する手法も考えられる。しかしながら、高頻度単語以外の単語については、当該単語を構成するＮグラム文字それぞれの有無を記録するため、それぞれの単語がファイルに含まれているかが記録された高頻度単語の場合と異なり、検索ノイズが発生する場合がある。
【０００９】
一つの側面では、インデックスのデータサイズを抑えつつ、検索ノイズの発生を抑制できる圧縮プログラムおよび検索プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１０】
第１の案では、圧縮プログラムは、コンピュータに、処理対象のファイルから単語を抽出する処理を実行させる。圧縮プログラムは、コンピュータに、抽出された単語が出現頻度の高い高頻度単語である場合、高頻度単語に対応する静的情報が予め登録されたインデックスに、抽出された単語に対応する静的情報に対応付けて単語の出現の有無または単語の出現回数を格納する処理を実行させる。圧縮プログラムは、コンピュータに、抽出された単語が高頻度単語以外の単語である場合、動的に動的情報を割り当て、当該動的情報に対応付けて単語の出現の有無または単語の出現回数を前記インデックスに追加で格納する処理を実行させる。
【発明の効果】
【００１１】
本発明の１実施態様によれば、インデックスのデータサイズを抑えつつ、検索ノイズの発生を抑制できるという効果を奏する。
【図面の簡単な説明】
【００１２】
【図１】図１は、実施例１のインデックスを生成する処理の流れを示す図である。
【図２Ａ】図２Ａは、単語の出現頻度を説明する図である。
【図２Ｂ】図２Ｂは、単語に割り当てる圧縮符号の長さを説明する図である。
【図３Ａ】図３Ａは、Ｎグラム形式のインデックスの一例を示す図である。
【図３Ｂ】図３Ｂは、単語ビットマップインデックスの一例を示す図である。
【図４】図４は、実施例１のインデックス生成処理にかかるシステム構成の例を示す図である。
【図５Ａ】図５Ａは、実施例１のビットフィルタの一例を示す図である。
【図５Ｂ】図５Ｂは、実施例１のビットフィルタの一例を示す図である。
【図６】図６は、実施例１の動的辞書部のデータ構造の一例を示す図である。
【図７】図７は、実施例１の単語ビットマップインデックスの一例を示す図である。
【図８】図８は、実施例１のインデックス生成処理の流れの例を示すフロー図である。
【図９】図９は、実施例１の検索処理の流れの例を示すフロー図である。
【図１０】図１０は、実施例２のインデックスを生成する処理の流れを示す図である。
【図１１】図１１は、実施例２のインデックス生成処理にかかるシステム構成の例を示す図である。
【図１２】図１２は、実施例２の類語データベースのデータ構造の一例を示す図である。
【図１３Ａ】図１３Ａは、実施例２のビットフィルタの一例を示す図である。
【図１３Ｂ】図１３Ｂは、実施例２のビットフィルタの一例を示す図である。
【図１４】図１４は、カウントマップインデックスの一例を示す図である。
【図１５】図１５は、実施例２のインデックス生成処理の流れの例を示すフロー図である。
【図１６】図１６は、実施例２の検索処理の流れの例を示すフロー図である。
【図１７】図１７は、情報処理装置のハードウェア構成を示す図である。
【発明を実施するための形態】
【００１３】
以下に、本願の開示する圧縮プログラムおよび検索プログラムの実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの権利範囲が限定されるものではない。各実施例は、処理内容を矛盾させない範囲で適宜組み合わせることが可能である。
【実施例１】
【００１４】
最初に、図１を用いて、実施例１の情報処理装置１００がインデックスを生成する処理について説明する。情報処理装置１００は、ファイルを圧縮する際に、インデックスを生成する処理を行う。図１は、実施例１のインデックスを生成する処理の流れを示す図である。図１には、圧縮を行う対象ファイル１０に含まれる文章「first  cavy  was・・・」についてのインデックスを生成する例が示されている。情報処理装置１００は、対象ファイル１０に含まれる文書から単語単位に、それぞれの単語を取得する。図１の例では、「first」、「cavy」、「was」を取得する。そして、情報処理装置１００は、取得した単語をビットフィルタ１２１と照合する。
【００１５】
ビットフィルタ１２１は、単語毎の圧縮符号を記憶した圧縮用辞書である。ビットフィルタ１２１の詳細な構成は、後述する。ビットフィルタ１２１は、出現頻度の高い高頻度単語については圧縮符号およびインデックスの登録番号が登録され、出現頻度の低い低頻度単語については圧縮符号およびインデックスの登録番号が初期状態では未登録とされている。図１の例では、「cavy」を低頻度単語とし、「first」および「was」を高頻度単語とする。ビットフィルタ１２１は、高頻度単語である「first」および「was」の圧縮符号が登録され、低頻度単語である「cavy」の圧縮符号が未登録とする。
【００１６】
情報処理装置１００は、照合の結果、照合した単語に対応する圧縮符号がビットフィルタ１２１に登録されている場合、照合した単語の圧縮符号をビットフィルタ１２１から取得して圧縮ファイルに出力する。一方、情報処理装置１００は、照合の結果、照合した単語に対応する圧縮符号がビットフィルタ１２１に登録されていない場合、新たな圧縮符号を割り当て、動的辞書部１２２に登録する。また、情報処理装置１００は、新たな圧縮符号を照合した単語に対応する圧縮符号として、ビットフィルタ１２１に登録する。そして、情報処理装置１００は、割り当てた新たな圧縮符号を圧縮ファイルに出力する。また、情報処理装置１００は、照合した単語が対象ファイル１０に含まれていたことを単語ビットマップインデックス１２３に記録する。
【００１７】
単語ビットマップインデックス１２３は、ファイル毎に、単語が出現するか否かを記憶したインデックスである。単語ビットマップインデックス１２３には、高頻度単語がファイルに出現したか否かを記憶する第１記憶領域１２３ａと、低頻度単語がファイルに出現したか否かを記憶する第２記憶領域１２３ｂとが設けられている。第１記憶領域１２３ａは、各高頻度単語が対象ファイル１０に出現したか否かを記憶するため、予め設けられる。すなわち、第１記憶領域１２３ａは、高頻度単語の分だけ記憶領域が予め確保される。例えば、図１の例では、第１記憶領域１２３ａに、ｎ個のファイルに、それぞれの高頻度単語が出現したか否かを記憶する記憶領域が予め設けられている。第２記憶領域１２３ｂは、対象ファイル１０に低頻度単語が出現した際に、出現した低頻度単語がファイルに出現したか否かを記憶する記憶領域が追加で設けられる。すなわち、第２記憶領域１２３ｂは、対象ファイル１０に新たな低頻度単語が出現する毎に、記憶領域が確保される。
【００１８】
ビットフィルタ１２１には、高頻度単語である「first」の登録番号が予め登録されている。単語ビットマップインデックス１２３の第１記憶領域１２３ａには、「first」に対応する登録番号「0123h」が予め登録されている。情報処理装置１００は、「first」を取得した場合、ビットフィルタ１２１から「first」の圧縮符号を取得して圧縮ファイルに出力する。また、情報処理装置１００は、単語ビットマップインデックス１２３の第１記憶領域１２３ａに、「first」が対象ファイル１０に出現したことを記録する。図１の例では、第１記憶領域１２３ａの登録済みの「first」に対応する登録番号「0123h」のレコードの対象ファイル１０に対応するファイル番号「３」に単語がファイルに出現したことを示す「１」が記録されている。なお、本実施例では、登録番号などを１６進数で表している。１６進数で表した番号には、最後に「h」を付す。
【００１９】
一方、ビットフィルタ１２１および動的辞書部１２２は、当初、低頻度単語である「cavy」の圧縮符号が未登録となっている。情報処理装置１００は、「cavy」を取得した場合、「cavy」の圧縮符号が登録されていないので、新たに圧縮符号および登録番号を割り当ててビットフィルタ１２１および動的辞書部１２２に登録する。また、情報処理装置１００は、単語ビットマップインデックス１２３の第２記憶領域１２３ｂに「cavy」の登録番号に対応するレコードを追加し、対象ファイル１０に対応するファイル番号３に単語がファイルに出現したことを示す「１」を記録する。図１の例では、第２記憶領域１２３ｂに「cavy」に対応する登録番号「2004h」のレコードが追加され、追加されたレコードの対象ファイル１０に対応するファイル番号「３」に単語がファイルに出現したことを示す「１」が記録されている。なお、追加されたレコードは、対象ファイル１０以前のファイル番号のファイルについては単語がファイルに出現しなかたことが記録されている。図１の例では、登録番号「2004h」のレコードのファイル番号「１」、「２」について出現しなかたことを示す「０」が記録されている。
【００２０】
次に、実施例１の情報処理装置１００がビットフィルタ１２１および単語ビットマップインデックス１２３を生成する処理について説明する。情報処理装置１００は、母集団からビットフィルタ１２１に登録する各単語の出現頻度を求める。例えば、情報処理装置１００は、複数のファイルを母集団として用いて、辞典に登録された各単語の出現頻度を求める。図２Ａは、単語の出現頻度を説明する図である。図２Ａには、ファイルＡ、ファイルＢ、ファイルＣ等を含む母集団２２に含まれる単語の分布表２０ａが示されている。分布表２０ａの縦軸は、単語数を示す。図２Ａの例では、母集団２２は、一般的な辞典に登録された約１９万語の単語を有するものとする。分布表２０ａでは、母集団２２の単語数において出現頻度の高い順に単語を並べている。すなわち、単語数は、母集団における単語の出現順位を表す。例えば、母集団２２において比較的出現頻度が高い「the」は、単語数「1語」に位置し、比較的出現頻度が低い「zymosis」は、単語数「189,000語」に位置する。なお、母集団２２において最も出現頻度の低い単語は、「190,000語」に位置する。
【００２１】
分布表２０ａの横軸は、符号長を示す。例えば、各単語に、母集団２２における出現頻度に応じた符号長を割り当てる。この場合、母集団２２において出現頻度の高い単語に対して短い符号長が割り当てられ、出現頻度の低い単語に対して長い符号長が割り当てられる。例えば、分布表２０ａのように、出現頻度が高い「the」よりも出現頻度が低い「zymosis」に対して長い符号長が割り当てられる。以下、本実施例では、母集団において出現頻度の順位が１〜８０００位までの単語を高頻度単語とし、出現頻度の順位が８００１位以下の単語を低頻度単語とする。なお、高頻度単語と低頻度単語を分ける境界となっている出現順位８０００位は、あくまで一例であり、他の出現順位を境界としてもよい。単語「first」、「was」や、分布表２０ａに示すように単語「the」、「mouse」、「rat」は、８０００位以内の高頻度単語である。一方、単語「cavy」は、８００１位以下の低頻度単語である。
【００２２】
分布表２０ａの横縞は、出現した単語に対応する単語数の位置を表す。分布表２０ａには、母集団２２から収集した１９万語の単語が全て登録される。このため、分布表２０ａでは、単語数１〜１９００００語の高頻度単語から低頻度単語までの領域にわたって横縞が一様に示されている。
【００２３】
分布表２０ａに示されるように、各単語に、母集団２２における単語の出現頻度に応じた符号長を割り当てた場合、低頻度単語に割り当てられる符号長が長くなる。例えば、低頻度単語である「zymosis」は、出現順位が１８９０００位であり、低頻度単語の中でも出現順位が低いので、割り当てられる符号長が長い。
【００２４】
また、図２Ａには、割り当てられた符号長の圧縮符号により対象ファイル１０を圧縮した圧縮ファイル２３に含まれる単語の分布表２０ｂが示されている。分布表２０ｂは、分布表２０ａと同様に、縦軸が単語数で、横軸が符号長を示す。圧縮ファイル２３は、辞典に登録されている１９万語の単語のうちの３２０００語程度の単語を有する。分布表２０ｂの横縞は、分布表２０ａに含まれる単語のうち、圧縮ファイル２３にも共通して出現した単語に対応する単語数の位置を表す。単語数１〜８０００語の高頻度単語は、圧縮ファイル２３に大部分出現する。このため、分布表２０ｂでは、単語数１〜８０００語の高頻度単語の領域において横縞が一様に示されている。一方、単語数８００１〜１９００００語の低頻度単語は、圧縮ファイル２３に一部しか出現しない。このため、分布表２０ｂでは、単語数８００１〜１９００００語の低頻度単語の領域において横縞がまばらに示されている。
【００２５】
ここで、例えば、圧縮ファイル２３の各単語に、母集団２２における出現頻度に応じた符号長を割り当てた場合、圧縮ファイル２３では、低頻度単語の符号長の変化が大きく、単語数の少ない低頻度単語に対して長い符号長が割り当てられる。例えば、「zymosis」のように分布表２０ｂの底辺付近に位置する低頻度単語は、長い符号長が割り当てられる。このため、各単語の圧縮に割り当てられた符号長の圧縮符号を用いて圧縮した場合、圧縮ファイル２３は、出現順位が低い低頻度単語に割り当てる可変長符号が冗長になるため、圧縮率が低下する。
【００２６】
そこで、本実施例の情報処理装置１００は、高頻度単語については出現頻度に応じた可変長の圧縮符号を予め割り当て、低頻度単語については出現した際に固定長の圧縮符号を割り当て、圧縮を行う。図２Ｂは、単語に割り当てる圧縮符号の長さを説明する図である。図２Ｂには、図２Ａと同様に、母集団２２に含まれる単語の分布表上での対象ファイル１０に含まれる単語の分布を示す分布表２１ａが示されている。図２Ｂの例に示される分布表２１ａは、図２Ａと同様に、縦軸が単語数で、横軸が符号長を示す。分布表２１ａの横縞は、母集団２２に含まれる単語のうち、圧縮対象の対象ファイル１０から収集した約３２０００語の単語に対応する単語数の位置を表す。
【００２７】
例えば、出現順位が１〜８０００位までの「the」「a」「of」等の高頻度単語は、母集団２２と、対象ファイル１０とで概ね共に出現する。このため、分布表２１ａは、単語数が１〜８０００語までの単語で横縞が一様に示されている。一方、出現順位が８００１位以下の「zymosis」等の低頻度単語は、母集団２２に含まれる単語のうちの一部のみが対象ファイル１０に出現する。このため、分布表２１ａは、単語数が８００１〜１９００００語までは単語で横縞がまばらに示されている。このように単語に対して出現頻度に応じた符号長を割り当てた場合、分布表２１ｂの底辺付近に位置する低頻度単語は、長い符号長が割り当てられる。
【００２８】
そこで、本実施例の情報処理装置１００は、高頻度単語に対して出現頻度の高い順に可変長の符号を割り当てる。分布表２１ｂには、単語に割り当てる圧縮符号の長さが示されている。例えば、情報処理装置１００は、高頻度単語に対して、出現頻度の高い順に１〜１６ビットまでの可変長符号を割り当てる。例えば、情報処理装置１００は、分布表２１ｂにおいて、単語数が１〜８０００語までの高頻度単語に対して「0000h」〜「9FFFh」までの領域の圧縮符号を割り当てる。また、情報処理装置１００は、高頻度単語に対して、登録番号を割り当てる。例えば、情報処理装置１００は、８０００語の高頻度単語に対応して、順に登録番号を割り当てる。例えば、情報処理装置１００は、８０００語に対応して「0001h」〜「2000h」を高頻度単語用の登録番号として、静的コードの順に高頻度単語に登録番号を割り当てる。なお、高頻度単語への登録番号の割り当て順序は、これに限定されず、例えば、出現頻度の順としてもよい。高頻度単語の登録番号は、高頻度単語に対して静的に定めるため、以下、「静的番号」とも言う。
【００２９】
また、情報処理装置１００は、対象ファイル１０に出現した順に、低頻度単語に対して、固定長の符号を割り当てる。例えば、情報処理装置１００は、対象ファイル１０に出現した順に、低頻度単語に対して１６ビットの固定長符号を割り当てる。例えば、情報処理装置１００は、低頻度単語に対して、「A000h」〜「FFFFh」までの領域の圧縮符号が割り当てられる。これにより、分布表２１ｂに示されるように、対象ファイル１０に出現した順に、８００１〜３２０００語の低頻度単語に固定長の符号が割り当てられる。分布表２１ａに示す単語数が８００１〜１９００００語の低頻度単語は、出現する頻度が低い。このため、情報処理装置１００は、低頻度単語が出現した場合に動的に固定長の符号が割り当てることにより、割り当てる符号の符号長を短くすることができる。例えば、図２Ｂの例に示されるように、分布表２１ａの「zymosis」の符号長よりも、分布表２１ｂの「zymosis」の符号長の方が短い。また、情報処理装置１００は、低頻度単語に対して、出現した順に登録番号を割り当てる。例えば、情報処理装置１００は、「2001h」以降を低頻度単語用の登録番号として、低頻度単語の出現順に低頻度単語に登録番号を割り当てる。低頻度単語の登録番号は、低頻度単語に対して動的に定めるため、以下、「動的番号」とも言う。
【００３０】
情報処理装置１００は、出現頻度の高い高頻度単語については割り当てた符号長の圧縮符号および静的番号を登録し、低頻度単語については圧縮符号および動的番号を未登録としてビットフィルタ１２１を生成する。また、情報処理装置１００は、全ての高頻度単語の分の第１記憶領域１２３ａを固定で確保し、低頻度単語については、所定個分、追加可能な第２記憶領域１２３ｂを確保した単語ビットマップインデックス１２３を生成する。図２Ｂの例では、第２記憶領域１２３ｂとして、単語がファイルに出現したか否かを後から動的に記録するための２４０００語分の記憶領域が確保されている。
【００３１】
ここで、インデックスについて説明する。例えば、インデックスを従来のようなＮグラム形式として、Ｎグラムの文字毎にファイルに含まれるかを記録するものとすると、インデックスのデータサイズが大幅に大きくなる。図３Ａは、Ｎグラム形式のインデックスの一例を示す図である。図３Ａに示すＮグラム形式のインデックスには、１〜３グラムの文字毎に、各ファイルに文字が出現するか否かが記憶される。例えば、ファイル番号「１」のファイルには、「This  is  a  ball」の英文テキストが含まれる。この場合、Ｎグラム形式のインデックスには、１グラムの「a」や「ｂ」、２グラムの「is」などのレコードのファイル番号「１」に出現したことを示す「１」が記録される。また、ファイル番号「ｎ」のファイルには、「first  cavy  was」の英文テキストが含まれる。この場合、Ｎグラム形式のインデックスには、１グラムの「a」やなどのレコードのファイル番号「ｎ」に出現したことを示す「１」が記録される。ここで、英文テキストの場合、検索ノイズを減らすため、インデックスは、少なくとも３グラム以上の形式とされる。しかし、インデックスをＮグラム形式とした場合、データサイズが大きくなる。また、Ｎグラム形式では、検索ノイズが発生する場合がある。
【００３２】
一方、本実施例では、ファイル毎に、単語が出現するか否かを単語ビットマップインデックス１２３に記録する。図３Ｂは、単語ビットマップインデックスの一例を示す図である。図３Ｂに示す単語ビットマップインデックス１２３には、高頻度単語については、登録番号に、各高頻度単語の静的番号が予め登録されて高頻度単語の分だけ記憶領域が予め確保され、ファイルに高頻度単語が出現するか否か記憶される。また、単語ビットマップインデックス１２３には、低頻度単語については、ファイルに出現した順に、登録番号に、低頻度単語の動的番号が登録されて、ファイルに低頻度が出現するか否か記憶される。例えば、ファイル番号「１」のファイルには「This  is  a  ball」の英文テキストが含まれる。この場合、単語ビットマップインデックス１２３には、高頻度単語「a」のレコードのファイル番号「１」に出現したことを示す「１」が記録される。また、ファイル番号「ｎ」のファイルには、低頻度単語「cavy」を含む「first  cavy  was」の英文テキストが含まれる。この場合、単語ビットマップインデックス１２３には、低頻度単語「cavy」のレコードのファイル番号「１」に出現したことを示す「１」が記録される。
【００３３】
情報処理装置１００は、単語ビットマップインデックス１２３に単語毎にファイルに出現したか否かを記録することにより、検索ノイズの発生を抑制できる。また、情報処理装置１００は、単語ビットマップインデックス１２３に高頻度単語については予めレコードを作成し、高頻度単語については出現した際にレコードを作成することでデータサイズを抑えることができる。
【００３４】
次に、図４を用いて、実施例１のインデックス生成処理にかかるシステム構成について説明する。図４は、実施例１のインデックス生成処理にかかるシステム構成の例を示す図である。図４の例のように、情報処理装置１００は、圧縮部１１０と、記憶部１２０と、検索部１３０とを有する。記憶部１２０は例えば、ＲＡＭ（Random  Access  Memory）、ＲＯＭ（Read  Only  Memory）、フラッシュメモリ（Flash  Memory）などの半導体メモリ素子、ハードディスクや光ディスクなどの記憶装置に対応する。
【００３５】
また、圧縮部１１０および検索部１３０の機能は、例えば、ＣＰＵ（Central  Processing  Unit）が所定のプログラムを実行することで実現することができる。また、圧縮部１１０および検索部１３０の機能は、例えば、ＡＳＩＣ（Application  Specific  Integrated  Circuit）やＦＰＧＡ（Field  Programmable  Gate  Array）などの集積回路により実現することができる。
【００３６】
圧縮部１１０は、圧縮対象のファイルから単語を抽出し、当該単語に符号を付与し、圧縮対象のファイルから抽出された単語毎に、当該単語が抽出された回数を、圧縮対象のファイルを特定する情報に対応付けて記憶部１２０に格納する。圧縮部１１０は、辞書作成部１１１と、ファイルリード部１１２と、登録部１１３と、格納部１１４と、ファイルライト部１１５とを有する。以下、圧縮部１１０の各構成について詳細に説明する。
【００３７】
辞書作成部１１１は、ビットフィルタ１２１および単語ビットマップインデックス１２３を作成する処理部である。辞書作成部１１１は、所定の母集団から辞典に登録された各単語を収集する。例えば、辞書作成部１１１は、母集団とする複数のテキストファイルから約１９万語の単語を収集する。辞書作成部１１１は、収集した各単語の母集団での出現頻度を求め、高頻度単語と低頻度単語を識別する。辞書作成部１１１は、収集した単語のそれぞれを基礎単語として、ビットフィルタ１２１に登録する。辞書作成部１１１は、例えば、登録した基礎単語のそれぞれに３バイトの静的コードを割り当て、ビットフィルタ１２１に登録する。また、辞書作成部１１１は、高頻度単語について、出現頻度の高い順に、短い符号長で圧縮符号を割り当て、ビットフィルタ１２１に符号長、圧縮符号を登録する。また、辞書作成部１１１は、単語ビットマップインデックス１２３を作成する。この単語ビットマップインデックス１２３では、全ての高頻度単語の分の第１記憶領域１２３ａを固定で確保し、低頻度単語については、所定個分、追加可能な第２記憶領域１２３ｂを確保する。
【００３８】
図５Ａおよび５Ｂを用いて、辞書作成部１１１が作成するビットフィルタ１２１について説明する。図５Ａおよび５Ｂは、実施例１のビットフィルタの一例を示す図である。図５Ａおよび５Ｂの例のようにビットフィルタ１２１は、２グラム、ビットマップ、基礎単語へのポインタ、基礎単語、静的コード、動的コード、符号長、圧縮符号、登録番号を有する。登録番号は、静的番号と動的番号に領域が分けられている。
【００３９】
「２グラム」は、各単語に含まれる２グラム文字である。例えば、「able」は、「ab」「bl」「le」に対応する２グラム文字を含む。「ビットマップ」は、２グラム文字が含まれる基礎単語の位置を表す。例えば、２グラム「ab」のビットマップが「１＿０＿０＿０＿０」の場合、ビットマップは基礎単語の先頭２文字が「ab」であることを表す。各ビットマップは、基礎単語へのポインタによってそれぞれ基礎単語に対応付けられる。例えば、２グラム「ab」のビットマップ「１＿０＿０＿０＿０」は、「able」および「about」に対応付けられる。
【００４０】
「基礎単語」は、ビットフィルタ１２１に登録された単語である。例えば、辞書作成部１１１は、母集団から抽出した約１９万語の各単語を、それぞれ基礎単語としてビットフィルタ１２１に登録する。「静的コード」は、各基礎単語に一意に割り当てられる３バイトの単語コードである。「動的コード」は、対象ファイル１０に出現する各低頻度単語に割り当てられる１６ビット（２バイト）の圧縮符号である。「動的コード」には、初期状態は空白とされ、低頻度単語に対して圧縮符号が割り当てられた際に、圧縮符号が格納される。「符号長」は、各基礎単語に割り当てる圧縮符号の長さである。「圧縮符号」は、高頻度単語に割り当てられた圧縮符号である。例えば、「圧縮符号」には、符号長が「6」の高頻度単語の場合、６ビットの圧縮符号が格納される。登録番号は、単語に付される識別情報である。高頻度単語には、静的番号が順に予め割り当てられる。登録番号の静的番号の領域には、割り当てられた静的番号が登録される。低頻度単語には、出現順に動的番号が割り当てられる。登録番号の動的番号の領域には、低頻度単語が出現した際に、割り当てられた動的番号が格納される。例えば、図５Ａに示すビットフィルタ１２１は、低頻度単語「cavy」について動的番号が未登録とされている。ファイルに低頻度単語「cavy」が出現すると、例えば、動的番号「2004h」が割り当てられ、図５Ｂに示すように低頻度単語「cavy」について動的番号「2004h」が格納とされる。なお、図５の例では、各項目のデータがレコードとして関連づけられて記憶されている例を示したが、上記説明において互いに関連づけられた項目どうしの関係が保たれれば、データは他の記憶のされ方をしても構わない。
【００４１】
ファイルリード部１１２は、圧縮を行う対象ファイル１０を読み出し、対象ファイル１０から単語を抽出する処理部である。例えば、英語ように、文章の単語がスペースなどの所定の区切り文字で区切られる場合、ファイルリード部１１２は、対象ファイル１０の文字列を読み出し、文字列中の区切り文字によって文字列を単語毎に区切ることで、文字列から各単語を抽出する。一方、例えば、日本語ように、文章の単語が特定の区切り文字で区切られていない場合、ファイルリード部１１２は、対象ファイル１０の文字列を読み出を行う。そして、ファイルリード部１１２は、読み出した文字列に形態素解析、構文解析など、文章の言語に応じた自然言語処理を行うことで、文字列から各単語を抽出する。ファイルリード部１１２は、抽出した単語を登録部１１３に出力する。
【００４２】
登録部１１３は、対象ファイル１０から抽出された単語の圧縮符号を動的辞書部１２２に登録する処理部である。登録部１１３は、ビットフィルタ１２１において、ファイルリード部１１２が抽出した単語に対応する基礎単語のレコードを参照する。登録部１１３は、ビットフィルタ１２１の「動的コード」に圧縮符号が登録されているか否かに基づいて、ファイルリード部１１２によって抽出された単語の圧縮符号が、動的辞書部１２２に登録されているか否かを判定する。
【００４３】
登録部１１３は、ファイルリード部１１２によって抽出された単語の圧縮符号が、ビットフィルタ１２１に登録されていると判定した場合、格納部１１４に処理を移行させる。
【００４４】
一方、登録部１１３は、ファイルリード部１１２によって抽出された単語の圧縮符号が、ビットフィルタ１２１に登録されていないと判定した場合、抽出された単語に圧縮符号を割り当てる。次いで、登録部１１３は、抽出された単語の登録番号として、新たな動的番号を採番し、動的番号に対応付けて圧縮符号を動的辞書部１２２に登録する。
【００４５】
図６を用いて、動的辞書部１２２への圧縮符号の登録について説明する。図６は、実施例１の動的辞書部のデータ構造の一例を示す図である。図６の例のように、動的辞書部１２２には、符号列１に「aadvark」、符号列２に「aargh」、符号列３に「ancient」が格納されている。登録部１１３は、ファイルリード部１１２によって「cavy」が抽出された場合、符号列４に「cavy」を登録する。登録部１１３は、例えば、符号列４のデータ領域Ａ（４）に、「cavy」の圧縮符号と、動的辞書部１２２の動的番号「2004h」とを対応付けて登録する。なお、動的辞書部１２２には、その他のデータを記憶させてもよい。例えば、動的辞書部１２２には、登録する単語の静的コードを対応させて記憶してもよい。
【００４６】
次いで、登録部１１３は、ビットフィルタ１２１に登録番号を登録する。このように、
単語の登録番号を設定することによって、登録番号により、ビットフィルタ１２１と動的辞書部１２２に登録された符号列とが対応付けられる。また、登録部１１３は、動的辞書部１２２に登録した圧縮符号をビットフィルタ１２１の動的コードに登録する。
【００４７】
格納部１１４は、単語ビットマップインデックス１２３に情報を格納する処理部である。単語ビットマップインデックス１２３は、単語毎に、当該単語が出現したか否かを記憶するインデックスである。単語ビットマップインデックス１２３は、単語毎に各ファイルにおける単語の出現の有無を保持する。格納部１１４は、ファイルリード部１１２によって抽出された単語の静的番号または動的番号の登録番号が単語ビットマップインデックス１２３に登録されているか否かを判定する。
【００４８】
格納部１１４は、登録番号が登録されていると判定した場合、単語ビットマップインデックス１２３に記憶された、抽出された単語の登録番号のレコードの対象ファイル１０に対応するファイル番号に単語が出現したことを記録する。
【００４９】
一方、格納部１１４は、登録番号が登録されていないと判定した場合、単語ビットマップインデックス１２３の第２記憶領域１２３ｂに、抽出された単語の動的番号のレコードを追加し、対象ファイル１０に対応するファイル番号に単語が出現したことを記録する。
【００５０】
図７を用いて、単語ビットマップインデックス１２３の更新について説明する。図７は、実施例１の単語ビットマップインデックスの一例を示す図である。格納部１１４は、単語ビットマップインデックス１２３に「cavy」の動的番号「2004h」が登録されていない場合、「cavy」の動的番号に対応づけてレコードを単語ビットマップインデックス１２３に追加する。そして、格納部１１４は、追加したレコードの「cavy」が抽出されたファイルに対応するファイル番号「３」に単語が出現したことを示す「１」を記録する。
【００５１】
一方、格納部１１４は、単語ビットマップインデックス１２３に「cavy」の動的番号が登録されている場合、「cavy」の動的番号に対応するレコードのファイル番号「３」に単語が出現したことを示す「１」を記録する。
【００５２】
ファイルライト部１１５は、ファイルリード部１１２によって抽出された単語に圧縮符号を割り当て、圧縮符号を圧縮ファイルに書き込む処理部である。ファイルライト部１１５は、ビットフィルタ１２１からファイルリード部１１２によって抽出された単語に対応する圧縮符号を取得する。ファイルライト部１１５は、取得した圧縮符号を圧縮ファイルに出力する。また、ファイルライト部１１５は、各高頻度単語と、当該高頻度単語の母集団での出現頻度を対応付けて圧縮ファイルに出力する。例えば、ファイルライト部１１５は、各高頻度単語と、当該高頻度単語の母集団での出現頻度とを出現頻度の順に圧縮ファイルのヘッダに記録する。また、ファイルライト部１１５は、動的辞書部１２２を圧縮ファイルに出力する。例えば、ファイルライト部１１５は、動的辞書部１２２を圧縮ファイルのフッターに記録する。この圧縮ファイルを復元する場合、低頻度単語については、動的辞書部１２２に基づいて復元される。高頻度単語については、圧縮ファイルに記録された高頻度単語の出現頻度から高頻度単語の圧縮符号を求めて復元される。
【００５３】
検索部１３０は、検索対象の文字列との類似度が高い圧縮対象のファイルを検索する。検索部１３０は、受付部１３１と、取得部１３２と、特定部１３３とを有する。以下、検索部１３０の各構成について詳細に説明する。
【００５４】
受付部１３１は、検索対象の文字列を受け付ける処理部である。受付部１３１は、検索対象の文字列を受け付ける入力インタフェースを提供しており、検索対象の文字列を受け付ける。
【００５５】
取得部１３２は、検索対象の文字列に含まれる単語を含む圧縮ファイルを特定する処理部である。取得部１３２は、ビットフィルタ１２１の静的番号の領域および動的番号の領域を参照して、受付部１３１により受け付けた検索対象の文字列に含まれる単語の登録番号を特定する。取得部１３２は、登録番号が対応するレコードが単語ビットマップインデックス１２３に登録されているか判定する。取得部１３２は、登録番号が対応するレコードが単語ビットマップインデックス１２３に登録されている場合、登録番号が対応するレコードから検索対象の文字列に含まれる単語を含む各圧縮ファイルを取得する。
【００５６】
特定部１３３は、検索対象の文字列を含んだファイルを特定する処理部である。特定部１３３は、取得部１３２の取得結果に基づき、検索対象の文字列との類似度が高い圧縮対象のファイルを特定する。例えば、特定部１３３は、検索対象の文字列に含まれる単語を全て、あるいは、所定個以上、あるいは、所定割合以上含んだファイルを、検索対象の文字列を含んだファイルと特定する。なお、検索対象の文字列を含んだファイルを特定する特定方法は、一例であり、これに限定されるものではない。例えば、検索対象の文字列に含まれる単語と一致する単語数が多いファイルほど類似度の高いファイルとしてランキングしてもよい。
【００５７】
このように、情報処理装置１００は、インデックスを、単語毎に、当該単語がファイルに含まれるかを記録した単語ビットマップインデックス１２３としたことにより、検索ノイズの発生を抑制できる。また、情報処理装置１００は、圧縮対象のファイルから抽出された単語毎に、単語の出現の有無を単語ビットマップインデックス１２３に記録することにより、単語ビットマップインデックス１２３のデータサイズを抑えることができる。また、情報処理装置１００は、単語ビットマップインデックス１２３を用いることで、圧縮されたファイル内を復元して検索することなく、類似度の高いファイルを速やかに検索できる。
【００５８】
次に、図８を用いて実施例１のインデックス生成処理の流れについて説明する。図８は、実施例１のインデックス生成処理の流れの例を示すフロー図である。図８の例のように、圧縮部１１０は、前処理をおこなう（ステップＳ１０）。例えば、圧縮部１１０は、前処理として、動的辞書部１２２に圧縮符号を登録するための記憶領域を確保する。また、辞書作成部１１１は、前処理として、所定の母集団から各単語の出現頻度を求めて高頻度単語と低頻度単語を識別し、単語ビットマップインデックス１２３を生成す。また、辞書作成部１１１は、前処理として、ビットフィルタ１２１を生成する。
【００５９】
ファイルリード部１１２は、対象ファイル１０を読み出し（ステップＳ１１）、対象ファイル１０から単語を抽出する（ステップＳ１２）。登録部１１３は、抽出した単語をビットフィルタ１２１の静的辞書部と照合する（ステップＳ１３）。
【００６０】
格納部１１４は、ビットフィルタ１２１の静的辞書部において、抽出した単語に対応する基礎単語のレコードの動的コードおよび圧縮符号を参照し、圧縮符号が登録済みであるか否かを判定する（ステップＳ１４）。格納部１１４は、基礎単語のレコードに圧縮符号が登録済みの場合（ステップＳ１４Yes）、抽出した単語の静的番号または動的番号の登録番号に対応する単語ビットマップインデックス１２３のレコードに単語が出現したことを記録する（ステップＳ１８）。次いで、格納部１１４は、ステップＳ１９の処理に移行する。
【００６１】
一方、登録部１１３は、基礎単語のレコードに圧縮符号が登録されていない場合（ステップＳ１４No）、単語に圧縮符号および動的番号を割り当て、動的番号に対応付けて圧縮符号を動的辞書部１２２に登録する（ステップＳ１５）。次いで、登録部１１３は、単語の圧縮符号および動的番号をビットフィルタ１２１の静的辞書部に登録する（ステップＳ１６）。格納部１１４は、単語ビットマップインデックス１２３の第２記憶領域１２３ｂに、抽出された単語の動的番号のレコードを追加し、対象ファイル１０に対応するファイル番号に単語がファイルに出現したことを記録する（ステップＳ１７）。
【００６２】
ファイルライト部１１５は、ファイルリード部１１２によって抽出された単語に対応する圧縮符号を圧縮ファイルに書き込む（ステップＳ１９）。
【００６３】
ファイルリード部１１２は、ファイルの終端までファイルを読み込んだか否かを判定する（ステップＳ２０）。ファイルリード部１１２は、ファイルの終端までファイルを読み込んだ場合（ステップＳ２０Yes）、処理を終了させる。一方、ファイルリード部１１２は、ファイルを読み込んだ位置がファイルの終端に至らない場合（ステップＳ２０No）、ステップＳ１２の処理に戻る。
【００６４】
次に、図９を用いて実施例１の検索処理の流れについて説明する。図９は、実施例１の検索処理の流れの例を示すフロー図である。図９の例のように、受付部１３１は、検索対象の文字列を受け付ける（ステップＳ５０）。
【００６５】
取得部１３２は、ビットフィルタ１２１を参照して、検索対象の文字列に含まれる各単語の静的番号または動的番号から登録番号を特定する（ステップＳ５１）。取得部１３２は、登録番号に基づいて、単語ビットマップインデックス１２３から、検索対象の文字列に含まれる単語毎の各圧縮ファイルでの出現の有無を取得する（ステップＳ５２）。特定部１３３は、取得結果に基づき、検索対象の文字列との類似度が高い圧縮対象のファイルを特定し（ステップＳ５３）、処理を終了する。
【００６６】
以上説明したように、情報処理装置１００は、圧縮対象のファイルから単語を抽出し、当該単語に符号を付与する。情報処理装置１００は、圧縮対象のファイルから抽出された単語毎に、単語の出現の有無を圧縮対象のファイルを特定する情報に対応付けて記憶部１２０に格納する。このように、ファイルに含まれる各単語に対応するインデックスを生成することで、情報処理装置１００は、インデックスのデータサイズを抑えつつ、検索ノイズの発生を抑制できる。
【実施例２】
【００６７】
次に、実施例２について説明する。実施例２では、インデックスを各ファイルにおける単語の出現回数の情報を保持するカウントマップ型インデックスとし、単語および類似語毎に出現回数を記録する場合について説明する。
【００６８】
図１０は、実施例２のインデックスを生成する処理の流れを示す図である。図１０に示す処理の流れは、図１と一部同様であるため、主に異なる部分について説明する。図１０には、圧縮を行う対象ファイル１０に含まれる文章「first  cavy  was・・・」についてのインデックスを生成する例が示されている。情報処理装置１００は、対象ファイル１０に含まれる文書から単語単位に、それぞれの単語を取得する。図１０の例では、「first」、「cavy」、「was」を取得する。情報処理装置１００は、取得した単語をビットフィルタ１２１と照合する。そして、情報処理装置１００は、照合した単語が対象ファイル１０に含まれていた回数をカウントマップインデックス１２５に記録する。
【００６９】
カウントマップインデックス１２５は、ファイル毎に、単語が出現した回数を記憶したインデックスである。カウントマップインデックス１２５には、高頻度単語がファイルに出現した回数を記憶する第１記憶領域１２５ａと、低頻度単語がファイルに出現した回数を記憶する第２記憶領域１２５ｂとが設けられている。また、カウントマップインデックス１２５には、出現した単語に関する類似語がファイルに出現した回数を記憶する第３記憶領域１２５ｃが設けられている。第１記憶領域１２５ａは、各高頻度単語が対象ファイル１０に出現した回数か否かを記憶するため、予め設けられる。すなわち、第１記憶領域１２５ａは、高頻度単語の分だけ記憶領域が予め確保される。例えば、図１０の例では、第１記憶領域１２５ａに、ｎ個のファイルに、それぞれの高頻度単語が出現した回数を記憶するカウンタが予め設けられている。第２記憶領域１２５ｂは、対象ファイル１０に低頻度単語が出現した際に、出現した低頻度単語がファイルに出現した回数を記憶するカウンタが追加で設けられる。すなわち、第２記憶領域１２５ｂは、対象ファイル１０に新たな低頻度単語が出現する毎に、記憶領域が確保される。第３記憶領域１２５ｃは、類似語の種類毎に、対象ファイル１０に出現した回数を記憶するため、予め設けられる。すなわち、第３記憶領域１２５ｃは、類似語の種類の数だけ記憶領域が予め確保される。
【００７０】
情報処理装置１００は、照合した単語が高頻度単語である場合、照合した単語の出現回数を第１記憶領域１２５ａに記録し、照合した単語が低頻度単語である場合、照合した単語の出現回数を第２記憶領域１２５ｂに記録する。また、情報処理装置１００は、照合した単語が含まれる類似語の種類がある場合、照合した単語を含んだ類似語の種類での出現回数を第３記憶領域１２５ｃに記録する。
【００７１】
次に、図１１を用いて、実施例２のインデックス生成処理にかかるシステム構成について説明する。図１１は、実施例２のインデックス生成処理にかかるシステム構成の例を示す図である。図１１に示す情報処理装置１００は、図４と一部同様であるため、主に異なる部分について説明する。
【００７２】
記憶部１２０は、類語データベース１２４をさらに記憶する。類語データベース１２４は、類似する単語に関する情報を記憶したデータである。例えば、類語データベース１２４には、類似する単語の群毎に、類似する単語が登録されている。
【００７３】
図１２を用いて、類語データベース１２４について説明する。図１２は、実施例２の類語データベースのデータ構造の一例を示す図である。図１２の例のように類語データベース１２４は、類語番号、類似単語を有する。「類語番号」は、類似語の種類を識別するために定められた識別情報である。類語番号には、静的番号および動的番号と重複しないように付与されたコードが格納される。「類似単語」は、互いに類似する単語である。類似単語には、例えば、シソーラスを基に、類似する複数の単語が格納される。例えば、シソーラスには、類似語として約１６００種類がある。図１２の例では、類語データベース１２４には、類語番号「F00011h」に対応付けて、「mouse」、「rat」、「cavy」、・・・が登録されている。
【００７４】
辞書作成部１１１は、ビットフィルタ１２１およびカウントマップインデックス１２５を作成する処理部である。辞書作成部１１１は、所定の母集団から辞書に登録された各単語を収集する。辞書作成部１１１は、収集した各単語の母集団での出現頻度を求め、高頻度単語と低頻度単語を識別する。辞書作成部１１１は、収集した単語のそれぞれを基礎単語として、ビットフィルタ１２１に登録する。辞書作成部１１１は、例えば、登録した基礎単語のそれぞれに３バイトの静的コードを割り当て、ビットフィルタ１２１に登録する。また、辞書作成部１１１は、高頻度単語について、出現頻度の高い順に、短い符号長で圧縮符号を割り当て、ビットフィルタ１２１に符号長、圧縮符号を登録する。また、辞書作成部１１１は、高頻度単語が類語データベース１２４に登録されている場合、高頻度単語を含んだ類似語の種類の類語番号をビットフィルタ１２１に登録する。また、辞書作成部１１１は、カウントマップインデックス１２５を作成する。このカウントマップインデックス１２５では、全ての高頻度単語の分の第１記憶領域１２５ａを固定で確保し、低頻度単語については、所定個分、追加可能な第２記憶領域１２５ｂを確保し、類似語の種類の数分の第３記憶領域１２５ｃを固定で確保する。
【００７５】
図１３Ａおよび図１３Ｂは、実施例２のビットフィルタの一例を示す図である。図１３Ａおよび図１３Ｂに示すビットフィルタ１２１は、図５と一部同様であるため、主に異なる部分について説明する。ビットフィルタ１２１は、類似種別をさらに有する。「類似種別」は、類似語の種類である。類似種別には、単語に類似語がある場合、単語が属する類似語の種類を示す類似情報が格納される。例えば、図１３Ａに示すビットフィルタ１２１は、類似語を有する低頻度単語「cavy」について、登録番号に動的番号が未登録とされ、類似種別も未登録とされている。ファイルに低頻度単語「cavy」が出現すると、例えば、動的番号「2004h」が割り当てられ、図１３Ｂに示すように低頻度単語「cavy」について登録番号に動的番号「2004h」が格納とされ、類似種別に類語番号「F00011h」が格納されている。
【００７６】
格納部１１４は、カウントマップインデックス１２５に情報を格納する処理部である。カウントマップインデックス１２５は、単語毎に、当該単語の出現回数を記憶するインデックスである。カウントマップインデックス１２５は、単語毎に各ファイルにおける単語の出現回数を保持する。格納部１１４は、ファイルリード部１１２によって抽出された単語の静的番号または動的番号の登録番号がカウントマップインデックス１２５の第１記憶領域１２５ａまたは第２記憶領域１２５ｂに登録されているか否かを判定する。
【００７７】
格納部１１４は、登録番号が登録されていると判定した場合、カウントマップインデックス１２５に記憶された、抽出された単語の登録番号のレコードの対象ファイル１０に対応するファイル番号に単語の出現回数を記録する。
【００７８】
一方、格納部１１４は、登録番号が登録されていないと判定した場合、カウントマップインデックス１２５の第２記憶領域１２５ｂに、抽出された単語の動的番号のレコードを追加する。そして、格納部１１４は、追加したレコードの対象ファイル１０に対応するファイル番号に単語の出現回数を記録する。
【００７９】
また、格納部１１４は、ファイルリード部１１２によって抽出された単語の類語番号がカウントマップインデックス１２５の第３記憶領域１２５ｃに登録されているか否かを判定する。
【００８０】
格納部１１４は、類語番号が登録されていると判定した場合、カウントマップインデックス１２５に記憶された、抽出された単語の類語番号のレコードの対象ファイル１０に対応するファイル番号に類似語の出現回数を記録する。
【００８１】
一方、格納部１１４は、類語番号が登録されていないと判定した場合、カウントマップインデックス１２５の第３記憶領域１２５ｃに、抽出された単語の類語番号のレコードを追加する。そして、格納部１１４は、追加したレコードの対象ファイル１０に対応するファイル番号に類似語の出現回数を記録する。
【００８２】
図１４を用いて、カウントマップインデックス１２５の更新について説明する。例えば、ファイル番号「３」に対応するファイルで単語「cavy」が抽出された場合、格納部１１４は、第２記憶領域１２５ｂに「cavy」の動的番号に対応するレコードが存在するため、当該レコードのファイル番号「３」に単語の出現回数を記録する。
【００８３】
格納部１１４は、カウントマップインデックス１２５の第３記憶領域１２５ｃに「cavy」の類語番号が登録されてない場合、カウントマップインデックス１２５の第３記憶領域１２５ｃに、「cavy」の類語番号「F00011h」に対応づけてレコードを追加する。そして、格納部１１４は、ファイル番号「３」に単語の出現回数を記録する。
【００８４】
一方、格納部１１４は、カウントマップインデックス１２５の第３記憶領域１２５ｃに「cavy」の類語番号が登録されている場合、「cavy」の類語番号に対応するレコードのファイル番号「３」に類似語の出現回数を記録する。
【００８５】
なお、図１４に示すカウントマップインデックス１２５では、出現回数を記録するカウンタを４ビットとしているが、カウンタのビット数はこれに限定されるものではない。また、カウンタには、離散的に出現回数を対応させてもよい。例えば、格納部１１４は、カウンタの値「１」に対して、出現回数「１」、カウンタの値「２」に対して、出現回数「３」、カウンタの値「３」に対して、出現回数「７」などと、カウンタの値に対して指数的に出現回数を対応させて記録してもよい。
【００８６】
取得部１３２は、ビットフィルタ１２１の静的番号の領域および動的番号の領域を参照して、受付部１３１により受け付けた検索対象の文字列に含まれる単語の登録番号を特定する。また、取得部１３２は、ビットフィルタ１２１の類似種別の領域を参照して、受付部１３１により受け付けた検索対象の文字列に含まれる単語の類語番号を特定する。そして、取得部１３２は、カウントマップインデックス１２５の登録番号が対応するレコードから各圧縮ファイルでの単語の出現回数を、単語が抽出された回数として取得する。また、取得部１３２は、カウントマップインデックス１２５の類語番号が対応するレコードから各圧縮ファイルでの類似語の出現回数を、単語が属する類語情報が抽出された回数として取得する。
【００８７】
特定部１３３は、検索対象の文字列と類似度の高い文字列を含んだファイルを特定する処理部である。特定部１３３は、取得部１３２により取得された単語が抽出された回数および類語情報が抽出された回数に基づいて、検索対象の文字列との類似度が高い圧縮対象のファイルを特定する。例えば、特定部１３３は、ファイル毎に、単語が抽出された回数および類似語の出現回数を重み付け演算してスコアを算出する。例えば、特定部１３３は、単語が抽出された回数に対して大きい重み値を乗算し、類似語の出現回数に対して小さい重み値を乗算し、乗算結果を全て加算してスコアを算出する。このスコアは、単語が抽出された回数、類似語が抽出された回数が多いほど値が大きくなる。特定部１３３は、スコアに基づいて、検索対象の文字列と類似度の高い文字列を含んだファイルを特定する。例えば、特定部１３３は、スコアが上位所定位以上、あるいは、スコアが所定のしきい値以上のファイルを、類似度の高いファイルと特定する。特定部１３３は、特定したファイルを検索結果として出力する。なお、上記のスコアの算出方法は、一例であり、これに限定されるものではない。単語が抽出された回数、類似語が抽出された回数が多いファイルほどスコアを高く算出できれば、何れの算出方法を用いてもよい。
【００８８】
このように、情報処理装置１００は、インデックスを、単語毎に、当該単語がファイルに含まれるかを記録したカウントマップインデックス１２５としたことにより、検索ノイズの発生を抑制できる。また、情報処理装置１００は、圧縮対象のファイルから抽出された単語毎に、単語が抽出された回数、類似語が抽出された回数をカウントマップインデックス１２５に記録することにより、カウントマップインデックス１２５のデータサイズを抑えることができる。また、情報処理装置１００は、単語ビットマップインデックス１２３を用いることで、圧縮されたファイル内を復元して検索することなく、類似度の高いファイルを速やかに検索できる。
【００８９】
次に、図１５を用いて実施例２のインデックス生成処理の流れについて説明する。図１５は、実施例２のインデックス生成処理の流れの例を示すフロー図である。図１５に示すインデックス生成処理は、図８と一部同様であるため、主に異なる部分について説明する。
【００９０】
図１５の例のように、格納部１１４は、基礎単語のレコードに圧縮符号が登録済みの場合（ステップＳ１４Yes）、抽出した単語の静的番号または動的番号の登録番号に対応するレコードに単語の出現回数を記録する（ステップＳ３０）。次いで、格納部１１４は、ステップＳ３２の処理に移行する。
【００９１】
一方、ステップＳ１６の後、格納部１１４は、単語ビットマップインデックス１２３の第２記憶領域１２５ｂに抽出された単語の動的番号のレコードを追加し、対象ファイル１０に対応するファイル番号に単語の出現回数を記録する（ステップＳ３１）。次いで、格納部１１４は、ステップＳ３２の処理に移行する。
【００９２】
格納部１１４は、ファイルリード部１１２によって抽出された単語の類語番号がカウントマップインデックス１２５の第３記憶領域１２５ｃに登録されているか否かを判定する（ステップＳ３２）。
【００９３】
格納部１１４は、抽出された単語の類語番号が登録されている場合（ステップＳ３２Yes）、抽出された単語の類語番号のレコードの対象ファイル１０に対応するファイル番号に類似語の出現回数を記録する（ステップＳ３３）。次いで、格納部１１４は、ステップＳ１９の処理に移行する。
【００９４】
一方、格納部１１４は、抽出された単語の類語番号が登録されていないと判定した場合（ステップＳ３２No）、第３記憶領域１２５ｃに抽出された単語の類語番号のレコードを追加する。そして、格納部１１４は、対象ファイル１０に対応するファイル番号に類似語の出現回数を記録する（ステップＳ３４）。次いで、格納部１１４は、ステップＳ１９の処理に移行する。
【００９５】
次に、図１６を用いて実施例２の検索処理の流れについて説明する。図１６は、実施例２の検索処理の流れの例を示すフロー図である。図１６に示す検索処理は、図９と一部同様であるため、主に異なる部分について説明する。
【００９６】
取得部１３２は、ビットフィルタ１２１を参照して、検索対象の文字列に含まれる単語の登録番号および類語番号を特定する（ステップＳ５５）。取得部１３２は、登録番号および類語番号に基づいて、カウントマップインデックス１２５から、各圧縮ファイルでの単語の出現回数、類似語の出現回数を取得する（ステップＳ５６）。特定部１３３は、ファイル毎に、単語の出現回数、類似語の出現回数を重み付け演算してスコアを算出する（ステップＳ５７）。特定部１３３は、スコアに基づいて、検索対象の文字列と類似度の高い文字列を含んだファイルを特定し（ステップＳ５８）、処理を終了する。
【００９７】
以上説明したように、情報処理装置１００は、圧縮対象のファイルから単語を抽出し、当該単語に符号を付与する。情報処理装置１００は、圧縮対象のファイルから抽出された単語毎に、単語の出現回数を圧縮対象のファイルを特定する情報に対応付けて記憶部１２０に格納する。このように、ファイルに含まれる各単語に対応するインデックスを生成することで、辞典に登録されている全ての単語に対応するインデックスを生成する場合に比べ、インデックスの容量を小さくすることができる。また、検索対象の文字列との関連度が高いファイルを検索するときに、インデックスから各単語の出現回数を取得することで、検索時間を短縮することができる。
【００９８】
また、情報処理装置１００は、圧縮対象のファイルから抽出された単語が属する類語情報毎に、当該類語情報に対応する単語が抽出された回数を、圧縮対象のファイルを特定する他の情報に対応付けて記憶部１２０に格納する。これにより、情報処理装置１００は、検索対象の文字列と類似語を含んで関連度が高いファイルを検索するときに、インデックスから各単語の類似語の出現回数を取得することで、検索時間を短縮することができる。
【００９９】
また、情報処理装置１００は、単語と類語情報とをそれぞれ対応付ける類語データベース１２４を用いて、単語が属する類語情報を特定する。これにより、情報処理装置１００は、類語データベース１２４から単語が属する類語情報を速やかに特定できる。
【０１００】
また、情報処理装置１００は、圧縮対象のファイルから抽出された単語毎に、当該単語が抽出された回数を対応付けた圧縮対象のファイルを特定する情報から、検索対象の文字列に含まれる単語が抽出された回数を圧縮対象のファイル毎に取得する。情報処理装置１００は、圧縮対象のファイル毎に取得された単語が抽出された回数に基づいて、検索対象の文字列との類似度が高い圧縮対象のファイルを検索する。これにより、情報処理装置１００は、検索対象の文字列との類似度が高い圧縮対象のファイルを速やかに検索できる。
【０１０１】
また、情報処理装置１００は、圧縮対象のファイルから抽出された単語が属する類語情報毎に、当該類語情報に対応する単語が抽出された回数を対応付けた圧縮対象のファイルを特定する他の情報から、検索対象の文字列に含まれる単語が属する類語情報が抽出された回数を取得する。情報処理装置１００は、圧縮対象のファイル毎に取得した単語が抽出された回数および類語情報が抽出された回数に基づいて、検索対象の文字列との類似度が高い圧縮対象のファイルを検索する。これにより、情報処理装置１００は、類似語を考慮して、検索対象の文字列との類似度が高い圧縮対象のファイルを速やかに検索できる。
【実施例３】
【０１０２】
さて、これまで開示の装置に関する実施例について説明したが、開示の技術は上述した実施例以外にも、種々の異なる形態にて実施されてよいものである。そこで、以下では、本発明に含まれる他の実施例を説明する。
【０１０３】
例えば、上記の実施例では、複数のテキストファイルを含む母集団から基礎単語を収集したが、これに限定されない。一つのテキストファイルから基礎単語を収集してもよい。
【０１０４】
また、上記の実施例では、低頻度単語に対して１６ビットの固定長の圧縮符号を割り当てる旨を説明したが、これに限定されない。低頻度単語に対して１６ビット以外のビット数を割り当ててもよい。
【０１０５】
また、上記の実施例では、８０００位以上の単語に可変長符号を割り当て、８０００位以下の単語に固定長符号を割り当てたが、これに限定されない。８０００位以外の順位を境界にして可変長符号または固定長符号を単語に割り当ててもよい。
【０１０６】
また、圧縮処理の対象は、ファイル内のデータ以外にも、システムから出力される監視メッセージなどでもよい。例えば、バッファに順次格納される監視メッセージを上述の圧縮処理により圧縮し、ログファイルとして格納するなどの処理が行なわれる。また、例えば、データベース内のページ単位に圧縮が行なわれてもよいし、複数のページをまとめた単位で圧縮が行なわれてもよい。
【０１０７】
また、上記の実施例では、インデックスに、ファイル単位に、単語の出現の有無または単語の出現回数を格納したが、これに限定されない。例えば、インデックスは、ファイルの文章の章単位や、段落単位、所定のデータサイズに分けたブロック単位など、所定単位に単語の出現の有無または単語の出現回数を記憶してもよい。格納部１１４は、インデックスに、ファイルの区分けした所定単位に、単語の出現の有無または単語の出現回数を格納してもよい。また、取得部１３２は、このように所定単位に単語の出現回数を格納したインデックスからから、検索対象の文字列に含まれる単語が抽出された回数をファイル毎に取得してもよい。
【０１０８】
また、上記の実施例に示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
【０１０９】
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的状態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。例えば、辞書作成部１１１、ファイルリード部１１２、登録部１１３、格納部１１４、ファイルライト部１１５、受付部１３１、取得部１３２および特定部１３３の各処理部が適宜統合されてもよい。また、各処理部の処理が適宜複数の処理部の処理に分離されてもよい。さらに、各処理部にて行なわれる各処理機能は、その全部または任意の一部が、ＣＰＵおよび該ＣＰＵにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
【０１１０】
図１７は、情報処理装置のハードウェア構成を示す図である。図１７に示すように、コンピュータ２００は、各種演算処理を実行するＣＰＵ２０１と、ユーザからのデータ入力を受け付ける入力装置２０２と、モニタ２０３とを有する。また、コンピュータ２００は、記憶媒体からプログラム等を読み取る媒体読取装置２０４と、他の装置と接続するためのインターフェース装置２０５と、他の装置と無線により接続するための無線通信装置２０６とを有する。また、コンピュータ２００は、各種情報を一時記憶するＲＡＭ（Random  Access  Memory）２０７と、ハードディスク装置２０８とを有する。また、各装置２０１〜２０８は、バス２０９に接続される。
【０１１１】
ハードディスク装置２０８には、例えば、圧縮部１１０の辞書作成部１１１、ファイルリード部１１２、登録部１１３、格納部１１４およびファイルライト部１１５の各処理部と同様の機能を有する情報処理プログラムが記憶される。また、ハードディスク装置２０８には、例えば図４および図１１に示した検索部１３０の受付部１３１、取得部１３２および特定部１３３の各処理部と同様の機能を有する情報処理プログラムが記憶される。また、ハードディスク装置２０８には、情報処理プログラムを実現するための各種データが記憶される。
【０１１２】
ＣＰＵ２０１は、ハードディスク装置２０８に記憶された各プログラムを読み出して、ＲＡＭ２０７に展開して実行することで各種の処理を行う。これらのプログラムは、コンピュータ２００を、例えば、辞書作成部１１１、ファイルリード部１１２、登録部１１３、格納部１１４およびファイルライト部１１５として機能させることができる。さらに、これらのプログラムは、コンピュータ２００を、受付部１３１、取得部１３２および特定部１３３として機能させることができる。
【０１１３】
なお、上記の情報処理プログラムは、必ずしもハードディスク装置２０８に記憶されている必要はない。例えば、コンピュータ２００が読み取り可能な記憶媒体に記憶されたプログラムを、コンピュータ２００が読み出して実行するようにしてもよい。コンピュータ２００が読み取り可能な記憶媒体は、例えば、ＣＤ−ＲＯＭやＤＶＤディスク、ＵＳＢ（Universal  Serial  Bus）メモリ等の可搬型記録媒体、フラッシュメモリ等の半導体メモリ、ハードディスクドライブ等が対応する。また、公衆回線、インターネット、ＬＡＮ（Local  Area  Network）等に接続された装置にこのプログラムを記憶させておき、コンピュータ２００がこれらからプログラムを読み出して実行するようにしてもよい。
【符号の説明】
【０１１４】
１０    対象ファイル
１００  情報処理装置
１１０  圧縮部
１１１  辞書作成部
１１２  ファイルリード部
１１３  登録部
１１４  格納部
１１５  ファイルライト部
１２０  記憶部
１２１  ビットフィルタ
１２２  動的辞書部
１２３  単語ビットマップインデックス
１２３ａ  第１記憶領域
１２３ｂ  第２記憶領域
１２４  類語データベース
１２５  カウントマップインデックス
１２５ａ  第１記憶領域
１２５ｂ  第２記憶領域
１２５ｃ  第３記憶領域
１３０  検索部
１３１  受付部
１３２  取得部
１３３  特定部
【図１】
0006543922.tif 000002
【図２Ａ】
0006543922.tif 000003
【図２Ｂ】
0006543922.tif 000004
【図３Ａ】
0006543922.tif 000005
【図３Ｂ】
0006543922.tif 000006
【図４】
0006543922.tif 000007
【図５Ａ】
0006543922.tif 000008
【図５Ｂ】
0006543922.tif 000009
【図６】
0006543922.tif 000010
【図７】
0006543922.tif 000011
【図８】
0006543922.tif 000012
【図９】
0006543922.tif 000013
【図１０】
0006543922.tif 000014
【図１１】
0006543922.tif 000015
【図１２】
0006543922.tif 000016
【図１３Ａ】
0006543922.tif 000017
【図１３Ｂ】
0006543922.tif 000018
【図１４】
0006543922.tif 000019
【図１５】
0006543922.tif 000020
【図１６】
0006543922.tif 000021
【図１７】
0006543922.tif 000022