(57)【特許請求の範囲】
【請求項１】
文字列検索装置における文字列検索方法であって、
文字列検索装置が備える第１の検索手段が、文字列情報に含まれる各文字と前記各文字の発生頻度とを備えるテーブルから検索文字列に含まれる全ての文字を検索する第１の検索工程と、
文字列検索装置が備える第２の検索手段が、前記第１の検索工程で、前記検索文字列に含まれる全ての文字が前記テーブルに存在していると判定された場合、前記文字列情報から前記検索文字列に一致する文字列を検索する第２の検索工程とを備え、
前記第２の検索工程では、前記検索文字列に含まれる文字を発生頻度の低い文字から順に用いて前記文字列情報中の文字列の文字が前記検索文字列の文字と一致するか否かを判定することにより検索を行い、前記判定において一致する毎に当該用いられた文字に対応する前記テーブルの発生頻度を１減らし、前記検索文字列に含まれる文字のうちの１つでも対応する発生頻度がゼロになったことに基づいて当該検索を中止することを特徴とする文字列検索方法。
【請求項２】
文字列検索装置が備えるテーブル生成手段が、文字列情報に含まれる各文字の発生数をカウントして、前記各文字と対応する発生頻度を備えるテーブルを生成するテーブル生成工程と、
文字列検索装置が備える格納手段が、前記テーブル生成工程で生成されたテーブルと前記文字列情報を関連づけて格納する格納工程とを更に備えることを特徴とする請求項１に記載の文字列検索方法。
【請求項３】
文字列情報に含まれる各文字と前記各文字の発生頻度とを備えるテーブルから検索文字列に含まれる全ての文字を検索する第１の検索手段と、
前記第１の検索手段で、前記検索文字列に含まれる全ての文字が前記テーブルに存在していると判定された場合、前記文字列情報から前記検索文字列に一致する文字列を検索する第２の検索手段とを備え、
前記第２の検索手段は、前記検索文字列に含まれる文字を発生頻度の低い文字から順に用いて前記文字列情報中の文字列の文字が前記検索文字列の文字と一致するか否かを判定することにより検索を行い、前記判定において一致する毎に当該用いられた文字に対応する前記テーブルの発生頻度を１減らし、前記検索文字列に含まれる文字のうちの１つでも対応する発生頻度がゼロになったことに基づいて当該検索を中止することを特徴とする文字列検索装置。
【請求項４】
文字列情報に含まれる各文字の発生数をカウントして、前記各文字と対応する発生頻度を備えるテーブルを生成するテーブル生成手段と、
前記テーブル生成手段で生成されたテーブルと前記文字列情報を関連づけて格納する格納手段とを更に備えることを特徴とする請求項３に記載の文字列検索装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、文字列検索方法とその装置、並びに、文字列検索情報生成方法とその装置、特に、ファイル中から文字列を高速に検索する文字列検索方法とその装置に関する。
【０００２】
【従来の技術】
従来、文字列情報を含んだファイル中に、所定の文字列が存在するか否かを調べる検索処理においては、対象ファイルを読み出し、文字列情報と指定文字列の比較を行うことによって文字列の存在の有無をチェックしていた。
この様な検索方法では、無条件に対象ファイルを読み出し、文字列の比較を行っていた。
【０００３】
【発明が解決しようとする課題】
一般に、読み出し速度の遅い記憶装置では、全検索時間に占めるファイル読み出し時間の割合が大きくなる。
また、ファイル中の文字列が膨大な場合には、文字列の比較に時間がかかる。これらの理由から、従来の無条件にファイルを読み出し、文字列の比較を行う方法では、処理時間が長くなるという問題があった。
【０００４】
本発明は、上記従来例に鑑みてなされたもので、文字列を高速に検索できる文字列検索方法とその装置を提供することを目的とする。
【０００５】
【課題を解決するための手段】
上記目的を達成するための本発明の一態様による文字列検索方法は、
文字列検索装置における文字列検索方法であって、
文字列検索装置が備える第１の検索手段が、文字列情報に含まれる各文字と前記各文字の発生頻度とを備えるテーブルから検索文字列に含まれる全ての文字を検索する第１の検索工程と、
文字列検索装置が備える第２の検索手段が、前記第１の検索工程で、前記検索文字列に含まれる全ての文字が前記テーブルに存在していると判定された場合、前記文字列情報から前記検索文字列に一致する文字列を検索する第２の検索工程とを備え、
前記第２の検索工程では、前記検索文字列に含まれる文字を発生頻度の低い文字から順に用いて前記文字列情報中の文字列の文字が前記検索文字列の文字と一致するか否かを判定することにより検索を行い、前記判定において一致する毎に当該用いられた文字に対応する前記テーブルの発生頻度を１減らし、前記検索文字列に含まれる文字のうちの１つでも対応する発生頻度がゼロになったことに基づいて当該検索を中止することを特徴とする。
【０００６】
また、本発明の他の態様による文字列検索装置は以下の構成を備える。即ち、
文字列情報に含まれる各文字と前記各文字の発生頻度とを備えるテーブルから検索文字列に含まれるすべての文字を検索する第１の検索手段と、
前記第１の検索手段で、前記検索文字列に含まれる全ての文字が前記テーブルに存在していると判定された場合、前記文字列情報から前記検索文字列に一致する文字列を検索する第２の検索手段とを備え、
前記第２の検索手段は、前記検索文字列に含まれる文字を発生頻度の低い文字から順に用いて前記文字列情報中の文字列の文字が前記検索文字列の文字と一致するか否かを判定することにより検索を行い、前記判定において一致する毎に当該用いられた文字に対応する前記テーブルの発生頻度を１減らし、前記検索文字列に含まれる文字のうちの１つでも対応する発生頻度がゼロになったことに基づいて当該検索を中止することを特徴とする。
【０００９】
【発明の実施の形態】
はじめに、本発明の実施の形態の文字列検索方法とその装置のポイントを要約した後に、その詳細な説明に入るものとする。
本発明の実施の形態の文字列検索方法とその装置は、所定の文字列情報から、同一文字の出現回数を計測し、文字出現テーブルを生成する。
【００１０】
そして、所定の検索文字列の含まれる各文字がすべて、生成された文字出現テーブルに存在しているかどうか検索する。
その結果、存在していなければ、前述の文字列情報には、所定の検索文字列はないと判定する。
一方、存在していれば、前述の文字列情報を検索して、前述の所定の検索文字列が存在するかどうか判定する。ここで、この文字列情報検出処理では、出現頻度の少ない文字から順に文字比較を行って、検索を進める。
【００１１】
以上の処理手順により、処理に関わるデータ量を大幅に削減できる。
また、文字列の比較を必ずしも、データの最後まで行う必要がなくなるため、検索時間を大幅に短縮できる。
以下、本発明の実施の形態の文字列検索装置の詳細な説明を行う。
図１は、本発明の一実施の形態にかかる文字検索装置を説明するブロック図である。
【００１２】
１は、マイクロプロセッサ（ＣＰＵ）であり、検索処理のための演算・論理判断等を行い、各バスを介してそれらに接続された各構成要素を制御する。マイクロプロセッサ（ＣＰＵ）１は、ＲＯＭ２に格納された検索処理プログラムを読み出し、解釈し、実行する。
読み出し専用メモリ（ＲＯＭ）２は、上述の検索処理プログラムの他にも、各種制御プログラムや関連データを格納している。
【００１３】
３は、ランダムアクセスメモリ（ＲＡＭ）であり、各構成要素からの各種データの一時保存に用いたり、ＣＰＵ１の作業領域として用いられる。
４は、キーボード（ＫＢ）であり、文字や記号等を入力する文字キーおよび各種機能を指示する機能キー等を配置してある。
５は、ＣＲＴコントローラ（ＣＲＴＣ）であり、表示器（ＣＲＴ）７の表示制御を行う。
【００１４】
６は、キャラクタージェネレータ（ＣＧ）であり、表示器（ＣＲＴ）１１に表示する文字・記号等のキャラクタ信号を発生させる。
７は、表示器（ＣＲＴ）であり、文字列等を表示する。
８は、フロッピーディスクコントローラ（ＦＤＣ）であり、フロッピーディスクドライブ（ＦＤＤ）９の制御を行う。
【００１５】
９は、フロッピーディスクドライブ（ＦＤＤ）であり、セットされているフロッピーディスク（ＦＤ）１１へのデータの書き込み、読み込み等を行う。
１０は、バス（ＢＳ）であり、各処理ユニット間でのコントロール信号のやり取り、データの転送、アドレス信号の転送等の為に使用される。
図２は、ＦＤ１１へ保存されるファイルの形式を表したものである。与えられた文字列情報から、文字出現テーブルを構築し、文字列情報の前に付加して、１つのファイルが作成される。
【００１６】
図３は、文字出現テーブルの詳細を示す図である。
尚、本実施の形態では、読者の理解を容易にするために、文字列情報中の文字は全て１ワード（１６ビット）で表されるものとする。
文字出現テーブルは、文字列情報中に同一文字コードがいくつ存在するかを表すテーブルであり、各文字コードに対して１バイト（８ビット）の出現回数を格納する領域が１対１に対応している。
【００１７】
以後、文字コード００００Ｈ〜ＦＦＦＦＨ（Ｈは１６進数を意味する）の出現回数をｔ［００００］〜ｔ［ＦＦＦＦ］と表すものとする。
ここで、出現回数が２５５回以上の場合には、出現回数は２５５とする。即ちｔ［ｉ］＝２５５の場合、文字コードｉは２５５回以上存在することを表す。
図４は、文字出現テーブル構築処理手順を示すフローチャートである。尚、以下、前置きなしに幾つかの変数名が登場するが、これらは、ＲＡＭ３の所定の領域にアサインされているものとする。
【００１８】
ステップＳ１では、文字出現テーブルに全て０をセットする。即ち、
ｔ［００００］〜ｔ［ＦＦＦＦ］＝０
とする。
ステップＳ２では、文字列情報の文字位置を表すカウンタｉを０に初期化する。  ステップＳ３では、文字列情報中のｉ番目の文字ｓ［ｉ］を取得し、ｃに格納する。
【００１９】
ステップＳ４では、文字ｃに対応する文字出現テーブルの出現回数が２５５を越えているかチェックする。越えている場合は、ステップＳ６へ進む。また、越えていない場合は、テーブルの更新は行なわず、ステップＳ５へ進む。
ステップＳ５では、文字ｃに対応する文字出現テーブルの出現回数ｔ［ｃ］に１を加算する。
【００２０】
ステップＳ６では、ｓ［ｉ］が文字列情報の最後の文字かどうかをチェックする。そして、最後の文字であれば、処理を終了する。
ステップＳ７では、カウンタｉを１カウントアップして、ステップＳ３に戻り、同様の処理を繰り返す。
以上の処理により、文字列情報中の各文字コードの出現回数がテーブルにセットされる。
【００２１】
そして、生成された文字出現テーブルと文字列情報を、図２に示したように、フロッピーディスク（ＦＤ）に保存する。
次に、図５は、検索処理を示すフローチャートである。
ステップＳ１０では、ファイルから文字出現テーブルの部分のみをＲＡＭ３に読み出す。
【００２２】
ステップＳ１１では、文字出現テーブルｔを元に、検索対象文字が文字列情報中に存在するか否かを調べる。検索対象文字列ｆはｎ文字から構成されており、各構成文字コードを
ｆ［ｉ］（０≦ｉ＜ｎ）
とすると、
０≦ｉ＜ｎ
に対し、
ｔ［ｆ［ｉ］］≠０
であれば、文字列情報中に、検索対象文字が全て含まれていることになり、ステップＳ１２に進む。
【００２３】
また、
ｔ［ｆ［ｉ］］＝０
なるｉが少なくとも１つ存在すれば、文字コードｎ［ｉ］は、文字列情報中に存在しないので、ステップＳ１４に進み、検索文字列が存在しない旨のメッセージをＣＲＴ７に表示して、そのファイルに対する検索処理は終了する。
【００２４】
ステップＳ１２では、文字出現テーブルに続く文字列情報部分をＲＡＭ３に読み込む。
ステップＳ１３では、ＲＡＭ３に読み込まれた文字列に基づき、文字列検索処理を行う。
ステップＳ１５では、検索された結果をＣＲＴ３に表示して、処理を終了する。
【００２５】
以下に、ステップＳ１３の文字列検索の詳細処理を示す。
はじめに、検索対象文字列の比較順序の設定を行う。比較対象文字列ｆの各文字コード
ｆ［０］〜ｆ［ｎ−１］
に対する出現回数
ｔ［ｆ［０］］〜ｔ［ｆ−１］］
において、出現回数の少ない順に並べ換えた文字列ｆ’を作成する。即ち、
ｔ［ｆ'［０］≦ … ≦ｔ［ｆ'［ｎ−１］］
となる。この時、ｆ'［０］の位置を０とした時の文字列ｆでの相対位置を表す比較位置列ｐも作成する。
【００２６】
以下に一例を示す。
ｆ＝（ａ，ｂ，ｃ）
のとき、
ｔ［ａ］＝２，ｔ［ｂ］＝６，ｔ［ｃ］＝１
であれば、
ｆ'＝（ｃ，ａ，ｂ）
である。このときの比較位置列ｐは、
ｐ［０］＝０，ｐ［１］＝−２，ｐ［２］＝−１
となる。
【００２７】
次に、文字列情報ｓから順次１文字を取得しｆ'［０］と比較する。一致した場合、順次ｆ'［１］，ｆ'［２］…と比較を行う。但し、比較位置は比較位置列を元に行う。即ち、
ｆ'［０］＝ｓ［ｉ］
ならば、
ｆ'［ｊ］＝ｓ［ｉ＋ｐ［ｊ］］（０＜ｊ＜ｎ）
の比較を行う。前記例では、
ｆ'［０］（ｃ）＝ｓ［ｉ］
ならば、
ｆ'［１］（ａ）
と、          ｓ［ｉ＋ｐ［１］］（ｓ［ｉ−２］）
とを比較し、一致していれば、更に、
ｆ'［２］（ｂ）
と、          ｓ［ｉ＋ｐ［２］］（ｓ［ｉ−１］）
とを比較する。
【００２８】
ｆ'［０］〜ｆ'［ｎ−１］
の全てが一致していれば、検索対象文字列ｆは、文字列情報ｓ中に存在していたことになる。この場合、ステップＳ１５に進み、検索結果の表示を行う。
ｆ'［ｉ］とｓ［ｊ］
が一致した場合、ｔ［ｓ［ｊ］］を１だけ減算する。
【００２９】
但し、
ｔ［ｓ［ｊ］］＝２５５
の場合は減算は行わない。ｆ'［ｋ］で不一致を見た場合、
ｔ［ｆ'［０］］〜ｔ［ｆ'［ｋ−１］］
の値を調べ、
ｔ［ｆ'［ｅ］］＝０
なる
ｅ（０≦ｅ＜ｋ）
が存在すれば、ｓ［ｉ］以降に文字ｆ'［ｅ］は存在しないことから、検索文字列は存在しないと判断し、ステップＳ１４に進み、上述のメッセージを表示して、処理を終了する。
【００３０】
（他の実施の形態）
前記実施の形態では、文字列の比較を文字列情報ｓから順次１文字取り出しては比較文字列ｆ'［０］と比較する方法を取ったが、すでに、
Ｂｏｙｅｒ−Ｍｏｏｒｅ法やＫＭＰ法等の文字列比較を高速化する為のアルゴリズムが考案されているので、それらのアルゴリズムを採用することも可能である。
【００３１】
また、前記実施の形態では、無条件に文字出現テーブルを構築し、ファイルに付加したが、元の文字列情報が少ない場合、文字出現テーブルの存在によって、記憶装置へのアクセス時間が大きくなり、検索時間が長くなる可能性がある。そこで、文字列情報が一定以上の大きさの時のみ、文字出現テーブルを付加することも可能である。
【００３２】
本実施の形態では、一文字毎の出現テーブルを作成したが、２文字以上の組による出現テーブルを作成することも可能である。例えば、英字の場合、ａａ，ａｂ，．．．，ｚｚの２文字の出現テーブルを作成しておけば、より高速な検索が可能である。
なお、本発明は、複数の機器から構成されるシステムに適用しても、一つの機器からなる装置に適用してもよい。
【００３３】
また、本発明の目的は、前述した実施形態の機能を実現するソフトウェアのプログラムコードを記録した記憶媒体を、システムあるいは装置に供給し、そのシステムあるいは装置のコンピュータ（またはＣＰＵやＭＰＵ）が記憶媒体に格納されたプログラムコードを読出し実行することによっても、達成されることは言うまでもない。
【００３４】
この場合、記憶媒体から読出されたプログラムコード自体が前述した実施形態の機能を実現することになり、そのプログラムコードを記憶した記憶媒体は本発明を構成することになる。
プログラムコードを供給するための記憶媒体としては、例えば、フロッピディスク，ハードディスク，光ディスク，光磁気ディスク，ＣＤ−ＲＯＭ，ＣＤ−Ｒ，磁気テープ，不揮発性のメモリカード，ＲＯＭなどを用いることができる。
【００３５】
また、コンピュータが読出したプログラムコードを実行することにより、前述した実施形態の機能が実現されるだけでなく、そのプログラムコードの指示に基づき、コンピュータ上で稼働しているＯＳ（オペレーティングシステム）などが実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
【００３６】
さらに、記憶媒体から読出されたプログラムコードが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書込まれた後、そのプログラムコードの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるＣＰＵなどが実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
【００３７】
本発明を上記記憶媒体に適用する場合、その記憶媒体には、先に説明したフローチャートに対応するプログラムコードを格納することになるが、簡単に説明すると、図６のメモリマップ例に示す各モジュールを記憶媒体に格納することになる。
すなわち、少なくとも、図４のフローチャートの処理手順に対応するプログラムモジュールである「文字出現テーブル生成モジュール」、所定の文字列の含む文字を含むかどうか検索するステップＳ１０、Ｓ１１の処理に対応する「文字出現テーブル検索モジュール」、ステップＳ１２、Ｓ１３の処理に対応する「文字列検索モジュール」、Ｓ１４、Ｓ１５での処理結果を表示する処理モジュールである「検索結果表示モジュール」の各モジュールのプログラムコードを記憶媒体に格納すればよい。
【００３８】
以上説明した様に、本実施の形態によれば、検索対象文字列長がｎの場合、文字出現テーブルに対し、ｎ回の比較で文字列情報中に対象文字が存在するか否かの判断ができる。
また、ある検索対象文字の出現回数がｍの場合、文字列情報中にその文字がｍ回出現したことを検知した時点で、検索を中止できる。
【００３９】
さらに、検索対象文字列中で出現回数の一番少ない文字を優先的に比較し、出現回数をチェックできる。
そのため、特別な装置を必要とせずに高速な文字列検索が可能となる。
【００４０】
【発明の効果】
以上説明したように本発明によれば、文字列を高速に検索できる。
【図面の簡単な説明】
【図１】本発明の一実施の形態を示すブロック構成図である。
【図２】文字出現テーブルを含むファイル形式の概略である。
【図３】  文字出現テーブルの詳細図である。
【図４】文字出現テーブルの構築方法の一例を示すフローチャートである。
【図５】検索処理の一例を示すフローチャートである。
【図６】文字出現テーブルの構築処理、検索処理を実現する各プログラムモジュールの記録媒体上のレイアウト例を示す図である。
【図１】
0003847836.tif 000002
【図２】
0003847836.tif 000003
【図３】
0003847836.tif 000004
【図４】
0003847836.tif 000005
【図５】
0003847836.tif 000006
【図６】
0003847836.tif 000007