JP4810915B2 - データ検索装置及び方法、並びにコンピュータ・プログラム - Google Patents

データ検索装置及び方法、並びにコンピュータ・プログラム Download PDF

Info

Publication number
JP4810915B2
JP4810915B2 JP2005218382A JP2005218382A JP4810915B2 JP 4810915 B2 JP4810915 B2 JP 4810915B2 JP 2005218382 A JP2005218382 A JP 2005218382A JP 2005218382 A JP2005218382 A JP 2005218382A JP 4810915 B2 JP4810915 B2 JP 4810915B2
Authority
JP
Japan
Prior art keywords
character
state
state transition
transition
searched
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
JP2005218382A
Other languages
English (en)
Other versions
JP2007034777A (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.)
NEC Corp
Original Assignee
NEC Corp
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 NEC Corp filed Critical NEC Corp
Priority to JP2005218382A priority Critical patent/JP4810915B2/ja
Priority to US11/493,695 priority patent/US20070027867A1/en
Publication of JP2007034777A publication Critical patent/JP2007034777A/ja
Application granted granted Critical
Publication of JP4810915B2 publication Critical patent/JP4810915B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/903Querying
    • G06F16/90335Query processing
    • G06F16/90344Query processing by using string matching techniques

Landscapes

  • Engineering & Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Description

本発明は、あらかじめ与えられた1つ以上のパターンが、別途与えられた文字列の中に部分文字列として存在するか否かを判定するデータ検索技術に関する。
入力されたデータの中に特定のパターンが存在するか否かを判定する技術は、情報処理分野における要素技術であり、その用途は多岐にわたる。例えば、ワードプロセッサでのテキスト検索、バイオテクノロジーにおけるDNA解析、電子メールなどに潜むコンピュータウィルスの検知、等である。
特に、パターンが複数個存在し、かつ、それぞれのパターンが一意である場合に適した検索アルゴリズムとしてAho-Corasick法(非特許文献1)が広く知られている。
Aho-Corasick法について簡単に説明する。Aho-Corasick法は、検索される対象の文字列(テキスト等)の先頭から1文字ずつ取り出しながら、状態遷移図に従って状態遷移を繰り返すことで検索を達成する。
図2は、状態遷移図の一例であり、5つのパターンABC、ABD、ABE、ABF、BAを検索するためのものである。円で囲まれた数字が状態を示し、実線の矢印が状態遷移を表す。状態遷移の結果、2重の円で囲まれた状態へ到達すると、その状態に対応するパターンが検出されたことになる。例えば、図2においては、状態“5”に到達したらパターンABCが発見されたことになる。
実線の矢印に付与されている文字は、状態遷移するための条件となる文字である。また、点線の矢印は、失敗遷移を表す。ある状態において入力された文字に対応する状態遷移が存在しなかったとき、その状態の失敗遷移先の状態へ移動して、移動後の状態からの状態遷移を再度試みる。
例として、図2において、状態“3”にいるときに文字Aが入力された際の遷移先を考える。状態“3”から文字Aで次の状態へ遷移できないため、状態“3”からの失敗遷移を辿って状態“2”へ移動する。状態“2”からは文字Aで状態“4”へ遷移できるから、遷移先は状態“4”となり、パターンBAが検索される。なお、図2では状態“0”への失敗遷移は省略されている。
Aho-Corasick法を実現する従来の技術について述べる。
広く利用されている従来技術として、全ての状態と全ての文字についての遷移先が列挙された状態遷移表を用いる方法がある。以後、この方法を従来技術1と称する。
図13は、従来技術1における状態遷移表であり、図2の状態遷移図から生成されたものである。現在の状態と入力文字が決まれば、この状態遷移表を1度だけ参照して、次の状態を決定できる。例えば、現在の状態が状態“3”で入力文字がAであったら、図13の状態遷移表を参照して、次の状態である状態“4”を即時に得られる。状態“0”から開始し、入力された文字列の中の文字について順次この操作を繰り返すことで、文字列検索を達成する。
状態遷移表をコンパクトに表現して必要メモリ量を削減する従来技術として非特許文献2に記載されたBitmapped Aho-Corasick法がある。以後、この方法を従来技術2と称する。
従来技術2の最大の特徴は、次の状態へ遷移できるかどうかを文字ごとに0と1のビットマップで表現することである。図14は、従来技術2における状態遷移表であり、図2の状態遷移図から生成されたものである。図14のビットマップ920は、状態ごとに存在し、それぞれ文字の種類の数に等しい長さを持つ。ビットマップ920の、ある文字に対応するビットが1であるとき、その文字によって次の状態へ遷移できることになる。ある文字に対応するビットが0であるとき、その文字に関しては次の状態へ遷移できず、失敗遷移を辿ることになる。失敗遷移先922が、失敗遷移先の状態の番号である。
次状態921は、状態遷移に成功したときの、次の状態の番号である。ただし、次の状態が複数存在する場合は、それらの番号のうち最小のものになる。例えば、図2の状態遷移図においては、状態“3”から状態“5”、“6”、“7”、“8”へ遷移できる。従って、状態“3”の次状態921は、これらの番号の最小値である5となる。
従来技術2の動作について図14の状態遷移表を用いて簡潔に説明する。例として、現在の状態が状態“3”で入力文字がEであるとする。はじめに、状態“3”のビットマップ920の文字Eに対応するビットを調べる。そのビットは1であるから、状態“3”から文字Eで次の状態へ遷移できることが分かる。次に、文字Eによって具体的にどの状態に遷移するかを求める。状態“3”のビットマップ920の文字Eに対応するビットより左にあるビットのうち、1が立っているビットの個数を計数する。この場合、文字A、B、C、Dに対応するビットを調べる。文字Aに対応するビットは0、Bは0、Cは1、Dは1であるから、1が立っているビットの個数は2となる。1が立っているビットの個数と、状態“3”の次状態921の和、すなわち7(=2+5)が、次の状態の番号になる。従って、状態“3”から文字Eで状態“7”へ遷移できたことになる。
従来技術1には、文字の種類の数が多くなると状態遷移表を格納するためのメモリの容量が大きくなるという欠点がある。従来技術1の状態遷移表(図13)は、全ての状態の数と全ての文字の種類の数の積に等しい数のエントリを有する。文字の種類の数に正比例して必要なメモリの量が増加するため、文字の種類の数が256や65536のように多くなると、この問題は無視できないほど顕著になる。
一方、従来技術2には、文字の種類の数が多くなると状態遷移の際の計算量が増加し検索速度が低下するという欠点と、文字の種類の数が多くなると状態遷移表を格納するためのメモリの容量が大きくなるという欠点がある。前述のように従来技術2においては、遷移先を求める際に、ビットマップ中の1が立っているビットの数を計数する。ビットマップの幅は文字の種類の数に等しいから、入力文字が均一に分布すると仮定すると、平均的に{(文字の種類の数)−1}÷2個のビットについて、それらのビットが1であるか否かを判定しなければならない。例えば、文字の種類の数が256の場合、ビットマップの幅は256ビットであるから、1回の状態遷移で平均的に127.5ビットについて0か1かを判定することになり、多くの計算資源が消費される。また、ビットマップの幅は文字の種類の数に等しいから、文字の種類の数が多くなると状態遷移表を格納するためのメモリの量も増大する。
著者:A. V. Aho and M.J.Corasick、題目:Efficient String Matching: An Aid to Bibliographic Search、出典:Communications of the ACM, 18(6):333-340, June 1975 著者:N. Tuck, T. Sherwood, B.Calder, and G. Varghese、題目:DeterministicMemory-Efficient String Matching Algorithms for Intrusion Detection、出典:In Proceedings of the IEEE Infocom Conference [1], 0-7803-8356-7/04,2004
本発明の目的は、状態遷移表を格納するためのメモリの量および検索速度が、文字の種類の数にほとんど依存しない文字列検索装置および文字列検索方法、並びにコンピュータ・プログラムを提供することにある。
この目的を達成するため、本発明は、被検索文字列を1文字ずつ文字列検索装置に入力し、該文字列検索装置において、状態遷移メモリに格納されている状態遷移表を参照して複数の検索処理を行なうことにより、あらかじめ与えられた1つ以上のパターンが、別途与えられた被検索文字列の中に部分文字列として存在するか否かを判定するデータ検索方法であって、
(a)被検索文字の夫々と文字コードとの対応関係を前記文字列検索装置に予め保持しておき、その対応関係を参照することにより、前記文字列検索装置にラッチした被検索文字に対応する文字コードを得ると共に、ハッシュ関数レジスタに保持している直前の検索処理で求めたハッシュ関数を該文字コードに適用して、ハッシュ演算器を用いて該文字コードに関するハッシュ値を求め、
(b)該ハッシュ値を、前記直前の検索処理で求めた前記状態遷移メモリのアドレスに加えて新たなアドレスを求め、
(c)該新たなアドレスに格納されている状態遷移の条件となる照合文字と、状態遷移が確定するか否かを示す複数の遷移確定フラグと、前記あらかじめ与えられたパターンを識別する複数のパターン番号と、複数のハッシュ関数と、複数の状態遷移メモリのアドレスのそれぞれを、前記新たなアドレスに基づいて前記状態遷移メモリを参照することによって前記状態遷移表から読み出し、
(d)前記ラッチした被検索文字が状態遷移の条件となる該照合文字に一致しているか否かを比較器を用いて判断し、前記新たなアドレスに格納されているところの、前記複数の遷移確定フラグと、前記複数のパターン番号と、前記複数のハッシュ関数と、前記複数の状態遷移メモリのアドレスのそれぞれの中から1つずつを、前記比較器の出力に基づいて動作するセレクタを介して次の検索処理で使用するために選択し、
(e)前記選択された遷移確定フラグが状態遷移の確定を示す場合に、前記選択されたパターン番号に対応する前記あらかじめ与えられたパターンが前記被検索文字列の中に存在すると判定すると共に、前記被検索文字列における次の前記被検索文字を前記文字列検索装置にラッチする
という一連の処理を繰り返すことにより、前記あらかじめ与えられたパターンが、前記被検索文字列の中に存在するかどうかをと判定する。
更に上述の目的達成のため、本発明のデータ検索装置は、被検索文字列を1文字ずつ文字列検索装置に入力し、該文字列検索装置において、状態遷移メモリに格納されている状態遷移表を参照して複数の検索処理を行なうことにより、あらかじめ与えられた1つ以上のパターンが、別途与えられた被検索文字列の中に部分文字列として存在するか否かを判定するデータ検索装置であって、
被検索文字の夫々と文字コードとの対応関係を予め保持しておき、その対応関係を参照することにより、ラッチした被検索文字に対応する文字コードを得ると共に、ハッシュ関数レジスタに保持している直前の検索処理で求めたハッシュ関数を該文字コードに適用して、該文字コードに関するハッシュ値を求めるハッシュ演算器と、
前記ハッシュ演算器によって求めたハッシュ値を、前記直前の検索処理で求めた前記状態遷移メモリのアドレスに加えて新たなアドレスを求める加算器と、
前記新たなアドレスに格納されている状態遷移の条件となる照合文字と、状態遷移が確定するか否かを示す複数の遷移確定フラグと、前記あらかじめ与えられたパターンを識別する複数のパターン番号と、複数のハッシュ関数と、複数の状態遷移メモリのアドレスのそれぞれを、前記新たなアドレスに基づいて前記状態遷移メモリを参照することによって前記状態遷移表から読み出すメモリ読み出し手段と、
前記ラッチした被検索文字が状態遷移の条件となる前記照合文字に一致しているか否かを比較する比較器と、
前記新たなアドレスに格納されているところの、前記複数の遷移確定フラグと、前記複数のパターン番号と、前記複数のハッシュ関数と、前記複数の状態遷移メモリのアドレスのそれぞれの中から、次の検索処理で使用するために前記比較器の出力に基づいて1つずつ選択するセレクタと、
前記選択された遷移確定フラグが状態遷移の確定を示す場合に、前記選択されたパターン番号に対応する前記あらかじめ与えられたパターンが前記被検索文字列の中に存在すると判定すると共に、前記被検索文字列における次の前記被検索文字を前記文字列検索装置にラッチする判定手段とを備える
本発明によれば、入力された文字そのものではなく、文字にハッシュ関数を適用した結果のハッシュ値をインデックスとして状態遷移表を参照するため、状態遷移表の大きさや状態遷移の際の計算量は、文字の種類の数による影響をほとんど受けない。従って、文字の種類の数が多い場合、従来の技術と比較して、状態遷移表を格納するためのメモリの量を削減し、文字列検索を高速化することができる。
また、本発明によれば、ハッシュ関数は全体で1つではなく状態ごとに別々に定義されるため、それぞれの状態においてハッシュ値のとりうる範囲ができるだけ狭くなるようなハッシュ関数を選択することにより、状態遷移表を格納するためのメモリの量を削減することができる。
次に、本発明の実施の形態について図面を参照して詳細に説明する。
〔実施の形態の構成〕
図1は、本発明の実施形態の一例を示すブロック図である。
文字列検索装置1は、検索される文字列すなわち被検索文字列をその先頭から順に1文字ずつ被検索文字101として外部から取り込みながらパターンを検索し、検出したパターンを表すパターン番号103を出力する。文字列検索装置1に取り込まれる被検索文字列は、必ずしもある文字列の先頭の文字からである必要はなく、文字列の任意の文字から始まる「検索したい文字列」を指すことは勿論である。
パターンは、検索開始前に、後述する手順に従って状態遷移表に変換され、その状態遷移表が文字列検索装置1の内部の状態遷移メモリ23に格納される。文字列検索装置1は、状態遷移メモリ23に格納された状態遷移表を参照して状態遷移しながら、パターンを検索する。
クロック信号100は、文字列検索装置1を駆動させるクロックである。説明を容易にするため、文字列検索装置1は、クロック信号100の立ち上がりに同期して動作するものとする。
被検索文字101は、被検索文字列に含まれる1文字である。文字列検索装置1が出力する遷移確定フラグ102が1になるたびに、被検索文字列中の次の文字が被検索文字101として文字列検索装置1に順次入力されるものとする。なお、本発明における文字とは、人間が認識可能な文字だけでなく、バイナリデータも含む。また、文字を表現するために必要なビット数に制限はない(1文字が8ビットで表現されても良いし、16ビットで表現されても差し支えない)。
被検索文字レジスタ20は、遷移確定フラグ102が1のとき、または検索の開始時に、クロック信号100の立ち上がりで被検索文字101をラッチし、ラッチ後の値を被検索文字120として出力する。
ハッシュ演算器21は、被検索文字の夫々に対応する文字コードを予め保持しており、被検索文字レジスタ20から入力された被検索文字120に対応する文字コードをハッシュ関数133に代入し、その計算結果をハッシュ値121として出力する。例えば、被検索文字120の文字コードが7で、ハッシュ関数133がx%3であるとき、ハッシュ値121は1(=7%3)になる。ここで、記号「%」は剰余を表す演算子である。
加算器22は、ハッシュ値121と次状態アドレス134を算術的に加算し、その和をアドレス122として出力する。
状態遷移メモリ23は、パターンから生成された状態遷移表を格納する。図6は、状態遷移メモリ23の内部構造と、実際の格納の例である。状態遷移メモリ23の入力は、アドレス122である。状態遷移メモリ23の出力は、アドレス122に対応するアドレスの、照合文字123、一致時遷移確定フラグ124、一致時パターン番号126、一致時ハッシュ関数128、一致時次状態アドレス130、不一致時遷移確定フラグ125、不一致時パターン番号127、不一致時ハッシュ関数129、不一致時次状態アドレス131である。
比較器24は、被検索文字120と照合文字123が一致しているかを判定する。一致していれば一致フラグ132を1にし、一致していなければ0にする。なお、照合文字については後述する。
セレクタ25は、一致フラグ132が1のとき一致時遷移確定フラグ124を選択し、0のとき不一致時遷移確定フラグ125を選択する。セレクタ25の出力は、遷移確定フラグ102として文字列検索装置1の外部に出力されると共に、被検索文字レジスタ20にも加えられる。遷移確定フラグ102は、その値が1のとき現在の被検索文字101に関する処理が完了したことを示し、0のとき未だ処理途中であることを示すフラグである。
セレクタ26は、一致フラグ132が1のとき一致時パターン番号126を選択し、0のとき不一致時パターン番号127を選択する。セレクタ26の出力がパターン番号103となり、文字列検索装置1の外部に出力される。パターン番号103は、パターン検出の有無を示すとともに、どのパターンが検出されたかを識別するための情報である。パターンが検出されると、パターン番号103は0以外の数値になり、検出されたパターンに付与されているパターン番号を表すパターン番号103は、遷移確定フラグ102が1のときに限り有効である。
セレクタ27は、一致フラグ132が1のとき一致時ハッシュ関数128を選択し、0のとき不一致時ハッシュ関数129を選択する。
セレクタ28は、一致フラグ132が1のとき一致時次状態アドレス130を選択し、0のとき不一致時次状態アドレス131を選択する。
ハッシュ関数レジスタ29は、クロック信号100の立ち上がりでセレクタ27の出力をラッチし、ラッチ後の値をハッシュ関数133として出力する。
次状態アドレスレジスタ30は、クロック信号100の立ち上がりでセレクタ28の出力をラッチし、ラッチ後の値を次状態アドレス134として出力する。
文字列検索装置1の状態遷移メモリ23の内容を決定する方法について、具体例を用いて説明する。
状態遷移メモリ23の内容を求めるには、はじめにパターンからAho-Corasick法に基づいて状態遷移図を作成し、次に状態遷移図に対してハッシュ関数と照合文字による分類を施して状態遷移表を作り、最後に状態遷移表を状態遷移メモリ23の内容へ変換する。
本明細書では簡単のため、文字の集合を{A、B、C、D、E、F、G}のみとし、それぞれ図10に示すように文字コードを割り当てる。また、パターンはABC、ABD、ABE、ABF、BAの5種類とし、それぞれのパターンに対して図3のようにパターン番号を割り当てる。
図2は、パターンからAho-Corasick法に基づいて作成された状態遷移図である。この状態遷移図の中の各状態についてハッシュ関数と照合文字による分類を施し、状態遷移表を作る手順について述べる。
はじめに、状態“0”に着目する。状態“0”のハッシュ関数f0(x)をf0(x)=x%2と定義する。ハッシュ関数の好適な形状は、x%N(Nは自然数)である。それが好適である理由は3点ある。1つ目の理由は、計算が容易であるからである。2つ目の理由は、ハッシュ値が0〜(N−1)の範囲内の連続した値をとるため、状態遷移メモリ23に間隙なく情報を配置でき、状態遷移メモリ23の容量を小さくできるからである。3つ目の理由は、除数であるNさえ分かればハッシュ関数を復元できるため、ハッシュ関数を表現するために必要な情報の量を少なくでき、状態遷移メモリ23の容量を小さくできるからである。言うまでもなく、x%N以外のハッシュ関数であっても条件を満たしていれば使用できる。ハッシュ関数の要件については後述する。
状態“0”でのハッシュ値を求めるには、図10を参照して文字に対応する文字コード“x”を得てf0(x)を計算する。全ての文字についてハッシュ値を計算した結果を図11の第3行目に示す。なお、図11の第2行目は図10の第2行目と同じである。ハッシュ関数から明らかなように、状態“0”のハッシュ値は0、1のいずれかである。ハッシュ値をキーとして文字の集合{A、B、C、D、E、F、G}を分類し、2つの領域を作る。ハッシュ値“0”に対応する領域は図11より{A、C、E、G}であり、ハッシュ値“1”に対応する領域は{B、D、F}である。
さらに、各領域を2つの小領域に分割する。一方の小領域は、現在の状態から次の状態へ遷移するための文字を1つだけ含む。他方の小領域は、それ以外の文字の集合である。状態“0”から次の状態へ遷移するための文字は、図2よりA、Bである。そこで、ハッシュ値“0”に対応する領域{A、C、E、G}を、文字Aとそれ以外の文字の集合とに分割して、{A}と{C、E、G}の2つの小領域を作成する。同様に、ハッシュ値“1”に対応する領域{B、D、F}を、文字Bとそれ以外の文字の集合とに分割して、{B}と{D、F}の2つの小領域を作成する。領域の分割に使用した文字を、照合文字と呼ぶ。この場合、ハッシュ値“0”に対応する領域の照合文字はAであり、ハッシュ値“1”に対応する領域の照合文字はBである。即ち、照合文字とは現在の状態から次の状態へ遷移するための文字をいう。
その後、4つの小領域{A}、{C、E、G}、{B}、{D、F}のそれぞれについて遷移先を求める。図2より、小領域{A}の遷移先は状態“1”に確定し、小領域{B}の遷移先は状態“2”に確定する。一方、文字C、D、E、F、Gについては状態“0”から次の状態へ遷移できない。状態“0”は初期状態であるから失敗遷移は定義されておらず、これ以上あと戻りできないため、小領域{C、E、G}および{D、F}の遷移先は状態“0”に確定する。
上記から、状態“0”に関して以下の情報が得られる:
ハッシュ関数はf0(x)=x%2である
ハッシュ値“0”に対応する領域の照合文字はAである
ハッシュ値“1”に対応する領域の照合文字はBである
ハッシュ値“0”に対応する領域については、照合文字の遷移先は状態“1”に確定し、照合文字以外の文字の遷移先は状態“0”に確定する
ハッシュ値“1”に対応する領域については、照合文字の遷移先は状態“2”に確定し、照合文字以外の文字の遷移先は状態“0”に確定する。
次に、状態“1”に着目する。状態“1”のハッシュ関数f1(x)をf1(x)=x%1と定義する。全ての文字についてハッシュ値を計算した結果を図11の第4行目に示す。ハッシュ関数から明らかなように、状態“1”のハッシュ値は0しかとらない。従って、この場合はハッシュ値をキーとして文字の集合を分類する必要はない。状態“1”から次の状態へ遷移するための文字は、図2よりBである。そこで、ハッシュ値“0”に対応する領域{A、B、C、D、E、F、G}を、文字Bとそれ以外の文字の集合とに分割して、{B}と{A、C、D、E、F、G}の2つの小領域を作成する。
その後、2つの小領域{B}、{A、C、D、E、F、G}のそれぞれについて遷移先を求める。図2より、小領域{B}の遷移先は状態“3”に確定する。
小領域{A、C、D、E、F、G}の遷移先について考える。文字A、C、D、E、F、Gは、いずれも、状態“1”から次の状態へ遷移できないため、失敗遷移を辿ることになる。状態“1”の失敗遷移先は、図2より状態“0”になる。ここで、文字Aについては、状態“0”から状態“1”へ遷移できる。しかし、それ以外の文字C、D、E、F、Gについては、状態“0”から次の状態へ遷移できない。従って、状態“0”の次の時点で、小領域{A、C、D、E、F、G}の遷移先が1通りに定まらなくなる。そのため、小領域{A、C、D、E、F、G}の遷移先は状態“0”となり、その遷移は不確定として扱われる。
このように、小領域の中に複数の文字が含まれている場合は、それらの遷移先が分岐するまで失敗遷移を辿り、遷移先が分岐する直前の状態を小領域の遷移先とする。また、この場合の遷移は不確定として扱われる。
上記から、状態“1”に関して以下の情報が得られる:
ハッシュ関数はf1(x)=x%1である
ハッシュ値“0”に対応する領域の照合文字はBである
ハッシュ値“0”に対応する領域については、照合文字の遷移先は状態“3”に確定するが、照合文字以外の文字の遷移先は状態“0”かつ不確定である。
次に、状態“2”に着目する。状態“2”のハッシュ関数f2(x)をf2(x)=x%1と定義する。全ての文字についてハッシュ値を計算した結果を図11の第5行目に示す。ハッシュ関数から明らかなように、状態“2”のハッシュ値は0しかとらない。状態“2”から次の状態へ遷移するための文字は、図2よりAである。そこで、ハッシュ値“0”に対応する領域{A、B、C、D、E、F、G}を、文字Aとそれ以外の文字の集合とに分割して、{A}と{B、C、D、E、F、G}の2つの小領域を作成する。
2つの小領域{A}、{B、C、D、E、F、G}のそれぞれの遷移先を求める方法は、状態“1”と同様であるので、その説明を省略する。
上記から、状態“2”に関して以下の情報が得られる:
ハッシュ関数はf2(x)=x%1である
ハッシュ値“0”に対応する領域の照合文字はAである
ハッシュ値“0”に対応する領域については、照合文字の遷移先は状態“4”に確定するが、照合文字以外の文字の遷移先は状態“0”かつ不確定である。
次に、状態“3”に着目する。状態“3”のハッシュ関数f3(x)をf3(x)=x%3と定義する。全ての文字についてハッシュ値を計算した結果を図11の第6行目に示す。ハッシュ関数から明らかなように、状態“3”のハッシュ値は0、1、2のいずれかである。ハッシュ値をキーとして文字の集合を分類し、3つの領域を作る。ハッシュ値“0”に対応する領域は図11より{A、D、G}であり、ハッシュ値“1”に対応する領域は{B、E}、ハッシュ値“2”に対応する領域は{C、F}である。
状態“3”から次の状態へ遷移するための文字は、図2よりC、D、E、Fである。そこで、ハッシュ値“0”に対応する領域{A、D、G}を、文字Dとそれ以外の文字の集合とに分割して、{D}と{A、G}の2つの小領域を作成する。同様に、ハッシュ値“1”に対応する領域{B、E}を、文字Eとそれ以外の文字の集合とに分割して、{E}と{B}の2つの小領域を作成する。さらに、ハッシュ値“2”に対応する領域{C、F}を、文字C(または文字Fでも良い)とそれ以外の文字の集合とに分割して、{C}と{F}の2つの小領域を作成する。
次に、6つの小領域{D}、{A、G}、{E}、{B}、{C}、{F}のそれぞれについて遷移先を求める。図2より、小領域{C}の遷移先は状態“5”に、{D}は状態“6”に、{E}は状態“7”に、{F}は状態“8”に、それぞれ確定する。
小領域{A、G}の遷移先について考える。文字AおよびGについては状態“3”から次の状態へ遷移できないため、失敗遷移を辿ることになる。図2より、状態“3”の失敗遷移先は状態“2”になる。ここで、文字Aについては、状態“2”から状態“4”へ遷移できる。しかし、文字Gについては、状態“2”から次の状態へ遷移できないため、さらに失敗遷移を辿ることになる。従って、状態“2”の次の時点で、小領域{A、G}の遷移先が1通りに定まらなくなる。そのため、小領域{A、G}の遷移先は状態“2”となり、その遷移は不確定として扱われる。
小領域{B}の遷移先について考える。状態“3”から文字Bで次の状態へ遷移できないため、失敗遷移を辿って状態“2”に到達するが、状態“2”からも文字Bで次の状態へ遷移できないため、さらに失敗遷移を辿って状態“0”に至る。状態“0”からは文字Bで状態“2”へ遷移できるため、小領域{B}の遷移先は状態“2”に確定する。
上記から、状態“3”に関して以下の情報が得られる:
ハッシュ関数はf3(x)=x%3である
ハッシュ値“0”に対応する領域の照合文字はDである
ハッシュ値“1”に対応する領域の照合文字はEである
ハッシュ値“2”に対応する領域の照合文字はCである
ハッシュ値“0”に対応する領域については、照合文字の遷移先は状態“6”に確定するが、照合文字以外の文字の遷移先は状態“2”かつ不確定である
ハッシュ値“1”に対応する領域については、照合文字の遷移先は状態“7”に確定し、照合文字以外の文字の遷移先は状態“2”に確定する
ハッシュ値“2”に対応する領域については、照合文字の遷移先は状態“5”に確定し、照合文字以外の文字の遷移先は状態“8”に確定する。
以上の結果をまとめると、図4に示される変形された状態遷移図が得られる。変形された状態遷移図は、Aho-Corasick法に基づいて作成された元の状態遷移図(本例では図2)よりも、失敗遷移の回数を減らすことができ、文字列検索の高速化に寄与する。その理由は、Aho-Corasick法による状態遷移図では状態ごとに1つの失敗遷移しか定めないのに対し、変形された状態遷移図では状態ごとに1つ以上の領域が定義され、各々の領域について失敗遷移の回数が最小になる遷移先が規定されるからである。
変形された状態遷移図を用いることによって失敗遷移の回数が減少することを、具体例を用いて説明する。図2(元の状態遷移図)と図4(変形された状態遷移図)を参照する。状態“3”にいるときに被検索文字としてBが入力された場合を考える。
図2(元の状態遷移図)では、状態“3”から文字Bで次の状態へ遷移できないため、状態“3”の失敗遷移先である状態“2”に移動するが、状態“2”からも文字Bで次の状態へ遷移できないため、さらに状態“2”の失敗遷移先である状態“0”
に移動し、ようやく状態“0”から文字Bで状態“2”へ遷移できることが分かる。結果的に、失敗遷移が2回繰り返される。
一方、図4(変形された状態遷移図)では、状態“3”において、文字Bはハッシュ値“1”に対応する領域{B、E}に属し、かつ、文字Bは照合文字Eに一致しないから、文字Bの遷移先が状態“2”であることは瞬時に判明する。
図4(変形された状態遷移図)を、状態遷移表の形に書き直すと、図5が得られる。この際、状態“4”、“5”、“6”、“7”、“8”は、次の状態を持たない末端であるため、状態遷移表には記載されない。
図5に示した状態遷移表における、情報の配置方法について説明する。状態遷移表の1つの行に、領域1つに関する情報が格納される。状態遷移表の各行には、上から順に、0から始まるアドレスが振られる。同一の状態から生成された複数の領域は、必ず連続するアドレス空間に配置される。その際、ハッシュ値“0”に対応する領域が最も若いアドレスに配置され、次にハッシュ値“1”に対応する領域が続く。また、状態“0”から生成された領域は、必ずアドレス“0”から順に配置される。
状態遷移表を状態遷移メモリ23の内容へ変換する手順について述べる。図6は、図5の状態遷移表から変換された状態遷移メモリ23の内容である。
状態遷移表と同様に、1つの領域に関する情報が状態遷移メモリ23の1つのアドレスに格納される。また、領域が配置される順序は、状態遷移メモリ23と状態遷移表で同一である。そのため、状態200、ハッシュ値202、照合文字123は、状態遷移メモリ23と状態遷移表で共通になる。
図6の一致時遷移確定フラグ124は、図5の対応する照合文字遷移確定フラグ203が確定(丸印で表記)であるとき1になり、不確定(バツ印で表記)であるときに0になる。図6の不一致時遷移確定フラグ125は、図5の対応する非照合文字遷移確定フラグ205が確定であるとき1になり、不確定であるときに0になる。
図6の一致時次状態アドレス130は、図5の対応する照合文字遷移先204が指し示す状態の先頭アドレスである。例えば、アドレス“2”の一致時次状態アドレス130を求めるには、アドレス“2”の照合文字遷移先204を参照して状態“3”を得てから、状態“3”が格納されているアドレスを調べる。状態“3”はアドレス“4”〜“6”に渡って格納されているため、アドレス“2”の一致時次状態アドレス130は、それらの先頭の4となる。
ただし、一致時次状態アドレス130を求める際に参照される照合文字遷移先204の内容が、状態遷移図において次の状態への遷移を持たない状態であるとき、その状態の失敗遷移先が代わりに使用される。さらに、その失敗遷移先も、次の状態への遷移を持たない状態である場合は、その失敗遷移先の失敗遷移先が使用される。以後、同様である。例えば、アドレス“3”の一致時次状態アドレス130を求めることを考える。アドレス“3”の照合文字遷移先204を参照すると状態“4”を得る。ここで、状態“4”は、図2の状態遷移図において次の状態への遷移を持たない末端であり、その失敗遷移先は状態“1”である。また、状態“1”は、次の状態への遷移を持つ。従って、アドレス“3”の一致時次状態アドレス130は、状態“1”が格納されている先頭アドレスになる。状態“1”はアドレス“2”に格納されているから、アドレス“3”の一致時次状態アドレス130は、2になる。
図6の一致時ハッシュ関数128は、図5の対応する照合文字遷移先204が指し示す状態のハッシュ関数201に等しい。例えば、アドレス“2”の一致時ハッシュ関数128を求めるには、アドレス“2”の照合文字遷移先204を参照して状態“3”を得てから、状態“3”のハッシュ関数201を取り出す。状態“3”のハッシュ関数201はx%3であるから、アドレス“2”の一致時ハッシュ関数128はx%3となる。
一致時ハッシュ関数128を求める際に参照される照合文字遷移先204の内容が、状態遷移図において次の状態への遷移を持たない状態であるとき、その状態の失敗遷移先が代わりに使用される。この点に関しては、前述の一致時次状態アドレス130の場合と同一であるので、その説明を省略する。
図6の一致時パターン番号126は、図5の対応する照合文字遷移先204が指し示す状態に到達したときに、出力されるパターン番号である。本例では、状態“4”、“5”、“6”、“7”、“8”のいずれかに到達したときに、パターンを検出したことになる。
例として、アドレス“6”の一致時パターン番号126を求める。アドレス“6”の照合文字遷移先204を参照すると、状態“5”が得られる。図2を参照すると状態“5”はパターン“ABC”に対応しており、そのパターンに割り当てられているパターン番号は図3を参照すると、1である。従って、アドレス“6”の一致時パターン番号126は、1になる。なお、一致時パターン番号126は、対応する一致時遷移確定フラグ124が0のときは無効であるので、*(Don't care)としておく。
図6の不一致時パターン番号127、不一致時ハッシュ関数129、不一致時次状態アドレス131の算出方法は、図5の照合文字遷移先204の代わりに非照合文字遷移先206を使用することを除けば、それぞれ一致時パターン番号126、一致時ハッシュ関数128、一致時次状態アドレス130の算出方法と同一であるので、それらの説明を省略する。
このように本発明では、文字そのものではなく、文字にハッシュ関数を適用した結果のハッシュ値をインデックスとして状態遷移表を参照し、次の状態を求める。ハッシュ関数を適切に選択することにより、ハッシュ値が取りうる値の範囲を、文字の種類の数よりも小さくできる。例えば、図4(変形後の状態遷移図)の状態“0”のハッシュ値は、0か1の2通りのみであり、文字の種類の数である7(A〜G)より小さい。従って、全ての状態と全ての文字の組み合わせについて遷移先を規定する従来技術1と比較して、状態遷移表を格納するためのメモリの量を削減できる。
状態遷移表を作成する際に使用されるハッシュ関数の要件について説明する。Σを全ての文字の集合、Zを全ての整数の集合とする。着目している状態の番号をnとする。状態“n”から次の状態へ遷移するための文字の集合をTnとする。状態“n”のハッシュ関数をfn(x)とおく。fn(x)=a、a∈Zを満たすx(x∈Σ)の集合を、Gn(a)とする。関数sign(x)を次のように定義する。xが負のときsign(x)=−1、xが0のときsign(x)=0、xが正のときsign(x)=1。Sを集合としたとき、|S|はSの要素数を表し、SバーはSの補集合を表す。∩は積集合、∪は和集合を示す。このとき、fn(x)が満たすべき条件を、図12に示す。
例として、図2の状態遷移図の状態“3”の場合、Σ={A、B、C、D、E、F、G}、n=3、T3={C、D、E、F}、G3(0)={A、D、G}、G3(1)={B、E}、G3(2)={C、F}、それ以外のG3(a)は空集合であり、f3(x)=x%3は図12の条件を満たす。
ハッシュ関数がfn(x)=x%N(Nは自然数)の形で表されるとき、状態遷移表の大きさを最小にする方法について説明する。
fn(x)は0から(N−1)までの範囲をとるから、状態“n”は、状態遷移表においてN個のアドレス(行)を占有することになる。従って、図12の条件を満たしつつ、Nが最小になるようなハッシュ関数fn(x)を選べばよい。N<|Tn|÷2のとき、図12の条件式は成立しないから、N=|Tn|÷2から開始し、Nを1つずつ増やながら、図12の条件が満たされるかどうかをチェックする。図12の条件を初めて満たしたときのfn(x)=x%Nが、状態遷移表の大きさを最小にするハッシュ関数になる。
〔実施の形態の動作〕
図1の文字列検索装置1の動作について、具体例を挙げて詳細に説明する。
本例では、パターンとしてABC、ABD、ABE、ABF、BAの5つを使用し、それぞれのパターンに対して図3のようにパターン番号を割り当てる。パターン番号とは、どのパターンが検出されたかを判別するための情報であり、パターンごとに採番される。図2は、これらのパターンから作成された状態遷移図である。図5は、図2の状態遷移図に対し、ハッシュ関数と照合文字による分類を施した後の状態遷移表である。図6は、文字列検索装置1の状態遷移メモリ23の内容であり、図5の状態遷移表から生成される。
図7は、被検索文字列がABABGABFであるときの、文字列検索装置1の各信号のタイムチャートである。また、図8は、文字列検索装置1の動作を示すフローチャートである。以下、図8について説明するが、ステップ103以降では、図7のタイムチャートも参照されたい。
図8のフローチャートのステップS100から文字列検索を開始する。
始めに、文字列検索装置1の各信号を初期化する(ステップS100〜S102)。
ステップS100
一致時ハッシュ関数128および不一致時ハッシュ関数129は、状態遷移表における状態“0”に対応するハッシュ関数201に設定される。また、一致時遷移確定フラグ124、不一致時遷移確定フラグ125、一致時次状態アドレス130、不一致時次状態アドレス131は、全て0にリセットされる。さらに、被検索文字101は、被検索文字列の先頭文字にセットされる。本例では、被検索文字列の先頭文字はAであるので、被検索文字101はAにセットされる。
ステップS101
一致時遷移確定フラグ124および不一致時遷移確定フラグ125は、ともに0であるから、セレクタ25の出力値は無条件に0になる。一致時ハッシュ関数128と不一致時ハッシュ関数129は等しいから、セレクタ27の出力値は無条件に、状態遷移表における状態“0”に対応するハッシュ関数201になる。本例では、図5の状態遷移表を参照すると、状態“0”に対応するハッシュ関数201はx%2であるから、セレクタ27の出力値はx%2になる。一致時次状態アドレス130および不一致時次状態アドレス131は、ともに0であるから、セレクタ28の出力値は無条件に0になる。
ステップS102
セレクタ25の出力値は0であるので、遷移確定フラグ102は0になる。
次に、クロック信号100に同期しながら、1文字ずつ文字列検索を実施する(ステップS103〜S115)。
ステップS103〜S104
クロック信号100の立ち上がりで、被検索文字レジスタ20、ハッシュ関数レジスタ29、次状態アドレスレジスタ30は、それぞれ、被検索文字101、セレクタ27の出力値、セレクタ28の出力値をラッチする。本例では、被検索文字レジスタ20はAを、ハッシュ関数レジスタ29はx%2を、次状態アドレスレジスタ30は0をラッチする。
ステップS105
被検索文字120、ハッシュ関数133、次状態アドレス134は、それぞれ、被検索文字レジスタ20の出力値、ハッシュ関数レジスタ29の出力値、次状態アドレスレジスタ30の出力値に等しい。本例では、被検索文字120はAに、ハッシュ関数133はx%2に、次状態アドレス134は0になる。
ステップS106
ハッシュ演算器21において、ハッシュ関数133に被検索文字120に対応する文字コードが代入されてハッシュ値121が算出される。本例では、被検索文字120はAであり、Aに対応する文字コードは図10を参照すると0である。また、ハッシュ関数133はx%2であるから、ハッシュ値121は、0(=0%2)になる。
ステップS107
ハッシュ値121と次状態アドレス134は加算器22によって加算されて、アドレス122となる。本例では、ハッシュ値121は0、次状態アドレス134は0であるから、アドレス122は0(=0+0)になる。
ステップS108
状態遷移メモリ23の中の、アドレス122の内容を読み出す。本例では、アドレス122は0であるから、状態遷移メモリ23の中のアドレス“0”の内容が読み出され、照合文字123はAに、一致時遷移確定フラグ124は1に、不一致時遷移確定フラグ125は1に、一致時パターン番号126は0に、不一致時パターン番号127は0に、一致時ハッシュ関数128はx%1に、不一致時ハッシュ関数129はx%2に、一致時次状態アドレス130は2に、不一致時次状態アドレス131は0になる。
ステップS109
比較器24によって被検索文字120と照合文字123が比較される。それらが等しければステップS110へ進み、異なっていればステップS111へ進む。本例では、被検索文字120はA、照合文字123もAであるから、ステップS110へ進む。
ステップS110(被検索文字120と照合文字123が等しいとき)
一致フラグ132を1にセットする。一致フラグ132が1であるから、セレクタ25〜28は、それぞれ、一致時遷移確定フラグ124、一致時パターン番号126、一致時ハッシュ関数128、一致時次状態アドレス130を選択する。本例では、セレクタ25の出力値は1に、セレクタ26の出力値は0に、セレクタ27の出力値はx%1に、セレクタ28の出力値は2になる。その後、ステップS112へ進む。
ステップS111(被検索文字120と照合文字123が異なっているとき)
一致フラグ132を0にリセットする。一致フラグ132が0であるから、セレクタ25〜28は、それぞれ、不一致時遷移確定フラグ125、不一致時パターン番号127、不一致時ハッシュ関数129、不一致時次状態アドレス131を選択する。なお、本例ではステップS110が選択されたので、このステップは実行されない。
ステップS112
遷移確定フラグ102はセレクタ25の出力値に等しい。また、パターン番号103はセレクタ26の出力値に等しい。本例では、遷移確定フラグ102は1に、パターン番号103は0になる。
ステップS113
遷移確定フラグ102が1のとき、現在の被検索文字120に関する処理は完了しているので、ステップS114へ進む。遷移確定フラグ102が0のとき、その処理は完了していないから、ステップS103へ戻る。本例では、遷移確定フラグ102は1であるので、ステップS114へ進む。
ステップS114
被検索文字列の中の全ての文字について処理が終わったかどうかを判定する。被検索文字120が被検索文字列の最終文字であれば、文字列検索を終了する。そうでなければステップS115へ進む。本例では、被検索文字120は被検索文字列の最終文字ではないので、ステップS115へ進む。
ステップS115
被検索文字列の次の文字を被検索文字101にセットする。本例では、被検索文字列の2番目の文字であるBが、被検索文字101にセットされる。その後、ステップS103へ戻る。
以上、クロック信号100の1回目の立ち上がり前後の動作について述べたが、クロック信号100の2〜11回目の立ち上がり前後についても同様であるので、それらの動作の説明を割愛する。
検出されたパターンの番号とパターンが検出された位置は、遷移確定フラグ102が1であるときのパターン番号103によって示される。本例では、遷移確定フラグ102が1であるときのパターン番号103は、時系列順に00500004になる。これの意味するところは、被検索文字列の3文字目においてパターン番号“5”に対応するパターンすなわちBAが検出され、被検索文字列の8文字目においてパターン番号“4”に対応するパターンすなわちABFが検出された、ということである。
文字列検索時の計算量について考察する。本発明では、ハッシュ関数すなわちハッシュ関数133がx%Nの形状であるとき、1回の状態遷移の際に、1回の剰余算と1回の加算、1回の同値比較、が発生する。
1回の剰余算は、ハッシュ演算器21におけるハッシュ値121の計算時に実行される。1回の加算は、加算器22におけるハッシュ値121と次状態アドレス134の加算である。1回の同値比較は、比較器24における被検索文字120と照合文字123との一致判定の際に実行される。
これら3つの演算の計算量は、文字の種類の数が増えても変化しない。ただし厳密に言えば、文字の種類の数が増加すると、文字を表現するために必要なビット数が拡張されるため、計算量は微増する。しかし、その増加量は、文字の種類の数の増加量に比べれば極めて小さくなる。例えば、文字の種類の数が256倍になったとしても、文字を表現するために必要なビット数は8しか増えない(8=log256)。
このように、本発明においては、検索速度は文字の種類の数による影響をほとんど受けない。一方、従来技術2では、前述の通り、文字の種類の数に正比例してビットマップ920の参照回数が増加するため、文字の種類の数が多い場合に検索速度が著しく低下してしまう。
本発明の実施の形態のブロック図である。 Aho-Corasick法に基づく状態遷移図の一例を示す図である。 パターンとパターン番号の一例を示す図である。 図2の状態遷移図に対してハッシュ値と照合文字による分類を施した後の状態遷移図である。 図4の状態遷移図から生成された状態遷移表を示す図である。 図5の状態遷移表が状態遷移メモリ23に収容された様子を表す図である。 本発明の実施の形態の動作を説明するためのタイムチャートである。 本発明の実施の形態の動作を示すフローチャートである。 本発明の実施の形態の動作を示すフローチャートである。 文字と文字コードの対応関係の一例を示す図である。 文字にハッシュ関数を適用してハッシュ値を求めた結果の一例を示す図である。 ハッシュ関数が満たすべき条件式である。 従来の技術における状態遷移表の一例を示す図である。 従来の技術における状態遷移表の一例を示す図である。
符号の説明
1…文字列検索装置
20…被検索文字レジスタ
21…ハッシュ演算器
22…加算器
23…状態遷移メモリ
24…比較器
25〜28…セレクタ
29…ハッシュ関数レジスタ
30…次状態アドレスレジスタ
100…クロック信号
101…被検索文字
102…遷移確定フラグ
103…パターン番号
120…被検索文字
121…ハッシュ値
122…アドレス
123…照合文字
124…一致時遷移確定フラグ
125…不一致時遷移確定フラグ
126…一致時パターン番号
127…不一致時パターン番号
128…一致時ハッシュ関数
129…不一致時ハッシュ関数
130…一致時次状態アドレス
131…不一致時次状態アドレス
132…一致フラグ
133…ハッシュ関数
134…次状態アドレス
200…状態
201…ハッシュ関数
202…ハッシュ値
203…照合文字遷移確定フラグ
204…照合文字遷移先
205…非照合文字遷移確定フラグ
206…非照合文字遷移先

Claims (3)

  1. 被検索文字列を1文字ずつ文字列検索装置に入力し、該文字列検索装置において、状態遷移メモリに格納されている状態遷移表を参照して複数の検索処理を行なうことにより、あらかじめ与えられた1つ以上のパターンが、別途与えられた被検索文字列の中に部分文字列として存在するか否かを判定するデータ検索方法であって、
    (a)被検索文字の夫々と文字コードとの対応関係を前記文字列検索装置に予め保持しておき、その対応関係を参照することにより、前記文字列検索装置にラッチした被検索文字に対応する文字コードを得ると共に、ハッシュ関数レジスタに保持している直前の検索処理で求めたハッシュ関数を該文字コードに適用して、ハッシュ演算器を用いて該文字コードに関するハッシュ値を求め、
    (b)該ハッシュ値を、前記直前の検索処理で求めた前記状態遷移メモリのアドレスに加えて新たなアドレスを求め、
    (c)該新たなアドレスに格納されている状態遷移の条件となる照合文字と、状態遷移が確定するか否かを示す複数の遷移確定フラグと、前記あらかじめ与えられたパターンを識別する複数のパターン番号と、複数のハッシュ関数と、複数の状態遷移メモリのアドレスのそれぞれを、前記新たなアドレスに基づいて前記状態遷移メモリを参照することによって前記状態遷移表から読み出し、
    (d)前記ラッチした被検索文字が状態遷移の条件となる該照合文字に一致しているか否かを比較器を用いて判断し、前記新たなアドレスに格納されているところの、前記複数の遷移確定フラグと、前記複数のパターン番号と、前記複数のハッシュ関数と、前記複数の状態遷移メモリのアドレスのそれぞれの中から1つずつを、前記比較器の出力に基づいて動作するセレクタを介して次の検索処理で使用するために選択し、
    (e)前記選択された遷移確定フラグが状態遷移の確定を示す場合に、前記選択されたパターン番号に対応する前記あらかじめ与えられたパターンが前記被検索文字列の中に存在すると判定すると共に、前記被検索文字列における次の前記被検索文字を前記文字列検索装置にラッチする
    という一連の処理を繰り返すことにより、前記あらかじめ与えられたパターンが、前記被検索文字列の中に存在するかどうかをと判定することを特徴とするデータ検索方法。
  2. 被検索文字列を1文字ずつ文字列検索装置に入力し、該文字列検索装置において、状態遷移メモリに格納されている状態遷移表を参照して複数の検索処理を行なうことにより、あらかじめ与えられた1つ以上のパターンが、別途与えられた被検索文字列の中に部分文字列として存在するか否かを判定するデータ検索装置であって
    被検索文字の夫々と文字コードとの対応関係を予め保持しておき、その対応関係を参照することにより、ラッチした被検索文字に対応する文字コードを得ると共に、ハッシュ関数レジスタに保持している直前の検索処理で求めたハッシュ関数を該文字コードに適用して、該文字コードに関するハッシュ値を求めるハッシュ演算器と、
    前記ハッシュ演算器によって求めたハッシュ値を、前記直前の検索処理で求めた前記状態遷移メモリのアドレスに加えて新たなアドレスを求める加算器と、
    前記新たなアドレスに格納されている状態遷移の条件となる照合文字と、状態遷移が確定するか否かを示す複数の遷移確定フラグと、前記あらかじめ与えられたパターンを識別する複数のパターン番号と、複数のハッシュ関数と、複数の状態遷移メモリのアドレスのそれぞれを、前記新たなアドレスに基づいて前記状態遷移メモリを参照することによって前記状態遷移表から読み出すメモリ読み出し手段と、
    前記ラッチした被検索文字が状態遷移の条件となる前記照合文字に一致しているか否かを比較する比較器と、
    前記新たなアドレスに格納されているところの、前記複数の遷移確定フラグと、前記複数のパターン番号と、前記複数のハッシュ関数と、前記複数の状態遷移メモリのアドレスのそれぞれの中から、次の検索処理で使用するために前記比較器の出力に基づいて1つずつ選択するセレクタと、
    前記選択された遷移確定フラグが状態遷移の確定を示す場合に、前記選択されたパターン番号に対応する前記あらかじめ与えられたパターンが前記被検索文字列の中に存在すると判定すると共に、前記被検索文字列における次の前記被検索文字を前記文字列検索装置にラッチする判定手段と
    を備えることを特徴とするデータ検索装置。
  3. あらかじめ与えられた1つ以上のパターンが、別途与えられた被検索文字列の中に部分文字列として存在するか否かを、被検索文字列を1文字ずつ取り込みながら、状態遷移メモリに格納されている状態遷移表を参照して行う複数の検索処理を、コンピュータに実現させるためのコンピュータ・プログラムであって、そのコンピュータ・プログラムを該コンピュータに実行させることにより、
    (a)被検索文字の夫々と文字コードとの対応関係を予め保持しておき、その対応関係を参照することにより、取り込んだ被検索文字に対応する文字コードを得ると共に、保持している直前の検索処理で求めたハッシュ関数を該文字コードに適用して該文字コードに関するハッシュ値を求め、
    (b)該ハッシュ値を、前記直前の検索処理で求めた前記状態遷移メモリのアドレスに加えて新たなアドレスを求め、
    (c)該新たなアドレスに格納されている状態遷移の条件となる照合文字と、状態遷移が確定するか否かを示す複数の遷移確定フラグと、前記あらかじめ与えられたパターンを識別する複数のパターン番号と、複数のハッシュ関数と、複数の状態遷移メモリのアドレスのそれぞれを、前記新たなアドレスに基づいて前記状態遷移メモリを参照することによって前記状態遷移表から読み出し、
    (d)前記取り込んだ被検索文字が状態遷移の条件となる該照合文字に一致しているか否かを判断し、その判断結果に応じて、前記新たなアドレスに格納されているところの、前記複数の遷移確定フラグと、前記複数のパターン番号と、前記複数のハッシュ関数と、前記複数の状態遷移メモリのアドレスのそれぞれの中から1つずつを、次の検索処理で使用するために選択し、
    (e)前記選択された遷移確定フラグが状態遷移の確定を示す場合に、前記選択されたパターン番号に対応する前記あらかじめ与えられたパターンが前記被検索文字列の中に存在すると判定すると共に、前記被検索文字列における次の前記被検索文字を取り込む
    ことを特徴とするコンピュータ・プログラム。
JP2005218382A 2005-07-28 2005-07-28 データ検索装置及び方法、並びにコンピュータ・プログラム Expired - Fee Related JP4810915B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2005218382A JP4810915B2 (ja) 2005-07-28 2005-07-28 データ検索装置及び方法、並びにコンピュータ・プログラム
US11/493,695 US20070027867A1 (en) 2005-07-28 2006-07-27 Pattern matching apparatus and method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2005218382A JP4810915B2 (ja) 2005-07-28 2005-07-28 データ検索装置及び方法、並びにコンピュータ・プログラム

Publications (2)

Publication Number Publication Date
JP2007034777A JP2007034777A (ja) 2007-02-08
JP4810915B2 true JP4810915B2 (ja) 2011-11-09

Family

ID=37695587

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2005218382A Expired - Fee Related JP4810915B2 (ja) 2005-07-28 2005-07-28 データ検索装置及び方法、並びにコンピュータ・プログラム

Country Status (2)

Country Link
US (1) US20070027867A1 (ja)
JP (1) JP4810915B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108228759A (zh) * 2017-12-22 2018-06-29 金蝶软件(中国)有限公司 记录集的存储处理方法、装置、计算机设备和存储介质

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7860849B1 (en) 2007-01-18 2010-12-28 Netlogic Microsystems, Inc. Optimizing search trees by increasing success size parameter
US20100325080A1 (en) * 2007-02-20 2010-12-23 Kiyohisa Ichino Pattern matching method and program
US8234283B2 (en) * 2007-09-20 2012-07-31 International Business Machines Corporation Search reporting apparatus, method and system
WO2009119802A1 (ja) * 2008-03-27 2009-10-01 大学共同利用機関法人情報・システム研究機構 有限オートマトンのメモリ内データ構造、この構造のデータが格納されたメモリ、このメモリを用いた有限オートマトン実行装置
WO2009147794A1 (ja) * 2008-06-04 2009-12-10 日本電気株式会社 有限オートマトン生成システム
US8775393B2 (en) 2011-10-03 2014-07-08 Polytechniq Institute of New York University Updating a perfect hash data structure, such as a multi-dimensional perfect hash data structure, used for high-speed string matching
US9171063B2 (en) * 2013-03-13 2015-10-27 Facebook, Inc. Short-term hashes
US10467207B2 (en) * 2013-05-24 2019-11-05 Sap Se Handling changes in automatic sort
US9311124B2 (en) 2013-11-07 2016-04-12 Sap Se Integrated deployment of centrally modified software systems
US20170038978A1 (en) * 2015-08-05 2017-02-09 HGST Netherlands B.V. Delta Compression Engine for Similarity Based Data Deduplication
US10809928B2 (en) 2017-06-02 2020-10-20 Western Digital Technologies, Inc. Efficient data deduplication leveraging sequential chunks or auxiliary databases
US10503608B2 (en) 2017-07-24 2019-12-10 Western Digital Technologies, Inc. Efficient management of reference blocks used in data deduplication
CN111737534B (zh) * 2020-06-19 2024-04-09 北京百度网讯科技有限公司 文件处理方法、装置及设备
JP2022094108A (ja) 2020-12-14 2022-06-24 キオクシア株式会社 圧縮装置および制御方法

Family Cites Families (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5406278A (en) * 1992-02-28 1995-04-11 Intersecting Concepts, Inc. Method and apparatus for data compression having an improved matching algorithm which utilizes a parallel hashing technique
US6374250B2 (en) * 1997-02-03 2002-04-16 International Business Machines Corporation System and method for differential compression of data from a plurality of binary sources
US6789116B1 (en) * 1999-06-30 2004-09-07 Hi/Fn, Inc. State processor for pattern matching in a network monitor device
US6625612B1 (en) * 2000-06-14 2003-09-23 Ezchip Technologies Ltd. Deterministic search algorithm
US6810398B2 (en) * 2000-11-06 2004-10-26 Avamar Technologies, Inc. System and method for unorchestrated determination of data sequences using sticky byte factoring to determine breakpoints in digital sequences
US6792423B1 (en) * 2000-11-28 2004-09-14 International Business Machines Corporation Hybrid longest prefix match and fixed match searches
GB2406678B (en) * 2000-11-30 2005-05-18 Coppereye Ltd Database
US6785677B1 (en) * 2001-05-02 2004-08-31 Unisys Corporation Method for execution of query to search strings of characters that match pattern with a target string utilizing bit vector
US7581103B2 (en) * 2001-06-13 2009-08-25 Intertrust Technologies Corporation Software self-checking systems and methods
US7222129B2 (en) * 2002-03-29 2007-05-22 Canon Kabushiki Kaisha Database retrieval apparatus, retrieval method, storage medium, and program
US7110540B2 (en) * 2002-04-25 2006-09-19 Intel Corporation Multi-pass hierarchical pattern matching
US7640578B2 (en) * 2002-07-08 2009-12-29 Accellion Inc. System and method for providing secure communication between computer systems
US7240048B2 (en) * 2002-08-05 2007-07-03 Ben Pontius System and method of parallel pattern matching
US7373345B2 (en) * 2003-02-21 2008-05-13 Caringo, Inc. Additional hash functions in content-based addressing
US7634500B1 (en) * 2003-11-03 2009-12-15 Netlogic Microsystems, Inc. Multiple string searching using content addressable memory
US7508985B2 (en) * 2003-12-10 2009-03-24 International Business Machines Corporation Pattern-matching system
GB0400974D0 (en) * 2004-01-16 2004-02-18 Solexa Ltd Multiple inexact matching
US20050262167A1 (en) * 2004-05-13 2005-11-24 Microsoft Corporation Efficient algorithm and protocol for remote differential compression on a local device
US7523098B2 (en) * 2004-09-15 2009-04-21 International Business Machines Corporation Systems and methods for efficient data searching, storage and reduction
US7599930B1 (en) * 2004-10-19 2009-10-06 Trovix, Inc. Concept synonym matching engine
BRPI0419214B1 (pt) * 2004-12-09 2021-09-21 Mitsubishi Denki Kabushiki Kaisha Sistema e método de correspondência de sequência
US20060193159A1 (en) * 2005-02-17 2006-08-31 Sensory Networks, Inc. Fast pattern matching using large compressed databases
US7784094B2 (en) * 2005-06-30 2010-08-24 Intel Corporation Stateful packet content matching mechanisms
US7624436B2 (en) * 2005-06-30 2009-11-24 Intel Corporation Multi-pattern packet content inspection mechanisms employing tagged values

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108228759A (zh) * 2017-12-22 2018-06-29 金蝶软件(中国)有限公司 记录集的存储处理方法、装置、计算机设备和存储介质
CN108228759B (zh) * 2017-12-22 2021-07-27 金蝶软件(中国)有限公司 记录集的存储处理方法、装置、计算机设备和存储介质

Also Published As

Publication number Publication date
JP2007034777A (ja) 2007-02-08
US20070027867A1 (en) 2007-02-01

Similar Documents

Publication Publication Date Title
JP4810915B2 (ja) データ検索装置及び方法、並びにコンピュータ・プログラム
CN106797446B (zh) 基于存储器的历史搜索
CN109241274B (zh) 文本聚类方法及装置
US7725510B2 (en) Method and system for multi-character multi-pattern pattern matching
CN101398820B (zh) 一种大规模关键词匹配方法
CN109040143B (zh) 一种bgp异常事件的检测方法和装置
JP2008538023A (ja) 電子メールを処理する方法およびシステム
Clifford et al. Dictionary matching in a stream
JPWO2004062110A1 (ja) データ圧縮方法、プログラム及び装置
CN110719106B (zh) 一种基于节点分类排序的社交网络图压缩方法及***
Harris et al. Improved bounds and algorithms for graph cuts and network reliability
Caminiti et al. On coding labeled trees
CN112256704A (zh) 一种快速join方法、存储介质及计算机
JP5120263B2 (ja) パターンマッチング装置及び方法
CN108304467B (zh) 用于文本间匹配的方法
US20120054196A1 (en) System and method for subsequence matching
Gurung et al. An analysis of the intelligent predictive string search algorithm: a probabilistic approach
WO2011016281A2 (ja) ベイジアンネットワーク構造学習のための情報処理装置及びプログラム
Federico et al. Suffix tree characterization of maximal motifs in biological sequences
Blum Minimum common string partition: on solving large‐scale problem instances
JP4347086B2 (ja) パターンマッチング装置および方法ならびにプログラム
Moeini et al. Improved Rabin-Karp Algorithm Using Bloom Filter
Faro et al. Efficient pattern matching on binary strings
CN114299505A (zh) 一种名单扫描方法、装置、设备及存储介质
Ehrenfeucht et al. String searching

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20080414

RD01 Notification of change of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7421

Effective date: 20090804

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20101126

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20101207

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110120

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110322

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110513

RD01 Notification of change of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7421

Effective date: 20110705

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20110726

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

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20110808

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: 20140902

Year of fee payment: 3

LAPS Cancellation because of no payment of annual fees