JP4565064B2 - 高速マッチング法 - Google Patents

高速マッチング法 Download PDF

Info

Publication number
JP4565064B2
JP4565064B2 JP2003428585A JP2003428585A JP4565064B2 JP 4565064 B2 JP4565064 B2 JP 4565064B2 JP 2003428585 A JP2003428585 A JP 2003428585A JP 2003428585 A JP2003428585 A JP 2003428585A JP 4565064 B2 JP4565064 B2 JP 4565064B2
Authority
JP
Japan
Prior art keywords
search
character
character string
text
skip table
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2003428585A
Other languages
English (en)
Other versions
JP2005190032A (ja
Inventor
英恒 小林
秀男 鈴木
▲躍▼彬 白
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nihon University
Original Assignee
Nihon University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Nihon University filed Critical Nihon University
Priority to JP2003428585A priority Critical patent/JP4565064B2/ja
Publication of JP2005190032A publication Critical patent/JP2005190032A/ja
Application granted granted Critical
Publication of JP4565064B2 publication Critical patent/JP4565064B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Description

本発明は、高速マッチング法に関し、特に、テキストから検索文字列に一致する文字列を検索するための高速マッチング法に関する。
従来の文字列検索方法としては、単純法、KMP(Knuth-Morris-Pratt)法、BM(Boyer-Moore)法、BMH(Boyer-Moore-Horspool)法などがある。単純法は、図10(a)に示すように、テキストと検索文字列を1文字ずつ比較して、不一致なら、検索文字列を1文字右にずらす方法である。単純法でも、実用的に見てそれほどの問題点はないが、最悪の場合の計算量は(検索文字列長m×テキスト文字列長n)に比例する。文字列照合の速度を上げるには、一致または不一致がわかっている無駄な比較をできるだけ避けることが望ましい。
KMP法は、文字列パターン照合問題が線形時間で解けることを最初に示したアルゴリズムである。テキストと検索文字列の一致文字数に応じたシフト量を求めてスキップテーブルにし、スキップテーブルを参照しながらシフトする方法である。テキストを走査する前に、前処理として、検索文字列からスキップテーブルを構成する。検索文字列のうちk文字だけ一致した後で不一致が見つかったときに、テキストのどの文字と検索文字列のどの文字の比較から照合を続ければよいかをあらかじめ調べておく。不一致となった位置から左側k文字がわかっていることを利用して、無駄な比較を避けるように設定するのである。図10(b)に示すように、これをスキップテーブルの形で記録する。このスキップテーブルを求める計算においては、調べる対象は検索文字列のみである。スキップテーブルは、検索文字列長をmとするとサイズ(m+1)×3の配列により表現できる。スキップテーブルの構成に要する時間は、O(m)時間である。テキスト長をnとするとき、文字比較の回数は高々2n回である。したがって、テキスト走査時間はO(n)時間である。しかし、BM法による文字列照合アルゴリズムに比べると、実用上の性能で劣る。
BM法は、KMP法よりもさらに高速な照合アルゴリズムである。スキップテーブル1とスキップテーブル2を設けて、シフト量の多い方を選択する方法である。検索文字列がある程度以上(普通5文字以上くらい)の長さをもつ場合には、最も速い文字列照合アルゴリズムだといわれている。KMP法と同様、計算量は最悪の場合でもO(n)である。KMP法と同様に、照合を進めるにあたっては、それ以前に行った比較の結果として得られた情報をできるだけ活用して、比較の回数を減らす。BM法の長所は、テキスト中の文字の大部分を調べずにすむ可能性があることである。単純法やKMP法では、テキストの中の文字をそれぞれ1回は調べなければならない。比較は最低でもn回になる。これに対して、BM法ではn/m個(nはテキストの長さ、mは検索文字列の長さを表す)の文字とだけ比較すればよいことがある。これによって、特に検索文字列が長いときに、計算時間の大幅な短縮が期待できる。この特徴から、BM法は、実用上きわめて重要なアルゴリズムと見なされている。
BM法ではテキストを走査する前に、検索文字列の中の文字成分と文字の配列を調べ、スキップテーブル1とスキップテーブル2を用意する。スキップテーブル1の作成においては、検索文字列の最後の位置からの部分文字列が、検索文字列の前のほうに含まれていないかを調べ、繰返しのある部分文字列に対するシフト量を計算しておく。スキップテーブル1は、KMP法の場合と同じように計算され、検索文字列に一致しないテキスト文字を全く考慮しない。スキップテーブル1は、検索文字列の中の文字構成だけから計算される。検索文字列に部分マッチしたテキスト文字列が、検索文字列の他の位置に含まれたかどうかでシフト量が決まる。スキップテーブル1の構成に要する時間は、検索文字列長をmとし、使用文字数をqとするとき、O(q+m)時間である。
スキップテーブル2は、検索文字列に一致しないテキスト文字が検索文字列に含まれるか否かを考慮する。スキップテーブル2の作成においては、検索文字列の成分文字を求め、各成分文字の検索文字列内での最後部位置からの最短文字数を、シフト量として計算しておく。スキップテーブル2では、検索文字列との文字比較でマッチしなかったテキスト側の文字によって、シフト量を決める。スキップテーブル2を作成するためには、テキストの中に含まれる可能性のあるすべての文字に対して、シフト量を計算しておく必要がある。したがって、BM法では、スキップテーブル作成が複雑になる。スキップテーブル2の構成に要する時間はO(m)時間である。スキップテーブルの例を、図11(a)に示す。
BM法も単純法と同様、テキストを左から順に調べていく。しかし、いったんテキスト上の位置がきまったら、検索文字列については、逆に右から左に向かって調べる。検索文字列を逆向きに調べることがBM法の要点である。検索文字列の右端から文字比較を行うアイデアによって、多くの場合、テキストの文字のいくつかを読み飛ばすことができ、最も高速なアルゴリズムとして知られている。テキストの文字の参照回数で効率を評価するとき、平均時の参照回数はテキスト長より小さい。最悪時には、O(m×n)回の参照を行う。
文字列照合の際に、検索文字列に対面したテキスト文字列を、検索文字列の最後部から比較する。不一致があると、テキスト側の不一致文字からスキップテーブル2のシフト量を得る。一致する部分文字列の長さまたは不一致文字位置から、スキップテーブル1のシフト量を得る。大きいほうを選んで、テキスト文字列をシフトする。図11(a)に示す例では、最初は0文字一致で、不一致文字がaである。スキップテーブル1のシフト量は1であり、スキップテーブル2のシフト量は2であるので、2文字シフトする。2番目の照合においては、4文字一致で、不一致文字がbである。スキップテーブル1のシフト量は5であり、スキップテーブル2のシフト量は1であるので、5文字シフトする。その後は、同じように、文字比較を検索文字列の最後部から繰り返す。文字列照合に必要な文字比較回数が、ほとんどのケースで、比較回数がO(n+m)回より少なくなる。
BMH法は、スキップテーブル2のみを使うように単純化したものである。図11(b)に示すように、部分文字列の右端の文字でスキップテーブルを引いて、シフト量を求める。図11(b)に示す例では、最初は右端の文字がhであるので、シフト量は6である。2番目の照合においては、右端の文字がgであるので、シフト量は6である。
上記従来の文字列検索方法のうち、高速なBM法ではスキップテーブルの作成方法が複雑である。簡単な方法では検索速度が遅い。より単純で高速な方法を、本発明者は非特許文献1で提案した。この方法は、BMH法を改良したものである。これをBK法とよぶことにし、簡単に説明する。図12のフローチャートに示すように、テキストの文字が検索文字列にあれば、検索文字の先頭文字のシフト量を(検索文字数m)とする。その次の文字のシフト量を(検索文字数m−1)とする。検索文字の末尾文字のシフト量を1とする。検索文字列に無いテキスト文字については、シフト量を(検索文字数m+1)とする。
文字列検索は、図13のフローチャートに示すように実行する。検索文字列と比較するテキストの部分文字列の次を指すように、ポインタを設定する。検索文字列と部分文字列を比較して不一致の場合、ポインタの指すテキストの文字を引数として、スキップテーブルを引き、シフト量を求め、検索文字列と比較する部分文字列の位置をシフトして検索を繰り返す。スキップテーブルと検索の例を図14に示す。
Yuebin Bai, Hidetsune Kobayashi: "New String Matching Technology for Network Security", Proceedings of 17th International Conference on Advanced Information Networking and Applications(AINA'03), Mrch 27-29, 2003, Xi'an, China, pp.198-201.
しかし、従来の高速マッチング法(BK法)では、テキスト文字数の回数に比例して、スキップテーブル作成の時間がかかり、十分高速ではないという問題があった。テキスト中に同じ文字があった場合、同じことを繰り返しており、むだがある。本発明は、上記従来の問題を解決して、簡単な方法でスキップテーブルを作成できる高速マッチング法を実現することを目的とする。
上記の課題を解決するために、本発明では、高速マッチング法を以下のように構成した。使用文字セットの各文字のうちテキストと検索文字列とにある文字に対応するシフト量を検索文字列逆順番号数とし、テキストに無い文字と検索文字列に無い文字に対応するシフト量を(検索文字数+1)としてスキップテーブルを作成し、検索文字列と比較するテキスト中の部分文字列の直近右側の文字を引数としてスキップテーブルを引いてシフト量を求め、検索文字列と比較するテキスト中の次の部分文字列を決定し、部分文字列を検索文字列と比較する。
また、高速マッチング法を以下のように構成した。検索文字列のうち最も右のワイルドカードより右にある文字に対応するシフト量を検索文字列逆順番号数とし、最も右のワイルドカードを含めてそれより左にある文字に対応するシフト量を、最も右のワイルドカードの検索文字列逆順番号数としてスキップテーブルを作成し、検索文字列と比較するテキスト中の部分文字列の直近右側の文字を引数としてスキップテーブルを引いてシフト量を求め、検索文字列と比較するテキスト中の次の部分文字列を決定し、部分文字列を検索文字列と比較する。
本発明では、上記のように構成したことにより、テキスト中の同じ文字について繰り返し同じ操作をする必要がなくなるので、スキップテーブルの作成が短時間ででき、検索に要する時間が短縮される。検索文字列さえ決まればシフト量を計算でき、スキップテーブルを作成することができるので、リアルタイム性を要求されるネットワークのプロトコル等をリアルタイムに検索でき、検索文字列毎の解析が可能となる。ネットワーク上を流れる信号の中から特定のウィルスパターンをリアルタイムに検索したり、特定の検索文字列で与えられる不法なパケットをリアルタイムに検索することができる。また、特定IPを発見したときには、ただちにそのパケットを削除し、通過させないこともできる。あいまい性を考慮して類似の画像(動画、静止画)を検出できる。
以下、本発明を実施するための最良の形態について、図1〜図9を参照しながら詳細に説明する。
本発明の実施例1は、使用文字セットの各文字のうちテキストと検索文字列とにある文字に対応するシフト量を検索文字列逆順番号数とし、テキストに無い文字と検索文字列に無い文字に対応するシフト量を(検索文字数+1)としてスキップテーブルを作成し、検索文字列と比較するテキスト中の部分文字列の直近右側の文字を引数としてスキップテーブルを引いてシフト量を求め、検索文字列と比較するテキスト中の次の部分文字列を決定し、部分文字列を検索文字列と比較する高速マッチング法である。
本発明の実施例1における高速マッチング法を実行する装置の構成を説明する。図1は、本発明の実施例1における高速マッチング法を実行する装置の概念図である。図1において、入力装置1は、各種データとコマンドなどを入力する手段であり、キーボードやマウスなどの入力手段と、モデムやCDROM装置などの大量のデータを取り込むことができる入力手段である。使用文字セット記憶部2は、使用文字セットを格納しておくメモリである。テキスト記憶部3は、検索対象テキストを格納しておくメモリである。検索文字列記憶部4は、検索文字列を格納しておくメモリである。スキップテーブル作成部5は、使用文字セットとテキストと検索文字列を参照しながらスキップテーブルを作成する演算部である。スキップテーブル記憶部6は、スキップテーブルを格納しておくメモリである。文字列検索部7は、スキップテーブルを参照しながらテキストから検索文字列をサーチする演算部である。検索結果記憶部8は、検索文字列に一致するテキストの部分文字列の位置を格納しておくメモリである。出力装置9は、検索結果を出力する表示装置などである。
本発明の実施例1における高速マッチング法の動作手順を説明する。図2は、高速マッチング法のスキップテーブル作成手順を示すフローチャートである。図3は、高速マッチング法の検索手順を示すフローチャートである。図4は、本発明の実施例1における高速マッチング法のスキップテーブルと検索例を示す図である。図5は、高速マッチング法の実験結果を示す表である。
動作手順の概略を説明する。最初に使用文字セットを決める。例えば、ASCII半角英小文字の26字とする。「a」から1文字ずつ調べる。その文字がテキスト中と検索文字列中との両方にあれば、スキップテーブルにシフト量を登録する。シフト量は検索文字列逆順番号数とする。すなわち、検索文字数がmであれば、検索文字の先頭文字に対応するシフト量はmであり、次の文字に対応するシフト量は(m−1)であり、最後の文字に対応するシフト量は1である。テキスト中にあって検索文字列中になければ、スキップテーブルにその他の文字として登録する。シフト量は(検索文字数+1)とする。その文字がテキスト中になければ無視して、スキップテーブルには何も登録しない。スキップテーブル中に、シフト量が登録されていない検索文字があれば、テキスト中に検索文字列は存在しないことが、サーチをしなくてもわかる。このスキップテーブルを使って、従来のBK法と同様にサーチする。
図2を参照しながら、高速マッチング法のスキップテーブル作成手順を説明する。ステップ1で、テキストの長さと検索文字列の長さを比較して、検索文字列が長ければマッチすることはありえないので終了とする。ステップ2で、使用文字セットから1文字ずつ取り出し、ステップ3で、テキスト中にあるかどうか調べる。テキスト中になければ何もしなし。ステップ4で、検索文字列中にあるかどうか調べ、あればステップ5でスキップテーブルに登録する。なければ、ステップ6でその他の文字として登録する。ステップ7でテキスト終了かどうか調べ、終了でなければステップ2に戻り、次の使用文字について処理を行う。
使用文字セットの文字がテキスト中にあるか否かの検査を省略してもよい。使用文字セットの文字が検索文字列中にあれば、スキップテーブルに登録する。検索文字列中になければ、スキップテーブルにその他の文字として登録する。使用文字セットの文字がテキスト中にない場合でも、スキップテーブルに登録されるが、サーチ段階ではマッチングしないので、エラーにはならない。処理時間は条件により大差ない場合もあるが、短縮される場合もある。この方法であれば、テキストが無くてもスキップテーブルを作成できるので、テキストを受信しながら検索文字をサーチすることもできる。
図3を参照しながら、高速マッチング法の検索手順を説明する。ステップ11で、検索文字列をテキストの先頭に合わせ、ポインタをその次の文字にセットする。ステップ12で、検索文字列とテキストの部分文字列を比較する。ステップ13で一致すれば、ステップ14で一致結果を出力する。ステップ15でテキストが終わりでなければ、ステップ16で、ポインタの指す文字を引数として、スキップテーブルを引き、シフト量を求める。ステップ17で、検索文字列をシフトして、ポインタも移動する。これをテキストが終わるまで繰り返す。
図4を参照しながら、高速マッチング法のスキップテーブルと検索例を説明する。図4(a)に示すように、使用文字セットをASCII英小文字の「a〜z」26文字とする。検索文字列を「string」とする。スキップテーブルは、図示のようになる。最初の比較の時には、ポインタが「s」を指しているので、シフト量は6となる。次には、ポインタが「f」を指しているので、シフト量は7となる。図4(b)に示すように、検索文字列が「strong」であって、テキスト中に「o」がないとすると、スキップテーブルに「o」は登録されない。サーチの前にスキップテーブルと検索文字列を比較すれば、マッチしないことがわかる。図4(c)に示すように、検索文字列が「start」であり同じ文字を2つ以上含んでいる場合は、シフト量が小さい方の数が1つだけ登録される。実際のスキップテーブルにおける「t」の欄は1つだけである。
図5を参照しながら、高速マッチング法の実験結果を説明する。この実験は、乱数を発生してテキストと検索文字列を生成し、スキップテーブルの作成とテキスト検索を繰り返したものである。表(a)は、最大テキスト長と最大検索文字列長を変えて実験したものである。本発明1は、スキップテーブルの作成において、テキストを参照したものであり、本発明2は、テキストを参照しないで作成したものである。テキストが長い場合には、BK法と比較してはるかに高速になっている。表(b)は、最大検索文字列長のみを変えて実験したものである。検索文字列が長い場合には、BK法と比較してはるかに高速になっている。表(c)は、最大テキスト長を短い一定値にして最大検索文字列長を短い範囲で変えて実験したものである。BK法と比較するとかえって低速になっている。本発明は、テキストと検索文字列が長い場合に有効であることがわかる。
上記のように、本発明の実施例1では、高速マッチング法を、使用文字セットの各文字のうちテキストと検索文字列とにある文字に対応するシフト量を検索文字列逆順番号数とし、テキストに無い文字と検索文字列に無い文字に対応するシフト量を(検索文字数+1)としてスキップテーブルを作成し、検索文字列と比較するテキスト中の部分文字列の直近右側の文字を引数としてスキップテーブルを引いてシフト量を求め、検索文字列と比較するテキスト中の次の部分文字列を決定し、部分文字列を検索文字列と比較する構成としたので、テキスト中の同じ文字について繰り返し同じ操作をする必要がなくなり、スキップテーブルの作成が短時間ででき、前処理時間が短縮されて検索時間との合計時間が短くなる。
本発明の実施例2は、検索文字列のうち、最も右のワイルドカードより右にある文字に対応するシフト量を検索文字列逆順番号数とし、最も右のワイルドカードを含めてそれより左の文字に対応するシフト量を、最も右のワイルドカードの検索文字列逆順番号数としてスキップテーブルを作成し、検索文字列と比較するテキスト中の部分文字列の右側直近の文字を引数としてスキップテーブルを引いてシフト量を求め、検索文字列と比較するテキスト中の次の部分文字列を決定し、部分文字列を検索文字列と比較することにより、ワイルドカードを用いてあいまい検索ができる高速マッチング法である。
図6は、本発明の実施例2における高速マッチング法を実行する装置の概念図である。文字列検索部10は、スキップテーブルを参照して減分幅を変えながらテキストから検索文字列をサーチする演算部である。実施例2における高速マッチング法を実行する装置の構成は、図1に示した実施例1の装置と同じである。異なるところは、スキップテーブルと検索文字列に関する部分である。図7は、本発明の実施例2における高速マッチング法のスキップテーブル作成手順を示すフローチャートである。図8は、高速マッチング法の検索手順を示すフローチャートである。図9は、高速マッチング法のスキップテーブルと検索例を示す図である。
実施例2における高速マッチング法の処理手順を説明する。検索文字列の一部の文字を、すべての文字に一致するワイルドカードとする。検索文字列中でワイルドカードの右側にある文字のシフト量は、検索文字列逆順番号数とする。最も右の文字のシフト量は1であり、次の文字のシフト量は2である。ワイルドカードがなければ、先頭の文字のシフト量は検索文字列数である。検索文字列中の最も右のワイルドカードが、右から数えて3番目にあるとすると、そのワイルドカードのシフト量は3である。最も右のワイルドカードより左にある文字とワイルドカードのシフト量は、最も右のワイルドカードのシフト量と同じである。
さらに、テキストと検索文字列を順番に比較するときの減分幅を変える。テキストと検索文字列の添字を減少させる幅は、通常は1であるが、ワイルドカードを含む場合は、ワイルドカードを比較しないて飛び越すので、その場合は2以上となる。検索文字列のある文字の左にワイルドカードが1つあれば、その文字に対応する減分幅は2である。連続して2つあれば3である。検索文字列が(*tring)ならば、各文字に対応する減分幅は(121111)である。以下同様に、
(s*ring,112111), (st*ing,111211), (str*ng,111121), (stri*g,111112),
(strin*,111111), (**ring,113111), (s**ing,111311), (st**ng,111131),
(str**g,111113), (stri**,111111), (s*r*ng,112121), (s*r**g,112113)
となる。
実施例2における高速マッチング法のアルゴリズムを説明する。テキストと検索文字列を与え、テキストの中に検索文字列が現れるかどうか調べ、現れれば、その位置をすべて求めるアルゴリズムである。最初に、使用文字セットを定義し、配列に格納し、使用文字の個数を求める。使用文字セットとは、テキストを構成する個個の文字のことであり、例えばアルファベットの小文字から構成されているテキストならば,'a'から'z'までの26個の文字となる。テキストや検索文字列が不明でも、通常、テキストを構成する文字を限定することは可能である。検索文字列入力時は、ワイルドカードに目印をつける。例えば、ワイルドカードを「*」とする。検索文字列からワイルドカードが最後に現れる位置を求め、減分幅を求めて配列に格納する。入力したテキストと検索文字列の長さを求め、検索文字列長がテキスト長より長ければ、テキストの中に検索文字列は現れないので、この場合は何もせずに終了する。
前処理では、スキップテーブルを作成する。使用文字セットから1文字ずつ取り出し、文字が尽きるまで、以下の操作を行う。取り出した文字が検索文字列に含まれるか調べる。検索文字列に含まれていれば、その文字に対応するシフト量を配列に格納する。シフト量は、その文字(2文字以上あれば最も右の文字)の検索文字列逆順番号数か、最も右のワイルドカードの検索文字列逆順番号数か、いずれか小さい方とする。検索文字列に含まれていなければ、シフト量は最も右のワイルドカードの検索文字列逆順番号数とする。配列の添字は、取り出した文字の内部コードを利用する。すなわち、文字コードでスキップテーブルを引いて、シフト量を求めることができるようにする。
図7を参照しながら、スキップテーブル作成手順を説明する。ステップ21で、使用文字セットから1文字ずつ取り出し、ステップ22で、検索文字列中にあるかどうか調べる。なければステップ25で、ワイルドカードシフト量を登録する。
あればステップ23で、最右のワイルドカードより右かどうか調べる。最右のワイルドカードより左ならば、ステップ25で、ワイルドカードシフト量を登録する。最右のワイルドカードより右ならば、スキップテーブルにシフト量を登録する。ステップ26で、使用文字セット終了かどうか調べ、終了でなければステップ21に戻り、次の使用文字について処理を行う。
後処理では、検索を行う。実際の検索では、テキスト中の検索開始位置を決める。テキスト中のこの位置から前方へ向かって1文字ずつ取り出し、検索文字列の最後部の文字から前方へ向かって1文字ずつ取り出し、1文字ずつ比較をして行く。すなわち、テキスト中及び検索文字列中の添字は減少して行く。このため、テキスト中の先頭の検索文字列文字数未満の部分に検索文字列が存在することはないので、検索開始位置の初期値を(検索文字列文字数−1)とする。ただし、先頭位置を0とする。
テキスト中を移動する検索初期値を表す添字kがテキスト長より短い間、以下の操作を繰り返す。検索文字列中を移動する添字jが最後部の文字を指すように初期化する。テキスト中を移動するための添字iの初期値を検索初期値kとする。スキップテーブルを引く文字を指すポインタは、(k+1)の位置にある。添字jが検索文字列中を移動でき、かつテキストのi番目と検索文字列のj番目が等しい間、それぞれの添字を減分幅だけ減少させる。このループを抜けたとき、検索文字列の添字jが負であれば、検索文字列を構成する全ての文字と一致したことになり、文字列が発見されたことになる。文字列発見後のテキスト中の検索初期値kがテキスト長より短いか調べる。短かければ、次の検索初期値の候補を計算する。短くなければ、一連の検索処理を終了する。
図8を参照しながら、高速マッチング法の検索手順を説明する。基本的な手順は、図3に示した実施例1の手順と同じである。ステップ31で、検索文字列をテキストの先頭に合わせ、ポインタをその次の文字にセットする。ステップ32で、ワイルドカードをスキップしながら、検索文字列とテキストの部分文字列を比較する。ステップ33で一致すれば、ステップ34で一致結果を出力する。ステップ35でテキストが終わりでなければ、ステップ36で、ポインタの指す文字を引数として、スキップテーブルを引き、ワイルドカードを考慮したシフト量を求める。ステップ37で、検索文字列をシフトして、ポインタも移動する。これをテキストが終わるまで繰り返す。
図9に示す例題を使って、あいまい検索の例を説明する。テキスト
"stringstryzgsearchstringsfindstrings"
の中から検索文字列"str**gs"をすべて検索する場合を考える。使用文字セットはアルファベット小文字とする。スキップテーブルnext[]は、
next['a']←3 next['b']←3 next['c']←3 next['d']←3 next['e']←3
next['f']←3 next['g']←2 next['h']←3 next['i']←3 next['j']←3
next['k']←3 next['l']←3 next['m']←3 next['n']←3 next['o']←3
next['p']←3 next['q']←3 next['r']←3 next['s']←1 next['t']←3
next['u']←3 next['v']←3 next['w']←3 next['x']←3 next['y']←3
next['z']←3
となる。
テキストの先頭の7文字と検索文字列を比較すると、テキストは「strings」であるので、一致したことを出力する。このときのポインタ先の文字は「t」であるので、スキップテーブルを引くと、シフト量は3となる。検索文字列を3文字右にシフトしてテキストと比較する。テキストは「ingstry」で不一致であるので、ポインタ先の文字「z」のシフト量3文字だけ右にシフトしてテキストと比較する。テキストは「stryzgs」であるので、一致したことを出力する。ポインタ先の文字「e」のシフト量3文字だけ右にシフトしてテキストと比較する。テキストは「yzgsear」で不一致であるので、ポインタ先の文字「c」のシフト量3文字だけ右にシフトしてテキストと比較する。テキストは「searchs」で不一致であるので、ポインタ先の文字「t」のシフト量3文字だけ右にシフトしてテキストと比較する。
テキストは「rchstri」で不一致であるので、ポインタ先の文字「n」のシフト量3文字だけ右にシフトしてテキストと比較する。テキストは「strings」であるので、一致したことを出力する。ポインタ先の文字「f」のシフト量3文字だけ右にシフトしてテキストと比較する。テキストは「ingsfin」で不一致であるので、ポインタ先の文字「d」のシフト量3文字だけ右にシフトしてテキストと比較する。テキストは「sfindst」で不一致であるので、ポインタ先の文字「r」のシフト量3文字だけ右にシフトしてテキストと比較する。テキストは「ndstrin」で不一致であるので、ポインタ先の文字「g」のシフト量2文字だけ右にシフトしてテキストと比較する。テキストは「strings」であるので、一致したことを出力する。
上記のように、本発明の実施例2では、高速マッチング法を、検索文字列のうち、最も右のワイルドカードより右にある文字に対応するシフト量を検索文字列逆順番号数とし、最も右のワイルドカードを含めてそれより左の文字に対応するシフト量を、最も右のワイルドカードの検索文字列逆順番号数としてスキップテーブルを作成し、検索文字列と比較するテキスト中の部分文字列の右側直近の文字を引数としてスキップテーブルを引いてシフト量を求め、検索文字列と比較するテキスト中の次の部分文字列を決定し、部分文字列を検索文字列と比較する構成としたので、ワイルドカードを用いて高速にあいまい検索ができる。
本発明の高速マッチング法は、データから特定のパターンを検索する方法として最適である。さらに、ネットワーク上でのウィルスパターンや不法パケットのリアルタイム検索や、人物特定や形状特定や場面特定や動作特定など画像処理への応用も可能である。
本発明の実施例1における高速マッチング法を実行する装置の概念図、 本発明の実施例1における高速マッチング法のスキップテーブル作成手順を示すフローチャート、 本発明の実施例1における高速マッチング法の検索手順を示すフローチャート、 本発明の実施例1における高速マッチング法のスキップテーブルと検索例の説明図、 本発明の実施例1における高速マッチング法の実験結果表、 本発明の実施例2における高速マッチング法を実行する装置の概念図、 本発明の実施例2における高速マッチング法のスキップテーブル作成手順を示すフローチャート、 本発明の実施例2における高速マッチング法の検索手順を示すフローチャート、 本発明の実施例2における高速マッチング法のスキップテーブルと検索例を示す図、 従来の文字列検索方法の説明図、 従来の文字列検索方法の説明図、 従来の高速マッチング法のスキップテーブル作成手順を示すフローチャート、 従来の高速マッチング法の検索手順を示すフローチャート、 従来の高速マッチング法による検索例の説明図である。
符号の説明
1 入力装置
2 使用文字セット記憶部
3 テキスト記憶部
4 検索文字列記憶部
5 スキップテーブル作成部
6 スキップテーブル記憶部
7 文字列検索部
8 検索結果記憶部
9 出力装置
10 文字列検索部

Claims (1)

  1. 各種データとコマンドなどを入力する入力装置と、前記入力装置から入力した使用文字セットを格納しておく使用文字セット記憶部と、前記入力装置から入力した検索対象テキストを格納しておくテキスト記憶部と、特定文字であるワイルドカードを含む検索文字列を前記入力装置から入力して格納しておく検索文字列記憶部と、前記使用文字セットと前記検索対象テキストと前記検索文字列を参照しながらスキップテーブルを作成するスキップテーブル作成部と、前記スキップテーブルを格納しておくスキップテーブル記憶部と、前記スキップテーブルを参照して減分幅を変えながら前記検索対象テキストから前記検索文字列をサーチする文字列検索部と、前記検索文字列に一致するテキストの部分文字列の位置を格納しておく検索結果記憶部と、検索結果を出力する出力装置とを具備する文字列検索装置において実行する高速マッチング法であって、前記使用文字セット記憶部に前記使用文字セットを格納し、前記スキップテーブル作成部で、前記使用文字セットから検査文字として1文字を取り出し、当該検査文字が前記検索文字列にあるかどうかを調べ、当該検査文字が前記検索文字列にないか、あっても前記検索文字列中の最右のワイルドカードより右でなければ、前記検索文字列中における最右のワイルドカードが右端から何番目の位置にあるかという順序数を当該検査文字に対応するシフト量として前記スキップテーブルに登録し、当該検査文字が前記検索文字列中における最右のワイルドカードより右にあれば、前記検索文字列中における当該検査文字が右端から何番目の位置にあるかという順序数を当該検査文字に対応するシフト量として前記スキップテーブルに登録し、この処理を前記使用文字セットが終了するまで繰り返し、前記使用文字セットが終了すれば前記スキップテーブルの完成とし、前記文字列検索部で、前記検索対象テキストの先頭にあって前記検索文字列と同数である文字列を最初の比較部分文字列とし、前記比較部分文字列の次にポインタを設定し、前記ワイルドカードをスキップしながら前記比較部分文字列と前記検索文字列を比較し、前記比較部分文字列と前記検索文字列の対応する位置の文字がすべて一致したら検索文字列発見とし、不一致の文字があって前記検索対象テキスト文字の終了でなければ、前記検索対象テキスト中の前記ポインタの指す文字で前記スキップテーブルを引いてシフト量を得て、前記比較部分文字列の位置を前記シフト量だけシフトして前記ポインタを新しい比較部分文字列の次に設定するように更新して、前記検索対象テキストの文字が終了するまで繰り返すことを特徴とする高速マッチング法。
JP2003428585A 2003-12-25 2003-12-25 高速マッチング法 Expired - Fee Related JP4565064B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2003428585A JP4565064B2 (ja) 2003-12-25 2003-12-25 高速マッチング法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2003428585A JP4565064B2 (ja) 2003-12-25 2003-12-25 高速マッチング法

Publications (2)

Publication Number Publication Date
JP2005190032A JP2005190032A (ja) 2005-07-14
JP4565064B2 true JP4565064B2 (ja) 2010-10-20

Family

ID=34787500

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2003428585A Expired - Fee Related JP4565064B2 (ja) 2003-12-25 2003-12-25 高速マッチング法

Country Status (1)

Country Link
JP (1) JP4565064B2 (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9825841B2 (en) 2012-06-29 2017-11-21 Telefonaktiebolaget Lm Ericsson (Publ) Method of and network server for detecting data patterns in an input data stream
US9870502B2 (en) 2012-09-28 2018-01-16 Telefonaktiebolaget Lm Ericsson (Publ) Apparatus for, a method of, and a network server for detecting data patterns in a data stream

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5523191B2 (ja) 2010-04-30 2014-06-18 株式会社ジャパンディスプレイ タッチ検出機能付き表示装置
CN112733524A (zh) * 2020-12-31 2021-04-30 浙江省方大标准信息有限公司 标准编号自动校正及标准状态批量核查方法、***、装置

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9825841B2 (en) 2012-06-29 2017-11-21 Telefonaktiebolaget Lm Ericsson (Publ) Method of and network server for detecting data patterns in an input data stream
US9870502B2 (en) 2012-09-28 2018-01-16 Telefonaktiebolaget Lm Ericsson (Publ) Apparatus for, a method of, and a network server for detecting data patterns in a data stream

Also Published As

Publication number Publication date
JP2005190032A (ja) 2005-07-14

Similar Documents

Publication Publication Date Title
JP2683870B2 (ja) 文字列検索システム及び方法
US10552699B2 (en) Robust string text detection for industrial optical character recognition
US7240048B2 (en) System and method of parallel pattern matching
JP3689455B2 (ja) 情報処理方法及び装置
JP2726568B2 (ja) 文字認識方法及び装置
US8032479B2 (en) String matching system and program therefor
US8095526B2 (en) Efficient retrieval of variable-length character string data
US20140372477A1 (en) Conditional string search
JP2005025763A (ja) 構造化文書の分割プログラム、分割装置、及び分割方法
CN106959962B (zh) 一种多模式字符串匹配方法和装置
JP3480404B2 (ja) 単語大分類装置及びその単語大分類方法並びにその制御プログラムを記録した記録媒体
EP2093700A2 (en) Pattern recognition method, and storage medium which stores pattern recognition program
Clifford et al. Dictionary matching in a stream
US8701162B1 (en) Method and system for detecting and countering malware in a computer
JP4565064B2 (ja) 高速マッチング法
KR100959244B1 (ko) 계층화된 시프트 테이블을 이용한 고속의 문자열 패턴 탐지방법
US9690873B2 (en) System and method for bit-map based keyword spotting in communication traffic
US7548652B1 (en) Rapid comparison of similar data strings
JP2022103676A (ja) 情報処理装置、情報処理方法、プログラム
JP3852757B2 (ja) 文字列照合方法、これを用いた文書処理装置及びプログラム
KR101245631B1 (ko) 근사조합장치, 근사조합방법, 프로그램 및 기록매체
CN115525801A (zh) 网络安全***的模式匹配算法
KR102146625B1 (ko) 오토마타 기반 증분적 중위 확률 계산 장치 및 방법
JP7172343B2 (ja) 文書検索用プログラム
Zhang An improved Wu-Manber multiple patterns matching algorithm

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20061219

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20090825

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20091021

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20100112

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100215

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20100316

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20100419

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130813

Year of fee payment: 3

LAPS Cancellation because of no payment of annual fees