圧縮ファイル内のテキストの検索は、圧縮されていないテキスト ファイル内の同じものを検索するよりも高速です。
高速検索を行うためにスペースを犠牲にする、私が見た圧縮技術の 1 つ:
- テキスト内のすべての単語の 2^16 エントリを含む辞書を維持します。辞書にない単語に出くわした場合に備えて、最初の 256 エントリをリテラル バイト用に予約します。ただし、多くの大きなテキストの一意の単語は 32,000 未満であるため、これらのリテラル バイトを使用する必要はありません。
- 各単語を 16 ビットの辞書インデックスに置き換えて、元のテキストを圧縮します。
- (オプション) 2 つの単語が 1 つの空白文字で区切られている通常の場合、その空白文字を破棄します。それ以外の場合は、単語間の文字列内のすべてのバイトを、「デフォルト スペースなし」属性でタグ付けされた特別な「単語」(たとえば、「.」および「」、「」および「\n」)として辞書に入れ、次に「compress " それらの文字列を、対応する辞書のインデックスに置き換えることによって。
- 同じ方法でフレーズを圧縮し、元のテキストで元の文字列を検索するのとまったく同じ方法で、圧縮されたテキストで圧縮されたバイトの文字列を検索して、単語またはフレーズを検索します。
特に、単一の単語の検索は、通常、圧縮されたテキストの 16 ビット インデックスを比較するだけで済みます。これは、元のテキストでその単語を検索するよりも高速です。
- 各比較では、比較する必要があるバイト数が少なくなります -- 2 ではなく、その単語に多くのバイトがありました。
- 圧縮ファイルの方が短いため、比較の回数が少なくなります。
一部の正規表現は、圧縮ファイル内のアイテムを直接検索する別の正規表現に変換できます (また、いくつかの誤検知も検出される可能性があります)。このような検索では、元のテキスト ファイルに対して元の正規表現を使用する場合よりも比較の回数が少なくなります。これは、圧縮ファイルの方が短いためです。ただし、通常、各正規表現の比較にはより多くの作業が必要です。元のテキスト。
(原則として、rwong が述べたように、固定長の 16 ビット コードを可変長のハフマン プレフィックス コードに置き換えることができます。結果として得られる圧縮ファイルは小さくなりますが、それらのファイルを処理するソフトウェアは少し遅くなります。複雑)。
より高度なテクニックについては、以下を参照してください。