(57)【要約】  圧縮装置の圧縮部４０は、圧縮対象ファイル３０から単語を抽出する。圧縮部４０は、抽出された単語ごとに出現回数を計数する。圧縮部４０は、出現回数が複数ビットで表現されたビット列を、単語およびファイルに対応付けてインデックス３４に登録する。圧縮部４０は、単語およびファイルに対応付けてインデックス３４に登録された複数のビット列のうち、第１のビット列と第２のビット列に含まれるビットをそれぞれビット列内で異なる順に並び替える。圧縮部４０は、ビットが並べ替えられたインデックス３４を互いに異なる関数を用いて圧縮する。
2017009958.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに、
処理対象のファイルから単語を抽出し、
抽出された単語ごとに出現回数を計数し、
前記出現回数が複数ビットで表現されたビット列を、単語およびファイルに対応付けてインデックスに登録し、
単語およびファイルに対応付けて前記インデックスに登録された複数のビット列のうち、第１のビット列と第２のビット列に含まれるビットをそれぞれビット列内で異なる順に並び替え、
前記ビットが並べ替えられたインデックスを互いに異なる関数を用いて圧縮する
処理を実行させることを特徴とする圧縮プログラム。
【請求項２】
前記並べ替える処理は、複数の単語間で異なる所定ビット数を用いて、前記ビット列の各ビットを回転させることでビットを並べ替える
ことを特徴とする請求項１に記載の圧縮プログラム。
【請求項３】
前記インデックスは、抽出された単語に類似する単語も登録されるものであり、
前記並べ替える処理は、互いに類似する複数の単語間で異なる所定ビット数を用いて、前記ビット列の各ビットを回転させることでビットを並べ替える
ことを特徴とする請求項１または２に記載の圧縮プログラム。
【請求項４】
コンピュータが、
処理対象のファイルから単語を抽出し、
抽出された単語ごとに出現回数を計数し、
前記出現回数が複数ビットで表現されたビット列を、単語およびファイルに対応付けてインデックスに登録し、
単語およびファイルに対応付けて前記インデックスに登録された複数のビット列のうち、第１のビット列と第２のビット列に含まれるビットをそれぞれビット列内で異なる順に並び替え、
前記ビットが並べ替えられたインデックスを互いに異なる関数を用いて圧縮する
処理を実行することを特徴とする圧縮方法。
【請求項５】
処理対象のファイルから単語を抽出する抽出部と、
前記抽出部により抽出された単語ごとに出現回数を計数する計数部と、
前記計数部により計数された前記出現回数が複数ビットで表現されたビット列を、単語およびファイルに対応付けてインデックスに登録する登録部と、
単語およびファイルに対応付けて前記インデックスに登録された複数のビット列のうち、第１のビット列と第２のビット列に含まれるビットをそれぞれビット列内で異なる順に並び替える入替部と、
前記入替部により前記ビットが並べ替えられたインデックスを互いに異なる関数を用いて圧縮する圧縮部と
を有することを特徴とする圧縮装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、圧縮プログラム、圧縮方法および圧縮装置に関する。
【背景技術】
【０００２】
複数のファイルから検索対象の文字列との関連度が高いファイルを検索する技術がある。かかる技術では、インデックスを用いて検索対象の文字列中の単語を含むファイルを特定する。そして、特定されたファイル内を検索して検索対象の文字列中の単語の出現回数を求め、出現頻度に基づいて関連度が高いファイルを特定する。インデックスとは、各単語が含まれるファイルを示したデータである。例えば、インデックスは、単語およびファイルに１つのビットが対応付けられており、ビットの値により、当該ビットに対応付けられたファイルが単語を含むか否かを記憶する。【０００３】
インデックスは、単語ごとに、ファイルに対して１ビットを対応させた場合、ファイル数が多くなると、データサイズが大きくなる。そこで、互いに異なる関数を用いて、複数のビットを１つのビットに対応付けることにより、インデックスのデータサイズを小さく圧縮する技術が存在する。例えば、インデックスの単語ごとの各ファイルに対応付けたビット配列Ａを、互いに異なる２つのハッシュ関数を用いて複数のビットを１つのビットに対応付けることにより、ビット配列Ｘとビット配列Ｙに変換する。ビット配列Ｘとビット配列Ｙは、互いに異なるハッシュ関数を用いて変換されている。このため、例えば、ビット配列Ｘにおいて同じビットに対応付けられた複数のファイルがビット配列Ｙでは異なるビットに対応付けられる。これにより、ビット配列Ｘおよびビット配列Ｙでファイルに対応付けられたビットが単語を含むことを示す場合、ファイルは、単語を含むと特定する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】国際公開第２０１３／１７５５３７号
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかし、テキストマイニングの分野において、従来技術では、単語や関連する類語の出現回数を集計し、それをもとにスコア演算を行う必要がある。このように、従来の技術では、インデックスにより単語を含むと特定されたファイル内の単語の出現回数を集計するため、処理に時間がかかる場合がある。【０００６】
そこで、インデックスを各ファイルにおける単語の出現回数の情報を保持するカウントマップ型のインデックスとする案も考えられる。例えば、テキストファイルの文字列の各単語に符号を割当てて圧縮するのと並行して、インデックスに、単語およびファイルに対応付けて、出現回数をそれぞれ複数ビットで記憶させる。このように、単語およびファイルに対してそれぞれ複数ビットを対応付けた場合、インデックスのデータサイズが大きくなる。そこで、従来技術のように、互いに異なる関数を用いてインデックスのデータサイズを小さく圧縮する案も考えられる。ビットマップ型インデックスと同様に、出現回数を複数ビットで記憶させたカウントマップ型のインデックスも、ハッシュ関数でのビットの衝突が発生しやすいため、圧縮したデータを復元した際にノイズが多く発生する場合がある。【０００７】
一つの側面では、復元した際にノイズの発生を抑えてインデックスを圧縮できる圧縮プログラム、圧縮方法および圧縮装置を提供することを目的とする。
【課題を解決するための手段】
【０００８】
第１の案では、圧縮プログラムは、コンピュータに、処理対象のファイルから単語を抽出する処理を実行させる。圧縮プログラムは、コンピュータに、抽出された単語ごとに出現回数を計数する処理を実行させる。圧縮プログラムは、コンピュータに、出現回数が複数ビットで表現されたビット列を、単語およびファイルに対応付けてインデックスに登録する処理を実行させる。圧縮プログラムは、コンピュータに、単語およびファイルに対応付けてインデックスに登録された複数のビット列のうち、第１のビット列と第２のビット列に含まれるビットをそれぞれビット列内で異なる順に並び替える処理を実行させる。圧縮プログラムは、コンピュータに、ビットが並べ替えられたインデックスを互いに異なる関数を用いて圧縮する処理を実行させる。
【発明の効果】
【０００９】
本発明の１実施態様によれば、インデックスのデータサイズを抑えることができるという効果を奏する。
【図面の簡単な説明】
【００１０】
【図１】図１は、ファイルを圧縮する圧縮処理の流れを概略的に示した図である。
【図２】図２は、ビット列のビットごとの「０」と「１」の頻度の偏りを説明する図である。
【図３】図３は、インデックスの圧縮の一例を示す図である。
【図４】図４は、ビット列の各ビットの並べ替えを説明する図である。
【図５】図５は、圧縮装置の構成の一例を示す図である。
【図６】図６は、類語データベースのデータ構造の一例を示す図である。
【図７】図７は、静的辞書の一例を示す図である。
【図８】図８は、動的辞書のデータ構造の一例を示す図である。
【図９】図９は、インデックスのデータ構造の一例を示す図である。
【図１０】図１０は、インデックスに出現回数を登録する流れを概略的に示した図である。
【図１１】図１１は、圧縮処理の手順の一例を示すフローチャートである。
【図１２】図１２は、インデックスのデータ構造の他の一例を示す図である。
【図１３】図１３は、圧縮プログラムを実行するコンピュータの一例を示す図である。
【発明を実施するための形態】
【００１１】
以下に、本願の開示する圧縮プログラム、圧縮方法および圧縮装置の実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの権利範囲が限定されるものではない。各実施例は、処理内容を矛盾させない範囲で適宜組み合わせることが可能である。
【実施例１】
【００１２】
［インデックス生成］
最初に、図１を用いて、実施例１に係る圧縮装置１０がインデックスを生成する処理について説明する。圧縮装置１０は、ファイルを圧縮する際に、インデックス３４を生成する処理を行う。図１は、ファイルを圧縮する圧縮処理の流れを概略的に示した図である。図１には、圧縮を行う圧縮対象ファイル３０に含まれる文章「・・・this  is  a  ball・・・」を圧縮し、インデックス３４を生成する例が示されている。圧縮装置１０の圧縮部４０は、圧縮対象ファイル３０に含まれる文書から単語単位に、それぞれの単語を抽出する（図１（１））。図１の例では、「this」、「is」、「a」、「ball」を抽出する。そして、圧縮部４０は、単語の単位に圧縮符号を割り当て、圧縮対象ファイル３０に含まれる文書を圧縮する（図１（２））。また、圧縮部４０は、圧縮対象ファイル３０に含まれる文書に含まれる単語ごとに出現回数を計数し、出現回数をインデックス３４に登録する（図１（３））。【００１３】
インデックス３４は、各ファイルにおける単語の出現回数の情報を保持したデータである。例えば、インデックス３４は、単語およびファイルに対応付けて、複数ビットのビット列が設けられ、単語およびファイルに対応付けて、ビット列に出現回数を記憶する。例えば、圧縮対象ファイル３０には、それぞれ順にファイル番号が対応付けられる。図１の例では、インデックス３４は、単語およびファイル番号ごとに、それぞれ４ビットのビット列が対応付けられており、出現した単語の出現回数を４ビットで表現したビット列を記憶する。図１の例では、出現回数を記録するビット列を４ビットとしているが、ビット列のビット数はこれに限定されるものではない。また、ビット列には、離散的に出現回数を対応させてもよい。例えば、ビット列には、出現回数「０」に対して「0000」、出現回数「１」に対して「0001」、出現回数「４」に対して「0010」、出現回数「８」に対して「0011」などと、ビット列の値に対して指数的に出現回数を対応させて登録してもよい。インデックス３４は、単語およびファイルに対応付けて、複数ビットのビット列を設けた場合、データサイズが大きくなる。また、圧縮対象ファイル３０に含まれる文章によって出現する単語は、偏りがあり、出現回数にも偏りがある。例えば、多くの単語は、出現しないため、出現回数が０となる。また、出現した単語も多くは、出現回数が少ない。このため、出現回数を登録した４ビットのビット列には、ビットごとに「０」と「１」の頻度に偏りがある。【００１４】
そこで、圧縮部４０は、インデックス３４の単語およびファイルに対応付けて設けられた各ビット列に含まれるビットを当該ビット列内で並べ替える（図１（４））。例えば、圧縮部４０は、複数の単語間で異なる所定ビット数を用いて、ビット列の各ビットを回転させることでビットを並べ替える。例えば、圧縮部４０は、単語ごとに、ビットを回転させる回転ビット数を０〜３の中で順に変えて、単語ごとに各ファイルの出現回数が登録されたビット列の各ビットを当該ビット列内で回転ビット数だけローテーションさせてビットを並べ替える。ローテーションでは、ビット列内で各ビットを上位側へ移動させ、ビット列内の最上位のビットをビット列内の最下位のビットへ移動させる。図１の例では、単語「is」は、ビット列の各ビットを１ビット、ローテーションさせている。このため、単語「is」では、ファイル番号「１」のビット列「0011」が「0110」へと変化し、ファイル番号「３」のビット列「0101」が「1010」へと変化し、ファイル番号「α」のビット列「0001」が「0010」へと変化している。また、図１の例では、単語「this」は、ビット列の各ビットを３ビット、ローテーションさせている。このため、単語「this」では、ファイル番号「１」のビット列「0011」が「1001」へと変化し、ファイル番号「２」、「α」のビット列「0001」が「1000」へと変化し、ファイル番号「３」のビット列「0100」が「0010」へと変化している。これにより、インデックス３４は、ビット列のビットごとの「０」と「１」の偏りが抑制されて平準化される。【００１５】
圧縮部４０は、互いに異なる複数のハッシュ関数を用いて、複数のビットを１つのビットに対応付けることにより、インデックス３４のデータサイズを小さく圧縮する（図１（５））。例えば、インデックス３４の単語ごとの各ファイルのビット列が並んだ各ビット配列Ａを、互いに異なる２つのハッシュ関数を用いて複数のビットを１つのビットに対応付けることにより、２つのビット配列に変換する。インデックス３４の圧縮の詳細については、後述する。図１の例では、単語「a」のビット配列Ａがビット配列Ｘ1とビット配列Ｙ1に変換されて圧縮されている。また、単語「is」のビット配列Ａがビット配列Ｘ2とビット配列Ｙ2に変換されて圧縮されている。また、単語「this」のビット配列Ａがビット配列Ｘｌとビット配列Ｙｌに変換されて圧縮されている。この結果、圧縮装置１０では、インデックス３４のデータサイズを抑えることができる。【００１６】
次に、出現回数を登録したビット列のビットごとの「０」と「１」の頻度の偏りについて説明する。図２は、ビット列のビットごとの「０」と「１」の頻度の偏りを説明する図である。図２には、インデックス３４が示されている。上述したように、圧縮対象ファイル３０に含まれる文章によって出現する単語は、偏りがあり、出現回数にも偏りがある。多くの単語は、出現回数が少ない。このため、インデックス３４のビット列は、下位ビットほど「１」となる頻度が高く、上位ビットほど「１」となる頻度が低い。図２の例では、最上位ビット６０と最下位ビット６１を示している。図２に示すように、最下位ビット６１は、「１」となる頻度が高い。一方、最上位ビット６０は、「１」となる頻度が低い。図２には、ビット列の各ビットで「１」が出現する頻度の一例が示されている。図２に示すように、下位の１ビット目は、「１」となる頻度が高い。一方、上位の４ビット目は「１」となる頻度が低い。【００１７】
インデックス３４は、ビットごとに「０」と「１」の頻度に偏りがあると、互いに異なる複数のハッシュ関数を用いて圧縮した場合、ハッシュ関数でのビットの衝突が発生しやすく、圧縮したデータを復元した際にノイズが多く発生する場合がある。【００１８】
ここで、インデックス３４の圧縮について説明する。図３は、インデックスの圧縮の一例を示す図である。図３には、単語の各ファイルでの出現回数を登録したビット列が並んだビット配列の一例が示されている。ビット配列Ａは、ファイル番号αまでのファイルについて、それぞれ４ビットのビット列で単語の出現回数が記録されており、ビット数が４αとされている。圧縮部４０は、ビット配列Ａを互いに異なる複数のハッシュ関数を用いて、複数のビットを１つのビットに対応付けることにより、インデックス３４のデータサイズを小さく圧縮する。例えば、圧縮部４０は、ビット数が４αよりも小さいｍビットのビット配列Ｘと、ｎビットのビット配列Ｙに圧縮する。ビット配列Ｘは、要素番号が０〜ｍ−１のｍビットの配列とする。ビット配列Ｙは、要素番号が０〜ｎ−１のｎビットの配列とする。ｎとｍは、互いに異なる素数とし、好ましくは隣接する素数とする。ｎとｍは、ｎとｍの乗算値が４αよりも小さい値とする。例えば、α＝２５００として、４α＝１００００とした場合、ｎとｍは、「９７」と「１０１」とする。【００１９】
ハッシュ関数は、ビット配列Ａの各ビットを圧縮後のビット配列Ｘ、Ｙの各ビットに対応付ける。例えば、ハッシュ関数は、ビット配列Ａの各ビットのビット数を、圧縮後のビット配列のビット数で割った余りを求める関数とする。圧縮部４０は、ハッシュ関数により求まる余りが同じ複数のビットを１つのビットに対応付けることにより、ビット列を圧縮する。【００２０】
例えば、図３の例では、第１のハッシュ関数を、ビット配列Ａの各ビットのビット数をそれぞれｍで割った余りを求める関数とする。第１のハッシュ関数は、ビット配列Ａの各ビットに対して０〜ｍ−１の値を出力する。圧縮部４０は、第１のハッシュ関数により求まる余りが同じ複数のビットを１つのビットに対応付けることにより、ビット配列Ａをビット配列Ｘに変換して圧縮する。図３の例では、ビット配列Ａにおいてｍで割った余りが０となるビット数が「０」、「ｍ」のビットがビット配列Ｘの要素番号「０」のビットに対応付けられる。また、図３の例では、ビット配列Ａにおいてｍで割った余りがｍ−１となるビット数が「ｍ−１」、「２ｍ−１」、「ｍｎ−１」のビットがビット配列Ｘの要素番号「ｍ−１」のビットに対応付けられる。【００２１】
また、図３の例では、第２のハッシュ関数を、ビット配列Ａの各ビットのビット数をそれぞれｎで割った余りを求める関数とする。第２のハッシュ関数は、ビット配列Ａの各ビットに対して０〜ｎ−１の値を出力する。圧縮部４０は、第２のハッシュ関数により求まる余りが同じ複数のビットを１つのビットに対応付けることにより、ビット配列Ａをビット配列Ｙに変換して圧縮する。図３の例では、ビット配列Ａにおいてｎで割った余りが０となるビット数が「０」、「ｎ」のビットがビット配列Ｙの要素番号「０」のビットに対応付けられる。また、図３の例では、ビット配列Ａにおいてｎで割った余りがｎ−１となるビット数が「ｎ−１」、「２ｎ−１」、「ｍｎ−１」のビットがビット配列Ｙの要素番号「ｎ−１」のビットに対応付けられる。【００２２】
圧縮部４０は、余りが同じ何れかのビットが「１」の場合、圧縮後のビット配列の要素番号が余りの値のビットに「１」を登録する。また、圧縮部４０は、余りが同じ複数のビットが全て「０」の場合、圧縮後のビット配列の要素番号が余りの値のビットに「０」を登録する。図３の例では、ビット配列Ａのビット数が「２ｍ−１」、「ｍｎ−１」のビットが「１」のため、ビット配列Ｘの要素番号「ｍ−１」のビットは、「１」が登録されている。また、ビット配列Ａのビット数が「ｍｎ−１」のビットが「１」のため、ビット配列Ｙの要素番号「ｎ」のビットは、「１」が登録されている。【００２３】
ビット配列Ａの復元は、例えば、次にように行う。ビット配列Ａのビットごとに、ビット配列Ｘとビット配列Ｙそれぞれの対応付けられたビットを確認する。対応付けられたビットがともに「１」の場合、「１」と復元し、対応付けられたビットがともに「１」ではない場合、「０」と復元する。【００２４】
ところで、一般的に、圧縮対象ファイル３０に含まれる文章によって出現する単語は、偏りがあり、出現回数にも偏りがある。例えば、多くの単語は、出現しない。また、出現した単語も多くは、出現回数が少ない。このため、出現回数を登録した４ビットのビット列には、ビットごとに「０」と「１」の頻度に偏りがある。【００２５】
インデックス３４は、ビットごとに「０」と「１」の頻度に偏りがあると、互いに異なる複数のハッシュ関数を用いて圧縮した場合、ハッシュ関数でのビットの衝突が発生しやすく、圧縮したデータを復元した際にノイズが多く発生する場合がある。【００２６】
そこで、本実施例では、インデックス３４の単語およびファイルに対応付けて設けられた各ビット列に含まれるビットを当該ビット列内で並べ替える。図４は、ビット列の各ビットの並べ替えを説明する図である。図４には、図２に示したインデックス３４のビット列の各ビットを並べ替えた結果が示されている。図４の例では、単語「is」は、ビット列の各ビットを１ビットだけローテーションさせている。単語「this」は、ビット列の各ビットを３ビットだけローテーションさせている。また、図４の例では、図２に示したビット列の最上位ビット６０と最下位ビット６１が示されている。図４の下部には、ビット列の各ビットで「１」が出現する頻度の一例が示されている。ビット列内でビットの並べ替えをした場合、各ビットの頻度が平準化される。【００２７】
インデックス３４は、ビットごとに「０」と「１」の頻度に平準化されると、互いに異なる複数のハッシュ関数を用いて圧縮した場合、ハッシュ関数でのビットの衝突が発生し難くなる。このため、インデックス３４を圧縮したデータを復元した際のノイズの発生が抑制される。【００２８】
［装置構成］
次に、圧縮装置１０の構成について説明する。図５は、圧縮装置の構成の一例を示す図である。圧縮装置１０は、圧縮対象ファイル３０の圧縮などの符号化を行う装置である。圧縮装置１０は、例えば、パーソナルコンピュータ、サーバコンピュータなどのコンピュータや、タブレット端末、スマートフォンなどの情報処理装置である。圧縮装置１０は、１台のコンピュータとして実装してもよく、また、複数台のコンピュータによるクラウドとして実装することもできる。なお、本実施例では、圧縮装置１０を１台のコンピュータとした場合を例として説明する。図５に示すように、圧縮装置１０は、記憶部２０と、制御部２１とを有する。なお、圧縮装置１０は、コンピュータや情報処理装置が有する上記の機器以外の他の機器を有してもよい。【００２９】
記憶部２０は、ハードディスク、ＳＳＤ（Solid  State  Drive）、光ディスクなどの記憶装置である。なお、記憶部２０は、ＲＡＭ（Random  Access  Memory）、フラッシュメモリ、ＮＶＳＲＡＭ（Non  Volatile  Static  Random  Access  Memory）などのデータを書き換え可能な半導体メモリであってもよい。【００３０】
記憶部２０は、制御部２１で実行されるＯＳ（Operating  System）や各種プログラムを記憶する。例えば、記憶部２０は、後述する圧縮および検索に用いる各種のプログラムを記憶する。さらに、記憶部２０は、制御部２１で実行されるプログラムで用いられる各種データを記憶する。例えば、記憶部２０は、圧縮対象ファイル３０と、類語データベース３１と、静的辞書３２と、動的辞書３３と、インデックス３４と、圧縮ファイル３５とを記憶する。【００３１】
圧縮対象ファイル３０は、圧縮対象の文章のデータを記憶したファイルである。【００３２】
類語データベース３１は、類似する単語に関する情報を記憶したデータである。例えば、類語データベース３１には、類似する単語の群ごとに、類似する単語が登録されている。【００３３】
図６を用いて、類語データベース３１について説明する。図６は、類語データベースのデータ構造の一例を示す図である。図６の例のように類語データベース３１は、「類語番号」、「類似単語」の各項目を有する。「類語番号」の項目は、類似語の種類を識別するために定められた識別情報である。「類語番号」の項目には、後述する基本コードと重複しないように付与された類語番号のコードが格納される。「類似単語」の項目は、互いに類似する単語である。「類似単語」の項目には、例えば、シソーラスを基に、類似する複数の単語が格納される。例えば、シソーラスには、類似語として約１６００種類がある。図６の例では、類語データベース３１には、類語番号「F00011h」に対応付けて、「mouse」、「rat」、「cavy」、・・・が登録されている。なお、類語番号や、後述する基本コードおよび圧縮符号の最後に付した「h」は、コードが１６進数で表記されていることを示す符号である。【００３４】
図５に戻り、静的辞書３２は、単語と圧縮符号を対応付ける変換情報を保持したデータである。【００３５】
図７を用いて、静的辞書３２について説明する。図７は、静的辞書の一例を示す図である。図７の例のように静的辞書３２は、「２グラム」、「ビットマップ」、「ポインタ」、「基礎単語」、「文字列長」、「出現頻度」、「符号長」、「静的コード」、「動的コード」、「基本コード」、「類語番号」の各項目を有する。【００３６】
「２グラム」の項目は、各単語に含まれる２グラム文字を記憶する領域である。例えば、図７に示すように、「able」は、「ab」「bl」「le」に対応する２グラム文字を含む。「ビットマップ」の項目は、２グラム文字が含まれる基礎単語の位置を表すビット列を記憶する領域である。例えば、２グラム「ab」のビットマップが「１＿０＿０＿０＿０」の場合、ビットマップは基礎単語の先頭２文字が「ab」であることを表す。ビットマップは、ポインタによってそれぞれ基礎単語に対応付けられる。例えば、２グラム「ab」のビットマップ「１＿０＿０＿０＿０」は、「able」および「above」に対応付けられる。【００３７】
「基礎単語」の項目は、基礎単語として予め登録された単語を記憶する領域である。例えば、図７に示す静的辞書３２では、所定の母集団から抽出した各単語が、それぞれ基礎単語として登録されている。例えば、辞書などに登録された約１９万語の単語が基礎単語として登録される。「文字列長」の項目は、基礎単語として予め登録された単語の文字列の長さを示すバイト数を記憶する領域である。「出現頻度」の項目は、所定の母集団での単語の出現回数を記憶する領域である。「符号長」の項目は、単語に割り当てた圧縮符号の長さを示すビット数を記憶する領域である。「静的コード」の項目は、単語に予め割り当てられた圧縮符号を記憶する領域である。「動的コード」の項目は、単語に動的に割り当てられた圧縮符号を記憶する領域である。「基本コード」の項目は、各基礎単語に一意に割り当てられる基本コードを記憶する領域である。「類語番号」の項目は、単語に類似語がある場合、単語が属する類似語の種類を示す類語番号を記憶する領域である。【００３８】
ここで、本実施例では、静的辞書３２に登録する基礎単語を、出現頻度が相対的に高い高頻度単語と、出現頻度が相対的に低い低頻度単語とに分けている。本実施例では、出現頻度の高い順に８０００位までの基礎単語を高頻度単語とし、８００１位以降の基礎単語を低頻度単語としている。高頻度単語については、短い圧縮符号を予め割り当てて、割り当てた圧縮符号を「静的コード」の項目に予め記憶させる。低頻度単語については、出現した際に圧縮符号を動的に割り当てて、割り当てた圧縮符号を「動的コード」の項目に予め記憶させる。すなわち、圧縮符号は、高頻度単語については予め登録され、低頻度単語については初期状態では未登録とされている。例えば、図７に示す静的辞書３２では、単語「first」は、静的コードに圧縮符号「4123h」が登録とされていることから、高頻度単語であることを示す。また、例えば、単語「cavy」は、静的コードに圧縮符号が未登録であることから、低頻度単語であることを示す。また、単語「cavy」は、類似語を有するため、類語番号に「F00011h」が格納されている。また、例えば、単語「abject」は、静的コードに圧縮符号が未登録であることから、低頻度単語であることを示す。また、単語「abject」は、動的コードに圧縮符号「A003h」が登録済みであることから、圧縮符号を割り当て済みであることを示す。【００３９】
図５に戻り、動的辞書３３は、基礎単語に動的に割り当てられた圧縮符号を記憶する。図８は、動的辞書のデータ構造の一例を示す図である。図８の例のように、動的辞書３３は、「基本コード」、「圧縮符号」の各項目を有する。【００４０】
「基本コード」の項目は、動的辞書３３に登録された単語の基本コードを記憶する領域である。「圧縮符号」の項目は、単語に動的に割り当てられた圧縮符号を記憶する領域である。図８の例では、図７に示した単語「abject」の基本コード「A0002Ch」と圧縮符号「A003h」が記憶されている。【００４１】
図５に戻り、インデックス３４は、各ファイルにおける単語の出現回数の情報を保持したデータである。例えば、インデックス３４は、単語およびファイルに対応付けて、複数ビットのビット列が設けられ、単語およびファイルに対応付けて、ビット列に出現回数を記憶する。【００４２】
図９は、インデックスのデータ構造の一例を示す図である。インデックス３４には、高頻度単語がファイルに出現した回数を記憶する第１記憶領域３４ａと、低頻度単語がファイルに出現した回数を記憶する第２記憶領域３４ｂとが設けられている。また、インデックス３４には、出現した単語に関する類似語がファイルに出現した回数を記憶する第３記憶領域３４ｃが設けられている。第１記憶領域３４ａおよび第２記憶領域３４ｂには、単語の基本コードごとに、各ファイルのファイル番号に対応付けて、出現回数を記憶するための４ビットのビット列が設けられている。また、第３記憶領域３４ｃには、類似番号ごとに、各ファイルのファイル番号に対応付けて、出現回数を記憶するための４ビットのビット列が設けられている。【００４３】
第１記憶領域３４ａは、各高頻度単語が圧縮対象ファイル３０に出現した回数か否かを記憶するため、予め設けられる。すなわち、第１記憶領域３４ａは、高頻度単語の分だけ記憶領域が予め確保される。例えば、図９の例では、第１記憶領域３４ａに、α個のファイルに、それぞれの高頻度単語が出現した回数を記憶するビット列のレコードが予め設けられている。第２記憶領域３４ｂは、圧縮対象ファイル３０に低頻度単語が出現した際に、出現した低頻度単語がファイルに出現した回数を記憶するビット列のレコードが追加で設けられる。すなわち、第２記憶領域３４ｂは、圧縮対象ファイル３０に新たな低頻度単語が出現するごとに、記憶領域が確保される。第３記憶領域３４ｃは、類似語の種類ごとに、圧縮対象ファイル３０に出現した出現回数を記憶するため、予め設けられる。すなわち、第３記憶領域３４ｃは、類似語の種類の数だけ記憶領域が予め確保される。インデックス３４には、ファイル番号のファイルに出現した単語の出現回数が記録される。【００４４】
図５に戻り、圧縮ファイル３５は、圧縮対象ファイル３０を圧縮したデータである。【００４５】
制御部２１は、圧縮装置１０を制御するデバイスである。制御部２１としては、ＣＰＵ（Central  Processing  Unit）、ＭＰＵ（Micro  Processing  Unit）等の電子回路や、ＡＳＩＣ（Application  Specific  Integrated  Circuit）、ＦＰＧＡ（Field  Programmable  Gate  Array）等の集積回路を採用できる。制御部２１は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する。制御部２１は、各種のプログラムが動作することにより各種の処理部として機能する。例えば、制御部２１は、圧縮部４０と、検索部５０とを有する。【００４６】
圧縮部４０は、圧縮対象ファイル３０から単語を抽出し、抽出した単語の単位に圧縮符号を対応させた圧縮ファイル３５を生成する。圧縮部４０は、抽出部４１と、計数部４２と、判定部４３と、置換部４４と、生成部４５と、登録部４６と、入替部４７と、インデックス圧縮部４８とを有する。以下、圧縮部４０の各構成について詳細に説明する。【００４７】
抽出部４１は、圧縮対象ファイル３０の単語単位に文字列の抽出を行う。例えば、抽出部４１は、圧縮対象ファイル３０から文字列を順に読み出し、読み出した文字列から単語を抽出する。例えば、英語ように、文章の単語がスペースなどの所定の区切り文字で区切られる場合、抽出部４１は、圧縮対象ファイル３０の文字列を読み出し、文字列中の区切り文字によって文字列を単語ごとに区切ることで、文字列から各単語を抽出する。一方、例えば、日本語ように、文章の単語が特定の区切り文字で区切られていない場合、抽出部４１は、圧縮対象ファイル３０の文字列の読み出を行う。そして、抽出部４１は、読み出した文字列に形態素解析、構文解析など、文章の言語に応じた自然言語処理を行うことで、文字列から各単語を抽出する。【００４８】
計数部４２は、単語ごとの出現回数を計数する。例えば、計数部４２は、圧縮対象ファイル３０別に、抽出部４１により抽出された単語ごとの出現回数を計数する。【００４９】
判定部４３は、抽出部４１により抽出された単語に対して各種の判定を行う。例えば、判定部４３は、抽出された単語が、高頻度単語、低頻度単語の何れかであるか判定する。例えば、判定部４３は、抽出された単語を静的辞書３２と照合し、該当するレコードの「静的コード」、「動的コード」の項目のデータを取得する。判定部４３は、「静的コード」の項目に圧縮符号が格納されている場合、抽出された単語を高頻度単語と判定する。判定部４３は、「静的コード」の項目に圧縮符号が格納されていない場合、抽出された単語を低頻度単語と判定する。判定部４３は、抽出された単語が低頻度単語である場合、「動的コード」の項目のデータを確認する。判定部４３は、「動的コード」の項目に圧縮符号が格納されている場合、抽出された単語が動的辞書３３に登録済みの低頻度単語と判定する。一方、判定部４３は、「動的コード」の項目に圧縮符号が格納されていない場合、抽出された単語が動的辞書３３に未登録の低頻度単語と判定する。【００５０】
置換部４４は、抽出部４１により抽出された単語を圧縮符号に置換する。例えば、置換部４４は、抽出された単語に対応する圧縮符号が静的辞書３２に登録されている場合、抽出された単語に対応する圧縮符号を特定する。例えば、置換部４４は、抽出された単語が高頻度単語である場合、「静的コード」の項目に格納された圧縮符号を、単語に対応する圧縮符号と特定する。また、置換部４４は、抽出された単語が動的辞書３３に登録済みの低頻度単語である場合、「動的コード」の項目に格納された圧縮符号を、抽出された単語に対応する圧縮符号と特定する。そして、置換部４４は、特定された単語に対応する圧縮符号を生成部４５へ出力する。【００５１】
一方、置換部４４は、抽出された単語が動的辞書３３に未登録の低頻度単語である場合、抽出された単語に新たな圧縮符号を割り当てる。例えば、置換部４４は、所定の範囲で１ビットずつ増加させるなど、予め定められた割当規則に従い、抽出された単語に新規の圧縮符号を割り当てる。そして、置換部４４は、抽出された単語を、割り当てられた圧縮符号に置換する。例えば、置換部４４は、抽出された単語に対応して割り当てられた圧縮符号を生成部４５へ出力する。また、置換部４４は、抽出された単語の基本コードと、動的に割り当てた圧縮符号とを対応付けて動的辞書３３に格納する。また、置換部４４は、動的に割り当てた圧縮符号を静的辞書３２の抽出された単語の「動的コード」の項目に格納する。【００５２】
生成部４５は、置換部４４により置換された圧縮符号を用いて、圧縮対象ファイル３０を圧縮した圧縮ファイル３５を生成する。例えば、生成部４５は、圧縮対象ファイル３０から単語単位で読み出され、置換部４４から出力された圧縮符号を順に圧縮ファイル３５に順に格納する。そして、生成部４５は、全単語の圧縮符号の格納後に、動的辞書３３を圧縮ファイル３５に格納して圧縮ファイル３５を生成する。この圧縮ファイル３５を復元する場合、低頻度単語については、圧縮ファイル３５に含まれる動的辞書３３に基づいて復元される。高頻度単語については、復元先に記憶された静的辞書３２を用いて圧縮符号に対応する単語を求めて復元される。【００５３】
登録部４６は、計数部４２により計数された各単語の出現回数をインデックス３４に登録する。例えば、登録部４６は、出現した単語ごとに、当該単語の出現回数を複数ビットで表現されたビット列を、当該単語および圧縮対象ファイル３０のファイル番号に対応付けてインデックス３４に登録する。また、登録部４６は、出現した単語が含まれる類似語がある場合、単語を含んだ類似語の類語番号に出現回数を第３記憶領域３４ｃに登録する。例えば、登録部４６は、出現した単語に対して、静的辞書３２に類語番号の項目に類語番号が格納されている場合、当該類語番号および圧縮対象ファイル３０のファイル番号に対応付けて出現回数を第３記憶領域３４ｃに登録する。【００５４】
ここで、インデックス３４に出現回数を登録する流れを説明する。図１０は、インデックスに出現回数を登録する流れを概略的に示した図である。図１０は、圧縮対象ファイル３０に含まれる文章「first  cavy  was・・・」に含まれる単語の出現回数を登録する例が示されている。圧縮装置１０は、圧縮対象ファイル３０に含まれる文書から単語単位に、それぞれの単語を抽出する。図１０の例では、「first」、「cavy」、「was」を抽出する。圧縮装置１０は、単語ごとに出現回数を計数する。圧縮装置１０は、取得した単語を静的辞書３２と照合して単語が高頻度単語か、低頻度単語かを判定する。そして、圧縮装置１０は、単語ごとに出現回数をインデックス３４に登録する。例えば、圧縮装置１０は、単語が高頻度単語である場合、単語の出現回数を第１記憶領域３４ａに登録し、単語が低頻度単語である場合、単語の出現回数を第２記憶領域３４ｂに登録する。また、圧縮装置１０は、単語が含まれる類似語がある場合、単語を含んだ類似語の類語番号に出現回数を第３記憶領域３４ｃに登録する。【００５５】
図５に戻り、入替部４７は、各種の入れ替えを行う。例えば、入替部４７は、インデックス３４の単語およびファイルに対応付けて設けられた各ビット列ごとに、ビット列内の各ビットを入れ替えることにより、当該ビット列内の各ビットの並べ替えを行う。例えば、入替部４７は、インデックス３４の複数の単語間で異なる所定ビット数を用いて、ビット列の各ビットを回転させることでビットを並べ替える。例えば、入替部４７は、インデックス３４の各単語に対して順に、０〜３の中で順に回転ビット数を定める。そして、入替部４７は、単語ごとに各ビットを当該ビット列内で回転ビット数だけローテーションさせてビットを並べ替える。【００５６】
インデックス圧縮部４８は、入替部４７によりビットが並べ替えられたインデックス３４を互いに異なる関数を用いて圧縮する。例えば、インデックス圧縮部４８は、インデックス３４の単語ごとの各ファイルのビット列が並んだ各ビット配列を、互いに異なる２つのハッシュ関数を用いて複数のビットを１つのビットに対応付けることにより、２つのビット配列に変換する。この結果、インデックス３４は、データサイズが小さく圧縮される。【００５７】
検索部５０は、検索対象の文字列との類似度が高い圧縮対象のファイルを検索する。検索部５０は、受付部５１と、インデックス復元部５２と、特定部５３とを有する。以下、検索部５０の各構成について詳細に説明する。【００５８】
受付部５１は、検索対象の文字列を受け付ける処理部である。受付部５１は、検索対象の文字列を受け付ける入力インタフェースを提供しており、検索対象の文字列を受け付ける。【００５９】
インデックス復元部５２は、インデックス３４を復元する。例えば、インデックス復元部５２は、静的辞書３２を参照して、検索対象の文字列に含まれる単語の基本コードを特定する。そして、インデックス復元部５２は、インデックス３４から、特定した基本コードに対応したビット配列Ｘ、Ｙを読み出す。インデックス復元部５２は、ビット配列Ｘ、Ｙを用いてビット配列Ａを復元する。例えば、インデックス復元部５２は、ビット配列Ａのビットごとに、ビット配列Ｘとビット配列Ｙの対応付けられたビットを確認する。インデックス復元部５２は、対応付けられたビットがともに「１」の場合、「１」と復元し、対応付けられたビットがともに「１」ではない場合、「０」と復元する。インデックス復元部５２は、復元したビット配列の各ビット列を圧縮時とは逆の並べ替えを行って、ビット列のビットの順序を復元する。例えば、インデックス３４が各単語に対して順に、０〜３の中で順に回転ビット数を定めてローテーションされた場合、インデックス復元部５２は、インデックス３４内での単語の順番から回転ビット数を求める。そして、インデックス復元部５２は、復元したビット配列の各ビット列を回転ビット数、逆にローテーションさせてビット列のビットの順序を復元する。【００６０】
また、インデックス復元部５２は、検索対象の文字列に含まれる単語が類似語を有する場合、静的辞書３２を参照して、検索対象の文字列に含まれる単語の類語番号を特定する。インデックス復元部５２は、インデックス３４から、特定した類語番号に対応したビット配列Ｘ、Ｙを読み出し、ビット配列Ａを復元する。そして、インデックス復元部５２は、復元したビット配列の各ビット列を圧縮時とは逆に並べ替えて、ビット列のビットの順序を復元する。【００６１】
特定部５３は、検索対象の文字列と類似度の高い文字列を含んだファイルを特定する。特定部５３は、インデックス３４の復元されたビット配列に記憶された、検索対象の文字列に含まれる単語の出現回数および類似語の出現回数に基づいて、検索対象の文字列との類似度が高い圧縮対象のファイルを特定する。例えば、特定部５３は、ファイルごとに、検索対象の文字列に含まれる単語の出現回数および類似語の出現回数を重み付け演算してスコアを算出する。例えば、特定部５３は、単語が抽出された回数に対して大きい重み値を乗算し、類似語の出現回数に対して小さい重み値を乗算し、乗算結果を全て加算してスコアを算出する。このスコアは、単語が抽出された回数、類似語が抽出された回数が多いほど値が大きくなる。特定部５３は、スコアに基づいて、検索対象の文字列と類似度の高い文字列を含んだファイルを特定する。例えば、特定部５３は、スコアが上位所定位以上、あるいは、スコアが所定のしきい値以上のファイルを、類似度の高いファイルと特定する。特定部５３は、特定したファイルを検索結果として出力する。なお、上記のスコアの算出方法は、一例であり、これに限定されるものではない。検索対象の文字列に含まれる単語の出現回数、類似語の出現回数が多いファイルほどスコアを高く算出できれば、何れの算出方法を用いてもよい。【００６２】
このように、圧縮装置１０は、インデックス３４の出現回数が複数ビットで表現されたビット列をビット列内で並べ替えて、互いに異なる関数を用いて圧縮することにより、復元した際にノイズの発生を抑えてインデックス３４を圧縮できる。また、圧縮装置１０は、インデックス３４を、単語ごとに、当該単語がファイルに含まれるかを記録したカウントマップ型のインデックスとしたことにより、圧縮されたファイル内を復元して検索することなく、類似度の高いファイルを速やかに検索できる。【００６３】
［処理の流れ］
本実施例に係る圧縮装置１０が実行する各種の処理について説明する。最初に、本実施例に係る圧縮装置１０が圧縮対象ファイル３０を符号化して圧縮する圧縮処理の流れについて説明する。図１１は、圧縮処理の手順の一例を示すフローチャートである。この圧縮処理は、所定のタイミング、例えば、圧縮対象ファイル３０を指定して圧縮開始を指示する所定操作が行われたタイミングで実行される。【００６４】
図１１に示すように、抽出部４１は、圧縮対象ファイル３０から文字列を順に読み出し、読み出した文字列から単語を抽出する（Ｓ１０）。計数部４２は、単語ごとの出現回数を計数する（Ｓ１１）。判定部４３は、抽出された単語を静的辞書３２と照合して「静的コード」、「動的コード」の項目を取得する（Ｓ１２）。【００６５】
判定部４３は、「静的コード」の項目に圧縮符号が格納されているか判定する（Ｓ１３）。「静的コード」の項目に圧縮符号が格納されている場合（Ｓ１３肯定）、置換部４４は、抽出された単語を高頻度単語として、抽出された単語を、「静的コード」の項目に格納された圧縮符号に置換する（Ｓ１４）。【００６６】
一方、「静的コード」の項目に圧縮符号が格納されていない場合（Ｓ１３否定）、判定部４３は、「動的コード」の項目に圧縮符号が格納されているか判定する（Ｓ１５）。「動的コード」の項目に圧縮符号が格納されていない場合（Ｓ１５否定）、置換部４４は、抽出された単語を動的辞書３３に未登録の低頻度単語として、新規の圧縮符号を動的に割り当て、抽出された単語を、割り当てられた圧縮符号に置換する（Ｓ１６）。また、置換部４４は、抽出された単語の基本コードと、動的に割り当てた圧縮符号と対応付けて動的辞書３３に格納する（Ｓ１７）。また、置換部４４は、動的に割り当てた圧縮符号を静的辞書３２の抽出された単語の「動的コード」の項目に格納する（Ｓ１８）。【００６７】
一方、「動的コード」の項目に圧縮符号が格納されている場合（Ｓ１５肯定）、置換部４４は、抽出された単語を動的辞書３３に登録済みの低頻度単語として、抽出された単語を、「動的コード」の項目に圧縮符号に置換する（Ｓ１９）。【００６８】
生成部４５は、置換された圧縮符号を圧縮ファイル３５に順に格納する（Ｓ２０）。抽出部４１は、圧縮対象ファイル３０からテキストデータに対する全単語の抽出が完了したか否かを判定する（Ｓ２１）。全単語の抽出が完了していない場合（Ｓ２１否定）、上述のＳ１０へ移行する。【００６９】
一方、全単語の抽出が完了した場合（Ｓ２１肯定）、登録部４６は、計数された各単語の出現回数をインデックス３４に登録する（Ｓ２２）。例えば、登録部４６は、出現した単語ごとに、当該単語の出現回数を複数ビットで表現されたビット列を、当該単語および圧縮対象ファイル３０のファイル番号に対応付けてインデックス３４に登録する。【００７０】
入替部４７は、インデックス３４の単語およびファイルに対応付けて設けられた各ビット列の各ビットの並べ替えを行う（Ｓ２３）。インデックス圧縮部４８は、ビットが並べ替えられたインデックス３４を互いに異なる関数を用いて圧縮し（Ｓ２４）、処理を終了する。【００７１】
［効果］
上述してきたように、本実施例に係る圧縮装置１０は、圧縮対象ファイル３０から単語を抽出する。圧縮装置１０は、抽出された単語ごとに出現回数を計数する。圧縮装置１０は、出現回数が複数ビットで表現されたビット列を、単語およびファイルに対応付けてインデックス３４に登録する。圧縮装置１０は、インデックス３４に登録されたビット列に含まれるビットを当該ビット列内で並べ替える。圧縮装置１０は、ビットが並べ替えられたインデックス３４を互いに異なる関数を用いて圧縮する。これにより、圧縮装置１０は、復元した際にノイズの発生を抑えてインデックス３４を圧縮できる。【００７２】
また、本実施例に係る圧縮装置１０は、複数の単語間で異なる所定ビット数を用いて、ビット列の各ビットを回転させることでビットを並べ替える。これにより、圧縮装置１０は、インデックス３４のビット列のビットごとに「０」と「１」の頻度の偏りを抑制できる。
【実施例２】
【００７３】
さて、これまで開示の装置に関する実施例について説明したが、開示の技術は上述した実施例以外にも、種々の異なる形態にて実施されてよいものである。そこで、以下では、本発明に含まれる他の実施例を説明する。【００７４】
例えば、上記の実施例では、入替部４７は、インデックス３４の各単語に対して順に回転ビット数を定めて、ビット列を回転ビット数だけローテーションさせる場合について説明したが、これに限定されない。例えば、入替部４７は、インデックス３４のファイル番号に対して順に回転ビット数を定めて、ビット列を回転ビット数だけローテーションさせてもよい。例えば、入替部４７は、インデックス３４の各ファイル番号に対して順に、０〜３の中で順に回転ビット数を定め、ファイル番号ごとにビット例の各ビットをビット列内で回転ビット数だけローテーションさせてもよい。また、入替部４７は、インデックス３４の各単語とファイル番号に基づいて、回転ビット数を定めて、単語とファイル番号に対応するビット列を回転ビット数だけローテーションさせてもよい。また、入替部４７は、回転ビット数を複数単語や複数ファイルごとに変えてもよい。また、入替部４７は、回転ビット数を所定数の単語おきや、所定数のファイルおきなど、所定の間隔でビット列を並べ替えてもよい。すなわち、入替部４７は、回転ビット数をインデックス３４の複数のビット列に対して、異なる回転ビット数を設定できれば何れの設定規則を用いてもよい。【００７５】
また、上記の実施例では、入替部４７は、ビット列を回転ビット数だけローテーションさせる場合について説明したが、これに限定されない。例えば、入替部４７は、ビット列内の各ビットを並べ替えるものであれば、何れの規則を用いてもよい。例えば、入替部４７は、ビット例の４ビットを１ビット目→３ビット目→２ビット目→４ビット目→１ビット目と並べ替えてもよく、１ビット目→４ビット目→２ビット目→３ビット目→１ビット目と並べ替えてもよい。また、入替部４７は、所定の規則で選択したビット例の一部または全部のビットの「０」と「１」を反転させる並べ替えを行ってもよい。例えば、入替部４７は、所定数の単語おきや、所定数のファイルおきなど、所定の間隔でビット列を選択し、選択したビット例の一部または全部のビットを反転させる並べ替えを行ってもよい。【００７６】
また、上記の実施例では、高頻度単語についてはインデックス３４の第１記憶領域３４ａにビット配列を予め設け、低頻度単語については出現した順にインデックス３４の第２記憶領域３４ｂにビット配列を設ける場合について説明したが、これに限定されない。例えば、インデックス３４は、各基礎単語のビット配列が予め設けられていてもよい。【００７７】
例えば、上記の実施例では、類似語についてはインデックス３４の第３記憶領域３４ｃに類似番号ごとに、出現回数を記憶する場合について説明したが、これに限定されない。例えば、類似語については、類似語に含まれる各単語に出現回数を記憶してもよい。図１２は、インデックスのデータ構造の他の一例を示す図である。インデックス３４には、基礎単語の基本コードごとに、各ファイルのファイル番号に対応付けて、出現回数を記憶するための４ビットのビット列が設けられている。図１２の例では、類似語に含まれる各単語には、連続した基本コードが付与されている。図１２の例では、類似語である「mouse」、「rat」、「cavy」について連続した基本コードが付与されており、何れかが出現した際に類似語である他の単語にも出現回数が登録される。図１２の例では、ファイル番号「１」のファイルに「cavy」が１回出現したことにより、「mouse」、「rat」、「cavy」に「0001」が登録されている。この場合、類似する単語は、出現回数が近い値になる。そこで、入替部４７は、互いに類似する複数の単語間で異なる所定ビット数を用いて、ビット列の各ビットを回転させることでビットを並べ替える。例えば、入替部４７は、インデックス３４の各単語に対して順に、０〜３の中で順に回転ビット数を定め、単語ごとに各ビットを当該ビット列内で回転ビット数だけローテーションさせてビットを並べ替える。これにより、類似する複数の単語間で出現回数が近い値になり、ビット列のビットごとに「０」と「１」の偏りが発生する場合でも、ビットごとに「０」と「１」の頻度を平準化できる。【００７８】
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的状態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。例えば、圧縮部４０の各処理部（抽出部４１、計数部４２、判定部４３、置換部４４、生成部４５、登録部４６、入替部４７、インデックス圧縮部４８）や、検索部５０の各処理部（受付部５１、インデックス復元部５２、特定部５３）が適宜統合されてもよい。また、圧縮部４０および検索部５０の各処理部の処理が適宜複数の処理部の処理に分離されてもよい。さらに、各処理部にて行なわれる各処理機能は、その全部または任意の一部が、ＣＰＵおよび当該ＣＰＵにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。【００７９】
［圧縮プログラム］
また、上記の実施例で説明した各種の処理は、あらかじめ用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータシステムで実行することによって実現することもできる。そこで、以下では、上記の実施例と同様の機能を有するプログラムを実行するコンピュータシステムの一例を説明する。最初に、圧縮処理を行う圧縮プログラムについて説明する。図１３は、圧縮プログラムを実行するコンピュータの一例を示す図である。【００８０】
図１３に示すように、コンピュータ４００は、ＣＰＵ（Central  Processing  Unit）４１０、ＨＤＤ（Hard  Disk  Drive）４２０、ＲＡＭ（Random  Access  Memory）４４０を有する。これら４００〜４４０の各部は、バス５００を介して接続される。【００８１】
ＨＤＤ４２０には上記抽出部４１、計数部４２、判定部４３、置換部４４、生成部４５、登録部４６、入替部４７およびインデックス圧縮部４８と同様の機能を発揮する圧縮プログラム４２０ａが予め記憶される。尚、圧縮プログラム４２０ａについては、適宜分離しても良い。【００８２】
また、ＨＤＤ４２０は、各種情報を記憶する。例えば、ＨＤＤ４２０は、ＯＳや圧縮に用いる各種データを記憶する。【００８３】
そして、ＣＰＵ４１０が、圧縮プログラム４２０ａをＨＤＤ４２０から読み出して実行することで、実施例の各処理部と同様の動作を実行する。すなわち、圧縮プログラム４２０ａは、抽出部４１、計数部４２、判定部４３、置換部４４、生成部４５、登録部４６、入替部４７およびインデックス圧縮部４８と同様の動作を実行する。【００８４】
尚、上記した圧縮プログラム４２０ａについては、必ずしも最初からＨＤＤ４２０に記憶させることを要しない。【００８５】
また、例えば、圧縮プログラム４２０ａは、コンピュータ４００に挿入されるフレキシブルディスク（ＦＤ）、ＣＤ−ＲＯＭ、ＤＶＤディスク、光磁気ディスク、ＩＣカードなどの「可搬用の物理媒体」に記憶させても良い。そして、コンピュータ４００がこれらからプログラムを読み出して実行するようにしても良い。【００８６】
さらには、公衆回線、インターネット、ＬＡＮ、ＷＡＮなどを介してコンピュータ４００に接続される「他のコンピュータ（又はサーバ）」などにプログラムを記憶させておく。そして、コンピュータ４００がこれらからプログラムを読み出して実行するようにしても良い。
【符号の説明】
【００８７】
１０  圧縮装置
２０  記憶部
２１  制御部
３０  圧縮対象ファイル
３１  類語データベース
３２  静的辞書
３３  動的辞書
３４  インデックス
３５  圧縮ファイル
４０  圧縮部
４１  抽出部
４２  計数部
４３  判定部
４４  置換部
４５  生成部
４６  登録部
４７  入替部
４８  インデックス圧縮部
５０  検索部
５１  受付部
５２  インデックス復元部
５３  特定部
【図１】
2017009958.tif 000003
【図２】
2017009958.tif 000004
【図３】
2017009958.tif 000005
【図４】
2017009958.tif 000006
【図５】
2017009958.tif 000007
【図６】
2017009958.tif 000008
【図７】
2017009958.tif 000009
【図８】
2017009958.tif 000010
【図９】
2017009958.tif 000011
【図１０】
2017009958.tif 000012
【図１１】
2017009958.tif 000013
【図１２】
2017009958.tif 000014
【図１３】
2017009958.tif 000015
【国際調査報告】
2017009958.tif 000016
2017009958.tif 000017
2017009958.tif 000018
2017009958.tif 000019