(57)【特許請求の範囲】
【請求項１】
トライ構造の節点に対して文字列の検索に用いるデータを管理する情報処理装置であって、
第１の文字列に含まれるＮ‐ｇｒａｍのデータが到達可能な節点を前記トライ構造のデータへ追加する追加手段と、
前記追加手段によって追加された節点及び前記節点に到達可能とする前記Ｎ‐ｇｒａｍのデータを対応づけてインデックス情報を生成する生成手段と、
前記生成手段によって生成したインデックス情報を用いて求まる検索する文字列のＮ‐ｇｒａｍのデータが到達可能な節点を用いて、前記検索する文字列を前記トライ構造のデータから検索する検索手段と、
を備え、
前記検索手段は、前記検索する文字列の先頭が任意の複数文字を示す場合、前記任意の複数文字の次のＮ‐ｇｒａｍのデータが到達可能な節点を前記インデックス情報から求め、前記次のＮ‐ｇｒａｍのデータの後に連続する文字を連結した文字が到達可能な節点を、前記インデックス情報から求めた節点を用いて検索する
ことを特徴とする情報処理装置。
【請求項２】
前記検索手段は、前記検索する文字列の先頭のＮ‐ｇｒａｍのデータが通常の文字を示す場合、前記通常の文字を含む連続する文字を連結した文字が到達可能な節点を、前記トライ構造のデータのルートから検索を行うことを特徴とする請求項１に記載の情報処理装置。
【請求項３】
トライ構造の節点に対して文字列の検索に用いるデータを管理する情報処理装置であって、
第１の文字列に含まれるＮ‐ｇｒａｍのデータが到達可能な節点を前記トライ構造のデータへ追加する追加手段と、
前記追加手段によって追加された節点及び前記節点に到達可能とする前記Ｎ‐ｇｒａｍのデータを対応づけてインデックス情報を生成する生成手段と、
前記生成手段によって生成したインデックス情報を用いて求まる検索する文字列のＮ‐ｇｒａｍのデータが到達可能な節点を用いて、前記検索する文字列を前記トライ構造のデータから検索する検索手段と、
を備え、
前記検索手段は、前記検索する文字列の先頭が任意の文字を示す場合、任意の文字の次のＮ‐ｇｒａｍのデータが到達可能な節点を、前記トライ構造のデータのルートから検索を行うことを特徴とする情報処理装置。
【請求項４】
トライ構造の節点に対して文字列の検索に用いるデータを管理する情報処理装置であって、
第１の文字列に含まれるＮ‐ｇｒａｍのデータが到達可能な節点を前記トライ構造のデータへ追加する追加手段と、
前記追加手段によって追加された節点及び前記節点に到達可能とする前記Ｎ‐ｇｒａｍのデータを対応づけてインデックス情報を生成する生成手段と、
前記生成手段によって生成したインデックス情報を用いて求まる検索する文字列のＮ‐ｇｒａｍのデータが到達可能な節点を用いて、前記検索する文字列を前記トライ構造のデータから検索する検索手段と、
を備え、
前記検索手段は、前記検索する文字列が到達可能な節点を検索した後、前記文字列の後の文字が任意の複数文字、及び前記任意の複数文字の次の文字が通常の文字の場合、前記通常の文字が到達可能な節点及び前記検索する文字列が到達可能な節点から、検索する文字列を特定することを特徴とする情報処理装置。
【請求項５】
トライ構造の節点に対して文字列の検索に用いるデータを管理する情報処理装置であって、
第１の文字列に含まれるＮ‐ｇｒａｍのデータが到達可能な節点を前記トライ構造のデータへ追加する追加手段と、
前記追加手段によって追加された節点及び前記節点に到達可能とする前記Ｎ‐ｇｒａｍのデータを対応づけてインデックス情報を生成する生成手段と、
前記生成手段によって生成したインデックス情報を用いて求まる検索する文字列のＮ‐ｇｒａｍのデータが到達可能な節点を用いて、前記検索する文字列を前記トライ構造のデータから検索する検索手段と、
を備え、
前記第１の文字列は、文字列の終端を示す終端文字列を含み、前記追加手段は、前記第１の文字列の先頭から前記終端文字に達するまで、前記節点の追加を行うことを特徴とする情報処理装置。
【請求項６】
トライ構造の節点に対して文字列の検索に用いるデータを管理する情報処理装置であって、
第１の文字列に含まれるＮ‐ｇｒａｍのデータが到達可能な節点を前記トライ構造のデータへ追加する追加手段と、
前記追加手段によって追加された節点及び前記節点に到達可能とする前記Ｎ‐ｇｒａｍのデータを対応づけてインデックス情報を生成する生成手段と、
前記生成手段によって生成したインデックス情報を用いて求まる検索する文字列のＮ‐ｇｒａｍのデータが到達可能な節点を用いて、前記検索する文字列を前記トライ構造のデータから検索する検索手段と、
を備え、
前記第１の文字列は、文字列の終端を示す終端文字列を含み、前記追加手段は、前記第１の文字列の先頭から前記終端文字に達するまで、前記節点の追加を行い、
前記検索手段は、前記検索する文字列に終端文字列が含まれる場合、前記終端文字列が到達可能な節点を検索することを特徴とする情報処理装置。
【請求項７】
トライ構造の節点に対して文字列の検索に用いるデータを管理する情報処理装置であって、
第１の文字列に含まれるＮ‐ｇｒａｍのデータが到達可能な節点を前記トライ構造のデータへ追加する追加手段と、
前記追加手段によって追加された節点及び前記節点に到達可能とする前記Ｎ‐ｇｒａｍのデータを対応づけてインデックス情報を生成する生成手段と、
前記生成手段によって生成したインデックス情報を用いて求まる検索する文字列のＮ‐ｇｒａｍのデータが到達可能な節点を用いて、前記検索する文字列を前記トライ構造のデータから検索する検索手段と、
を備え、
前記第１の文字列は、文字列の終端を示す終端文字列を含み、前記追加手段は、前記第１の文字列の先頭から前記終端文字に達するまで、前記節点の追加を行い、
前記トライ構造の節点に追加された終端文字列に対応させて、前記第１の文字列を一意に識別する識別情報をデータとして管理し、
前記検索手段は、前記検索する文字列に終端文字列が含まれる場合、前記終端文字列が到達可能な節点の識別情報に基づいて、第１の文字列を検索することを特徴とする情報処理装置。
【請求項８】
トライ構造の節点に対して文字列の検索に用いるデータを管理する情報処理装置であって、
第１の文字列に含まれるＮ‐ｇｒａｍのデータが到達可能な節点を前記トライ構造のデータへ追加する追加手段と、
前記追加手段によって追加された節点及び前記節点に到達可能とする前記Ｎ‐ｇｒａｍのデータを対応づけてインデックス情報を生成する生成手段と、
前記生成手段によって生成したインデックス情報を用いて求まる検索する文字列のＮ‐ｇｒａｍのデータが到達可能な節点を用いて、前記検索する文字列を前記トライ構造のデータから検索する検索手段と、
を備え、
前記検索手段によって検索した節点を含む文字列を検索結果レコードとして出力する出力手段を備えたことを特徴とする情報処理装置。
【請求項９】
トライ構造の節点に対して文字列の検索に用いるデータを管理する情報処理装置であって、
第１の文字列に含まれるＮ‐ｇｒａｍのデータが到達可能な節点を前記トライ構造のデータへ追加する追加手段と、
前記追加手段によって追加された節点及び前記節点に到達可能とする前記Ｎ‐ｇｒａｍのデータを対応づけてインデックス情報を生成する生成手段と、
前記生成手段によって生成したインデックス情報を用いて求まる検索する文字列のＮ‐ｇｒａｍのデータが到達可能な節点を用いて、前記検索する文字列を前記トライ構造のデータから検索する検索手段と、
を備え、
前記第１の文字列は、文字列の終端を示す終端文字列を含み、前記追加手段は、前記第１の文字列の先頭から前記終端文字に達するまで、前記節点の追加を行い、
前記トライ構造のデータから削除する文字列の終端文字列が到達可能な場合、前記文字列に対応するデータを前記トライ構造から削除するとともに、前記インデックス情報から前記文字列のＮ‐ｇｒａｍのデータ及び節点を削除する削除手段を備えたことを特徴とする情報処理装置。
【請求項１０】
トライ構造の節点に対して文字列の検索に用いるデータを管理する情報処理装置の制御方法であって、
前記情報処理装置の追加手段が、第１の文字列に含まれるＮ‐ｇｒａｍのデータが到達可能な節点を前記トライ構造のデータへ追加する追加工程と、
前記情報処理装置の生成手段が、前記追加工程によって追加された節点及び前記節点に到達可能とする前記Ｎ‐ｇｒａｍのデータを対応づけてインデックス情報を生成する生成工程と、
前記情報処理装置の検索手段が、前記生成工程によって生成したインデックス情報を用いて求まる検索する文字列のＮ‐ｇｒａｍのデータが到達可能な節点を用いて、前記検索する文字列を前記トライ構造のデータから検索する検索工程と、
を実行し、
前記情報処理装置の検索手段が、前記検索工程によって、前記検索する文字列の先頭が任意の複数文字を示す場合、前記任意の複数文字の次のＮ‐ｇｒａｍのデータが到達可能な節点を前記インデックス情報から求め、前記次のＮ‐ｇｒａｍのデータの後に連続する文字を連結した文字が到達可能な節点を、前記インデックス情報から求めた節点を用いて検索すること、
を実行することを特徴とする情報処理装置の制御方法。
【請求項１１】
トライ構造の節点に対して文字列の検索に用いるデータを管理する情報処理装置において読取実行可能なプログラムであって、
前記情報処理装置を、
第１の文字列に含まれるＮ‐ｇｒａｍのデータが到達可能な節点を前記トライ構造のデータへ追加する追加手段と、
前記追加手段によって追加された節点及び前記節点に到達可能とする前記Ｎ‐ｇｒａｍのデータを対応づけてインデックス情報を生成する生成手段と、
前記生成手段によって生成したインデックス情報を用いて求まる検索する文字列のＮ‐ｇｒａｍのデータが到達可能な節点を用いて、前記検索する文字列を前記トライ構造のデータから検索する検索手段と、
して機能させ、
前記検索手段は、前記検索する文字列の先頭が任意の複数文字を示す場合、前記任意の複数文字の次のＮ‐ｇｒａｍのデータが到達可能な節点を前記インデックス情報から求め、前記次のＮ‐ｇｒａｍのデータの後に連続する文字を連結した文字が到達可能な節点を、前記インデックス情報から求めた節点を用いて検索するように、
機能させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、文字列をキーワードとして取り扱う検索を行う技術に関し、キーワードを検索するために効率的な、データ構造を作成し、該作成したデータ構造を用いた文字列をキーワードとしたデータの検索処理を行う技術に関する。
【背景技術】
【０００２】
文字列をキーワードとして取り扱う検索装置、例えば、国語辞書などを搭載した電子辞書は、入力として与えた文字列をキーワードとし、キーワードに該当するレコードを出力する。検索装置における検索方法としては、検索文字列と完全に一致するキーワードを検索する「完全一致検索」、検索文字列を前方に含むキーワードを検索する「前方一致検索」、検索文字列を後方に含むキーワードを検索する「後方一致検索」、検索文字列を含むキーワードを検索する「部分一致検索」などがある。ユーザビリティの観点から、これら全ての検索が可能な検索装置が求められるが、後述する理由により、「後方一致検索」や「部分一致検索」をサポートしていない検索装置も多い。
【０００３】
以下、説明を簡略化するため、文字列とキーワードに関する語句を次のように定める。まず、検索装置に登録する文字列を構成する文字を通常文字と呼び、通常文字の集合を「Σ」と表記する。次に、キーワードの終端を表す文字を終端文字と呼び、「＃」と表記する。ここで、＃はΣに含まれない。次に、Σに含まれる任意の一文字を表す記号を「？」、任意の複数文字を表す記号を「＊」と表記する。
【０００４】
これにより、各検索方法に対応する検索キーワードをそれぞれ以下のように表せる。ここで、各検索キーワード中のα、βは、Σに含まれる文字から構成される文字列を表す。
・完全一致検索に対応する検索キーワード：  α＃
・前方一致検索に対応する検索キーワード：  α＊＃
・後方一致検索に対応する検索キーワード：  ＊α＃
・部分一致検索に対応する検索キーワード：  ＊α＊＃
【０００５】
上記の検索キーワードの他にも、部分的に任意の文字を含むような検索（例えば「α＊β？？＃」など）も検索要件に含まれることがある。検索装置に大量のキーワードが登録されている場合、これらの様々な検索要求に対して、検索装置から検索キーワードをシーケンシャルに照合すると時間的効率に問題がある。そこで、高速な検索処理を実現するため、トライ構造やN-gram構造をインデクスとして用いる方法が提案されている。
【０００６】
トライ構造は、登録対象の文字列集合における共通接頭辞を併合した木構造で、キーワードの検索時間がキーワードの長さに依存するため、インデクスに登録するキーワードの数が増加しても検索の高速性を保つことが可能である。
【０００７】
しかし、トライ構造を用いた検索方法では、検索キーワードを先頭から一文字ずつ読込み、初期節点（木構造の根にあたる節点）から読込んだ文字によって順次遷移する必要があるため、検索キーワードにおける先頭の文字が定まっていない後方一致検索や部分一致検索を効率的に行うことができない。
【０００８】
一方、N-gram構造は、各キーワードにおける長さNの部分文字列の出現位置を保持するデータ構造で、前述の検索方法をすべて実行可能である。
【０００９】
しかし、N-gram構造を用いた検索方法では、検索キーワードをN文字ずつ区切って各部分文字列の位置情報を抽出した後、各部分文字列の位置関係を照合する必要があり、トライ構造を用いた検索方法と比べて検索に時間を要する。また、N-gram構造を構築するためには、各キーワードにおける全部分文字列の位置情報を保持する必要があり、インデクスに必要なサイズがトライ構造と比較して大きい。
【００１０】
この問題に対し、N-gram構造のインデクスをコンパクトに実現する方法として、様々な方法が提案されている。例えば、特許文献１には、キーワードから単語（形態素）を切り出して辞書順に並べたインデクスを作成し、単語に出現する文字の1-gramインデクスを別途作成することで位置情報の格納に必要な記憶領域を削減する技術が開示されている。また、特許文献２には、キーワードから一定の長さの部分文字列を切り出してインデクスを作成し、部分文字列に出現する2-gramインデクスを別途作成することで位置情報の格納に必要な記憶領域を削減する技術が開示されている。さらに特許文献３には、位置情報の集合である転置リストを格納するためのメモリ領域を３種類設け、転置リストの長さによって使い分けることでコンパクトに転置リストを管理する技術が開示されている。下記非特許文献１には、トークンの位置情報の代わりにハッシュ値を用いることでインデクスに要する情報量の抑制を図る技術が開示されている。
【先行技術文献】
【特許文献】
【００１１】
【特許文献１】特開平８−２４９３５４
【特許文献２】特許第４４１４９８９号
【特許文献３】特開２００８−２１７１２２
【非特許文献】
【００１２】
【非特許文献１】平林幹雄ほか,“N.M-gram: ハッシュ値付きN-gram法における転置インデクスの実現”, 情報処理学会研究報告,2006-DBS-140, pp215-222, 2006.
【発明の概要】
【発明が解決しようとする課題】
【００１３】
しかしながら、上記の文献で開示されているいずれの技術も、通常のN-gram構造と比べて記憶領域の削減を図ることができるが、トライ構造と比較して検索速度が高速であるとは言えない。
【００１４】
トライ構造は、完全一致検索や前方一致検索を効率的に行うことができるが、後方一致検索、部分一致検索、前後一致検索を容易に実行できず、使用用途が限られる。一方、N-gram構造は、これらの検索も可能であるが、トライ構造と比較して、完全一致検索や前方一致検索が高速とは言えず、また、インデクスに必要となる記憶領域が大きい。
【００１５】
本発明は上記の課題を解決するためになされたものであり、検索対象とするキーワードに一致する文字列を検索するにあたり、当該文字列の検索の方法に依らずに、高速な検索を行うことを可能とする技術を提供することを目的とする。
【課題を解決するための手段】
【００１６】
上記した目的を達成するために、本発明の情報処理装置は、トライ構造の節点に対して文字列の検索に用いるデータを管理する情報処理装置であって、第１の文字列に含まれるＮ‐ｇｒａｍのデータが到達可能な節点を前記トライ構造のデータへ追加する追加手段と、前記追加手段によって追加された節点及び前記節点に到達可能とする前記Ｎ‐ｇｒａｍのデータを対応づけてインデックス情報を生成する生成手段と、前記生成手段によって生成したインデックス情報を用いて求まる検索する文字列のＮ‐ｇｒａｍのデータが到達可能な節点を用いて、前記検索する文字列を前記トライ構造のデータから検索する検索手段と、を備え、前記検索手段は、前記検索する文字列の先頭が任意の複数文字を示す場合、前記任意の複数文字の次のＮ‐ｇｒａｍのデータが到達可能な節点を前記インデックス情報から求め、前記次のＮ‐ｇｒａｍのデータの後に連続する文字を連結した文字が到達可能な節点を、前記インデックス情報から求めた節点を用いて検索することを特徴とする。
【００１７】
上記した目的を達成するために、本発明の情報処理装置の制御方法は、トライ構造の節点に対して文字列の検索に用いるデータを管理する情報処理装置の制御方法であって、前記情報処理装置の追加手段が、第１の文字列に含まれるＮ‐ｇｒａｍのデータが到達可能な節点を前記トライ構造のデータへ追加する追加工程と、前記情報処理装置の生成手段が、前記追加工程によって追加された節点及び前記節点に到達可能とする前記Ｎ‐ｇｒａｍのデータを対応づけてインデックス情報を生成する生成工程と、前記情報処理装置の検索手段が、前記生成工程によって生成したインデックス情報を用いて求まる検索する文字列のＮ‐ｇｒａｍのデータが到達可能な節点を用いて、前記検索する文字列を前記トライ構造のデータから検索する検索工程と、を実行し、前記情報処理装置の検索手段が、前記検索工程によって、前記検索する文字列の先頭が任意の複数文字を示す場合、前記任意の複数文字の次のＮ‐ｇｒａｍのデータが到達可能な節点を前記インデックス情報から求め、前記次のＮ‐ｇｒａｍのデータの後に連続する文字を連結した文字が到達可能な節点を、前記インデックス情報から求めた節点を用いて検索すること、を実行することを特徴とする。
【００１８】
上記した目的を達成するために、本発明のプログラムは、トライ構造の節点に対して文字列の検索に用いるデータを管理する情報処理装置において読取実行可能なプログラムであって、前記情報処理装置を、第１の文字列に含まれるＮ‐ｇｒａｍのデータが到達可能な節点を前記トライ構造のデータへ追加する追加手段と、前記追加手段によって追加された節点及び前記節点に到達可能とする前記Ｎ‐ｇｒａｍのデータを対応づけてインデックス情報を生成する生成手段と、前記生成手段によって生成したインデックス情報を用いて求まる検索する文字列のＮ‐ｇｒａｍのデータが到達可能な節点を用いて、前記検索する文字列を前記トライ構造のデータから検索する検索手段と、して機能させ、前記検索手段は、前記検索する文字列の先頭が任意の複数文字を示す場合、前記任意の複数文字の次のＮ‐ｇｒａｍのデータが到達可能な節点を前記インデックス情報から求め、前記次のＮ‐ｇｒａｍのデータの後に連続する文字を連結した文字が到達可能な節点を、前記インデックス情報から求めた節点を用いて検索するように、機能させることを特徴とする。
【発明の効果】
【００１９】
本発明によれば、検索対象とするキーワードに一致する文字列を検索するにあたり、トライ構造における検索方法を用いると共に、N-gram構造の特徴をさらに取り込んだ検索方法を用いることで、当該文字列の検索の方法に依らずに、高速な検索を行うことができる、という効果を奏する。
【図面の簡単な説明】
【００２０】
【図１】本発明の実施形態における文字列キーワード検索装置の構成を示す図である。
【図２】本発明の実施形態における各種端末のハードウェア構成を示す図である。
【図３】本発明の実施形態における追加キーワード集合の一例である。
【図４】本発明の実施形態におけるキーワードインデクス構造の一例である。
【図５】本発明の実施形態におけるキーワード追加処理のフローチャートである。
【図６】本発明の実施形態におけるキーワード削除処理のフローチャートである。
【図７】本発明の実施形態におけるキーワード検索処理のフローチャートである。
【図８】本発明の実施形態における検索初期設定処理のフローチャートである。
【図９】本発明の実施形態における正解パス検索処理のフローチャートである。
【図１０】本発明の実施形態におけるレコード情報出力処理のフローチャートである。
【発明を実施するための形態】
【００２１】
以下、図面を参照して、本発明の実施形態を詳細に説明する。
【００２２】
図１は、本発明の実施形態における文字列キーワード検索装置の構成を示す図である。
【００２３】
文字列キーワード検索装置１００は、キーワードインデクス追加部１０２と、キーワードインデクス削除部１０３と、検索結果表示部１０４と、キーワード検索部１０５とを備える。
【００２４】
キーワードインデクス追加部１０２は、追加キーワード１０１を入力としてキーワードインデクス１０３にレコードを追加する。キーワードインデクス削除部１０８は、削除キーワード１０７を入力としてキーワードインデクス１０３から該当するレコードを削除する。キーワード検索部１０５は検索キーワード１０６を入力としてキーワードインデクス１０３を検索し、検索結果を検索結果表示部１０４に表示する。これらのキーワード追加処理、削除処理、及び検索処理については、詳しく後述する。
【００２５】
次に、図１の文字列キーワード検索装置１００のハードウェア構成について、図２を用いて説明する。
【００２６】
図中、ＣＰＵ２０１は、システムバス２０４に接続される後述の各デバイスやコントローラを統括的に制御する。また、ＲＯＭ２０３あるいは外部メモリ２１１には、ＣＰＵ２０１の制御プログラムであるＢＩＯＳ（Basic Input / Output System）やオペレーティングシステムプログラム（以下、ＯＳ）や、文字列キーワード検索装置１００に後述する各種の処理を実行させるために必要な各種プログラムやデータ等が記憶されている。ＲＡＭ２０２は、ＣＰＵ２０１の主メモリ、ワークエリア等として機能する。
【００２７】
ＣＰＵ２０１は、処理の実行に際して必要なプログラム等をＲＡＭ２０２にロードして、プログラムを実行することで後述する各種処理を実現するものである。また、入力コントローラ（入力Ｃ）２０５は、キーボードやポインティングデバイス等で構成される入力装置２０９からの入力を制御する。ビデオコントローラ（ＶＣ）２０６は、ディスプレイ装置２１０等の表示装置への表示を制御する。ディスプレイ装置２１０は、例えばＣＲＴディスプレイや液晶ディスプレイ等で構成される。
【００２８】
メモリコントローラ（ＭＣ）２０７は、ブートプログラム、ブラウザソフトウエア、各種のアプリケーション、フォントデータ、ユーザファイル、編集ファイル、各種データ等を記憶するハードディスク（ＨＤ）やフロッピーディスク（登録商標  ＦＤ）或いはＰＣＭＣＩＡカードスロットにアダプタを介して接続されるコンパクトフラッシュメモリ等の外部メモリ２１１へのアクセスを制御する。
【００２９】
通信Ｉ／Ｆコントローラ（通信Ｉ／ＦＣ）２０８は、ネットワークを介して、外部機器と接続・通信するものであり、ネットワークでの通信制御処理を実行する。例えば、ＴＣＰ／ＩＰを用いたインターネット通信等が可能である。
【００３０】
なお、ＣＰＵ２０１は、例えばＲＡＭ２０２内の表示情報用領域へアウトラインフォントの展開（ラスタライズ）処理を実行することにより、ディスプレイ装置２１０上での表示を可能としている。また、ＣＰＵ２０１は、ディスプレイ装置２１０上の不図示のマウスカーソル等でのユーザ指示を可能とする。以上が、文字列キーワード検索装置１００のハードウェア構成の説明であるが、後述する各種の処理を実行可能であれば、必ずしも図２に記載のハードウェア構成を有していなくとも構わないことは言うまでもない。
【００３１】
次に、文字列キーワード検索装置１００におけるキーワードインデクス１０３について、図３と図４を用いて詳しく説明する。
【００３２】
図３は、追加キーワード１０１の集合の一例である。追加キーワード集合３００の各要素は、キーワードとなる文字列とキーワードのＩＤ番号から成る。ここで、ＩＤ番号はキーワード集合を利用するソフトウェアにおいて意味をもつ値である。例えば、追加キーワード３０１は、文字列「情報資産管理＃」に対してキーワードのＩＤ番号「１」が定義されている。
【００３３】
図４は、キーワード検索装置１００におけるキーワードインデクス１０３の一例であり、図３に示す追加キーワード集合３００の各要素を全て登録したときの状態を表す。キーワードインデクス１０３はトライインデクス４１０と遷移１-gramインデクス４２０から成る。遷移１-gramインデクス４２０は、本発明が課題を解決するために新たに導入したデータ構造である遷移N-gramインデクスの一例である。ここで、遷移N-gramインデクスとは、トライ構造において連続するN遷移の各ラベルを順次連結して生成した文字列αをキーとし、任意の節点からαにより到達できる節点の集合を値とする転置インデクスである。例えば、トライインデクス４１０において、１遷移のラベルによる文字列「情」によって、任意の節点から到達できる節点の集合は{２, ２１}であるため、１-gramインデクス４２０において、文字列「情」に対応する項目４２１は節点集合{２, ２１}を値として保持する。
【００３４】
遷移Nグラムインデクスを構築することで、トライ上で任意のN文字により遷移できる節点の集合を高速に取得でき、後述する文字列キーワード検索方法によって、部分一致検索や前後一致検索を効率的に行うことが可能になる。
【００３５】
次に、図５を参照して、文字列キーワード検索装置１００のＣＰＵ２０１によって行われるキー追加処理の詳細について説明する。この処理は、文字列キーワード検索装置１００のＣＰＵ２０１をキーワードインデクス追加部１０２として機能させるためのプログラムによる制御に従って行われる処理である。この処理が行われることで、キーワードインデクス１０３に新たなキーワードが登録されることになる。
【００３６】
キーワードインデクス追加部１０２は、追加キーワード１０１を読込み、キーワードインデクス１０３にインデクスを追加する。なお、図４のトライインデクス４１０における初期節点４１１、初期節点４１１から終端文字による遷移先の節点４１２は、キーワードを登録する前からあらかじめ作成する節点である。
【００３７】
このキーワード追加処理では、追加キーワード１０１の文字列によってトライインデクス４１０上を走査し、遷移が存在しない節点から新たに節点を構築する処理を行う。また、節点を構築する際に１-gramインデクス４２０を更新する処理を行う。
【００３８】
まず、ステップＳ５０１において、節点ポインタに初期節点を設定し、その後、追加キーワードの１文字目を読込む（ステップＳ５０２）。ここで、節点ポインタとは、トライインデクス４１０を走査するためのポインタである。その後、読込んだ文字が通常文字（以下、通常文字を「ａ」と表現する）であるかを判定する（ステップＳ５０３）。このステップＳ５０３の判定処理でａであると判定した場合、ＣＰＵ２０１は、参照中の節点、すなわち、節点ポインタが指す節点からａによる遷移先があるかを判定する（ステップＳ５０４）。
【００３９】
ステップＳ５０４の判定処理で、遷移がある（ＹＥＳ）と判定した場合には、ＣＰＵ２０１は、遷移先の節点へポインタを移動する（ステップＳ５０５）。その後、ステップＳ５０６において次の１文字を読込み、ステップＳ５０３から同様の処理を繰り返す。ステップＳ５０３において、読込んだ文字が終端文字（以下、終端文字を「＃」とも表現する）であると判定した場合には、処理をステップＳ５１１に進める。
【００４０】
ステップＳ５０４の判定処理で、遷移先の節点が存在しない（ＮＯ）と判定した場合には、ステップＳ５０３からステップＳ５０６の繰り返し処理を終え、ステップＳ５０７に処理を進める。例えば、追加キーワード「情報管理＃:７」を新たにキーワードインデクス４００に登録する場合、トライインデクス４１０における節点０から、文字「情」、「報」により、それぞれ節点２、節点３へ移動し、節点３において次の文字「管」による遷移先が存在しないため、ステップＳ５０４でＮＯと判定し、繰り返し処理を終える。
【００４１】
次に、遷移先の節点が存在しない場合と判定し、処理をステップＳ５０７進め、ＣＰＵ２０１は、ステップＳ５０６（若しくはステップＳ５０２）において、読込んだ文字が通常文字ａであるかを判定する。このステップＳ５０７で通常文字ａである（ＹＥＳ）と判定した場合、参照中の節点から通常文字aによる遷移先の節点を作成し、節点ポインタに新規作成した節点を設定する（ステップＳ５０８）。その後、１-gramインデクス４２０のaに対応する項目に、作成した節点を加え、１-gramインデクス４２０を更新する（ステップＳ５０９）。その後、処理をステップＳ５１０に進め、次の１文字を読込む。その後、ステップＳ５０７からＳ５１０の処理を、ステップＳ５０７でＣＰＵ２０１が終端文字を読込んだと判定するまで繰り返し行う。例えば、前述した例の場合、節点３から文字「管」による遷移先の節点２４を新たに作成し、１-gramインデクス４２０における「管」の項目に節点２４を追加する。同様に、文字「理」による遷移先の節点２５を作成し、１-gramインデクス４２０における「理」の項目に節点２５を追加する。ここで、次に読込む文字が終端文字であるため、繰り返し処理を終える。
【００４２】
最後に、ステップＳ５１１において、参照中の節点から終端文字による遷移先の節点を作成し、作成した節点にキーワードＩＤなどの
レコード情報を格納してキーワードの追加処理を終える。以上が、キーワード検索装置１００のＣＰＵ２０１によって行われるキーワード追加処理の説明である。
【００４３】
次に、図６を参照して、キーワード検索装置１００のＣＰＵ２０１によって行われるキーワード削除処理について説明する。この処理は、文字列キーワード検索装置１００のＣＰＵ２０１をキーワードインデクス削除部１０８として機能させるためのプログラムによる制御に従って行われる処理である。この処理が行われることで、指定を受け付けたキーワードがキーワードインデクス１０３から削除される。
【００４４】
キーワードインデクス削除部１０８は、削除キーワード１０７を読込み、キーワードインデクス１０３から該当するインデクスを削除する。ここで、削除キーワード１０７は、通常文字を組み合わせた文字列に終端記号を連結した文字列であり、任意の１文字「？」や、任意の複数文字「＊」を含まないものとする。
【００４５】
このキーワード削除処理では、削除キーワード１０７の文字列によってトライインデクス４１０上を走査し、末端の節点から初期節点に向かって節点を削除する。また、節点を削除する際に遷移１-gramインデクス４２０を更新する。
【００４６】
トライインデクス４１０上を走査する処理、すなわち、ステップＳ６０１〜Ｓ６０６までの処理は、前述したキーワード追加処理におけるステップＳ５０１〜Ｓ５０６と同様であるので、詳細な説明は割愛する。尚、ステップＳ６０４で参照先の節点からａによる遷移先が存在しない（ＮＯ）と判定した場合には、トライインデクス４１０に削除キーワードとして入力されたキーワードが存在しないので、本処理を終了することになる。
【００４７】
ステップＳ６０３で読み込んだ文字が終端文字であると判定することにより、ステップＳ６０１〜Ｓ６０６の処理が終了すると、ＣＰＵ２０１は、処理をステップＳ６０７に処理を進め、参照中の節点に終端文字による遷移先が存在するかを判定する。この処理でＮＯと判定した場合にも、トライインデクス４１０に削除キーワードとして入力されたキーワードが存在しないので、本処理を終了することになる。
【００４８】
ステップＳ６０７の判定処理で、ＣＰＵ２０１がＹＥＳと判定した場合には、処理をステップＳ６０８に進め、終端文字による遷移先の節点と、該当するレコード情報を削除する。
【００４９】
その後、ステップＳ６０９において、参照中の節点に子節点が存在しない（ＮＯ）と判定した場合、削除キーワード１０７から１つ前の文字ａを読込み（ステップＳ６１０）、１-gramインデクス４２０のaに対応する項目から参照中の節点を削除する（ステップＳ６１１）。その後、トライインデクス４１０上から節点を削除して節点ポインタを節点の親節点に設定する（ステップＳ６１２）。参照中の節点に子節点が存在しない間、ステップＳ６０９〜Ｓ６１２の処理を繰り返し、ステップＳ６０９でＮＯと判定するとキーワードの削除処理を終了する。以上が、キーワード検索装置１００のＣＰＵ２０１によって行われる削除処理の説明である。
【００５０】
次に、図７を参照して、キーワード検索装置１００のＣＰＵ２０１によって行われるキーワード検索処理について説明する。この処理は、文字列キーワード検索装置１００のＣＰＵ２０１をキーワード検索部１０５として機能させるためのプログラムによる制御に従って行われる処理である。この処理が行われることで、検索キーワードとして入力された文字列を含むキーワードインデクス中のキーワードのレコード情報が検索されることになる。
【００５１】
キーワード検索部１０５は、検索キーワード１０６を読込み、キーワードインデクス１０３を用いて該当キーワードのレコード情報を検索し、検索結果表示部１０４に検索結果を表示する。ここで、検索キーワード１０６は、通常文字、任意の１文字「？」、任意の複数文字「＊」を組み合わせた文字列に終端文字を連結した文字列である。
【００５２】
キーワード検索装置１００のＣＰＵ２０１は、まず、ステップＳ７０１において検索初期設定処理を行う。
【００５３】
検索初期設定処理では、検索キーワードの書式をキーワード検索部１０５が処理しやすい形式に変換した後、検索キーワードにおける１文字目の文字種によって、アクティブリストと呼ぶリスト構造にトライ上の節点を格納する。この検索初期設定処理の詳細は、図８を参照して説明する。
【００５４】
ここで、図８は、図７のステップＳ７０１の検索初期設定処理の詳細な処理を示すフローチャートである。
【００５５】
まずステップＳ８０１で、検索キーワードの書式を変換する。具体的には、検索キーワードを以下のルールＲ１、Ｒ２に従って変換する。例えば、検索キーワード「＊＊資産＊？？＊システム＃」を以下のルールに従って変換すると「＊資産？？＊システム＃」となる。
Ｒ１：「＊」と隣接する「？」を「＊」の前方に移動する。
Ｒ２：連続する「＊」を１つにする。
【００５６】
次に、ステップＳ８０２において検索キーワードから先頭１文字を読込み、読込んだ文字の文字種によって、ステップＳ８０３〜Ｓ８１０においてアクティブリストに格納する節点を求める。
【００５７】
ステップＳ８０３で、先頭１文字が終端文字であるとＣＰＵ２０１が判定した場合、すなわちステップＳ８０２で読込んだ文字が「＃」である場合には、何も行わずに検索初期設定を終える。
【００５８】
ステップＳ８０３で、先頭１文字が通常文字ａであるとＣＰＵ２０１が判定した場合、処理をステップＳ８０４に進め、初期節点から文字列αにより遷移可能な節点をアクティブリストに加える。ここで、文字列αは、検索キーワードにおいて、読込んだ文字ａから後続する通常文字を連結した文字列を表す。例えば、検索キーワードが「情報資産＊＃」である場合、通常文字ａは「情」、文字列αは「情報資産」であり、アクティブリストには初期節点から文字列「情報資産」により遷移可能な節点５を加える。
【００５９】
ステップＳ８０３で、先頭１文字が任意の１文字であるとＣＰＵ２０１が判定した場合、すなわちステップＳ８０２で読込んだ文字が「？」である場合、処理をステップＳ８０５に進め、連続する「？」を検索キーワードから読込み、「？」の数nをカウントする。その後、ステップＳ８０６において、初期節点からn文字分の遷移で到達可能な節点を全てアクティブリストに加える。例えば、検索キーワードが「？？管理＊＃」である場合、「？」の数nは２であり、アクティブリストには初期節点から２文字分の遷移で到達可能な節点３と節点１１を加える。
【００６０】
ステップＳ８０３で、先頭１文字が任意の複数文字であるとＣＰＵ２０１が判定した場合、すなわちステップＳ８０２で読込んだ文字が「＊」である場合、処理をステップＳ８０７に進め、検索キーワードからさらに次の１文字を読込む。前述した書式変換により、「＊」の後に存在する可能性のある文字は、通常文字、または終端文字「＃」である。
【００６１】
ステップＳ８０７で読み込んだ１文字が終端文字「＃」であるとステップＳ８０８で判定した場合、処理をステップＳ８１０に進め、アクティブリストに初期節点を加える。
【００６２】
一方、ステップＳ８０７で読み込んだ１文字が通常文字ａであるとステップＳ８０８で判定した場合、処理をステップＳ８０９に進め、１-gramインデクスのａに対応する節点から文字列βにより遷移可能な節点をアクティブリストに加える。ここで、文字列βは検索キーワードにおいて、文字ａの次の文字から連続する通常文字を連結した文字列を表す。例えば、検索キーワードが「＊情報資産＊＃」である場合、通常文字ａは「情」であり、文字列βは「報資産」である。ここで、１-gramインデクスの「情」に対応する節点は節点２と節点２１であり、節点２において、文字列「報資産」により遷移可能な節点５をアクティブリストに加える。
【００６３】
以上が、図７のステップＳ７０１の検索初期設定処理の詳細な説明である。
【００６４】
図７の説明に戻る。ステップＳ７０１の検索初期設定処理終了後、ＣＰＵ２０１は、検索初期設定処理において、検索キーワードを終端文字まで読み込んだかを判定する（ステップＳ７０２）。
【００６５】
ステップＳ７０２で検索キーワードを終端文字まで読み込んでいない（ＮＯ）とＣＰＵ２０１が判定した場合、処理をステップＳ７０３に進め、正解パス検索処理を行う。ここで、正解パスとは、検索結果として出力するキーワードをトライインデクス上で構成する節点の順序リストで、節点番号を用いて表す。
【００６６】
例えば、キーワードインデクス４００から、検索キーワード「＊管理＃」を検索する場合について考える。このとき、検索結果として出力するキーワードは、「情報資産管理＃」、「資産管理＃」の２つであり、正解パスはそれぞれ、(０, ２, ３, ４, ５, ６, ７, ８）、(０, １０, １１, １２, １３, ２０)となる。
【００６７】
ここで、木構造の性質から、ある節点から初期節点までのパスは親節点を辿ることで一意に定まる。よって、初期節点を開始点とするトライ上のパスは、パスの最後方に位置する節点を保持することで管理できる。以下、検索処理過程において、正解パス候補となるパス上に存在する節点のうち、最後方に位置する節点をアクティブ節点と呼ぶ。前述したアクティブリストに格納する節点はこのアクティブ節点である。
【００６８】
正解パス検索処理では、検索キーワードから終端文字を読み込むまで、適宜アクティブリストを更新することで正解パスを求める。ただし、検索キーワードにおいて、終端文字「＃」の直前に任意の複数文字「＊」が存在する場合、この処理で求めるパスは「＊」の直前までの文字列γを構成するトライ上のパスである。例えば、検索キーワードが「情報資産＊＃」である場合、文字列γは「情報資産」であり、求めるトライ上のパスは(０, ２, ３, ４, ５)となる。この正解パス検索処理の詳細については、図９を参照して説明する。
【００６９】
ここで、図９を参照して、図７のステップＳ７０３の正解パス検索処理の詳細について説明する。
【００７０】
まず、ＣＰＵ２０１はステップＳ９０１において、アクティブリスト内に節点が存在するかを判定する。ステップＳ９０１で節点が存在する（ＹＥＳ）と判定した場合は、処理をステップＳ９０２に進める。一方、アクティブリスト内に節点が存在しない（ステップＳ９０１でＮＯ）と判定した場合には、本処理を終了する。
【００７１】
ステップＳ９０２では、検索キーワードから次の１文字（検索初期設定処理で読み込んだ最後の文字の次の１文字）を読み込み、読み込んだ文字の文字種によって、ステップＳ９０３〜Ｓ９１１でアクティブリストを更新する。
【００７２】
ステップＳ９０３の判定処理で、ステップＳ９０２で読み込んだ文字が終端文字「＃」であるとＣＰＵ２０１が判定した場合、処理をステップＳ９１１に進め、アクティブリスト内の各節点を終端文字により遷移可能な節点で置き換える。このとき、終端文字による遷移先が存在しない節点はアクティブリストから削除する。
【００７３】
ステップＳ９０３の判定処理で、ステップＳ９０２で読み込んだ文字が通常文字ａであると判定した場合、処理をステップＳ９０４に進め、アクティブリスト内の各節点を文字列αにより遷移可能な節点で置き換える。ここで、文字列αは、前述したステップＳ８０４と同様に、検索キーワードにおいて、読み込んだ文字aから連続する通常文字を連結した文字列を表す。ステップＳ９１１と同様に、文字列αによる遷移先が存在しない節点はアクティブリストから削除する。
【００７４】
ステップＳ９０３の判定処理で、ステップＳ９０２で読み込んだ文字が任意の１文字「？」であると判定した場合、処理をステップＳ９０５に進め、前述したステップＳ８０５と同様に、「？」の数nをカウントし、その後、アクティブリスト内の各節点をｎ文字分の遷移により到達可能な節点で置き換える（ステップＳ９０６）。ステップＳ９１１と同様に、遷移先が存在しない節点はアクティブリストから削除する。
【００７５】
ステップＳ９０３の判定処理で、ステップＳ９０２で読み込んだ文字が任意の複数文字「＊」であると判定した場合、処理をステップＳ９０７に進め、前述したステップＳ８０７と同様に、さらに次の文字を読込む。
【００７６】
その後、ステップＳ９０８において、ステップＳ９０７で読み込んだ文字種別を判定する。この判定処理で、ＣＰＵ２０１が、ステップＳ９０７で読み込んだ文字が終端文字「＃」であると判定した場合には、本図に示す正解パス検索処理を終了する。
【００７７】
一方、ステップＳ９０８において、ステップＳ９０７で読み込んだ文字が通常文字ａであると判定した場合には、処理をステップＳ９０９に進め、１-gramインデクスのａに対応する節点のうち、アクティブリスト内の節点を祖先にもつ節点から文字列βにより遷移可能な節点を一時リスト（アクティブ節点を一時的に保持するリスト）に加える。ここで、前述したステップＳ８０９と同様に、文字列βは検索キーワードにおいて、文字ａの次の文字から連続する通常文字を連結した文字列を表す。その後、ステップ９１０において、アクティブリストを一時リストの内容で差し替え、一時リストを空にする。
【００７８】
ステップＳ９０４、ステップＳ９０６、ステップＳ９１０の処理終了後、処理をステップＳ９０１に進める。そして、上記説明したステップＳ９０１〜Ｓ９１１の処理を、ステップＳ９０３、またはステップＳ９０８で終端文字を読み込んだとＣＰＵ２０１が判定する、若しくは、ステップＳ９０１でアクティブリストに節点が存在しないとＣＰＵ２０１が判定するまで繰り返し、正解パス検索処理を終える。以上が、図７のステップＳ７０３の正解パス検索処理の詳細な説明である。
【００７９】
図７の説明に戻る。ステップＳ７０２でYESと判定した場合、またはステップＳ７０３の正解パス検索処理終了後、ＣＰＵ２０１は、処理をステップＳ７０４に進め、レコード情報の出力を行う。このレコード情報出力処理の詳細は、図１０を参照して説明する。
【００８０】
ここで、図１０を参照して、図７のステップＳ７０４のレコード情報出力処理の詳細について説明する。
【００８１】
このレコード情報出力処理では、ステップＳ１００１〜Ｓ１００４において、アクティブリスト内に存在する節点から派生するすべての節点を走査し、ステップＳ１００３においてレコード情報をもつ節点が存在する場合、ステップＳ１００４において、該当するレコード情報を検索結果表示部１０４に出力する。
【００８２】
以上、キーワード検査部は、検索初期設定処理、正解パス検索処理、レコード情報出力処理によってキーワード検索処理を実現するが、検索初期設定を終えた段階で検索キーワードの末尾まで読み終えた場合、すなわち、ステップＳ７０２において終端文字まで読込んでいる場合は、正解パス検索処理が不要となるため、ステップＳ７０４において直接レコード情報の出力処理を行う。
【００８３】
以上説明したように、本実施形態によれば、トライ構造の遷移N-gramを構築することによって、前述の各検索方法を高速に実行可能なインデクスを実装できる。また、遷移N-gramインデクスは、通常のN-gramインデクスよりもデータ構造の実現に要する記憶領域を抑制できる。これは、通常のN-gramインデクスがキーワードのＩＤ番号と位置情報の組を値として保持することに対し、遷移N-gramインデクスはトライ上の節点番号のみを値として保持するためである。また、トライ構造がキーワードの共通接頭辞を併合するデータ構造であるため、登録キーワード集合に共通接頭辞が多いほど、通常のN-gramインデクスよりも必要な記憶領域を抑制できる。
【００８４】
なお、本発明におけるキーワードインデクスは、図４を見ても明らかであるが、構築済みのトライインデクスを走査し、遷移N-gramインデクスを作成することでも容易に構築可能である。よって、動的にキーワードの更新が発生しないような要件においては、簡潔木などの非常にコンパクトなトライインデクスに対して遷移N-gramを作成することが可能である。
【００８５】
以上、実施形態例を詳述したが、本発明は、例えば、システム、装置、方法、プログラムもしくは記憶媒体等としての実施態様をとることが可能であり、具体的には、複数の機器から構成されるシステムに適用しても良いし、また、一つの機器からなる装置に適用しても良い。
【００８６】
なお、上述した各種データの構成及びその内容はこれに限定されるものではなく、用途や目的に応じて、様々な内容で構成されることは言うまでもない。
【００８７】
また、本発明は、システム或いは装置にプログラムを供給することにとって達成される場合にも適用できることは言うまでもない。この場合、本発明を達成するためのソフトウェアによって表されるプログラムを格納した記録媒体を該システム或いは装置に読み出すことによって、そのシステム或いは装置が、本発明の効果を享受することが可能となる。
【００８８】
さらに、本発明を達成するためのソフトウェアによって表されるプログラムをネットワーク上のサーバー、データベース等から通信プログラムによりダウンロードして読み出すことによって、そのシステム或いは装置が、本発明の効果を享受することが可能となる。
【００８９】
なお、上述した各実施形態及びその変形例を組み合わせた構成もすべて本発明に含まれるものである。
【符号の説明】
【００９０】
１００  文字列キーワード検索装置
１０１  追加キーワード
１０２  キーワードインデクス追加部
１０３  キーワードインデクス
１０４  検索結果表示部
１０５  キーワード検索部
１０６  検索キーワード
１０７  削除キーワード
１０８  キーワードインデクス削除部
２０１  ＣＰＵ
２０２  ＲＡＭ
２０３  ＲＯＭ
２０４  システムバス
２０５  入力コントローラ
２０６  ビデオコントローラ
２０７  メモリコントローラ
２０８  通信Ｉ／Ｆ（インターフェース）コントローラ
２０９  キーボード
２１０  ディスプレイ装置
２１１  外部メモリ
【図１】
0005522017.tif 000002
【図２】
0005522017.tif 000003
【図３】
0005522017.tif 000004
【図４】
0005522017.tif 000005
【図５】
0005522017.tif 000006
【図６】
0005522017.tif 000007
【図７】
0005522017.tif 000008
【図８】
0005522017.tif 000009
【図９】
0005522017.tif 000010
【図１０】
0005522017.tif 000011