(57)【特許請求の範囲】
【請求項１】
検索対象とする文書データを蓄積した文書記憶手段と、
前記文書記憶手段に記憶された各文書データについて、文書データ内の文字列から、所定の数Ｎにより、連続するＮ文字を、先頭を１文字ずつずらして切り取って作られるＮ文字列を検索語とし、各検索語を検索語2として登録し、当該各検索語2ごとに文書データを特定する文書ＩＤを記録した検索語2ファイルと、同一Ｎ文字列となる検索語については、重複させずに１つだけ検索語1として登録するとともに、当該各検索語1ごとに検索語2ファイル内の同一Ｎ文字列の検索語2へのポインタを記録した検索語1ファイルからなるインデックスデータを記録したインデックス記憶手段と、
検索キーとなる文字列である検索文字列を入力する検索文字列入力手段と、
前記入力された検索文字列から、連続するＮ文字を、先頭を１文字ずつずらして切り取って作られるＮ文字列を検索語とし、当該先頭の検索語で前記検索語1ファイルを探索し、見つかった場合に、前記先頭の検索語と同一Ｎ文字列の検索語2の後続の検索語2と、前記先頭の検索語の後続の検索語との照合を行い、前記入力された検索文字列から得られた全ての検索語について、前記検索語2と一致した場合に、各検索語2に対応する文書ＩＤを取得する検索手段と、
前記取得した文書ＩＤに対応する文書データを出力する文書出力手段と、
を有することを特徴とする検索装置。
【請求項２】
前記検索語1、検索語2は、文章の区切りと判断される所定の文字を先頭とするＮ文字列を除外したものとすることを特徴とする請求項１に記載の検索装置。
【請求項３】
コンピュータを、請求項１に記載の検索手段として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、目的とする文字列を有する文書の検索を行うための技術に関する。
【背景技術】
【０００２】
従来より、コンピュータを利用してデータベースに記録された文書の検索を行うことが行われている。検索の手法としては、検索対象のテキストに対し、単語単位で区切って検索に利用する手法と、文字列の長さ単位で区切って検索に利用する手法がある。
【０００３】
一般に、前者の単語単位で区切って検索に利用する手法では、単語の区切りを誤ると検索漏れを生じてしまうという問題がある。そのため、漏れを防ぐ検索を行う場合には、後者の文字列の長さ単位で区切って検索に利用する手法が用いられている。このような手法は、一般にＮ−グラムと呼ばれている。また、このようなＮ−グラムを応用した検索方法も提案されている（例えば、特許文献１参照）。
【０００４】
ここで、従来のＮ−グラムを応用した検索手法における検索について説明する。例えば、図７（ａ）（ｂ）に示すような２つの文書（文字列）が存在し、これらを２つの文書を検索対象とする場合について説明する。なお、この例では、Ｎ−グラムのＮ＝２とする。まず、文書を２文字ずつの文字列であるＮ文字列に区切る。このＮ文字列を検索語とする。このとき、各検索語の先頭は１文字ずつ移動させる。そして、検索語ファイルに検索語を登録する際、検索語ファイルに既に同じＮ文字列の検索語が登録されているか確認する。検索語ファイルに同じＮ文字列の検索語が登録されていない場合、検索語ファイルに検索語を登録し、文書ＩＤファイルの文書ＩＤに文書ＩＤ、文書ＩＤポインタ（検索語の出現位置を探すための文書ＩＤファイル内の位置を示すポインタ。以下、文書ＩＤＰという。）に空（ＮＵＬＬ）、出現位置ファイルの出現位置に出現位置、出現位置ポインタ（以下、出現位置Ｐ）に空（ＮＵＬＬ）を登録する。検索語ファイルに同じＮ文字列の検索語が登録されている場合、検索語の文書ＩＤＰをたどり、文書ＩＤファイルの文書ＩＤＰを確認し、文書ＩＤＰが空（ＮＵＬＬ）になるまでたどっていく。空（ＮＵＬＬ）になっている文書ＩＤＰに新たに登録する検索語のポインタを追加し、文書ＩＤに文書ＩＤ、文書ＩＤＰに空（ＮＵＬＬ）を登録する。このようにして、図７（ｃ）に示すような検索語ファイルが得られる。
【０００５】
図７（ａ）の例では、文書０１内にＮ文字列「私は」が２回出現する。このような場合、重複するため、検索語ファイルには１つしか登録されないが、同一文書内で重複した場合、図７（ｃ）に示した出現位置ファイル内の出現位置Ｐが記録される。また、図７（ｂ）に示すように、文書０２にも検索語「私は」が出現する。このように別文書で重複した場合、図７（ｃ）に示した文書ＩＤファイル内の文書ＩＤＰが記録される。
【０００６】
続いて、従来の検索処理を図８のフローチャートを用いて説明する。ここでは、図７（ａ）（ｂ）に示した文書から検索文字列「会社員」を検索する場合について説明する。まず、検索文字列を取得し、検索語に分ける（Ｓ１１）。検索文字列「会社員」の場合、Ｎ文字列である検索語「会社」「社員」に分けられる。そして、検索語ファイルから検索語を探索する（Ｓ１２）。具体的には、検索語「会社」を探索する。図７（ｃ）の例では、検索語ファイルの検索語ポインタ（以下、検索語Ｐ）“９”でマッチする。
【０００７】
検索語がマッチした場合は、全ての検索語が終了したかどうかを判断する（Ｓ１５）。終了していない場合には、検索語Ｐから次の検索語を探索する（Ｓ１６）。上記の例の場合、検索語「会社」を探索した時点では、検索語「社員」が残っているので、検索語「社員」の探索を行う。図７（ｃ）の例では、検索語ファイルの検索語Ｐ “１０”でマッチする。
【０００８】
検索文字列から切り出した全ての検索語が検索語ファイル内でマッチした場合には、文書ＩＤ探索のループ処理（Ｌ１１）に進む。ループ処理Ｌ１１は、全ての文書ＩＤについての探索が行われるまで続けられる。まず、全ての検索語の文書ＩＤＰから文書ＩＤを探索する（Ｓ１３）。図７（ｃ）の例では、検索語ファイルの「会社」に対応する文書ＩＤＰ“１０”で文書ＩＤファイルから文書ＩＤ“２”が探索される。また、検索語ファイルの「社員」に対応する文書ＩＤＰ“１１”で文書ＩＤファイルから文書ＩＤ“２”が探索される。
【０００９】
全ての検索語に対して、同じ文書ＩＤがある場合には、出現位置探索のループ処理が行われる（Ｌ１２）。ループ処理Ｌ１２内で行われる処理は、出現位置Ｐから出現位置を探索する処理である（Ｓ１４）。図７（ｃ）の例では、「会社」に対応する出現位置Ｐ“１１”が記録されているので、出現位置Ｐ“１１”で出現位置ファイルを探索し、出現位置“３”が探索される。
【００１０】
また、「社員」に対応する出現位置Ｐ“１２”が記録されているので、出現位置Ｐ“１２”で出現位置ファイルを探索し、出現位置“４”が探索される。検索語「会社」「社員」の出現位置の特定は図７（ｃ）に示した矢印の流れに従って行われることになる。検索語「会社」が、文書ＩＤ“２”、出現位置“３”、 検索語「社員」が、文書ＩＤ“２”、出現位置“４”であり、同一文書ＩＤで出現位置が連続するので、検索文字列「会社員」が、ヒットすることになる。
【００１１】
【特許文献１】特許第３０９５５５２号
【発明の開示】
【発明が解決しようとする課題】
【００１２】
しかしながら、上記従来の手法では、検索漏れを防ぐことはできるが、検索時に文書ＩＤの他に文字列の出現位置情報も利用するため、インデックスサイズが大きい、検索速度が遅い等の問題がある。
【００１３】
そこで、本発明は、Ｎ−グラムの手法を用いた場合に、インデックスサイズを小さくすることができるとともに、検索速度を速くすることが可能な検索装置を提供することを課題とする。
【課題を解決するための手段】
【００１４】
上記課題を解決するため、本発明では、検索対象とする文書データを蓄積した文書記憶手段と、前記文書記憶手段に記憶された各文書データについて、文書データ内の文字列から、所定の数Ｎにより、連続するＮ文字を、先頭を１文字ずつずらして切り取って作られるＮ文字列を検索語とし、各検索語を検索語2として登録し、当該各検索語2ごとに文書データを特定する文書ＩＤを記録した検索語2ファイルと、同一Ｎ文字列となる検索語については、重複させずに１つだけ検索語1として登録するとともに、当該各検索語1ごとに検索語2ファイル内の同一Ｎ文字列の検索語2へのポインタを記録した検索語1ファイルからなるインデックスデータを記録したインデックス記憶手段と、検索キーとなる文字列である検索文字列を入力する検索文字列入力手段と、前記入力された検索文字列から、連続するＮ文字を、先頭を１文字ずつずらして切り取って作られるＮ文字列を検索語とし、当該先頭の検索語で前記検索語1ファイルを探索し、見つかった場合に、前記先頭の検索語と同一Ｎ文字列の検索語2の後続の検索語2と、前記先頭の検索語の後続の検索語との照合を行い、前記入力された検索文字列から得られた全ての検索語について、前記検索語2と一致した場合に、各検索語2に対応する文書ＩＤを取得する検索手段と、前記取得した文書ＩＤに対応する文書データを出力する文書出力手段を有する検索装置を提供する。
【発明の効果】
【００１５】
本発明によれば、Ｎ−グラムの手法を用いた場合に、インデックスサイズを小さくすることができるとともに、検索速度を速くすることが可能となる。
【発明を実施するための最良の形態】
【００１６】
以下、本発明の実施形態について図面を参照して詳細に説明する。まず、検索用のインデックスの作成について説明する。図１（ａ）（ｂ）に検索対象とする文書の一例を示す。これは、図７（ａ）（ｂ）に示した文書０１、文書０２と同一のものである。インデックスの作成は、コンピュータが専用のプログラムを実行することにより行われる。
【００１７】
なお、本実施形態では、Ｎ−グラムのＮ＝２とする。まず、文書を２文字ずつの検索語に区切る。このとき、各検索語の先頭は１文字ずつ移動させる。そして、検索語１ファイルに検索語１を登録する際、検索語１ファイルに既に同じＮ文字列の検索語１が登録されているか確認する。検索語１ファイルに同じＮ文字列の検索語が登録されていない場合、検索語１ファイルに検索語を登録し、検索語2ファイルの検索語2に検索語、文書ＩＤに文書ＩＤの値、文書ＩＤＰに空（ＮＵＬＬ）、検索語１ファイルの検索語2ポインタ（以下、検索語2Ｐ）に検索語2ファイルの空きポインタ位置を登録する。検索語1ファイルに同じＮ文字列の検索語が登録されている場合、検索語1の検索語2Ｐをたどり、検索語2ファイルの文書ＩＤＰを確認し、文書ＩＤＰが空（ＮＵＬＬ）になるまでたどっていく。空（ＮＵＬＬ）になっている文書ＩＤＰに新たに登録する検索語2のポインタを追加し、検索語2に検索語、文書ＩＤに文書ＩＤの値、文書ＩＤＰに空（ＮＵＬＬ）を登録する。さらに、上記従来技術と異なるのは、「。」を区切りとし、検索語の先頭としないことである。本実施形態では、「。」を示す文字コードをあらかじめ区切りとして設定しておき、コンピュータは、「。」を検出した場合には、文書中の次の文字を、次の検索語の先頭とする処理を行う。本実施形態では、「。」を区切りとして検索語の先頭としないようにしているが、これは、「。」が文章の区切りとして用いられる文字であり、「。」を先頭とする文字列を検索語とすると、無駄なインデックスを作成することになるからである。この規則に従ったプログラムをコンピュータが実行し、図１（ｃ）に示すような検索語1ファイル、検索語2ファイルが作成される。文書ＩＤＰ（ポインタ）は、その検索語の出現位置を探すための文書ＩＤファイル内の位置を示すポインタである。
【００１８】
図１（ａ）の例では、文書０１内に検索語「私は」が２回出現する。このような場合、重複するため、検索語1ファイルには１つしか登録されないが、同一文書内で重複した場合、図１（ｃ）に示した検索語2ファイル内に記録される。また、図１（ｂ）に示すように、文書０２にも検索語「私は」が出現する。このように別文書で重複した場合も、図１（ｃ）に示した検索語2ファイル内に記録される。
【００１９】
検索語1ファイルには、各検索語に対応付けて検索語2Ｐが記録される。また、検索語2ファイルには、各検索語が出現する文書ＩＤと、文書ＩＤＰが記録される。
【００２０】
次に、本発明に係る検索装置について説明する。図２は、本発明の検索装置の構成を示す機能ブロック図である。図２において、１０は文書記憶手段、２０はインデックス記憶手段、３０は検索文字列入力手段、４０は検索手段、５０は文書出力手段である。
【００２１】
文書記憶手段１０は、多数の文書データを蓄積したものである。各文書データには、各文書データを特定する文書ＩＤが付されており、この文書ＩＤを特定することにより対応する文書データの抽出が可能となっている。インデックス記憶手段２０は、文書記憶手段１０に蓄積された文書データのインデックスデータを記録したものである。このインデックスデータは、上述のように図１（ｃ）に示したような形式となっている。文書記憶手段１０、インデックス記憶手段２０は図２の例では分離して示しているが、物理的には１つの記憶装置に設けられていても、複数の記憶装置に分離して設けられていても良い。現実には、コンピュータに接続されたハードディスク等の外部記憶装置にそれぞれ所定の領域を確保して設けられることになる。
【００２２】
検索文字列入力手段３０は、検索キーワードとなる文字列である検索文字列を入力する機能を有しており、キーボード等の入力機器を用いて指定された検索文字列を入力する。検索手段４０は、入力された検索文字列を用いて、インデックス記憶手段２０内のインデックスを参照し、一致するＮ文字列が存在するかどうかを照合し、検索文字列から切り出した先頭のＮ文字列と一致する検索語を検出し、検索文字列から切り出した後続のＮ文字列と検出した検索語に後続する検索語が一致するかどうかを判断することにより、該当する文書ＩＤを取得する。文書出力手段５０は、検索手段４０が取得した文書ＩＤに対応する文書データを出力する機能を有している。図２に示した装置は、現実には、コンピュータに専用プログラムを記録しておき、この専用プログラムをコンピュータが実行することにより実現される。
【００２３】
続いて、本発明の検索処理を図３のフローチャートを用いて説明する。ここでは、図１（ａ）（ｂ）に示した文書から検索文字列「会社員」を検索する場合について説明する。検索文字列入力手段３０から検索文字列が入力されると、検索手段４０は、入力された検索文字列をＮ文字列の検索語に分ける（Ｓ１）。Ｎ＝２の場合、検索文字列「会社員」の先頭の検索語は「会社」、次の検索語は「社員」となる。そして、検索手段４０は、検索語1ファイルから検索語を探索する（Ｓ２）。具体的には、まず、検索語「会社」を探索する。図１（ｃ）の例では、検索語ファイルの検索語Ｐ“８”でマッチする。
【００２４】
検索語が検索語1ファイル内でマッチした場合には、検索手段４０は、検索語2探索のループ処理（Ｌ１）に進む。ループ処理Ｌ１は、全ての検索語2についての探索が行われるまで続けられる。具体的には、その検索語の検索語2Ｐから検索語2を探索する（Ｓ３）。図１（ｃ）の例では、検索語1ファイルの「会社」に対応する検索語2Ｐ“１０”で検索語2ファイルから検索語2 「会社」が探索される。そして、検索語2ファイル内で検索語2Ｐが存在する間、検索手段４０は、検索語2探索のループ処理を行う。
【００２５】
図１（ｃ）の例では、検索語2ファイル内の検索語2「会社」には、文書ＩＤＰが記録されていないので、検索手段４０は、検索語2「会社」の探索を終了する。並行して、検索手段４０は、探索の結果見つかった各検索語2「会社」の次の検索語2が、検索文字列から分けられた検索語「社員」と一致するかどうかの判断を行う。図１（ｃ）の例では、検索語2ファイルにおける位置“１０”の次の位置“１１”の検索語2が「社員」であり、検索語「社員」と一致するので、検索手段４０は、検索語2ファイル内に検索語「会社」「社員」が連続して存在することを確認する。検索語「会社」「社員」の探索は図１（ｃ）に示した矢印の流れに従って行われることになる。検索語と一致する検索語2の文書ＩＤがいずれも“２”で同一であるので、検索手段４０は、文書ＩＤ“２”を取得する。これにより、検索文字列「会社員」が、ヒットしたことになる。
【００２６】
文書出力手段５０は、検索手段４０が取得した文書ＩＤ“２”で、文書記憶手段１０を参照し、文書ＩＤ“２”に対応する文書データを出力する。
【００２７】
従来手法と本発明を比較してみる。図４は、従来のインデックスデータと本発明のインデックスデータの構造を示す図である。従来のインデックスデータは、図４（ａ）に示すように、検索語ファイル、文書ＩＤファイル、出現位置ファイルの３つのファイルを有し、検索語１つの記録に５バイトを要し、他の項目については全て４バイトを要する。本発明のインデックスデータは、図４（ｂ）に示すように、検索語1ファイル、検索語2ファイルの２つのファイルを有し、検索語1、検索語2については検索語１つの記録に５バイトを要し、他の項目については全て４バイトを要する。
【００２８】
図５は、平均１万文字の文書１０００万件分でインデックスを作成したときの容量を示す図である。数字の単位は、ＧＢ（ギガバイト）である。従来手法と本発明を比べると、検索語の重なる割合に関係なく、従来の文書ファイルと出現位置ファイルの合計と、検索語2ファイルの差分がそのまま容量の差になっていることがわかる。図５の例の場合、本発明を用いることにより、従来より２５〜３０％程度容量を削減することができる。
【００２９】
図６は、従来手法と本発明の処理回数を示す図である。図６に示すように、従来手法では検索語数に比例してループ数も比例する。これは、図８に示したように、各検索語についてＬ１１、Ｌ１２の二重のループ処理が繰り返されるからである。これに対して本発明では、検索語数に関係無くループ数は一定である。これは、図３に示したように、検索語が検索語2ファイルでマッチした場合、次の検索語がマッチするかどうかについても連続して確認するので、ループが増えることがないためである。
【００３０】
以上、本発明の好適な実施形態について説明したが、本発明は上記実施形態に限定されず、種々の変形が可能である。例えば、図２に示した検索装置を、検索サーバとし、Ｗｅｂサーバと連携し、ネットワークから送信されてきた検索要求に対して応えるようにしても良い。この場合、ネットワークからＷｅｂサーバが受信した検索クエリから検索文字列を抽出して、検索文字列入力手段３０が検索文字列を入力する。そして、検索処理後、文書出力手段５０が、Ｗｅｂサーバを介して送信元に検索結果である文書データを送信する。
【００３１】
また、上記実施形態では、「。」のような所定の文字コードを区切りとして設定し、これを先頭とする文字列を検索語としないようにしたが、多少のインデックスの増加を許容するのであれば、必ずしも、所定の文字コードを区切りとして設定しておく必要はない。
【図面の簡単な説明】
【００３２】
【図１】検索対象とする文書、本発明で用いるインデックスデータの一例を示す図である。
【図２】本発明に係る検索装置の一実施形態を示す構成図である。
【図３】本発明に係る検索装置の処理概要を示すフローチャートである。
【図４】従来のインデックスデータと本発明のインデックスデータの構造を示す図である。
【図５】平均１万文字の文書１０００万件分でインデックスを作成したときの容量を示す図である。
【図６】従来と本発明の処理回数を示す図である。
【図７】検索対象とする文書、従来手法で用いるインデックスデータの一例を示す図である。
【図８】従来手法の処理概要を示すフローチャートである。
【符号の説明】
【００３３】
１０・・・文書記憶手段
２０・・・インデックス記憶手段
３０・・・検索文字列入力手段
４０・・・検索手段
５０・・・文書出力手段
【図１】
0005083612.tif 000002
【図２】
0005083612.tif 000003
【図３】
0005083612.tif 000004
【図４】
0005083612.tif 000005
【図５】
0005083612.tif 000006
【図６】
0005083612.tif 000007
【図７】
0005083612.tif 000008
【図８】
0005083612.tif 000009