JP3596696B2 - Information retrieval device - Google Patents

Information retrieval device Download PDF

Info

Publication number
JP3596696B2
JP3596696B2 JP26042095A JP26042095A JP3596696B2 JP 3596696 B2 JP3596696 B2 JP 3596696B2 JP 26042095 A JP26042095 A JP 26042095A JP 26042095 A JP26042095 A JP 26042095A JP 3596696 B2 JP3596696 B2 JP 3596696B2
Authority
JP
Japan
Prior art keywords
search
hash
hash value
character
key
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
JP26042095A
Other languages
Japanese (ja)
Other versions
JPH09101965A (en
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.)
Fujifilm Business Innovation Corp
Original Assignee
Fuji Xerox Co Ltd
Fujifilm Business Innovation 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 Fuji Xerox Co Ltd, Fujifilm Business Innovation Corp filed Critical Fuji Xerox Co Ltd
Priority to JP26042095A priority Critical patent/JP3596696B2/en
Publication of JPH09101965A publication Critical patent/JPH09101965A/en
Application granted granted Critical
Publication of JP3596696B2 publication Critical patent/JP3596696B2/en
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Description

【0001】
【発明の属する技術分野】
本発明は、検索キーに基づいた検索を行なう情報検索装置に関し、特にワイルドカード検索、部分一致検索等の柔軟な検索の可能な情報検索装置に関する。
【0002】
【従来の技術】
キーに基づいた完全一致検索における高速な検索方法としてハッシュ法が良く知られている。しかし、ハッシュ法では、データ構造上、ワイルドカード検索などの柔軟な検索が困難であるとされ、ハッシュ法に関しては、衝突による検索速度の低下を抑えるために提案されたもの(例えば特開昭63−271525号公報、特開平04−358266号公報など)、ハッシュ法を適用することによって装置の高速化を行うために提案されたもの(例えば特開平05−061910号公報)などが見受けられるものの、部分一致検索に関する提案は全くなされておらず、これまでは、ハッシュ法を用いた検索装置で柔軟な検索を行うためには、全文検索などの他の方法を併用しなければならなかった。
【0003】
【発明が解決しようとする課題】
ハッシュ法では実データの他に、少なくともハッシュ表を必要とする。ハッシュ表は、キーワードの異なり語数をNとして、おおよそポインタ長*Nの大きさになる。ここで、部分一致検索のために他の検索方法を併用すると、さらに別途インデックスデータを持つ必要があり、データサイズが非常に大きくなるという欠点がある。また、実データを直接参照する全文検索方法を併用すれば、余分のインデックスデータは必要ないものの、全データを参照するため、実データのサイズが大きくなると検索速度が非常に遅くなり、実用的な速度が出せないという欠点がある。
【0004】
本発明は、これらの問題を解決するため、ハッシュ法において、データ構造の追加や全データの参照を行なわずに、ワイルドカード検索などの柔軟な検索が可能な検索装置を提供することを目的とする。
【0005】
【課題を解決するための手段】
本発明に係わる情報登録方法および情報検索方法では、部分一致検索の検索キーを構成する各要素の情報によってハッシュ値の値域を限定するハッシュ関数を用いるようにし、限定された値域に属する全てのハッシュ値に対して検索を行う手段を設ける。複数のハッシュ値に対する検索は、繰り返し検索を行なうように構成してもよいし、並列計算によって検索を行なうように構成してもよい。
【0006】
【作用】
データの登録の際に、ハッシュ値がキーを構成する要素に対応した値域内に入ることを保証するハッシュ関数を用いる。そして、部分一致検索において、部分キーが与えられると、ハッシュ関数が部分キーの構成要素に対応する値域を求める。続いて、この値域内の全てのハッシュ値を使用して検索する。この値域外には、与えられた部分キーを含むキーが登録されていないため、余分なデータに対して検索を行なう必要がなく、さらにデータ構造の追加も必要としない。このようにしてハッシュ法において、完全一致検索のみならず、部分一致検索をも実現することが可能になる。
【0007】
すなわち、検索を行なう際にハッシュ表を参照するためのハッシュ値が、たとえば、0〜15であるとき、0〜15の全ての数について検索すれば全レコードが検索できるが、ここで、ハッシュ値の値域をたとえば奇数に限定すれば検索量は半分となる。このようにハッシュ関数を工夫することにより部分一致検索が可能となる。
【0008】
【発明の実施の形態】
図1に、本発明のハッシュ検索方法の原理を説明するための簡略化したハッシュ関数の例を示す。また、図2に、図1のハッシュ関数を用いて検索を行なう例を示す。
【0009】
図1の例では、検索キーを構成する要素がA,B,C,Dからなるものとする。ハッシュ関数として、A,B,C,Dのそれぞれに対して、ハッシュ値の1ビットを割り当て、キーの要素に「A」がある場合には、ビットフィールドAを1にし、キーの要素に「A」がない場合には、ビットフィールドAを0にする関数を用いる。これは、「A」が存在する場合のハッシュ値が8から15の間の値になり、「A」が存在しない場合のハッシュ値が0から7の間の値に限定されることを意味しており、0と1は逆転していても同様の効果がある。また、同様なハッシュ値の値域の限定ができればビット操作である必要はない。データの登録および完全一致検索では、ビットフィールドA,B,C,Dの全てにこの演算を行い、例えば「ABC」に対するハッシュ値は、2進数で1110すなわち14とする。続いて、図2に示すように、ハッシュ表を参照し、ハッシュ値14に対応する「さしすせそ・・・」というデータが検索される。
【0010】
図1の例で「AB*」は部分キーを表し、キーの一部にAが含まれ、かつ、キーの一部にBが含まれるもの全てを検索することを示している。これは、「A」が検索キーに存在し、かつ、「B」が検索キーに存在するという条件であり、図1のハッシュ関数の例では、「A」が存在する場合のハッシュ値が、必ず8から15の間の値になり、「B」が存在する場合のハッシュ値が、必ず4から7の間の値か12から15の間の値のどちらかになるという性質が利用できる。この2つの条件の論理積をとると、「AB*」に対応するハッシュ値は、12,13,14,15の4つであることがわかる。
【0011】
実際のハッシュ値を求める演算は、確定した「A」および「B」に対するビットフィールド、すなわちビットフィールドAとビットフィールドBを1とし、確定しない要素に対するビットフィールドは0と1の全ての組み合わせをとればよい。この結果、12,13,14,15の4つが求められる。それぞれについて、図2に示すように、ハッシュ表を参照し、「あいうえお・・・」「かきくけこ・・・」「さしすせそ・・・」「たちつてと・・・」というデータが検索される。
【0012】
以下に、本発明のハッシュ検索方法を電子辞書に適用する実施例を用いた動作を説明する。図3は、本発明のハッシュ検索方法を適用した電子辞書の構成例である。図4は、本発明のハッシュ検索方法を電子辞書に適用するためのデータ構造の構成例である。また図5は、動作の概略のフローを示す。
【0013】
図3に示す電子辞書は、表示画面上に各種のデータなどを表示するCRT2lと、前記CRT21での表示を制御するCRTドライバ22と、コマンドや文字列、数値などの入力を行うキーボード23と、ポインティングデバイスであるマウス24と、ユーザーによるキーボード23やマウス24の操作によって、各種のデータを出力するキーボード/マウスドライバ25と、ディスク装置26、ディスク装置ドライバ27、主記憶装置28、CPU(中央処理装置)29とから構成されている。
【0014】
ディスク装置26は、大量のデータを格納するための二次記憶装置であり、後述するチェイン付きインデックスや実データファイルなどが格納されている。また、ディスク装置26のデータの入出力は、ディスク装置ドライバ27で制御されている。
【0015】
主記憶装置28は、アプリケーションプログラム、及びキーボード23やマウス24から入力された文字や数値などのデータのほか、後述するハッシュ表を格納している。また、後述するフローチャートを実現するプログラムも格納されている。
【0016】
CPU29は、システム全体の制御を行うと共に、各種の命令に基づいて所定のデータに対する演算処理を行う回路であり、後述のフローチャートに基づいてデータの検索処理を実行する。実際には、主記憶装置28に格納されているプログラムに従って、CPU29がフローチャートの処理を実行する。なお、この検索処理を実現するための基本的な構成及び動作は、特開平05−028194号公報などに開示されているものと同様なものである。
【0017】
上記電子辞書におけるデータ構造の概要を図4に示す。図4のデータ構造は、基本的には、ハッシュ表11、チェイン付きインデックス12、実データファイル13の3つから構成されている。
【0018】
本実施例の電子辞書においては、図4に示すように、通常の見出し語(「a」,「A」など)からの検索に加え、転置キーの設定により単語の語義(「ひとつの」、「イ音」など)や発音のカタカナ表記(「エ」、「ア」など)からの検索を行えるようになっており、このため、キー/レコード数ともに非常に多く、またあるキーに対するレコードも一意ではない。
【0019】
最初に上記電子辞書におけるチェイン付きハッシュ法による検索の基本的な動作について説明する。
【0020】
まず、ハッシュ表11は、検索キーkのハッシュ値h(k)が指すアドレスよりチェイン付きインデックス12へのポインタを、たとえば、3バイトで保持する。対応するキーが未登録の場合、FFFFFFHを保持する。但し、Hは16進表示を意味する。つまり、FFFFFFHとは、24ビット全てが“1”であることを表している。
【0021】
次に、チェイン付きインデックス12の詳細を説明する。チェイン付きインデックス12は、データレコードに一対一で対応する情報を持つインデックスレコードの集合である。インデックスレコードの構造を図6に示す。インデックスレコードは、レコードに設定された全てのキーに関するチェインポインタl〜n(CPl−n)と、キー識別子1〜n(KDl−n)のペアの並び、及びデータファイルヘのポインタ(データポインタ(DP))を保持している。なお、キー識別子とは、登録語そのもののコピーである。
【0022】
チェインポインタは、対応するキーに関する次のインデックスレコードへのポインタであり、衝突により同じハッシュ値を持つ登録キーのリスト(データのつながり)が構成される。
【0023】
ここで衝突とは、異なる検索キーがハッシュ関数により同じハッシュ値を持つことを意味する。この場合の解決策として、本実施例ではチェインポインタを採用している。
【0024】
各リストの先頭はハッシュ表11から直接指されており、衝突がある場合、各ポインタは図7に示すように、次のチェインポインタのアドレスを保持し、リストの終端の場合にはnilとして000000Hが格納される。チェインポインタは、たとえば、3バイトで表現され、000000Hから7FFFFFHの値を取り得る。
【0025】
キ一識別子は、チェインポインタの直後に存在し、入力キーが登録キーに対応するか否か、すなわちハッシュ値の衝突の検出に用いられる。この実施例におけるキ一識別子の記述ルールを以下に示す。
【0026】
(i)通常の検索キーにおいては、キ一識別子の開始を示す81Hに続いて登録キーの文字列を格納し、続いてキ一識別子の終了を示す82Hを格納する。
【0027】
(ii)登録キーがチェインの直前と同じである場合は省略する。省略された場合は、キ一識別子のあるべき位置に、次のチェインポインタまたはデリミタが格納されている。チェインポインタの1バイト目は最大で7FHであり、デリミタはFFHであるため、省略された場合でも、キ一識別子がある場合の81Hとは明白に区別が可能である。
【0028】
このようにキ一識別子を導入することにより、衝突のチェックのために実データを参照する必要がなくなる。なお、実データにキーワードを格納するフィールドを設け、実データのキーワードフィールドを参照して、衝突のチェックを行うように構成しても構わない。
【0029】
データポインタには、実データにおける実際のデータレコードの先頭を指すアドレスが、デリミタFFHに続けて3バイトで格納されている。データポインタがFFFFFFHである場合は、データレコードが削除されていることを示す。
【0030】
実データファイル13はデータレコードの集合であり、データレコードは次の形式を持つ。
【0031】
(見出し語)(見出し区切り[NULL])(内容部)(レコード区切り[LF:Line Feed])
キー識別子に前述のように80Hが用いられた場合、このデータレコードの見出し語を参照することでキーの識別を行う。チェイン付インデックスファイルのキー識別子80Hが使用されている場合のみ実データファイルを参照する。
【0032】
実データファイル13(内容部)は、実際の辞書記述部分であるが、この実施例ではキー識別子により検索キーの情報を含まないため、この内部にフィールドなどの概念は不要であり、内容はフラットなテキス卜でよい。ここでフラットとは、フィールド区切りの記号を含まない文字コードだけからなるデータを意味する。データレコードは全体でーつのテキストファイルとなる。
【0033】
次に、上述した電子辞書によるデータ検索のアルゴリズムを、図8のフローチヤートを用いて詳細に説明する。
【0034】
まず、初期化(ステップ101)の後、検索キーのハッシュ値hを求め、ハッシュ表の位置hの内容をインデックスポジションipとして読み込む(ステップ102)。なお、ここで初期化とは、内部で使用するフラグ等を初期化し、また、キー識別子のバッファもクリアすることを意味する。次に、ip=FFFFFFHであるかどうかを判定する(ステップ103)。ここで、ip=FFFFFFHであれば未登録キーとわかるので処理を終了する。また、ip=FFFFFFHでないときは、チェイン付きインデックス12上の位置ipから3バイトをチェインポジションcpとしてチェイン付インデックスのファイルから読み込み(ステップ104)、チェインポジションcpの次のバイトの値(キー識別子の格納位置)≧80Hかどうかを判定する(ステップl05)。
【0035】
80H未満またはFFHの場合には、チェインの前のものと同じであるので前のものを使用する。また、80H以上の場合には、キーワードを読み込む(ステップ106)。このようにして衝突の判別を行なう。次に、krに基づいて現在のインデックスレコードがキーに対応するか否かを判定し(ステップ107)、対応するときはチェイン付きインデックス12上のFFHまでスキップし、続く3バイトをデータポインタdpとして読み込む(ステップ108)。なお、ステップ107における判定は、ハッシュ値を求めた入力文字列の下位バイトと80Hの論理和を求め、キー識別子と一致するか否かを判別することにより行なう。続いて、dp=FFFFFFHであるかどうかを判定する(ステップl09)。ここで、dp=FFFFFFHでなければデータレコードは存在するので、データファイル上の位置dpから、データレコードのフォーマットに従い、0AH(=LF)までを結果のリストに追加する(ステップ110)。次に、cp=0かどうかを判定し(ステップ11l)、cp=0であるなら終了、そうでなければチェインが続いているので、ipにcpを代入して(ステップ112)、ステップ104へ戻る。
【0036】
次に上述したようなチェイン付きハッシュ法による検索を行なう電子辞書において、部分一致検索を行なう場合の動作について説明する。
【0037】
本実施例では、キーワードを構成する文字の出現位置(1文字目,2文字目,...)を3で割ったときの剰余と、キーワードを構成する文字のコード(キャラクタコード)を5で割ったときの剰余からハッシュ値を求めるものとする。具体的には、15ビットのハッシュ値を、nを0以上の整数とした場合の、(3n+1)文字目、(3n+2)文字目、(3n+3)文字目の5ビットづつのフィールドに区切り、文字コードをxとして、各5ビットの値を、2を(xmod5)乗したもの(2xmod5)の論理和とする。なお、xmod5は、xの5で割ったときの剰余を表すものとする。
【0038】
図9は、この方法によって、文字列「abcd」のハッシュ値を求める例を示す。完全一致検索およびデータ登録においては、この値をそのままハッシュ値として利用する。
【0039】
図9に示す例においては、1文字目の’a’のキャラクタコード61H(16進数)(10進数では97)を5で割った余りが2であるので、2=4である。従って、フィールド1は、00100(2進数)(10進数では4)と元のフィールド1の値00000(2進数)との論理和をとり、00100(2進数)となる。同様に、4文字目の’d’のキャラクタコードが64H(10進数では100)、これを5で割った余りが0であるので2=1である。従って、00001(2進数)とフィールド1(00100)との論理和をとる。この結果、フィールド1は2進数で00101となる。
【0040】
なお、本実施例では、先に説明したように、図4のチェイン付きインデックス内のチェインポインタに、キーに関する情報を示す識別子を付加し、このキー識別子によって衝突時のチェックを行うものとする。
【0041】
部分一致検索においては、ビットが1になっている部分を1のまま固定し、ビットが0になっている部分を0と1の両方の場合の組合せとして、ハッシュ値の集合を求めて全てについて検索を行う。文字の出現位置を用いる際には、文字列の開始位置に注意する必要がある。例えば「*abcd*」という場合には、aの出現位置が、「abcde」などのように(3n+1)文字目、「zabcd」などのように(3n+2)文字目、「yzabcd」のように(3n+3)文字目の全ての場合が存在するので、1文字づつずらした3通りのパターンが必要である。
【0042】
ハッシュ関数を用いて部分一致検索を行う場合の、概略フローを図5に示す。
【0043】
先ず、与えられた検索キーのハッシュ値を求め(ステップ151)、ハッシュ表の該当する位置の内容を読み込む(ステップ152)。ここで、チェインポインタにキー識別子が付加されているときは、このキー識別子に基づいて衝突を検出し (ステップ153)、検索結果を格納する(ステップ154)。全ハッシュ値の検索が完了するまで、上記ステップ152〜154を繰り返し(ステップ155)、全ハッシュ値の検索が完了したら検索結果を出力表示する(ステップ156)。
【0044】
次に、ハッシュ関数を用いて部分一致検索を行う場合の、詳細なフローを図10に示す。部分キーが、図9に示すように、「abcd」である場合を例に取り、動作を説明する。なお、ここでは、ビットが1になっている部分を「固定ビット」、ビットが0になっている部分を「不定ビット」と呼んでいる。
【0045】
S1:まず、部分キーが与えられると、部分キーの文字開始位置を初期化する。すなわち、文字開始位置をまず(3n+1)文字目とする。ハッシュ値はnに無関係であるので、n=0,開始位置=1とする。
【0046】
S2:続いて、部分キーにより固定されるビットを算出する。開始位置が1である場合は、図9に示されるように、フィールド1のビット2、フィールド1のビット0、フィールド2のビット3、フィールド3のビット4が固定されるビットである。
【0047】
S3:次に、この固定ビットの列を、固定ビット列リストとして保存する。これは、文字の開始位置をずらして検索する際に、固定ビットと不定ビットを組み合わせると、既に検索したハッシュ値と同じになる場合があるため、以前に検索した固定ビットの列と比較することによって2度検索する手間を省くためである。
【0048】
S4:次に、不定ビットを初期値として全て1にする。すなわち、フィールド1のビット2、フィールド1のビット0、フィールド2のビット3、フィールド3のビット4を除く全てのビットを1にする。以下、不定ビットを、固定ビットのビット数を除いたビット数の一つの数として扱う。これによって、例えば、15ビットから固定ビットである4ビットを除いた11ビットの0と1の組合せは、0から2047(10進数)までの2進数で網羅することができる。
【0049】
S5:不定ビットと固定ビットを連結する。すなわち、不定ビットを表す2進数に、固定ビットを挟みこむ。図11に、不定ビットと固定ビットを連結する例を示す。すなわち、S4または後述するS7bで作成された不定ビット数を、本来のビット位置に置き、固定ビットを挿入したものである。
【0050】
S6:連結によって生成されたハッシュ値が、最小値以下になったらS12に飛ぶ。ここで、検索キーが1文字もないということはあり得ないので、1文字目のフィールドに一つも1になるビットがない状況はあり得ない。したがって、大きな数値から検索を始めて、1文字目のフィールドが0になった時点を最小値、すなわち、ハッシュ値を求める終了条件としている。
【0051】
S7:S3において保存されている一つ前の文字開始位置までの固定ビットリストとハッシュ値を比較し、固定ビットリストの固定ビットと同じビット位置にあるハッシュ値のビットが全て1の場合は、以前に検索したハッシュ値のパターンに含まれるので(S7a)、次の不定ビットを求め(S7b)、S5に戻る。なお、S7aの判定は、不定ビットの0,1の組合せにより、既に検索した組合せが出現する可能性が有るので、重複して検索しないようにするための判定である。またS7bでは、不定ビット列が表す数値から1を減じた値を新たに不定ビット列とする。
【0052】
S8:求めたハッシュ値によりハッシュ表を読み出す。
【0053】
S9:インデックス内に登録語がなければ(S9)、該当するデータレコードがないので、S7bと同じ処理で不定ビットを変更して次の不定ビットを求め(S7b)、S5に戻る。
【0054】
S10:キー識別子により、部分キーが含まれるかどうかを比較し、部分文字列が含まれる場合は、検索結果のリストに登録する(S10a)。
【0055】
S11:次のインデックス内の次のチェインポインタヘスキップし、S9へ戻る。
【0056】
S12:文字開始位置を1つずらす。
【0057】
S13:文字開始位置が3以下であれば、S2に戻る。これは、文字開始位置が1,2,3の場合の全てを検索するためである。
【0058】
S14:結果リストに登録された検索結果を表示する。
【0059】
以上の手順で、ハッシュ法においても、部分一致検索が可能になる。さらに、前方一致検索の場合は、文字開始位置が1の場合のみを検索すればよい。また、後方一致検索の場合は、図12に示すように、キー識別子による判別を行う際に、後方の文字から行うようにすればよい。また、前後方一致の場合は、前方一致の部分キーを文字開始位置を1とし、後方一致の部分キーをずらしてハッシュ値を求め、検索すればよい。同様にしてワイルドカードを*として、「*A*B*」のような柔軟な検索も容易に実現できる。
【0060】
なお、本実施例では、1つ1つのハッシュ値に対して、繰り返し検索を行うように構成しているが、各ハッシュ値を並列計算の可能な計算機を用いて、並列に検索しても構わない。
【0061】
【発明の効果】
以上述べたように、本発明によれば、高速な検索方法でありながら、完全一致検索のみでワイルドカード検索などの柔軟な検索が不可能であったハッシュ法において、データ構造の追加も全データの参照をも行うことなく、部分一致検索が可能になる。さらに、本発明の検索方法では、前方一致、後方一致、前後方一致、中間一致等の全ての部分一致検索がデータ構造の追加なしに実現できる。
【図面の簡単な説明】
【図1】部分一致検索の可能なハッシュ関数の例を示す説明図である。
【図2】ハッシュ法における部分一致検索の原理を示す例である。
【図3】本発明のハッシュ検索方法を適用した電子辞書の構成例を示すブロック図である。
【図4】本発明のハッシュ検索方法を電子辞書に適用するためのデータ構造成例を示す説明図である。
【図5】本発明のハッシュ検索方法を適用した電子辞書の部分一致検索の概略のフローチャートである。
【図6】インデックスレコードの構造を示す図である。
【図7】インデックスレコードにおけるチェインポインタのリストを示す図である。
【図8】電子辞書によるデータ検索のアルゴリズムを示すフローチャートである。
【図9】部分一致検索の可能なハッシュ関数の例を用いてハッシュ値を求める例を示す説明図である。
【図10】部分一致検索の実現例を示す詳細なフローチャートである。
【図11】部分キーに対応する複数のハッシュ値の中の1つを求める例を示す説明図である。
【図12】後方一致検索におけるキー識別方法の例を示す説明図である。
【符号の説明】
l1…ハッシュ表、12…チェイン付きインデックス、l3…実データファイル、21…CRT、22…CRTドライバ、22…キーボード、24…マウス、15…キーボード/マウスドライバ、26…ディスク装置、27…ディスク装置ドライバ、28…主記憶装置、29…CPU
[0001]
TECHNICAL FIELD OF THE INVENTION
The present invention relates to an information retrieval apparatus which performs search based on the search key, in particular wildcard search, of possible information retrieval apparatus of flexible search for partial matching or the like.
[0002]
[Prior art]
A hash method is well known as a high-speed search method in a perfect match search based on a key. However, it is considered that the hash method makes it difficult to perform a flexible search such as a wildcard search due to the data structure. The hash method has been proposed to suppress a reduction in search speed due to collision (for example, Japanese Patent Laid-Open No. Japanese Patent Application Laid-Open Nos. 271525 and 04-358266) and those proposed to speed up the apparatus by applying a hash method (for example, Japanese Patent Application Laid-Open No. 05-061910). No proposal for partial match search has been made at all, and hitherto, other methods such as full-text search had to be used in order to perform a flexible search with a search device using a hash method.
[0003]
[Problems to be solved by the invention]
The hash method requires at least a hash table in addition to the actual data. The hash table is approximately the size of the pointer length * N, where N is the number of words different from the keyword. Here, if another search method is used in combination for a partial match search, it is necessary to additionally have index data, and there is a disadvantage that the data size becomes very large. In addition, if a full-text search method that directly refers to actual data is used, no extra index data is required, but since all data is referenced, the search speed becomes extremely slow when the size of the actual data increases, and practical There is a disadvantage that the speed cannot be obtained.
[0004]
An object of the present invention is to provide a search device capable of performing a flexible search such as a wildcard search without adding a data structure or referring to all data in a hash method in order to solve these problems. I do.
[0005]
[Means for Solving the Problems]
In the information registration method and the information search method according to the present invention, a hash function for limiting a range of a hash value according to information of each element constituting a search key of a partial match search is used, and all hash values belonging to the limited range are used. A means for performing a search on a value is provided. The search for a plurality of hash values may be configured to perform the search repeatedly, or may be configured to perform the search by parallel calculation.
[0006]
[Action]
At the time of data registration, a hash function that guarantees that a hash value falls within a range corresponding to an element constituting a key is used. Then, in the partial match search, when a partial key is given, a hash function obtains a range corresponding to a component of the partial key. Subsequently, a search is performed using all the hash values in this range. Since a key including a given partial key is not registered outside this range, it is not necessary to search for extra data and no additional data structure is required. In this way, in the hash method, not only a perfect match search but also a partial match search can be realized.
[0007]
That is, when the hash value for referencing the hash table when performing a search is, for example, 0 to 15, all records can be searched by searching for all the numbers from 0 to 15. If the range of is limited to, for example, an odd number, the retrieval amount is halved. By devising the hash function in this manner, a partial match search can be performed.
[0008]
BEST MODE FOR CARRYING OUT THE INVENTION
FIG. 1 shows an example of a simplified hash function for explaining the principle of the hash search method of the present invention. FIG. 2 shows an example of performing a search using the hash function of FIG.
[0009]
In the example of FIG. 1, it is assumed that the elements constituting the search key are A, B, C, and D. As a hash function, one bit of a hash value is assigned to each of A, B, C, and D. When "A" is present in the key element, the bit field A is set to 1 and " If “A” does not exist, a function for setting the bit field A to 0 is used. This means that the hash value when "A" is present is between 8 and 15, and the hash value when "A" is not present is limited to a value between 0 and 7. The same effect is obtained even if 0 and 1 are reversed. If the range of the hash value can be similarly limited, it is not necessary to perform the bit operation. In the data registration and perfect match search, this operation is performed on all of the bit fields A, B, C, and D. For example, the hash value for “ABC” is 1110, that is, 14 in binary. Subsequently, as shown in FIG. 2, the hash table is referred to, and the data “Sashisuse Soso ...” corresponding to the hash value 14 is searched.
[0010]
In the example of FIG. 1, “AB *” represents a partial key, and indicates that a search is performed for all keys in which A is included in a part of the key and B is included in a part of the key. This is a condition that “A” exists in the search key and “B” exists in the search key. In the example of the hash function in FIG. 1, the hash value when “A” exists is The property that the value is always between 8 and 15 and the hash value when “B” exists is always either a value between 4 and 7 or a value between 12 and 15 can be used. When the logical product of these two conditions is calculated, it is understood that the hash values corresponding to “AB *” are four, 12, 13, 14, and 15.
[0011]
In the operation for obtaining the actual hash value, the bit fields for the determined “A” and “B”, that is, the bit fields A and B are set to 1, and the bit fields for the undetermined elements are all combinations of 0 and 1. Just fine. As a result, four values of 12, 13, 14, and 15 are obtained. For each of them, as shown in FIG. 2, by referring to the hash table, data such as "Aioueo ...", "Kakikukeko ...", "Sashisusesoso ...", and "Tatsutsuto ..." are retrieved. .
[0012]
Hereinafter, an operation using an embodiment in which the hash search method of the present invention is applied to an electronic dictionary will be described. FIG. 3 is a configuration example of an electronic dictionary to which the hash search method of the present invention is applied. FIG. 4 is a configuration example of a data structure for applying the hash search method of the present invention to an electronic dictionary. FIG. 5 shows a schematic flow of the operation.
[0013]
The electronic dictionary shown in FIG. 3 includes a CRT 21 for displaying various data on a display screen, a CRT driver 22 for controlling display on the CRT 21, a keyboard 23 for inputting commands, character strings, numerical values, and the like. A mouse 24 which is a pointing device, a keyboard / mouse driver 25 which outputs various data by a user's operation of the keyboard 23 and the mouse 24, a disk device 26, a disk device driver 27, a main storage device 28, a CPU (central processing unit) Device 29).
[0014]
The disk device 26 is a secondary storage device for storing a large amount of data, and stores a chained index, a real data file, and the like to be described later. The input and output of data to and from the disk device 26 is controlled by a disk device driver 27.
[0015]
The main storage device 28 stores an application program, data such as characters and numerical values input from the keyboard 23 and the mouse 24, and a hash table described later. Further, a program for realizing a flowchart described later is also stored.
[0016]
The CPU 29 is a circuit that controls the entire system and performs arithmetic processing on predetermined data based on various commands, and executes data search processing based on a flowchart described later. Actually, the CPU 29 executes the processing of the flowchart in accordance with the program stored in the main storage device 28. The basic configuration and operation for realizing this search processing are the same as those disclosed in Japanese Patent Application Laid-Open No. 05-28194.
[0017]
FIG. 4 shows an outline of a data structure in the electronic dictionary. The data structure of FIG. 4 is basically composed of a hash table 11, a chained index 12, and a real data file 13.
[0018]
In the electronic dictionary of the present embodiment, as shown in FIG. 4, in addition to a search from ordinary headwords (“a”, “A”, etc.), the meaning of a word (“one”, It is possible to search from katakana notation (“e”, “a”, etc.) of pronunciations, etc. Therefore, the number of keys / records is very large, and records for a certain key are also Not unique.
[0019]
First, the basic operation of a search by the hash method with a chain in the electronic dictionary will be described.
[0020]
First, the hash table 11 holds, for example, 3 bytes of a pointer from the address indicated by the hash value h (k) of the search key k to the chained index 12. If the corresponding key has not been registered, FFFFFFH is held. However, H means hexadecimal notation. That is, FFFFFFH indicates that all 24 bits are "1".
[0021]
Next, details of the chained index 12 will be described. The chained index 12 is a set of index records having information corresponding to data records on a one-to-one basis. FIG. 6 shows the structure of the index record. The index record is composed of a pair of chain pointers 1 to n (CP 1-n ) and key identifiers 1 to n (KD 1-n ) related to all keys set in the record, and a pointer to the data file (data Pointer (DP)). Note that the key identifier is a copy of the registered word itself.
[0022]
The chain pointer is a pointer to the next index record for the corresponding key, and a list of registered keys (data connection) having the same hash value is formed by collision.
[0023]
Here, the collision means that different search keys have the same hash value by the hash function. As a solution in this case, the present embodiment employs a chain pointer.
[0024]
The head of each list is directly pointed to from the hash table 11, and when there is a collision, each pointer holds the address of the next chain pointer, as shown in FIG. Is stored. The chain pointer is represented by, for example, 3 bytes and can take a value from 000000H to 7FFFFFH.
[0025]
The key identifier exists immediately after the chain pointer, and is used for detecting whether or not the input key corresponds to the registration key, that is, detecting collision of hash values. The description rule of the key identifier in this embodiment is shown below.
[0026]
(I) In a normal search key, the character string of the registration key is stored after 81H indicating the start of the key identifier, and then 82H indicating the end of the key identifier is stored.
[0027]
(Ii) If the registration key is the same as that immediately before the chain, the description is omitted. If omitted, the next chain pointer or delimiter is stored at the position where the key identifier should be. Since the first byte of the chain pointer is 7FH at the maximum and the delimiter is FFH, even if omitted, it can be clearly distinguished from 81H with a key identifier.
[0028]
By introducing a key identifier in this way, it is not necessary to refer to actual data for checking a collision. A field for storing a keyword in the actual data may be provided, and a collision may be checked by referring to the keyword field of the actual data.
[0029]
In the data pointer, an address indicating the head of the actual data record in the actual data is stored in 3 bytes following the delimiter FFH. When the data pointer is FFFFFFH, it indicates that the data record has been deleted.
[0030]
The actual data file 13 is a set of data records, and the data records have the following format.
[0031]
(Headword) (Header break [NULL]) (Contents) (Record break [LF: Line Feed])
When 80H is used as the key identifier as described above, the key is identified by referring to the headword of this data record. The actual data file is referred to only when the key identifier 80H of the chained index file is used.
[0032]
The actual data file 13 (content part) is an actual dictionary description part. However, in this embodiment, information of a search key is not included by a key identifier. Any text is fine. Here, “flat” means data consisting only of a character code that does not include a field delimiter symbol. The data record is a single text file.
[0033]
Next, an algorithm of data search using the above-described electronic dictionary will be described in detail with reference to the flowchart of FIG.
[0034]
First, after initialization (step 101), the hash value h of the search key is obtained, and the contents of the position h of the hash table are read as the index position ip (step 102). Note that the initialization here means that a flag and the like used internally are initialized, and a buffer of the key identifier is also cleared. Next, it is determined whether ip = FFFFFFH (step 103). Here, if ip = FFFFFFH, it is known that the key is an unregistered key, and the process is terminated. When ip = FFFFFFH is not satisfied, 3 bytes from the position ip on the chained index 12 are read from the file of the chained index as the chain position cp (step 104), and the value of the next byte of the chain position cp (key identifier It is determined whether or not (storage position) ≧ 80H (step 105).
[0035]
In the case of less than 80H or FFH, the previous one is used because it is the same as the one before the chain. If it is 80H or more, a keyword is read (step 106). Thus, the collision is determined. Next, it is determined whether or not the current index record corresponds to the key based on kr (step 107). If so, skip to FFH on the chained index 12 and use the next 3 bytes as the data pointer dp. Read (step 108). The determination in step 107 is made by calculating the logical sum of the lower byte of the input character string for which the hash value has been obtained and 80H, and determining whether or not it matches the key identifier. Subsequently, it is determined whether or not dp = FFFFFFH (step 109). Here, if dp = FFFFFFH, there is a data record, so from the position dp on the data file to 0AH (= LF) is added to the list of results according to the format of the data record (step 110). Next, it is determined whether or not cp = 0 (step 11l). If cp = 0, the process is terminated. Otherwise, since the chain is continuing, cp is substituted into ip (step 112), and the process proceeds to step 104. Return.
[0036]
Next, an operation in the case of performing a partial match search in an electronic dictionary performing a search by the hash method with a chain as described above will be described.
[0037]
In the present embodiment, the remainder when the appearance position (the first character, the second character,...) Of the characters constituting the keyword is divided by 3, and the code (character code) of the characters constituting the keyword are represented by 5. It is assumed that a hash value is obtained from the remainder when divided. Specifically, a 15-bit hash value is divided into a 5-bit field of a (3n + 1) th character, a (3n + 2) th character, and a (3n + 3) th character, where n is an integer of 0 or more, The code is x, and each 5-bit value is the logical sum of 2 raised to the power of (xmod5) (2 xmod5 ). Note that xmod5 represents a remainder when divided by 5 of x.
[0038]
FIG. 9 shows an example of calculating the hash value of the character string “abcd” by this method. In a perfect match search and data registration, this value is used as it is as a hash value.
[0039]
In the example shown in FIG. 9, the remainder obtained by dividing the character code 61H (hexadecimal) (97 in decimal) of the first character 'a' by 5 is 2, which is 2 2 = 4. Therefore, field 1 is ORed with 00100 (binary number) (4 in decimal number) and the original value of field 1 00000 (binary number), and becomes 00100 (binary number). Similarly, the character code of the fourth character 'd' is 64H (100 in decimal), and the remainder obtained by dividing the character code by 5 is 0, so that 2 0 = 1. Therefore, the logical sum of 00001 (binary number) and field 1 (00100) is obtained. As a result, field 1 becomes 00101 in binary.
[0040]
In this embodiment, as described above, an identifier indicating information about a key is added to the chain pointer in the index with chains in FIG. 4, and a check at the time of collision is performed using the key identifier.
[0041]
In the partial match search, the part where the bit is 1 is fixed at 1 and the part where the bit is 0 is set as a combination of both 0 and 1, and a set of hash values is obtained and all parts are obtained. Perform a search. When using the appearance position of a character, it is necessary to pay attention to the start position of the character string. For example, in the case of “* abcd *”, the appearance position of “a” is the (3n + 1) th character such as “abcde”, the (3n + 2) th character such as “zabcd”, and “yzabcd” ( Since there are all cases of the (3n + 3) -th character, three patterns shifted by one character are required.
[0042]
FIG. 5 shows a schematic flow in the case of performing a partial match search using a hash function.
[0043]
First, the hash value of the given search key is obtained (step 151), and the contents of the corresponding position in the hash table are read (step 152). If a key identifier is added to the chain pointer, a collision is detected based on the key identifier (step 153), and the search result is stored (step 154). Steps 152 to 154 are repeated until the search of all hash values is completed (step 155). When the search of all hash values is completed, the search result is output and displayed (step 156).
[0044]
Next, FIG. 10 shows a detailed flow when a partial match search is performed using a hash function. The operation will be described taking a case where the partial key is “abcd” as shown in FIG. 9 as an example. Here, the part where the bit is 1 is called a “fixed bit”, and the part where the bit is 0 is called an “undefined bit”.
[0045]
S1: First, when a partial key is given, the character start position of the partial key is initialized. That is, the character start position is set to the (3n + 1) th character first. Since the hash value is irrelevant to n, n = 0 and the start position = 1.
[0046]
S2: Subsequently, a bit fixed by the partial key is calculated. When the start position is 1, as shown in FIG. 9, bit 2 of field 1, bit 0 of field 1, bit 3 of field 2, and bit 4 of field 3 are fixed bits.
[0047]
S3: Next, the fixed bit string is stored as a fixed bit string list. This is because when a search is performed with the start position of a character shifted, combining fixed bits and undefined bits may result in the same hash value as already searched. This is to save the trouble of searching twice.
[0048]
S4: Next, all the undefined bits are set to 1 as initial values. That is, all bits except for bit 2 of field 1, bit 0 of field 1, bit 3 of field 2, and bit 4 of field 3 are set to 1. Hereinafter, the indefinite bit is treated as one of the number of bits excluding the number of fixed bits. Thus, for example, a combination of 11 bits of 0 and 1 excluding 4 bits that are fixed bits from 15 bits can be covered by a binary number from 0 to 2047 (decimal number).
[0049]
S5: Connect the undefined bit and the fixed bit. That is, a fixed bit is inserted between a binary number representing an indefinite bit. FIG. 11 shows an example in which an undefined bit and a fixed bit are connected. That is, the indefinite number of bits created in S4 or S7b described later is placed at the original bit position and fixed bits are inserted.
[0050]
S6: If the hash value generated by the concatenation becomes equal to or smaller than the minimum value, the process jumps to S12. Here, since there is no possibility that the search key does not have any single character, it is impossible that there is no bit in the field of the first character that has any one. Therefore, the search is started from a large numerical value, and the time when the field of the first character becomes 0 is set as the minimum value, that is, the end condition for obtaining the hash value.
[0051]
S7: Compare the fixed bit list up to the previous character start position stored in S3 with the hash value, and if all the bits of the hash value at the same bit position as the fixed bits of the fixed bit list are 1, Since it is included in the hash value pattern searched previously (S7a), the next undefined bit is obtained (S7b), and the process returns to S5. Note that the determination in S7a is a determination for preventing a redundant search from occurring because the already searched combination may appear due to the combination of the undefined bits 0 and 1. In S7b, a value obtained by subtracting 1 from the numerical value represented by the undefined bit string is newly set as the undefined bit string.
[0052]
S8: Read the hash table with the obtained hash value.
[0053]
S9: If there is no registered word in the index (S9), since there is no corresponding data record, the undefined bit is changed by the same processing as S7b to obtain the next undefined bit (S7b), and the process returns to S5.
[0054]
S10: Whether or not a partial key is included is compared based on the key identifier, and if a partial character string is included, it is registered in a search result list (S10a).
[0055]
S11: Skip to the next chain pointer in the next index, and return to S9.
[0056]
S12: The character start position is shifted by one.
[0057]
S13: If the character start position is 3 or less, return to S2. This is for searching for all of the cases where the character start positions are 1, 2, and 3.
[0058]
S14: The search result registered in the result list is displayed.
[0059]
With the above procedure, the partial match search can be performed even in the hash method. Furthermore, in the case of a forward match search, only the case where the character start position is 1 needs to be searched. Further, in the case of the backward matching search, as shown in FIG. 12, when performing the determination based on the key identifier, the search may be performed from the backward character. In addition, in the case of front-back matching, the partial key of the front matching is set to the character start position, and the partial key of the back matching is shifted to obtain a hash value and search. Similarly, a flexible search such as "* A * B *" can be easily realized by setting the wildcard to *.
[0060]
Although the present embodiment is configured to repeatedly search for each hash value, each hash value may be searched in parallel using a computer capable of parallel calculation. Absent.
[0061]
【The invention's effect】
As described above, according to the present invention, in the hash method, which is a high-speed search method, a flexible search such as a wild card search cannot be performed only by an exact match search, a data structure is added to all data. Partial search can be performed without referring to. Further, in the search method of the present invention, all partial match searches such as front match, back match, front / back match, intermediate match, etc. can be realized without adding a data structure.
[Brief description of the drawings]
FIG. 1 is an explanatory diagram showing an example of a hash function capable of performing a partial match search.
FIG. 2 is an example showing the principle of partial match search in the hash method.
FIG. 3 is a block diagram showing a configuration example of an electronic dictionary to which a hash search method according to the present invention is applied.
FIG. 4 is an explanatory diagram showing an example of a data structure for applying the hash search method of the present invention to an electronic dictionary.
FIG. 5 is a schematic flowchart of a partial match search of an electronic dictionary to which the hash search method of the present invention is applied.
FIG. 6 is a diagram showing a structure of an index record.
FIG. 7 is a diagram showing a list of chain pointers in an index record.
FIG. 8 is a flowchart illustrating an algorithm of data search using an electronic dictionary.
FIG. 9 is an explanatory diagram showing an example of obtaining a hash value using an example of a hash function capable of performing partial match search.
FIG. 10 is a detailed flowchart showing an example of implementing a partial match search.
FIG. 11 is an explanatory diagram showing an example of obtaining one of a plurality of hash values corresponding to a partial key.
FIG. 12 is an explanatory diagram illustrating an example of a key identification method in a backward match search.
[Explanation of symbols]
11 hash table, 12 index with chain, 13 actual data file, 21 CRT, 22 CRT driver, 22 keyboard, 24 mouse, 15 keyboard / mouse driver, 26 disk device, 27 disk device Driver, 28: Main storage device, 29: CPU

Claims (2)

検索すべき語である検索キーを入力する入力手段と、
ハッシュ値を複数の部分領域であるフィールドに分割し、前記入力手段により入力された検索キーを受信し、その検索キーを構成する各文字の文字コードに基づいた前記フィールドの大きさの部分ハッシュ値と各文字の出現位置に基づいて、部分ハッシュ値を対応するフィールドに格納し、ハッシュ値のとりうる値を限定して、一つまたは複数のハッシュ値の集合を求める演算手段と、
前記演算手段により求められた一つまたは複数のハッシュ値の集合に対して、入力された前記検索キーに基づいた検索を行う検索手段とを有する情報検索装置。
Input means for inputting a search key which is a word to be searched;
The hash value is divided into a plurality of fields, which are partial areas, a search key input by the input unit is received, and a partial hash value of the size of the field based on the character code of each character constituting the search key Calculating means for storing a partial hash value in a corresponding field based on an appearance position of each character, limiting a possible value of the hash value, and obtaining a set of one or more hash values;
An information search apparatus comprising: a search unit configured to perform a search based on the input search key with respect to one or a plurality of sets of hash values obtained by the calculation unit.
前記演算手段は、入力された検索キーを構成する各文字の部分ハッシュ値を、ハッシュ値の部分領域である所定数のフィールドに対応させて逐次格納するものであり、前記入力された検索キーの文字数が前記フィールドの数を超過した場合、その超過分の文字の部分ハッシュ値を格納する際に、格納するフィールドの位置を各文字の出現位置の前記フィールドの数に対する剰余によって求め、求めたフィールドに既に格納されているハッシュ値と論理和をとって格納する請求項1記載の情報検索装置。The arithmetic means sequentially stores partial hash values of each character constituting the input search key in association with a predetermined number of fields which are partial areas of the hash value. When the number of characters exceeds the number of the fields, when storing the partial hash value of the excess characters, the position of the field to be stored is obtained by the remainder of the appearance position of each character with respect to the number of the fields, and the obtained field 2. The information retrieval apparatus according to claim 1, wherein a logical sum of the hash value and the hash value already stored in the file is taken and the data is stored again .
JP26042095A 1995-10-06 1995-10-06 Information retrieval device Expired - Fee Related JP3596696B2 (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP26042095A JP3596696B2 (en) 1995-10-06 1995-10-06 Information retrieval device

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP26042095A JP3596696B2 (en) 1995-10-06 1995-10-06 Information retrieval device

Publications (2)

Publication Number Publication Date
JPH09101965A JPH09101965A (en) 1997-04-15
JP3596696B2 true JP3596696B2 (en) 2004-12-02

Family

ID=17347695

Family Applications (1)

Application Number Title Priority Date Filing Date
JP26042095A Expired - Fee Related JP3596696B2 (en) 1995-10-06 1995-10-06 Information retrieval device

Country Status (1)

Country Link
JP (1) JP3596696B2 (en)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5477139B2 (en) * 2010-04-19 2014-04-23 日本電気株式会社 Information search system, information search method and program
JP5523360B2 (en) * 2011-01-17 2014-06-18 日本電信電話株式会社 N-tree internal node compression method, apparatus and program

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS62165238A (en) * 1986-01-16 1987-07-21 Sharp Corp Retrieving method for electronic dictionary
JP3333549B2 (en) * 1992-03-24 2002-10-15 株式会社リコー Document search method

Also Published As

Publication number Publication date
JPH09101965A (en) 1997-04-15

Similar Documents

Publication Publication Date Title
CA1287183C (en) Method and apparatus for data hashing
Peterson Computer programs for detecting and correcting spelling errors
US8095526B2 (en) Efficient retrieval of variable-length character string data
JP3889762B2 (en) Data compression method, program, and apparatus
US8190613B2 (en) System, method and program for creating index for database
US4941124A (en) Text comparator with counter shift register
JP2769065B2 (en) Method and apparatus for use in a digital data processing system
JP3333549B2 (en) Document search method
JP3258063B2 (en) Database search system and method
US20030023584A1 (en) Universal information base system
JP3596696B2 (en) Information retrieval device
JP3852757B2 (en) Character string matching method, document processing apparatus and program using the same
US6469643B1 (en) Information processing system
US20040054677A1 (en) Method for processing text in a computer and a computer
JP4682627B2 (en) Document retrieval apparatus and method
JP3728264B2 (en) Index creation apparatus, search system, and control method
JP5041003B2 (en) Search device and search method
KR20070003488A (en) Regular expression representing method for efficient pattern matching in tcam and pattern matching method
JP3847836B2 (en) Character string search method and apparatus
JPH0869474A (en) Similar character string retrieval device
JP2990312B2 (en) Data access method and device
JP3438947B2 (en) Information retrieval device
JPH01259418A (en) Character string retrieving device
JP3241854B2 (en) Automatic word spelling correction device
JP2609794B2 (en) Kanji code judgment method

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20040213

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20040409

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20040521

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20040707

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20040712

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20040902

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

Year of fee payment: 3

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

Free format text: PAYMENT UNTIL: 20080917

Year of fee payment: 4

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

Free format text: PAYMENT UNTIL: 20090917

Year of fee payment: 5

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

Free format text: PAYMENT UNTIL: 20100917

Year of fee payment: 6

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

Free format text: PAYMENT UNTIL: 20110917

Year of fee payment: 7

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

Free format text: PAYMENT UNTIL: 20120917

Year of fee payment: 8

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

Free format text: PAYMENT UNTIL: 20120917

Year of fee payment: 8

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

Free format text: PAYMENT UNTIL: 20130917

Year of fee payment: 9

LAPS Cancellation because of no payment of annual fees