本発明は、XML文書など階層構造を有する電子文書を検索する情報検索プログラム、該プログラムを記録した記録媒体、情報検索装置、および情報検索方法に関するものである。
近年、さまざまな分野で情報量が爆発的に増加している。ある分野においてはギガバイトオーダーからテラバイトオーダーになりつつあり、その莫大なデータから所望のデータを取り出すことが困難になりつつある。データは通常、管理のしやすさから階層構造を持たせて保存される。
たとえば、図書館で本を管理するには本という階層の下にタイトル、著者、出版社、出版日、貸し出し情報などといった階層を持たせることにより、ある本に対して、管理情報ごとに情報を引き出すことが可能となる。
階層構造を持つ膨大な電子文書から高速に所望のデータを取り出す場合、従来から、階層検索とキーワード検索とを別々のオートマトンを用いて実行している(たとえば、下記特許文献1を参照。)。
具体的には、階層検索オートマトンにおいて階層条件にヒットした場合にキーワード検索を実行するキーワード検索オートマトンで検索を実行し、逆にキーワード検索オートマトン実行中に階層をあらわす記号が出現した場合、再び階層検索オートマトンで階層条件を検索するという処理を繰り返し実行している。
しかしながら、上述した従来技術では、XML文書など階層をあらわす記号の出現頻度が高い電子文書を検索する場合、階層検索オートマトンを用いた検索処理とキーワード検索オートマトンを用いた検索処理との切り替え頻度が高くなり、オーバーヘッドが生じることとなる。したがって、全体として検索速度が低下してしまうという問題があった。
また、検索範囲を特定する複数の検索式を与えて同時に検索する場合に、すべての検索式を1つのオートマトンの中に生成するため、キーワードがヒットしたときに、現在の階層がそのヒットしたキーワードに対応する階層条件を満たしているかを判断する必要があった。したがって、高頻度でキーワードがヒットしてしまう場合、検索速度が低下してしまうという問題があった。
本発明は、上記に鑑みてなされたものであって、階層検索オートマトンとキーワード検索オートマトンとの間のオーバーヘッドの低減を図ることにより、検索速度の向上を図ることができる情報検索プログラム、該プログラムを記録した記録媒体、情報検索装置、および情報検索方法を提供することを目的とする。
上述した課題を解決し、目的を達成するために、この発明の情報検索プログラム、該プログラムを記録した記録媒体、情報検索装置、および情報検索方法は、検索対象となる階層構造を有する電子文書を取得し、取得された電子文書に関するパススキーマを生成し、任意の検索キーワードと当該検索キーワードの検索条件と前記検索キーワードの検索範囲を特定する検索式との入力を受け付け、生成されたパススキーマの階層を検索する階層検索オートマトンと、入力された検索キーワードの前記検索条件を満たすヒットキーワードを検索するキーワード検索オートマトンとからなり、前記階層検索オートマトンの中の前記ヒットキーワードが存在するヒット階層ノードと前記ヒットキーワードをあらわすノード集合との間で状態遷移する単一オートマトンを生成し、生成された単一オートマトンを用いて、前記電子文書の中から、前記検索範囲内の前記ヒットキーワードを検索し、検索された検索結果を出力することを特徴とする。
また、上記発明において、前記階層検索オートマトンは、遷移元となる上位の階層ノードとその遷移先となる下位の階層ノードとの間に開始タグの開始記号をあらわすノードを有し、前記上位の階層ノードに状態遷移している場合に前記開始記号が与えられると、前記開始記号をあらわすノードに状態遷移することとしてもよい。
また、上記発明において、前記階層検索オートマトンは、前記開始記号をあらわすノードと下位の階層ノードとの間に、前記下位の階層ノードの階層名をあらわす一連のノード群を有し、前記開始記号をあらわすノードに状態遷移している場合に任意の文字列が与えられると、ヒットミスする文字が出現するまで前記一連のノード群に対し状態遷移することとしてもよい。
また、上記発明において、前記パススキーマを構成する各階層ノードの階層名を固有の文字列に変換し、前記階層検索オートマトンを前記変換手段によって変換された固有の文字列を用いて構成することにより、前記単一オートマトンを生成し、前記開始記号をあらわすノードと下位の階層ノードとの間に、前記下位の階層ノードの階層名から変換された固有の文字列をあらわす一連のノード群を有し、前記開始記号をあらわすノードに状態遷移している場合に任意の文字列が与えられると、ヒットミスする文字が出現するまで前記一連のノード群に対し状態遷移することとしてもよい。
また、上記発明において、前記階層検索オートマトンは、ヒットミスする文字が出現した場合、前記上位の階層ノードに状態遷移することとしてもよい。
また、上記発明において、前記階層検索オートマトンは、前記一連のノード群の中の末尾ノードに状態遷移している場合に前記開始タグの終了記号が与えられると、前記下位の階層ノードに状態遷移することとしてもよい。
また、上記発明において、前記階層検索オートマトンは、遷移元となる下位の階層ノードとその遷移先となる上位の階層ノードとの間に終了タグの開始記号をあらわすノードを有し、前記下位の階層ノードに状態遷移している場合に前記開始記号が与えられると、前記開始記号をあらわすノードに状態遷移することとしてもよい。
また、上記発明において、前記階層検索オートマトンは、前記開始記号をあらわすノードと上位の階層ノードとの間に前記下位の階層ノードの階層名をあらわす一連のノード群を有し、前記開始記号をあらわすノードに状態遷移している場合に任意の文字列が与えられると、ヒットミスする文字が出現するまで前記一連のノード群に対し状態遷移することとしてもよい。
また、上記発明において、前記電子文書内の階層名を固有の文字列に変換し、前記階層検索オートマトンを前記変換手段によって変換された固有の文字列を用いて構成することにより、前記単一オートマトンを生成し、前記階層検索オートマトンは、前記開始記号をあらわすノードと上位の階層ノードとの間に前記下位の階層ノードの階層名から変換された固有の文字列をあらわす一連のノード群を有し、前記開始記号をあらわすノードに状態遷移している場合に任意の文字列が与えられると、ヒットミスする文字が出現するまで前記一連のノード群に対し状態遷移することとしてもよい。
また、上記発明において、前記階層検索オートマトンは、ヒットミスする文字が出現した場合、前記下位の階層ノードに状態遷移することとしてもよい。
また、上記発明において、前記階層検索オートマトンは、前記一連のノード群の中の末尾ノードに状態遷移している場合に前記開始タグの終了記号が与えられると、前記上位の階層ノードに状態遷移することとしてもよい。
また、上記発明において、前記単一オートマトンは、前記階層検索オートマトン内のヒット階層ノードに状態遷移している場合に前記ヒットキーワードの先頭文字が与えられると、前記キーワード検索オートマトン内の前記先頭文字に対応するノードに状態遷移することとしてもよい。
また、上記発明において、前記単一オートマトンは、前記キーワード検索オートマトン内のいずれかのノードに状態遷移している場合にヒットミスする文字が与えられると、前記ヒット階層ノードに状態遷移することとしてもよい。
また、上記発明において、前記パススキーマの中から、前記入力手段によって入力された検索式により特定される検索範囲に関する部分パススキーマを抽出し、抽出された部分パススキーマの階層を検索する階層検索オートマトンと、前記ヒットキーワードを検索するキーワード検索オートマトンとからなり、前記単一オートマトンを生成することとしてもよい。
また、上記発明において、前記検索式により特定されるパスが前記パススキーマ内に複数通り存在するか否かを判断し、判断された判断結果に基づいて、前記部分パススキーマを抽出することとしてもよい。
また、上記発明において、複数通り存在しないと判断された場合、前記パススキーマからルートノードと前記ヒット階層ノードとその子階層ノードとからなる部分パススキーマを抽出することとしてもよい。
また、上記発明において、複数通り存在すると判断された場合、さらに、前記複数通りのパスがどの配列パターンに該当するかを判断し、前記ヒット階層ノードと同一階層名となる他の階層ノードが前記ヒット階層ノードよりも上位階層に存在する配列パターンと判断された場合、ルートノードと、前記他の階層ノードと前記ヒット階層ノードとの間にのみ存在する中間階層ノードと、前記ヒット階層ノードと、からなる部分パススキーマを抽出することとしてもよい。
また、上記発明において、前記ヒット階層ノードと同一階層名となる他の階層ノードが前記ヒット階層ノードよりも上位階層に存在する配列パターンと判断された場合、ルートノードと、前記他の階層ノードと前記ヒット階層ノードとの間に存在する中間階層ノードと、前記ルートノードと前記他の階層ノードとの間に存在する前記中間階層ノードと同一階層名の他の中間階層ノードと、前記ヒット階層ノードと、からなる部分パススキーマを抽出することとしてもよい。
また、上記発明において、前記ヒット階層ノードと同一階層名となる他の階層ノードが前記ヒット階層ノードよりも下位階層に存在する配列パターンと判断された場合、ルートノードと、前記ヒット階層ノードと、当該ヒット階層ノードと前記他の階層ノードとの間に存在する子階層ノードと、からなる部分パススキーマを抽出することとしてもよい。
また、上記発明において、前記ヒット階層ノードと同一階層名となる他の階層ノードが前記ヒット階層ノードよりも上位階層に存在する分岐元の階層ノードから分岐されたパスに存在する配列パターンと判断された場合、ルートノードと、前記分岐元の階層ノードと前記ヒット階層ノードとの間にのみ存在する中間階層ノードと、前記ヒット階層ノードと、からなる部分パススキーマを抽出することとしてもよい。
また、上記発明において、前記ヒット階層ノードと同一階層名となる他の階層ノードが前記ヒット階層ノードよりも上位階層に存在する分岐元の階層ノードから分岐されたパスに存在する配列パターンと判断された場合、ルートノードと、前記分岐元の階層ノードと前記ヒット階層ノードとの間に存在しかつ前記分岐元の階層ノードと前記他の階層ノードとの間に存在しない中間階層ノードと、前記ルートノードと前記分岐元の階層ノードとの間に存在する前記中間階層ノードと同一階層名の他の中間階層ノードと、前記ヒット階層ノードと、からなる部分パススキーマを抽出することとしてもよい。
また、上記発明において、前記ヒット階層ノードと同一階層名となる他の階層ノードが前記ヒット階層ノードよりも上位階層に存在する分岐元の階層ノードから分岐されたパスに存在する配列パターンと判断された場合、ルートノードと、前記ヒット階層ノードと、前記分岐元の階層ノードと前記他の階層ノードとの間にのみ存在する分岐先の階層ノードと、からなる部分パススキーマを抽出することとしてもよい。
また、上記発明において、前記ヒット階層ノードと同一階層名となる他の階層ノードが前記ヒット階層ノードよりも上位階層に存在する分岐元の階層ノードから分岐されたパスに存在する配列パターンと判断された場合、ルートノードと、前記分岐元の階層ノードと前記他の階層ノードとの間に存在しかつ前記分岐元の階層ノードと前記ヒット階層ノードとの間に存在しない中間階層ノードと、前記ルートノードと前記分岐元の階層ノードとの間に存在する前記中間階層ノードと同一階層名の他の中間階層ノードと、前記ヒット階層ノードと、からなる部分パススキーマを抽出することとしてもよい。
また、上記発明において、前記ヒット階層ノードと同一階層名となる他の階層ノードが前記ヒット階層ノードよりも上位階層に存在する分岐元の階層ノードから分岐されたパスに存在すると判断された場合、ルートノードと、当該ルートノードと前記分岐元の階層ノードとの間に存在せずかつ前記分岐元の階層ノードと前記ヒット階層ノードとの間に存在する第1の中間階層ノードと、前記ルートノードと前記第1の中間階層ノードとの間に存在せずかつ前記分岐元の階層ノードと前記第1の中間階層ノードと同一階層名の第2の中間階層ノードのうち最上位の中間階層ノードとの間の第3の中間階層ノードと、からなる部分パススキーマを抽出することとしてもよい。
また、上記発明において、前記ヒット階層ノードと同一階層名となる他の階層ノードが前記ヒット階層ノードよりも上位階層に存在する分岐元の階層ノードから分岐されたパスに存在する配列パターンと判断された場合、ルートノードと、前記分岐元の階層ノードと前記ヒット階層ノードとの間に存在する第1の中間階層ノードと、前記分岐元の階層ノードと前記第1の中間階層ノードとの間に存在せずかつ前記分岐元の階層ノードと前記第1の中間階層ノードと同一階層名の第2の中間階層ノードのうち最上位の中間階層ノードとの間の第3の中間階層ノードと、からなる部分パススキーマを抽出することとしてもよい。
また、上記発明において、前記検索式に、前記ヒット階層ノードおよびその下位のすべての階層ノードを指定するワイルドカードが用いられている場合、ルートノードと、前記ヒット階層ノードと、からなる部分パススキーマを抽出することとしてもよい。
また、上記発明において、前記検索式に、任意の階層名を有するすべての階層ノードを指定するワイルドカードが用いられている場合、ルートノードと、前記階層名を有する階層ノードと、当該階層ノードの子階層ノードと、からなる部分パススキーマを抽出することとしてもよい。
また、上記発明において、ワイルドカードが用いられている検索式が複数存在する場合、前記検索式ごとに特定されるヒット階層ノードの論理和を取ることにより、部分パススキーマを抽出することとしてもよい。
また、上記発明において、前記部分パススキーマ内に階層名が同一のヒット階層ノードが共通の階層ノードから分岐されている場合、子階層ノードを有するヒット階層ノードに縮退させることにより、縮退済みの部分パススキーマを抽出することとしてもよい。
また、上記発明において、前記電子文書の各階層をあらわす開始タグを、階層開始指示子と前記パススキーマを構成するパスごとに割り振られた固有の識別子とからなる開始タグに変換するとともに、前記電子文書の各階層をあらわす終了タグを、階層終了指示子と前記パススキーマを構成するパスごとに割り振られた固有の識別子とからなる終了タグに変換し、変換後の電子文書に関するパススキーマを生成することとしてもよい。
また、上記発明において、生成された前記変換後の電子文書に関するパススキーマの中から、ルートノードと前記検索式により指定されたヒット階層ノードとからなる部分パススキーマを抽出し、前記階層検索オートマトンを前記部分パススキーマおよび当該部分パススキーマに用いられる前記階層指示子および前記固有の識別子を用いて構成することにより、前記単一オートマトンを生成することとしてもよい。
また、上記発明において、前記階層検索オートマトンは、前記ルートノードと前記ヒット階層ノードとの間に、前記階層開始指示子をあらわすノードを有し、当該階層開始指示子をあらわすノードに状態遷移している場合に前記ヒット階層ノードに関する固有の識別子が与えられると、前記ヒット階層ノードに状態遷移し、前記ヒット階層ノード以外の他の階層ノードに関する固有の識別子が与えられると、前記ルートノードに状態遷移することとしてもよい。
また、上記発明において、前記階層検索オートマトンは、前記ルートノードと前記ヒット階層ノードとの間に、前記階層終了指示子をあらわすノードを有し、当該階層終了指示子をあらわすノードに状態遷移している場合に前記ヒット階層ノードの子階層ノードに関する固有の識別子が与えられると、前記ヒット階層ノードに状態遷移し、前記子階層ノード以外の他の階層ノードに関する固有の識別子が与えられると、前記ルートノードに状態遷移することとしてもよい。
また、上記発明において、前記部分パススキーマが前記ルートノードから複数のヒット階層ノードへ分岐している場合、前記各ヒット階層ノードの固有の識別子をまとめることにより、前記ルートノードと前記固有の識別子がまとめられた単一のヒット階層ノードとからなる縮退済み部分パススキーマを抽出し、前記階層検索オートマトンを前記縮退済み部分パススキーマおよび当該縮退済み部分パススキーマに用いられる前記階層指示子および前記固有の識別子を用いて構成することにより、前記単一オートマトンを生成し、前記階層検索オートマトンは、前記ルートノードと前記ヒット階層ノードとの間に、前記階層開始指示子をあらわすノードを有し、当該階層開始指示子をあらわすノードに状態遷移している場合に前記ヒット階層ノードに関するいずれかの固有の識別子が与えられると、前記ヒット階層ノードに状態遷移し、前記ヒット階層ノード以外の他の階層ノードに関する固有の識別子が与えられると、前記ルートノードに状態遷移することとしてもよい。
また、上記発明において、前記検索式が複数存在する場合、前記パススキーマ生成手段によって生成された変換後の電子文書に関するパススキーマの中から、ルートノードと前記検索式により指定されたヒット階層ノードの論理和とからなる部分パススキーマを抽出し、前記階層検索オートマトンを、前記部分パススキーマのうち前記検索式により指定されたヒット階層ノードの中から選ばれた前記検索式ごとの代表ノードと、前記各検索式の論理積により指定されたヒット階層ノードの中から選ばれた代表ノードと、前記部分パススキーマに用いられる前記階層指示子および前記固有の識別子と、を用いて構成することにより、前記単一オートマトンを生成することとしてもよい。
また、上記発明において、前記電子文書の各階層をあらわす開始タグを、階層開始指示子と前記パススキーマを構成するパスごとに割り振られた固有の識別子とからなる開始タグに変換するとともに、前記電子文書の各階層をあらわす終了タグを、前記階層開始指示子と当該終了タグに対応する開始タグの階層名により特定される階層ノードの親ノードを末端とするパスに割り振られた固有の識別子とからなる開始タグに変換し、変換後の電子文書に関するパススキーマを生成することとしてもよい。
また、上記発明において、生成された前記変換後の電子文書に関するパススキーマの中から、ルートノードと前記検索式により指定されたヒット階層ノードとからなる部分パススキーマを抽出し、前記階層検索オートマトンを前記部分パススキーマおよび当該部分パススキーマに用いられる前記階層指示子および前記固有の識別子を用いて構成することにより、前記単一オートマトンを生成することとしてもよい。
また、上記発明において、前記階層検索オートマトンは、ルートノードと前記ヒット階層ノードとの間に、前記階層開始指示子をあらわすノードを有し、当該階層開始指示子をあらわすノードに状態遷移している場合に前記ヒット階層ノードに関する固有の識別子が与えられると、前記ヒット階層ノードに状態遷移し、前記ヒット階層ノード以外の他の階層ノードに関する固有の識別子が与えられると、前記ルートノードに状態遷移することとしてもよい。
また、上記発明において、前記階層検索オートマトンは、前記ヒット階層ノードに状態遷移している場合に前記階層開始指示子が与えられると、当該階層開始指示子をあらわすノードに状態遷移し、前記階層開始指示子以外のデータが与えられると、前記ヒット階層ノードに状態遷移することとしてもよい。
これらの発明によれば、階層検索オートマトンのノード数を削減することができる。また、階層検索オートマトンとキーワード検索オートマトン間の切り替え回数の低減化を図ることができる。
本発明にかかる情報検索プログラム、該プログラムを記録した記録媒体、情報検索装置、および情報検索方法は、階層検索用オートマトンとキーワード検索用オートマトンとの間のオーバーヘッドの低減を図ることにより、検索速度の向上を図ることができるという効果を奏する。
図1は、この発明の実施の形態1にかかる情報検索装置のハードウェア構成を示す説明図である。
図2は、この発明の実施の形態1にかかる検索対象となる電子文書を示す説明図である。
図3は、この発明の実施の形態1にかかるパススキーマを示す説明図である。
図4は、図1に示した情報検索装置の機能的構成を示すブロック図である。
図5は、この発明の実施の形態1にかかる単一オートマトンを示す説明図である。
図6は、変換テーブルを示す説明図である。
図7は、変換後のXML文書を示す説明図である。
図8は、変換済み単一オートマトンを示す説明図である。
図9は、この発明の実施の形態にかかる情報検索処理手順を示すフローチャートである。
図10は、この発明の実施の形態2にかかる検索対象となる電子文書の一例を示す説明図である。
図11は、この発明の実施の形態2にかかるパススキーマを示す説明図である。
図12は、部分パススキーマの抽出例(その1)を示す説明図である。
図13は、図12に示した部分パススキーマにより階層検索オートマトンを構成した場合の単一オートマトンを示す説明図である。
図14は、部分パススキーマの抽出例(その2)を示す説明図である。
図15は、図14に示した部分パススキーマにより階層検索オートマトンを構成した場合の単一オートマトンを示す説明図である。
図16は、この発明の実施の形態2にかかる情報検索装置の機能的構成を示すブロック図である。
図17は、配列パターンAを示す説明図である。
図18は、配列パターンBを示す説明図である。
図19は、配列パターンCが適用されるパススキーマを示す説明図である。
図20は、抽出パターンC−1により抽出された部分パススキーマを示す説明図である。
図21は、抽出パターンC−2により抽出された部分パススキーマを示す説明図である。
図22は、抽出パターンC−3により抽出された部分パススキーマを示す説明図である。
図23は、抽出パターンC−4により抽出された部分パススキーマを示す説明図である。
図24は、抽出パターンC−5により抽出された部分パススキーマを示す説明図である。
図25は、抽出パターンC−6により抽出された部分パススキーマを示す説明図である。
図26は、この発明の実施の形態2にかかる情報検索処理手順を示すフローチャートである。
図27は、抽出処理(ステップS2601,S2602)の詳細な処理手順を示すフローチャートである。
図28は、部分パススキーマの抽出例(その3)を示す説明図である。
図29は、部分パススキーマの抽出例(その4)を示す説明図である。
図30は、部分パススキーマの抽出例(その5)を示す説明図である。
図31は、パスIDテーブルを示す説明図である。
図32は、パスIDへの変換例(その1)を示す説明図である。
図33は、変換済みパススキーマを示す説明図である。
図34は、部分パススキーマの抽出例(その6)を示す説明図である。
図35は、変換済み部分パススキーマから得られる階層検索オートマトンを示す説明図である。
図36は、部分パススキーマの抽出例(その7)を示す説明図である。
図37は、変換済み部分パススキーマから得られる階層検索オートマトンを示す説明図である。
図38は、複数検索式の変換例を示す説明図である。
図39は、部分パススキーマの抽出例(その8)を示す説明図である。
図40は、変換済み部分パススキーマから得られる階層検索オートマトンを示す説明図である。
図41は、パスIDへの変換例(その2)を示す説明図である。
図42は、第4の例の階層検索オートマトンを示す説明図である。
図43は、この発明の実施の形態3にかかる情報検索処理手順を示すフローチャートである。
符号の説明
100 情報検索装置
401 取得部
402 パススキーマ生成部
403 入力部
404 オートマトン生成部
405 検索部
406 出力部
407 変換部
1601 抽出部
1602 判断部
以下に添付図面を参照して、この発明にかかる情報検索プログラム、該プログラムを記録した記録媒体、情報検索装置、および情報検索方法の好適な実施の形態を詳細に説明する。
<実施の形態1>
(情報検索装置のハードウェア構成)
まず、この発明の実施の形態1にかかる情報検索装置のハードウェア構成について説明する。図1は、この発明の実施の形態1にかかる情報検索装置のハードウェア構成を示す説明図である。
図1において、情報検索装置100は、コンピュータ本体110と、入力装置120と、出力装置130と、から構成されており、不図示のルータやモデムを介してLAN,WANやインターネットなどのネットワーク140に接続可能である。
コンピュータ本体110は、CPU,メモリ,インターフェースを有する。CPUは、情報検索装置100の全体の制御を司る。メモリは、ROM,RAM,HD,光ディスク111,フラッシュメモリから構成される。メモリはCPUのワークエリアとして使用される。
また、メモリには各種プログラムが格納されており、CPUからの命令に応じてロードされる。HDおよび光ディスク111はディスクドライブによりデータのリード/ライトが制御される。また、光ディスク111およびフラッシュメモリはコンピュータ本体110に対し着脱自在である。インターフェースは、入力装置120からの入力、出力装置130への出力、ネットワーク140に対する送受信の制御をおこなう。
また、入力装置120としては、キーボード121、マウス122、スキャナ123などがある。キーボード121は、文字、数字、各種指示などの入力のためのキーを備え、データの入力をおこなう。また、タッチパネル式であってもよい。マウス122は、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などをおこなう。スキャナ123は、画像を光学的に読み取る。読み取られた画像は画像データとして取り込まれ、コンピュータ本体110内のメモリに格納される。なお、スキャナ123にOCR機能を持たせてもよい。
また、出力装置130としては、ディスプレイ131、プリンタ132、スピーカ133などがある。ディスプレイ131は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。また、プリンタ132は、画像データや文書データを印刷する。またスピーカ133は、効果音や読み上げ音などの音声を出力する。
(電子文書の一例)
つぎに、この発明の実施の形態1にかかる検索対象となる電子文書について説明する。図2は、この発明の実施の形態1にかかる検索対象となる電子文書を示す説明図である。
階層構造を有する電子文書としてXML文書200がある。XML文書200には、タグが埋め込まれており、このタグにより階層を表現する。タグは、開始タグと終了タグの2種類のタグがある。
本明細書では、タグを構成する記号をタグ記号と呼び、特に、『<』を開始タグのタグ開始記号、『</』を終了タグのタグ開始記号、『>』を開始タグおよび終了タグのタグ終了記号と呼ぶ。また、タグ開始記号とタグ終了記号との間に括られている文字列を階層名と呼ぶ。
(パススキーマの一例)
つぎに、この発明の実施の形態1にかかるパススキーマについて説明する。パススキーマとは、検索対象となるXML文書200中に存在するルートノードからのすべてのパスを抽出し、重複するパスを1本にまとめたパスツリーである。パスツリーのノードはXML文書200の階層をあらわしている。以降、パスツリーのノードを階層ノードと呼ぶ。
図3は、この発明の実施の形態1にかかるパススキーマを示す説明図である。図3に示したパススキーマ300は、図2に示したXML文書200に関するパススキーマである。図3において、階層ノードN0はルートノードである。階層ノードN1はsyainをあらわすノードである。階層ノードN2はACTをあらわすノードである。階層ノードN3はcharaをあらわすノードである。階層ノードN6はnameをあらわすノードである。
(情報検索装置の機能的構成)
つぎに、図1に示した情報検索装置100の機能的構成について説明する。図4は、図1に示した情報検索装置100の機能的構成を示すブロック図である。図4において、情報検索装置100は、取得部401と、パススキーマ生成部402と、入力部403と、オートマトン生成部404と、検索部405と、出力部406と、変換部407と、を備えている。
なお、これら各機能401〜407は、情報検索装置100内のメモリに格納された当該機能に関するプログラムを情報検索装置100内のプロセッサに実行させることにより、または、入出力I/Fにより、当該機能を実現することができる。
また、各機能からの出力データはメモリに保持される。また、図4中矢印で示した接続先の機能は、接続元の機能からの出力データをメモリから読み込んで、当該機能に関するプログラムを情報検索装置100内のプロセッサに実行させる。
まず、取得部401は、検索対象となる階層構造を有する電子文書を取得する機能を有する。具体的には、たとえば、XML文書200を読み込んだり、キーボード121を操作することで作成されたXML文書200を取り込む。
また、パススキーマ生成部402は、取得部401によって取得された電子文書に関するパススキーマを生成する機能を有する。具体的には、たとえば、XML文書200を取得した場合、XMLパーサを用いてXML文書200の構造を解析する。XMLパーサとしては、たとえば、DOMやSAX、または下記文献(1)に示されているXML走査器を用いることができる。これにより、図3に示したようなパススキーマを生成する。
石野明、武田正幸 著、「パスプルーニングによる決定性有限オートマトンを用いたXQuery処理の提案」、
DBSJ Letters,Vol.4,No.4,pp.17-20,2006.
http://www.dbsj.org/Japanese/DBSJLetters/vol4/no4/ishino.pdf
また、入力部403は、任意の検索キーワードと当該検索キーワードの検索条件と検索式との入力を受け付ける機能を有する。検索キーワードとは、ユーザが電子文書の中からユーザが拾いたいキーワードであり、文字や数字などの文字列により構成される。
検索条件とは、検索キーワードに対して与えられる条件である。単なるキーワード検索である場合、完全一致、前方一致、部分一致、後方一致、類似語などが検索条件となる。一方、数値範囲検索である場合、入力された数値の数値範囲(以上、以下など)が検索条件となる。
また、検索式とは、検索キーワードの検索範囲を特定する質問式である。検索キーワードは電子文書の中の検索範囲から検索されることとなる。また、検索範囲は、パススキーマ内のパスにより特定される。ここでは、検索範囲は、階層をあらわす要素名を記号「/」を介して羅列した検索式により表現することとする。
ここで、検索式の一例を示す。
/syain/ACT/chara/name = “ブルー”・・・(1)
上記検索式(1)の左辺は、階層ノードN0を始点として、syainをあらわす階層ノードN1、ACTをあらわす階層ノードN2、およびcharaをあらわす階層ノードN3を経由し、nameをあらわす階層ノードN6に到達するパスを表現している。この階層ノードN3を親ノードとする階層ノードN6の階層が検索範囲となる。一方、右辺は検索キーワードをあらわしている。
したがって、左辺で示された検索範囲の中から右辺で示された検索キーワードを検索することとなる。なお、検索範囲の階層ノードを「ヒット階層ノード」と称す。たとえば、上記検索式(1)の例では、階層ノードN3を親ノードとする階層ノードN6がヒット階層ノードとなる。また、検索範囲内において検索条件を満たすことにより検索キーワードに一致または関連することとなったキーワードを、「ヒットキーワード」と称す。上記検索式(1)の例では、「ブルー」がヒットキーワードとなる。
また、図4において、オートマトン生成部404は、階層検索オートマトンとキーワード検索オートマトンとを連結した単一オートマトンを生成する機能を有する。階層検索オートマトンとは、パススキーマ300の階層を検索するオートマトンであり、パススキーマ300を構成する階層ノードをそのままノードとして構成している。すなわち、階層検索オートマトンは、XML文書200の走査位置がパススキーマ300内のどの階層ノードに遷移しているかを判定するオートマトンである。
また、キーワード検索オートマトンは、検索条件を満たすヒットキーワードを検索するオートマトンである。具体的には、たとえば、ヒットキーワードの文字順に遷移する文字ごとのノードにより構成されている。すなわち、階層検索オートマトンは、XML文書200の走査位置がヒットキーワードのどの文字のノードに遷移しているかを判定するオートマトンである。
本実施の形態1では、階層検索オートマトンとキーワード検索オートマトンとを別々に扱うのではなく、階層検索オートマトンのヒット階層ノードとキーワード検索オートマトンのヒットキーワードのノード集合との間で状態遷移するように、ヒット階層ノードとヒットキーワードのノード集合とを遷移枝で連結することで、単一オートマトンを構成している。したがって、XML文書200の走査位置が階層検索オートマトンのヒット階層ノードに状態遷移したときに限り、キーワード検索オートマトンによる状態遷移をおこなう。
図5は、この発明の実施の形態1にかかる単一オートマトンを示す説明図である。この単一オートマトン500は、上記検索式(1)が与えられた場合のオートマトンである。図5において、階層ノードN0は初期状態をあらわす。階層検索オートマトン501の上半部は、上位の階層ノードから下位の階層ノードへの状態遷移をあらわしており、下半部は、下位の階層ノードから上位の階層ノードへの状態遷移をあらわしている。
まず、上半部の状態遷移について説明する。階層検索オートマトン501は、遷移元となる上位の階層ノードとその遷移先となる下位の階層ノードとの間に開始タグのタグ開始記号『<』をあらわすノードを有する。
たとえば、上位の階層ノードN0とその下位の階層ノードN1との間、上位の階層ノードN1とその下位の階層ノードN2との間、上位の階層ノードN2とその下位の階層ノードN3との間、上位の階層ノードN3とその下位の階層ノードN6との間に、開始タグのタグ開始記号『<』をあらわすノードを有する。そして、上位の階層ノードに状態遷移している場合にタグ開始記号『<』が与えられると、タグ開始記号『<』をあらわすノードに状態遷移する。
また、上位の階層ノードに状態遷移している場合にタグ開始記号『<』以外の文字が与えられると、当該上位の階層ノードに状態遷移する。たとえば、階層ノードN0に状態遷移している場合にタグ開始記号『<』以外の文字が与えられると、当該上位の階層ノードN0に状態遷移する。
また、タグ開始記号『<』をあらわすノードと下位の階層ノードとの間に、下位の階層ノードの階層名をあらわす一連のノード群を有する。たとえば、タグ開始記号『<』をあらわすノードと下位の階層ノードN1との間には、階層名の文字『s』、『y』、『a』、『i』、『n』をあらわす一連のノード群を有する。
また、タグ開始記号『<』をあらわすノードと下位の階層ノードN2との間には、階層名の文字『A』、『C』、『T』をあらわす一連のノード群を有する。また、タグ開始記号『<』をあらわすノードと下位の階層ノードN3との間には、階層名の文字『c』、『h』、『a』、『r』、『a』をあらわす一連のノード群を有する。
また、タグ開始記号『<』をあらわすノードと下位の階層ノードN6との間には、階層名の文字『n』、『a』、『m』、『e』をあらわす一連のノード群を有する。そして、タグ開始記号『<』をあらわすノードに状態遷移している場合に任意の文字列が与えられると、ヒットミスする文字が出現するまで一連のノード群に対し状態遷移する。
たとえば、階層ノードN0からタグ開始記号『<』をあらわすノードに状態遷移している場合、XML文書200の走査位置が文字「s」であるとすると、タグ開始記号『<』をあらわすノードから文字『s』をあらわすノードに状態遷移する。つぎの走査位置が文字「y」であるとすると、文字『s』をあらわすノードから文字『y』をあらわすノードに状態遷移する。このあとも、ヒットミスする文字が走査位置に出現するまで状態遷移を続ける。
そして、階層名の末尾文字をあらわすノードに状態遷移している場合、XML文書200の走査位置が記号『>』であるとすると、階層名の末尾文字をあらわすノードの末尾文字をあらわすノードから下位の階層ノードに状態遷移する。
たとえば、上位の階層ノードN0から階層名syainの末尾文字『n』に状態遷移している場合、XML文書200の走査位置が記号『>』であるとすると、階層名の末尾文字『n』をあらわすノードの末尾文字をあらわすノードから下位の階層ノードN1に状態遷移する。他の末尾文字『T』、『a』、『e』についても、それぞれ下位の階層ノードN2、N3、N6に状態遷移する。
また、上位の階層ノードと下位の階層ノードとの間のノードに状態遷移している場合、ヒットミスする文字が走査位置に出現すると、上位の階層ノードに状態遷移する。たとえば、上位の階層ノードN0と下位の階層ノードN1との間の文字『s』をあらわすノードに状態遷移している場合、文字『y』以外のヒットミスする文字が走査位置に出現すると、上位の階層ノードN1に状態遷移する。
つぎに、下半部の状態遷移について説明する。階層検索オートマトン501は、遷移元となる下位の階層ノードとその遷移先となる上位の階層ノードとの間に終了タグのタグ開始記号『</』をあらわすノードを有する。
たとえば、下位の階層ノードN6とその上位の階層ノードN3との間、下位の階層ノードN3とその上位の階層ノードN2との間、下位の階層ノードN2とその上位の階層ノードN1との間、下位の階層ノードN1とその上位の階層ノードN0との間に、終了タグのタグ開始記号『</』をあらわすノードを有する。そして、下位の階層ノードに状態遷移している場合にタグ開始記号『</』が与えられると、タグ開始記号『</』をあらわすノードに状態遷移する。
また、下位の階層ノードに状態遷移している場合にタグ開始記号『</』以外の文字が与えられると、当該下位の階層ノードに状態遷移する。たとえば、階層ノードN6に状態遷移している場合にタグ開始記号『</』以外の文字が与えられると、当該上位の階層ノードN6に状態遷移する。
また、タグ開始記号『</』をあらわすノードと上位の階層ノードとの間に、下位の階層ノードの階層名をあらわす一連のノード群を有する。たとえば、タグ開始記号『</』をあらわすノードと下位の階層ノードN3との間には、階層名の文字『n』、『a』、『m』、『e』をあらわす一連のノード群を有する。
また、タグ開始記号『</』をあらわすノードと下位の階層ノードN2との間には、階層名の文字『c』、『h』、『a』、『r』、『a』をあらわす一連のノード群を有する。また、タグ開始記号『</』をあらわすノードと下位の階層ノードN1との間には、階層名の文字『A』、『C』、『T』をあらわす一連のノード群を有する。
また、タグ開始記号『</』をあらわすノードと下位の階層ノードN0との間には、階層名の文字『s』、『y』、『a』、『i』、『n』をあらわす一連のノード群を有する。そして、タグ開始記号『</』をあらわすノードに状態遷移している場合に任意の文字列が与えられると、ヒットミスする文字が出現するまで一連のノード群に対し状態遷移する。
たとえば、階層ノードN6からタグ開始記号『</』をあらわすノードに状態遷移している場合、XML文書200の走査位置が文字『n』であるとすると、タグ開始記号『</』をあらわすノードから文字『n』をあらわすノードに状態遷移する。つぎの走査位置が文字『a』であるとすると、文字『n』をあらわすノードから文字『a』をあらわすノードに状態遷移する。このあとも、ヒットミスする文字が走査位置に出現するまで状態遷移を続ける。
そして、階層名の末尾文字をあらわすノードに状態遷移している場合、XML文書200の走査位置が記号『>』であるとすると、階層名の末尾文字をあらわすノードの末尾文字をあらわすノードから下位の階層ノードに状態遷移する。
たとえば、上位の階層ノードN6から階層名nameの末尾文字『n』に状態遷移している場合、XML文書200の走査位置が記号『>』であるとすると、階層名の末尾文字『n』をあらわすノードの末尾文字をあらわすノードから下位の階層ノードN3に状態遷移する。他の末尾文字『a』、『T』、『n』についても、それぞれ下位の階層ノードN2、N1、N0に状態遷移する。
また、下位の階層ノードと上位の階層ノードとの間のノードに状態遷移している場合、ヒットミスする文字が走査位置に出現すると、下位の階層ノードに状態遷移する。たとえば、下位の階層ノードN6と上位の階層ノードN3との間の文字『n』をあらわすノードに状態遷移している場合、文字『n』以外のヒットミスする文字が走査位置に出現すると、上位の階層ノードN6に状態遷移する。
つぎに、キーワード検索オートマトン502について説明する。キーワード検索オートマトン502は、ヒットキーワードを文字順に状態遷移する一連のノード群である。図5に示したように、ヒットキーワードが、検索キーワードと同一の「ブルー」である場合、『ブ』、『ル』、『ー』をあらわすノード群がその文字順に状態遷移するように連結されている。
階層検索オートマトン501とキーワード検索オートマトン502とは状態遷移するように連結されている。具体的には、階層検索オートマトン501内のヒット階層ノードに状態遷移している場合にヒットキーワードの先頭文字が与えられると、キーワード検索オートマトン502内の先頭文字をあらわすノードに状態遷移する。たとえば、ヒット階層ノードN6に状態遷移している場合にヒットキーワード「ブルー」の先頭文字『ブ』が与えられると、キーワード検索オートマトン502内の先頭文字『ブ』をあらわすノードに状態遷移する。
また、キーワード検索オートマトン502内のいずれかのノードに状態遷移している場合にヒットミスする文字が与えられると、ヒット階層ノードに状態遷移する。たとえば、先頭文字『ブ』をあらわすノードに状態遷移している場合に遷移先のノードをあらわす文字『ル』以外のヒットミスする文字が走査位置に出現すると、ヒット階層ノードN6に状態遷移する。
また、ヒットキーワードにヒットした場合もヒット階層ノードに状態遷移することで、XML文書200の走査を継続することができる。たとえば、文字『ー』をあらわすノードに状態遷移すると、ヒットキーワードにマッチすることになるが、このとき、ヒット階層ノードN6に状態遷移する。
このように、XML文書200の走査位置が階層検索オートマトン501のヒット階層ノードに状態遷移したときに限り、キーワード検索オートマトン502に状態遷移するため、階層検索オートマトン501とキーワード検索オートマトン502との間の処理の切り替え頻度の低減化を図ることができる。
同様に、ヒットキーワードにマッチしないと、ただちにヒット階層ノードに状態遷移するため、ヒット階層ノードにより特定される検査範囲内の文字列のみを集中的に検索することができる。
また、図4において、検索部405は、単一オートマトン500を用いて、電子文書の中から、検索範囲内のヒットキーワードを検索する機能を有する。具体的には、XML文書200を走査し、その走査位置がどの階層であるかを階層検索オートマトン501により判定する。そして、ヒット階層ノードに状態遷移した場合、XML文書200の走査位置がヒットキーワードのどの文字であるかをキーワード検索オートマトン502により判定する。
出力部406は、キーワード検索オートマトン502においてヒットキーワードにマッチした場合、そのマッチした文字列を検索結果として出力する機能を有する。この出力処理には、ディスプレイ131による画面表示やプリンタ132による印刷出力、音声による読み上げ、半導体メモリやHDへの格納、他のコンピュータ装置への送信などがある。
また、変換部407は、パススキーマ300を構成する各階層ノードの階層名を文字数の少ない固有の文字列に変換する機能を有する。具体的には、取得部401により取得された電子文書内の階層名を固有の文字列に変換しておくことで、パススキーマ生成部402により生成されるパススキーマも固有の文字列を用いたパスツリーとなる。
ここで、固有の文字列とは、階層名よりも文字数が少なければよく、1文字にするのが最適である。ここでは、階層名ごとに1文字分の固有数字を割り当てることにより、変換処理を実現する。
図6は、変換テーブルを示す説明図である。この変換テーブル600を用いることにより、階層名を個有数字に変換することができる。図7は、変換後のXML文書を示す説明図である。図7のXML文書700は、図2に示したXML文書200を変換テーブル600を用いて変換したXML文書である。
図8は、変換済み単一オートマトンを示す説明図である。図8の変換済み単一オートマトン800は、図5と同様、上記検索式(1)が与えられた場合のオートマトンであるが、階層名が固有数字に置き換えられた階層検索オートマトン801となっている。すなわち、遷移元の階層ノードと遷移先の階層ノードとの間のノードがタグ開始記号をあらわすノードと固有数字をあらわすノードのみとなっているため、状態遷移回数の低減化を図ることができ、検索速度の高速化を図ることができる。
(情報検索処理手順)
つぎに、この発明の実施の形態にかかる情報検索処理手順について説明する。図9は、この発明の実施の形態にかかる情報検索処理手順を示すフローチャートである。図9において、まず、取得部401により階層構造を有する電子文書(XML文書200)を取得する(ステップS901)。
そして、変換部407による変換処理をおこなうか否かを判断する(ステップS902)。変換しないと判断された場合(ステップS902:No)、パススキーマ生成部402によりパススキーマ300を生成する(ステップS903)。つぎに、検索キーワードとその検索条件と検索式とが入力されるのを待ち受ける(ステップS904:No)。
検索キーワードとその検索条件と検索式とが入力された場合(ステップS904:Yes)、オートマトン生成部404により単一オートマトン500を生成し(ステップS905)、この単一オートマトン500を用いて検索をおこなう(ステップS906)。このあと、ステップS912に移行する。
一方、ステップS902において、変換すると判断された場合(ステップS902:Yes)、電子文書(XML文書200)内の階層名を変換テーブル600にしたがって変換する(ステップS907)。そして、パススキーマ生成部402により変換済みパススキーマを生成する(ステップS908)。つぎに、検索キーワードとその検索条件と検索式とが入力されるのを待ち受ける(ステップS909:No)。
検索キーワードとその検索条件と検索式とが入力された場合(ステップS909:Yes)、オートマトン生成部404により変換済み単一オートマトン800を生成し(ステップS910)、この変換済み単一オートマトン800を用いて検索をおこなう(ステップS911)。このあと、ステップS912に移行する。最後に、出力部406により検索結果を出力する(ステップS912)ことにより、一連の処理を終了する。
このように、実施の形態1によれば、階層検索オートマトン501(801)とキーワード検索オートマトン502との間の処理の切り替え頻度の低減化を図ることができる。また、ヒットキーワードにマッチしないと、ただちにヒット階層ノードに状態遷移するため、ヒット階層ノードにより特定される検査範囲内の文字列のみを集中的に検索することができる。またこれにより、ハードウェア化が容易となる。
<実施の形態2>
つぎに、実施の形態2について説明する。実施の形態1では、パススキーマから得られるパスをすべてオートマトンで表現しているが、実施の形態2は、ルートノードからヒット階層ノードに一意に到達することができるパスツリーとなる部分パススキーマをパススキーマから抽出する。これにより、生成される単一オートマトン内の階層検索オートマトンのサイズを縮小することができる。
なお、実施の形態1で示した構成と同一構成については同一符号を付し、その説明を省略する。また、説明を簡略化するため、特に断りがない限り、変換テーブル600を用いた場合と用いない場合とを区別せずに説明する。
(電子文書の一例)
つぎに、この発明の実施の形態2にかかる検索対象となる電子文書について説明する。図10は、この発明の実施の形態2にかかる検索対象となる電子文書の一例を示す説明図である。XML文書1000は、検索対象となる電子文書である。
(パススキーマの一例)
つぎに、この発明の実施の形態2にかかるパススキーマについて説明する。図11は、この発明の実施の形態2にかかるパススキーマを示す説明図である。図11に示したパススキーマ1100は、図10に示したXML文書1000に関するパススキーマである。
図11のパススキーマ1100において、階層ノードN0はルートノードである。階層ノードN1は階層名syainをあらわすノードである。階層ノードN2は階層名ACTをあらわすノードである。階層ノードN3は階層名charaをあらわすノードである。階層ノードN4は階層名nickをあらわすノードである。階層ノードN5は階層名castをあらわすノードである。階層ノードN7は階層名IDをあらわすノードである。
なお、階層名nameをあらわす同一の階層ノードN6は3つあるが、説明上それぞれを区別するために、階層ノードN4の子階層ノードを階層ノードN6a、階層ノードN3の子階層ノードを階層ノードN6b、階層ノードN5の子階層ノードを階層ノードN6cとする。つぎに、部分パススキーマの抽出例について説明する。
(部分パススキーマの抽出例)
図12は、部分パススキーマの抽出例(その1)を示す説明図である。図12において、下記検索式(2)が与えられた場合、syain,ACT,castを通るパスP1を部分パススキーマ1200として抽出する。このパスP1はユニークなパスであるため、階層ノードN0とcastをあらわす階層ノードN5とその子ノードであるnameをあらわす階層ノードN6cとからなるパスツリーが部分パススキーマとして抽出される。一方、途中のsyain,ACTをあらわす階層ノードは削除される。また、パスP1から外れた階層ノードも当然削除される。
/syain/ACT/cast = ブルー・・・(2)
図13は、図12に示した部分パススキーマ1200により階層検索オートマトンを構成した場合の単一オートマトンを示す説明図である。この単一オートマトン1300において、階層検索オートマトン1301には、部分パススキーマ1200を構成していない階層ノードN1〜N4,N7が含まれていないため、階層検索オートマトン1301のサイズ縮小化を図ることができる。これにより、状態遷移回数を削減することができるため、検索速度の向上を図ることができる。
図14は、部分パススキーマの抽出例(その2)を示す説明図である。図14において、下記検索式(3)が与えられた場合、syain,ACT,cast,chara,nameを通るパスを部分パススキーマ1400として抽出する。パスP1,P2は、階層ノードN2まで共通するため、階層ノードN1,N2は削除される。
また、階層ノードN6aはヒット階層ノードではないので、削除される。階層ノードN4は階層ノードN3からの分岐先を特定するために残しておく。階層ノードN6bはヒット階層ノードであるため残しておく。階層ノードN7は階層ノードN6bの子階層ノードであるため残しておく。階層ノードN5,N6cはパスP2,P3外なので削除される。
/syain/ACT/cast/chara/name =ブルー・・・(3)
図15は、図14に示した部分パススキーマ1400により階層検索オートマトンを構成した場合の単一オートマトン1500を示す説明図である。階層検索オートマトン1501には、部分パススキーマ1400を構成していない階層ノードN1,N2,N5が含まれていないため、階層検索オートマトン1501のサイズ縮小化を図ることができる。これにより、状態遷移回数を削減することができるため、検索速度の向上を図ることができる。
(情報検索装置100の機能的構成)
図16は、この発明の実施の形態2にかかる情報検索装置100の機能的構成を示すブロック図である。図16において、図4の示した機能401〜407のほかに、抽出部1601と判断部1602とを備える。
なお、これら各機能1601,1602は、情報検索装置100内のメモリに格納された当該機能に関するプログラムを情報検索装置100内のプロセッサに実行させることにより、または、入出力I/Fにより、当該機能を実現することができる。
また、各機能1601,1602からの出力データはメモリに保持される。また、図16中矢印で示した接続先の機能は、接続元の機能からの出力データをメモリから読み込んで、当該機能に関するプログラムを情報検索装置100内のプロセッサに実行させる。
図16において、抽出部1601は、パススキーマの中から、検索式により特定される検索範囲に関する部分パススキーマを抽出する。具体的には、検索式により特定されるパスが1通り、すなわちユニークパスである場合、パススキーマからルートノードとヒット階層ノードとその子階層ノードとからなるパスツリーを部分パススキーマとして抽出する。たとえば、図12に示したように、部分パススキーマ1200を抽出する。
一方、検索式により特定されるパスが複数通りある場合、その複数通りのパスの配列パターンに応じて部分パススキーマを抽出する。具体的な抽出例については、判断部1602の説明で述べる。
いずれにしても、オートマトン生成部404では、図13および図15に示したように、部分パススキーマ1200,1400の階層を検索する階層検索オートマトン1301,1501と、ヒットキーワードを検索するキーワード検索オートマトン502とからなる単一オートマトン1300,1500を生成する。
また、判断部1602は、検索式により特定されるパスがパススキーマ1100内に複数通り存在するか否かを判断する。具体的には、検索式の末尾の階層名をあらわすノードが複数あるか否かにより、パスが複数通りあるか否かを判断することができる。たとえば、図12に示したように、パススキーマ1100から検索式(2)により特定されるパスはパスP1のみであると判断され、パスP1はユニークパスとなる。一方、図14に示したように、パススキーマ1100から検索式(3)により特定されるパスはパスP2,P3の2通りであると判断される。
また、判断部1602は、複数通りあると判断された場合、その複数通りのパスの配列パターンがどの配列パターンに該当するか否かを判断する。以下、配列パターン例について説明する。
図17は、配列パターンAを示す説明図である。配列パターンAは、ヒット階層ノードと同一階層名となる類似ノードがヒット階層ノードよりも上位階層に存在する配列パターンである。図17において、たとえば、検索式が「/a/b/name」である場合、パススキーマ1700の階層ノードN0〜N4までのパスと階層ノードN0〜N8までのパスが特定される。ここで、階層ノードN4,N8のうち階層ノードN8をヒット階層ノードとすると、階層ノードN4は類似ノードとなる。
配列パターンAの場合、抽出パターンA−1,A−2がある。抽出パターンA−1では、ルートノードN0と、類似ノードとヒット階層ノードとの間にのみ存在する中間階層ノードと、ヒット階層ノードと、からなる部分パススキーマを抽出する。
この抽出パターンA−1にしたがうと、ルートノードN0と、集合Yにのみ存在する中間階層ノードN5と、ヒット階層ノードN8と、からなる部分パススキーマ1701を抽出することができる。同様に、ルートノードN0と、中間階層ノードN7と、ヒット階層ノードN8と、からなる部分パススキーマ1702を抽出することができる。
一方、抽出パターンA−2では、ルートノードN0と、類似ノードとヒット階層ノードとの間に存在する中間階層ノードと、ルートノードN0と類似ノードとの間に存在し中間階層ノードと同一階層名である他の中間階層ノードと、ヒット階層ノードと、からなる部分パススキーマを抽出する。
この抽出パターンA−2にしたがうと、ルートノードN0と、集合Yに存在する中間階層ノードN6と、集合Xに存在する他の中間階層ノードN2と、ヒット階層ノードN8と、からなる部分パススキーマ1703を抽出することができる。
なお、中間階層ノードとしてルートノードN0から階層の深いノードを選んでおくと、他の類似ノードに対する中間階層ノードとしても利用することができ、ノード数の削減を図ることができる。
図18は、配列パターンBを示す説明図である。配列パターンBは、ヒット階層ノードと同一階層名となる他の階層ノードがヒット階層ノードよりも下位階層に存在する配列パターンである。図18において、たとえば、検索式が「/a/b/name」である場合、パススキーマ1700の階層ノードN0〜N4までのパスと階層ノードN0〜N8までのパスが特定される。ここで、階層ノードN4,N8のうち階層ノードN4をヒット階層ノードとすると、階層ノードN8は類似ノードとなる。
配列パターンBの場合、抽出パターンB−1がある。抽出パターンB−1では、ルートノードN0と、ヒット階層ノードと、当該ヒット階層ノードと類似ノードとの間に存在する子階層ノードと、からなる部分パススキーマを抽出する。
この抽出パターンB−1にしたがうと、ルートノードN0と、ヒット階層ノードN4と、集合Y(当該ヒット階層ノードN4と類似ノードN8との間)に存在する子階層ノードN5,N6またはN7と、からなる部分パススキーマ1801〜1803を抽出することができる。
図19は、配列パターンCが適用されるパススキーマを示す説明図である。配列パターンCは、類似ノードがヒット階層ノードよりも上位階層に存在する分岐元の階層ノードから分岐されたパスに存在する配列パターンである。図19において、たとえば、検索式が「/a/b/name」である場合、パススキーマ1900の階層ノードN0〜N7までのパスと階層ノードN0〜N3,N8〜N15までのパスが特定される。ここで、階層ノードN7,N15のうち階層ノードN7をヒット階層ノードとすると、階層ノードN15は類似ノードとなる。
配列パターンCの場合、抽出パターンC−1〜C−6がある。抽出パターンC−1では、ルートノードN0と、分岐元の階層ノードとヒット階層ノードとの間にのみ存在する中間階層ノードと、ヒット階層ノードと、からなる部分パススキーマを抽出する。
図20は、抽出パターンC−1により抽出された部分パススキーマを示す説明図である。この抽出パターンC−1では、ルートノードN0と、分岐元の階層ノードとヒット階層ノードとの間にのみ存在する中間階層ノードと、ヒット階層ノードと、からなる部分パススキーマを抽出する。
この抽出パターンC−1にしたがうと、ルートノードN0と、集合Y(分岐元の階層ノードN3とヒット階層ノードN7との間)にのみ存在する中間階層ノードN4と、ヒット階層ノードN7と、からなる部分パススキーマ2000を抽出することができる。
なお、図19に示した集合Yにおいて、階層ノードN5は、同一階層名bの階層ノードN2が集合Xに存在し、また、同一階層名bの階層ノードN10が集合Zに存在するため、選ばれない。同様に、階層ノードN6は、同一階層名bの階層ノードN12,N13が集合Zに存在するため選ばれない。
図21は、抽出パターンC−2により抽出された部分パススキーマを示す説明図である。この抽出パターンC−2では、ルートノードN0と、分岐元の階層ノードとヒット階層ノードとの間に存在しかつ分岐元の階層ノードと類似ノードとの間に存在しない中間階層ノードと、ルートノードと分岐元の階層ノードとの間に存在する中間階層ノードと同一階層名の他の中間階層ノードと、ヒット階層ノードと、からなる部分パススキーマを抽出する。
この抽出パターンC−2にしたがうと、ルートノードN0と、集合Y(分岐元の階層ノードN3とヒット階層ノードN7との間)に存在しかつ集合Z(分岐元の階層ノードN3と類似ノードN15との間)に存在しない中間階層ノードN5と、集合X(ルートノードN0と分岐元の階層ノードN3との間)に存在する中間階層ノードN5と同一階層名の他の中間階層ノードN2と、ヒット階層ノードN7と、からなる部分パススキーマ2100を抽出することができる。
図22は、抽出パターンC−3により抽出された部分パススキーマを示す説明図である。この抽出パターンC−3では、ルートノードN0と、ヒット階層ノードと、分岐元の階層ノードと類似ノードとの間にのみ存在する分岐先の階層ノードと、からなる部分パススキーマを抽出する。
この抽出パターンC−3にしたがうと、ルートノードN0と、ヒット階層ノードN7と、集合Z(分岐元の階層ノードN3と類似ノードN15との間)にのみ存在する分岐先の階層ノードN8,N9またはN11と、からなる部分パススキーマ2201〜2203を抽出することができる。
図23は、抽出パターンC−4により抽出された部分パススキーマを示す説明図である。この抽出パターンC−4では、ルートノードN0と、分岐元の階層ノードと類似ノードとの間に存在しかつ分岐元の階層ノードとヒット階層ノードとの間に存在しない中間階層ノードと、ルートノードN0と分岐元の階層ノードとの間に存在する中間階層ノードと同一階層名の他の中間階層ノードと、ヒット階層ノードと、からなる部分パススキーマを抽出する。
この抽出パターンC−4にしたがうと、ルートノードN0と、集合Z(分岐元の階層ノードN3と類似ノードN15との間)に存在しかつ集合Y(分岐元の階層ノードN3とヒット階層ノードN7との間)に存在しない中間階層ノードN14と、集合X(ルートノードN0と分岐元の階層ノードN3との間)に存在する中間階層ノードN14と同一階層名の他の中間階層ノードN1と、ヒット階層ノードN7と、からなる部分パススキーマ2300を抽出することができる。
図24は、抽出パターンC−5により抽出された部分パススキーマを示す説明図である。この抽出パターンC−5では、ルートノードN0と、当該ルートノードN0と分岐元の階層ノードとの間に存在せずかつ分岐元の階層ノードとヒット階層ノードとの間に存在する第1の中間階層ノードと、ルートノードN0と第1の中間階層ノードとの間に存在せずかつ第1の中間階層ノードと同一階層名の第2の中間階層ノードのうち最上位の中間階層ノードと分岐元の階層ノードとの間の第3の中間階層ノードと、からなる部分パススキーマを抽出する。
この抽出パターンC−5にしたがうと、ルートノードN0と、当該ルートノードN0と集合X(分岐元の階層ノードN3との間)に存在せずかつ集合Y(分岐元の階層ノードN3とヒット階層ノードN7との間)に存在する第1の中間階層ノードN6と、ルートノードN0と第1の中間階層ノードN6との間に存在せずかつ第1の中間階層ノードN6と同一階層名の第2の中間階層ノードN13,N14のうち最上位の中間階層ノードN13と分岐元の階層ノードN3との間の第3の中間階層ノードN8,N9またはN11と、からなる部分パススキーマ2401〜2403を抽出することができる。
図25は、抽出パターンC−6により抽出された部分パススキーマを示す説明図である。この抽出パターンC−6では、ルートノードN0と、分岐元の階層ノードとヒット階層ノードとの間に存在する第1の中間階層ノードと、分岐元の階層ノードと第1の中間階層ノードとの間に存在せずかつ第1の中間階層ノードと同一階層名の第2の中間階層ノードのうち最上位の中間階層ノードと分岐元の階層ノードとの間の第3の中間階層ノードと、からなる部分パススキーマを抽出する。
この抽出パターンC−6にしたがうと、ルートノードN0と、集合Y(分岐元の階層ノードN3とヒット階層ノードN7との間)に存在する第1の中間階層ノードN5と、分岐元の階層ノードN3と第1の中間階層ノードN5との間に存在せずかつ第1の中間階層ノードN5と同一階層名の第2の中間階層ノードN10のうち最上位の中間階層ノードN10と分岐元の階層ノードN3との間の第3の中間階層ノードN8またはN9と、からなる部分パススキーマ2501〜2503を抽出することができる。
(情報検索処理手順)
つぎに、この発明の実施の形態2にかかる情報検索処理手順について説明する。図26は、この発明の実施の形態2にかかる情報検索処理手順を示すフローチャートである。図26において、図9に示したステップと同一処理内容については同一ステップ番号を付し、その説明を省略する。
図26において、ステップS904とステップS905との間において、抽出処理を実行する(ステップS2601)。この抽出処理(ステップS2601)は、上述した判断部1602および抽出部1601により実行される。このため、ステップS905の単一オートマトン生成では、抽出処理(ステップS2601)により抽出された部分パススキーマを用いて構成された階層検索オートマトンとキーワード検索オートマトン502とからなる単一オートマトンを生成することとなる。
同様に、ステップS909とステップS910との間においても、抽出処理を実行する(ステップS2602)。この抽出処理(ステップS2602)も、上述した判断部1602および抽出部1601により実行される。このため、ステップS910の変換済み単一オートマトン生成では、抽出処理(ステップS2602)により抽出された変換済み部分パススキーマを用いて構成された変換済み階層検索オートマトンとキーワード検索オートマトン502とからなる変換済み単一オートマトンを生成することとなる。
つぎに、上述した抽出処理(ステップS2601,S2602)の詳細な処理手順について説明する。図27は、抽出処理(ステップS2601,S2602)の詳細な処理手順を示すフローチャートである。図27において、まず、検索式からルートノードおよびヒット階層ノードを特定し(ステップS2701)、検索式により特定されるパスが複数通りあるか否かを判断する(ステップS2702)。
複数通りない場合(ステップS2702:No)、図12に示したように、そのパスにより特定される部分パススキーマ(または変換済み部分パススキーマ)をパススキーマ(変換済みパススキーマ)から抽出する(ステップS2703)。これにより、ステップS905(S910)に移行する。
一方、複数通りある場合(ステップS2702:Yes)、該当する配列パターンを特定し(ステップS2704)、抽出パターンを選択する(ステップS2705)。抽出パターンの選択はランダムにおこなってもよく、また優先順位をつけて選択してもよい。
このあと、選択された抽出パターンにしたがって部分パススキーマ(または変換済み部分パススキーマ)をパススキーマ(変換済みパススキーマ)から抽出して(ステップS2706)、ステップS905(S910)に移行する。これにより、一連の処理を終了する。
(ワイルドカード検索)
つぎに、ワイルドカード検索について説明する。ワイルドカードとは、検索する際にどんなパターンにもマッチする特殊文字であり、検索式の組み方により、2通りの検索範囲が特定される。ここでは、検索式中において、ワイルドカードを『//』で表記する。
まず、X//のように、ワイルドカードが末尾に記述されている検索式の場合、ヒット階層ノードとしてXを階層名とする階層ノードのみを選択する。図28は、部分パススキーマの抽出例(その3)を示す説明図である。図11に示したパススキーマ1100を例にあげると、下記検索式(4)が与えられた場合、ルートノードN0とヒット階層ノードN3とからなる部分パススキーマ2800を抽出することができ、サイズの縮小を図ることができる。なお、フラグが立っている階層ノードは検索対象となる階層ノードである。
/syain/ACT/chara//・・・(4)
また、//Xのように、ワイルドカードが末尾に記述されていない検索式の場合、ヒット階層ノードとして、上記文献(1)に示したパスプルーニング手法により導き出される階層ノードとその子階層ノードを選択する。図29は、部分パススキーマの抽出例(その4)を示す説明図である。図11に示したパススキーマ1100を例にあげると、下記検索式(5)が与えられた場合、ルートノードN0とヒット階層ノードN6(N6a,N6b,N6c)とからなる部分パススキーマ2900を抽出することができる。なお、フラグが立っている階層ノードは検索対象となる階層ノードである。
//name・・・(5)
また、検索式が複数与えられる場合もある。この場合、すべての検索式から得られるノードを網羅するように、ヒット階層ノードやその子階層ノードを特定する。具体的には、各検索式の論理和を取ることにより、部分パススキーマを抽出する。
図30は、部分パススキーマの抽出例(その5)を示す説明図である。図30に示した抽出例は、上述した検索式(4),(5)が与えられた場合の抽出例である。この場合、ルートノードN0とヒット階層ノードN3,N6(N6a,N6b,N6c)とからなる部分パススキーマ3000を抽出することができ、サイズの縮小を図ることができる。なお、フラグが立っている階層ノードは検索対象となる階層ノードである。
また、ヒット階層ノードN6a,N6bは階層ノードN3からの分岐先ノードであるため、この2本のパスを1本にまとめることができる。具体的には、子階層ノードを有するヒット階層ノードN6bに縮退させる。部分パススキーマ3001は、縮退済み部分パススキーマである。これにより、さらにサイズの縮小を図ることができる。
このように、実施の形態2によれば、ルートノードからヒット階層ノードに一意に到達することができるパスツリーとなる部分パススキーマをパススキーマから抽出するため、階層検索オートマトンの生成元を、ノード数が削減された部分パススキーマに絞り込むことができる。したがって、生成される単一オートマトン内の階層検索オートマトンのサイズを縮小することができる。
階層検索オートマトンのサイズが縮小されると、単一オートマトンを保持するメモリ容量を削減することができる。またこれにより、プロセッサで処理を実行する場合、メモリサイズの削減を図ることができ、キャッシュミス率の低下が見込め、検索速度の高速化を実現することができる。また、階層検索オートマトンのサイズの縮小により、状態遷移回数が低減する。これにより、キャッシュミス率も低下するため、検索速度の高速化を実現することができる。
<実施の形態3>
つぎに、実施の形態3について説明する。実施の形態1では、図6に示した変換テーブル600により、電子文書内の階層名ごとに固有の文字列に変換することで階層検索オートマトンのノード数を削減しているが、実施の形態3では、パススキーマ内のパスごとにタグ記号および固有の識別子を割り当てることにより、階層検索オートマトンのノード数を削減する。
たとえば、図11に示したパススキーマ1100の場合、階層名nameをあらわす階層ノードをヒット階層ノードとするパスは3本存在するが、パスごとに異なる識別子を割り当てることにより、電子文書読み出し時にその識別子を検出するだけでパスを判別することができる。なお、実施の形態1,2で示した構成と同一構成については同一符号を付し、その説明を省略する。
(第1の例)
(パスIDテーブル)
図31は、パスIDテーブル3100を示す説明図である。図31において、パスIDテーブル3100はパスごとにパスIDが割り振られている。このパスIDテーブル3100は、電子文書を読み込んだときに作成される。
具体的には、パスIDテーブル3100にパスIDが割り振られていないパスが検出された場合、その検出されたパスに対して固有のパスIDを割り振る。一方、パスIDが割り振られているパスが検出された場合には、電子文書のタグを変換する。
なお、検索対象がXML文書である場合、開始タグのタグ記号を『<…>』から『[…』に変換する。また、終了タグのタグ記号を『</…>』から『/…』に変換する。この変換処理は、図4に示した変換部407が実行する。また、タグ記号『[』を階層開始指示子と称し、タグ記号『/』を階層終了指示子と称す。
(パスIDへの変換例)
つぎに、パスIDへの変換例(その1)について説明する。図32は、パスIDへの変換例(その1)を示す説明図である。図32において、符号3201は変換前のXML文書であり、符号3202は変換済みXML文書である。
(変換済みパススキーマの生成例)
図33は、変換済みパススキーマを示す説明図である。この変換済みパススキーマ3300は、図32に示した変換済みXML文書3202から生成されたパススキーマである。ここでは、各階層ノードの符号として「n#」を付している。#はパスIDである。したがって、図11に示した階層ノードN6(N6a,N6b,N6c)のように、同一階層名nameのノードが複数存在することはなく、図33では、n4,n6,n9のように、同一階層名nameであっても区別がつくように表現される。
(部分パススキーマの抽出例)
図34は、部分パススキーマの抽出例(その6)を示す説明図である。図34において、下記検索式(6)が与えられると、変換済み部分パススキーマ3400を変換済みパススキーマ3300から抽出することができる。同一検索式が与えられた図14の抽出例と比較するとノード数が削減されていることがわかる。
/syain/ACT/chara/name/・・・(6)
図35は、変換済み部分パススキーマ3400から得られる階層検索オートマトンを示す説明図である。図35において、階層検索オートマトン3500は、変換済み部分パススキーマ3400を構成する階層ノードn0,n4と、階層開始指示子『[』をあらわすノードと、階層終了指示子『/』をあらわすノードとから構成される。階層検索オートマトン3500は、図15に示した階層検索オートマトン1501と比べると、ノード数が削減されている。
階層検索オートマトン3500では、ルートノードn0に状態遷移している場合、階層開始指示子『[』が与えられると、そのノードに状態遷移する。一方、階層終了指示子『/』が与えられると、そのノードに状態遷移する。なお、タグ記号以外の文字が与えられると、ルートノードn0自身に状態遷移する。
また、階層検索オートマトン3500では、ヒット階層ノードn4に状態遷移している場合、階層開始指示子『[』が与えられると、そのノードに状態遷移する。一方、階層終了指示子『/』が与えられると、そのノードに状態遷移する。なお、タグ記号以外の文字が与えられると、ヒット階層ノードn4自身に状態遷移する。
また、階層検索オートマトン3500では、階層開始指示子『[』をあらわすノードに状態遷移している場合、識別子『4』が与えられると、ヒット階層ノードn4に状態遷移する。一方、それ以外の識別子(図中「?」で表記)が与えられると、ルートノードn0に状態遷移する。
また、ヒット階層ノードn469には、ヒット階層ノードn4の子階層ノードn7の識別子『7』も埋め込まれているため、階層検索オートマトン3500では、階層終了指示子『/』をあらわすノードに状態遷移している場合、識別子『7』が与えられると、ヒット階層ノードn4に状態遷移する。一方、それ以外の識別子(図中「?」で表記)が与えられると、ルートノードn0に状態遷移する。
したがって、単一オートマトンを保持するメモリ容量を削減することができる。またこれにより、プロセッサで処理を実行する場合、メモリサイズの削減を図ることができ、キャッシュミス率の低下が見込め、検索速度の高速化を実現することができる。また、階層検索オートマトンのサイズの縮小により、状態遷移回数が低減する。これにより、キャッシュミス率も低下するため、検索速度の高速化を実現することができる。
(第2の例)
(ワイルドカード検索)
第2の例は、ワイルドカード検索に関する検索例である。ワイルドカード検索の場合、複数通りのパスが選択される場合がある。図36は、部分パススキーマの抽出例(その7)を示す説明図である。図36において、たとえば、下記検索式(7)が与えられた場合、変換済みパススキーマ3300から、ルートノードn0とヒット階層ノードn4、n6、n9とからなる変換済み部分パススキーマ3601を抽出することができる。
また、これらのヒット階層ノードn4、n6、n9は同一階層名であるため、縮退させることにより変換済み部分パススキーマ3602を得ることができる。縮退されたヒット階層ノードn469は、ヒット階層ノードn4、n6、n9の識別子『4』,『6』,『9』とヒット階層ノードn4の子階層ノードn7の識別子『7』が埋め込まれたノードである。
図37は、変換済み部分パススキーマ3602から得られる階層検索オートマトンを示す説明図である。図37において、階層検索オートマトン3700は、変換済み部分パススキーマ3602を構成する階層ノードn0,n469と、階層開始指示子『[』をあらわすノードと、階層終了指示子『/』をあらわすノードとから構成される。階層検索オートマトン3700は、図15に示した階層検索オートマトン1501と比べると、ノード数が削減されている。
階層検索オートマトン3700では、ルートノードn0に状態遷移している場合、階層開始指示子『[』が与えられると、そのノードに状態遷移する。一方、階層終了指示子『/』が与えられると、そのノードに状態遷移する。なお、タグ記号以外の文字が与えられると、ルートノードn0自身に状態遷移する。
また、階層検索オートマトン3700では、ヒット階層ノードn469に状態遷移している場合、階層開始指示子『[』が与えられると、そのノードに状態遷移する。一方、階層終了指示子『/』が与えられると、そのノードに状態遷移する。なお、タグ記号以外の文字が与えられると、ヒット階層ノードn469自身に状態遷移する。
また、ヒット階層ノードn469には、ヒット階層ノードn4、n6、n9の識別子『4』,『6』,『9』が埋め込まれているため、階層検索オートマトン3700では、階層開始指示子『[』をあらわすノードに状態遷移している場合、識別子『4』,『6』または『9』が与えられると、ヒット階層ノードn469に状態遷移する。一方、それ以外の識別子(図中「?」で表記)が与えられると、ルートノードn0に状態遷移する。
また、ヒット階層ノードn469には、ヒット階層ノードn4の子階層ノードn7の識別子『7』も埋め込まれているため、階層検索オートマトン3700では、階層終了指示子『/』をあらわすノードに状態遷移している場合、識別子『7』が与えられると、ヒット階層ノードn469に状態遷移する。一方、それ以外の識別子(図中「?」で表記)が与えられると、ルートノードn0に状態遷移する。
したがって、この第2の例では、単一オートマトンの生成に先立って、パススキーマを縮退させることができるため、単一オートマトンを保持するメモリ容量を削減することができる。またこれにより、プロセッサで処理を実行する場合、メモリサイズの削減を図ることができ、キャッシュミス率の低下が見込め、検索速度の高速化を実現することができる。また、階層検索オートマトンのサイズの縮小により、状態遷移回数が低減する。これにより、キャッシュミス率も低下するため、検索速度の高速化を実現することができる。
(第3の例)
第3の例は、複数検索式の場合の検索例である。検索式が複数与えられた場合、すべての検索式から得られるノードを網羅するように、ヒット階層ノードやその子階層ノードを特定する。具体的には、各検索式の論理和を取ることにより、変換済み部分パススキーマを抽出する。
図38は、複数検索式の変換例を示す説明図である。検索式K1=/syain/ACT/chara//と検索式K2=//nameとが与えられた場合、検索式K1および検索式K2を検索式Q1およびQ2に変換する。検索式Q1およびQ2は、検索式K1およびK2内の階層名を、それぞれ階層開始指示子『[』と固有の識別子とからなる記号列に変換し、これらを論理和(図中、「or」で表記)でつなげることにより表現される。
また、検索式Q1およびQ2から、これらの論理積(図中、「&」で表記)ととった検索式Q2&Q1を生成する。この場合、検索式Q1およびQ2から、検索式Q2&Q1に含まれる記号列([4,[6)を削除する。このように、3つの検索式Q1,Q2,Q2&Q1からそれぞれ1つずつ記号列を選択することにより、変換済み部分パススキーマを抽出する。
図39は、部分パススキーマの抽出例(その8)を示す説明図である。図39において、3つの検索式Q1,Q2,Q2&Q1から、それぞれ記号列[3,[4,[9が選ばれたとすると、変換済み部分パススキーマ3900が抽出される。
なお、選ばれなかった記号列は、検索式Q1,Q2,Q2&Q1においてそれぞれ選ばれた記号列の階層ノードに埋め込まれることとなる。たとえば、ヒット階層ノードn3には、階層開始指示子『[』をあらわすノードからの遷移先を特定するため、記号列[3,[5,[7が埋め込まれることとなる。
また、子階層ノードn4,n5を有するため、記号列[4,[5も階層終了指示子『/』をあらわすノードからの遷移先として埋め込まれることとなる。さらに、子階層ノードn5はヒット階層ノードではないため、その子階層ノードであるヒット階層ノードn6の記号列[6も階層終了指示子『/』をあらわすノードからの遷移先として埋め込まれる。
また、ヒット階層ノードn9には、階層開始指示子『[』をあらわすノードからの遷移先を特定するため、記号列[9が埋め込まれることとなる。また、ヒット階層ノードn4には、階層開始指示子『[』をあらわすノードからの遷移先を特定するため、記号列[4,[6が埋め込まれることとなる。また、ヒット階層ノードn4は子階層ノードn7を有するため、記号列[7も階層終了指示子『/』をあらわすノードからの遷移先として埋め込まれることとなる。
図40は、変換済み部分パススキーマ3900から得られる階層検索オートマトンを示す説明図である。図40において、階層検索オートマトン4000は、変換済み部分パススキーマ3900を構成する階層ノードn0,n3,n4,n9と、階層開始指示子『[』をあらわすノードと、階層終了指示子『/』をあらわすノードとから構成される。
階層検索オートマトン4000では、ルートノードn0に状態遷移している場合、階層開始指示子『[』が与えられると、そのノードに状態遷移する。一方、階層終了指示子『/』が与えられると、そのノードに状態遷移する。なお、タグ記号以外の文字が与えられると、ルートノードn0自身に状態遷移する。
また、階層検索オートマトン4000では、ヒット階層ノードn4に状態遷移している場合、階層開始指示子『[』が与えられると、そのノードに状態遷移する。一方、階層終了指示子『/』が与えられると、そのノードに状態遷移する。なお、タグ記号以外の文字が与えられると、ヒット階層ノードn4自身に状態遷移する。
また、階層検索オートマトン4000では、ヒット階層ノードn9に状態遷移している場合、階層開始指示子『[』が与えられると、そのノードに状態遷移する。一方、階層終了指示子『/』が与えられると、そのノードに状態遷移する。なお、タグ記号以外の文字が与えられると、ヒット階層ノードn9自身に状態遷移する。
また、階層検索オートマトン4000では、ヒット階層ノードn3に状態遷移している場合、階層開始指示子『[』が与えられると、そのノードに状態遷移する。一方、階層終了指示子『/』が与えられると、そのノードに状態遷移する。なお、タグ記号以外の文字が与えられると、ヒット階層ノードn3自身に状態遷移する。
また、ヒット階層ノードn4には、ヒット階層ノードn6の識別子『6』が埋め込まれているため、階層検索オートマトン4000では、階層開始指示子『[』をあらわすノードに状態遷移している場合、識別子『4』または『6』が与えられると、ヒット階層ノードn4に状態遷移する。
また、ヒット階層ノードn3には、ヒット階層ノードn3,n5およびn7の識別子『3』,『5』および『7』が埋め込まれているため、階層開始指示子『[』をあらわすノードに状態遷移している場合、識別子『3』,『5』または『7』が与えられると、ヒット階層ノードn3に状態遷移する。
同様に、ヒット階層ノードn9には、ヒット階層ノードn9の識別子『9』が埋め込まれているため、階層開始指示子『[』をあらわすノードに状態遷移している場合、識別子『9』が与えられると、ヒット階層ノードn9に状態遷移する。
一方、階層開始指示子『[』をあらわすノードに状態遷移している場合、それ以外の識別子(図中「?」で表記)が与えられると、ルートノードn0に状態遷移する。
また、ヒット階層ノードn4には、子階層ノードn7の識別子『7』が埋め込まれているため、階層検索オートマトン4000では、階層終了指示子『/』をあらわすノードに状態遷移している場合、識別子『7』が与えられると、ヒット階層ノードn4に状態遷移する。
また、ヒット階層ノードn4には、階層ノードn4,n5,n6の識別子『4』,『5』および『6』が埋め込まれているため、階層検索オートマトン4000では、階層終了指示子『/』をあらわすノードに状態遷移している場合、識別子『4』,『5』または『6』が与えられると、ヒット階層ノードn3に状態遷移する。
一方、階層終了指示子『/』をあらわすノードに状態遷移している場合、それ以外の識別子(図中「?」で表記)が与えられると、ルートノードn0に状態遷移する。
したがって、この第3の例では、単一オートマトンの生成に先立って、パススキーマを縮退させることができるため、単一オートマトンを保持するメモリ容量を削減することができる。またこれにより、プロセッサで処理を実行する場合、メモリサイズの削減を図ることができ、キャッシュミス率の低下が見込め、検索速度の高速化を実現することができる。また、階層検索オートマトンのサイズの縮小により、状態遷移回数が低減する。これにより、キャッシュミス率も低下するため、検索速度の高速化を実現することができる。
(第4の例)
第4の例は、階層指示子を開始タグと終了タグとで区別せず、同一記号を用いる場合の例である。具体的には、たとえば、階層終了指示子『/』を、階層開始指示子『[』に変え、識別子をタグ間文字列の識別子の親となる識別子を用いる。
図41は、パスIDへの変換例(その2)を示す説明図である。図41において、符号3201は変換前のXML文書であり、符号4100は変換済みXML文書である。たとえば、XML文書4100の4行目に着目すると、変換後の終了タグは、階層開始指示子『[』と、開始タグに埋め込まれている識別子『4』の親となる識別子『3』と、からなる記号列『[3』となる。他の変換後のタグも同様に変換される。なお、この場合の変換済み部分パススキーマは、図34に示した場合と同様である。
図42は、第4の例の階層検索オートマトンを示す説明図である。図42において、階層検索オートマトン4200は、ルートノードn0とヒット階層ノードn4と階層開始指示子『[』をあらわすノードから構成される。図35に示した階層検索オートマトン3500と比べると、階層終了指示子『/』をあらわすノードが削除されている分、オートマトンサイズが縮小される。
階層検索オートマトン4200では、ルートノードn0に状態遷移している場合、階層開始指示子『[』が与えられると、そのノードに状態遷移する。一方、階層開始指示子『[』以外の文字が与えられると、ルートノードn0自身に状態遷移する。
また、階層検索オートマトン4200では、ヒット階層ノードn4に状態遷移している場合、階層開始指示子『[』が与えられると、そのノードに状態遷移する。一方、階層開始指示子『[』以外の文字が与えられると、ヒット階層ノードn4自身に状態遷移する。
また、階層検索オートマトン4200では、階層開始指示子『[』をあらわすノードに状態遷移している場合、識別子『4』が与えられると、ヒット階層ノードn4に状態遷移する。一方、それ以外の識別子(図中「?」で表記)が与えられると、ルートノードn0に状態遷移する。
したがって、この第4の例では、単一オートマトンの生成に先立って、パススキーマを縮退させることができるため、単一オートマトンを保持するメモリ容量を削減することができる。またこれにより、プロセッサで処理を実行する場合、メモリサイズの削減を図ることができ、キャッシュミス率の低下が見込め、検索速度の高速化を実現することができる。また、階層検索オートマトンのサイズの縮小により、状態遷移回数が低減する。これにより、キャッシュミス率も低下するため、検索速度の高速化を実現することができる。
(情報検索処理手順)
つぎに、この発明の実施の形態3にかかる情報検索処理手順について説明する。図43は、この発明の実施の形態3にかかる情報検索処理手順を示すフローチャートである。図43において、図9に示したステップと同一処理内容については同一ステップ番号を付し、その説明を省略する。
図43において、ステップS902:Yesのあと、変換部407により、パスIDテーブル3100を用いて、タグ開始記号および階層名を変換する(ステップS4301)。したがって、図32または図41に示したような変換済みXML文書3202,4100が得られ、図33に示したような変換済みパススキーマ3300が生成されることとなる(ステップS908)。
また、ステップS909のあと、変換済みパススキーマ3300から変換済み部分パススキーマを抽出する(ステップS4302)。この場合、図34、図36または図39に示したように、変換済み部分パススキーマ3400,3602,3900が抽出されることとなる。
したがって、ステップS910において、図35,図37,図40または図42に示したように、変換済みの階層検索オートマトン3500,3700,4000,4200を有する変換済み単一オートマトンが生成されることとなる(ステップS910)。
このように、実施の形態3では、パススキーマ内のパスごとにタグ記号および固有の識別子を割り当てることにより、階層検索オートマトンのノード数を削減することができる。
したがって、単一オートマトンを保持するメモリ容量を削減することができる。またこれにより、プロセッサで処理を実行する場合、メモリサイズの削減を図ることができ、キャッシュミス率の低下が見込め、検索速度の高速化を実現することができる。また、階層検索オートマトンのサイズの縮小により、状態遷移回数が低減する。これにより、キャッシュミス率も低下するため、検索速度の高速化を実現することができる。
以上説明したように、本実施の形態によれば、階層検索用オートマトンとキーワード検索用オートマトンとの間のオーバーヘッドの低減を図ることにより、検索速度の向上を図ることができる。
なお、本実施の形態で説明した情報検索方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。このプログラムは、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVD等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。またこのプログラムは、インターネット等のネットワークを介して配布することが可能な伝送媒体であってもよい。
また、本実施の形態で説明した情報検索装置100は、スタンダードセルやストラクチャードASIC(Application Specific Integrated Circuit)などの特定用途向けIC(以下、単に「ASIC」と称す。)やFPGAなどのPLD(Programmable Logic Device)によっても実現することができる。具体的には、たとえば、上述した情報検索装置100の機能的構成(機能ブロックの各符号を入れる)をHDL記述によって機能定義し、そのHDL記述を論理合成してASICやPLDに与えることにより、情報検索装置100を製造することができる。
以上のように、本発明にかかる情報検索プログラム、該プログラムを記録した記録媒体、情報検索装置、および情報検索方法は、階層構造を有する電子文書の検索に有用であり、特に、XML文書やHTML文書などに適している。
本発明は、XML文書など階層構造を有する電子文書を検索する情報検索プログラム、該プログラムを記録した記録媒体、情報検索装置、および情報検索方法に関するものである。
近年、さまざまな分野で情報量が爆発的に増加している。ある分野においてはギガバイトオーダーからテラバイトオーダーになりつつあり、その莫大なデータから所望のデータを取り出すことが困難になりつつある。データは通常、管理のしやすさから階層構造を持たせて保存される。
たとえば、図書館で本を管理するには本という階層の下にタイトル、著者、出版社、出版日、貸し出し情報などといった階層を持たせることにより、ある本に対して、管理情報ごとに情報を引き出すことが可能となる。
階層構造を持つ膨大な電子文書から高速に所望のデータを取り出す場合、従来から、階層検索とキーワード検索とを別々のオートマトンを用いて実行している(たとえば、下記特許文献1を参照。)。
具体的には、階層検索オートマトンにおいて階層条件にヒットした場合にキーワード検索を実行するキーワード検索オートマトンで検索を実行し、逆にキーワード検索オートマトン実行中に階層をあらわす記号が出現した場合、再び階層検索オートマトンで階層条件を検索するという処理を繰り返し実行している。
しかしながら、上述した従来技術では、XML文書など階層をあらわす記号の出現頻度が高い電子文書を検索する場合、階層検索オートマトンを用いた検索処理とキーワード検索オートマトンを用いた検索処理との切り替え頻度が高くなり、オーバーヘッドが生じることとなる。したがって、全体として検索速度が低下してしまうという問題があった。
また、検索範囲を特定する複数の検索式を与えて同時に検索する場合に、すべての検索式を1つのオートマトンの中に生成するため、キーワードがヒットしたときに、現在の階層がそのヒットしたキーワードに対応する階層条件を満たしているかを判断する必要があった。したがって、高頻度でキーワードがヒットしてしまう場合、検索速度が低下してしまうという問題があった。
本発明は、上記に鑑みてなされたものであって、階層検索オートマトンとキーワード検索オートマトンとの間のオーバーヘッドの低減を図ることにより、検索速度の向上を図ることができる情報検索プログラム、該プログラムを記録した記録媒体、情報検索装置、および情報検索方法を提供することを目的とする。
上述した課題を解決し、目的を達成するために、この発明の情報検索プログラム、該プログラムを記録した記録媒体、情報検索装置、および情報検索方法は、検索対象となる階層構造を有する電子文書を取得し、取得された電子文書に関するパススキーマを生成し、任意の検索キーワードと当該検索キーワードの検索条件と前記検索キーワードの検索範囲を特定する検索式との入力を受け付け、生成されたパススキーマの階層を検索する階層検索オートマトンと、入力された検索キーワードの前記検索条件を満たすヒットキーワードを検索するキーワード検索オートマトンとからなり、前記階層検索オートマトンの中の前記ヒットキーワードが存在するヒット階層ノードと前記ヒットキーワードをあらわすノード集合との間で状態遷移する単一オートマトンを生成し、生成された単一オートマトンを用いて、前記電子文書の中から、前記検索範囲内の前記ヒットキーワードを検索し、検索された検索結果を出力することを特徴とする。
また、上記発明において、前記階層検索オートマトンは、遷移元となる上位の階層ノードとその遷移先となる下位の階層ノードとの間に開始タグの開始記号をあらわすノードを有し、前記上位の階層ノードに状態遷移している場合に前記開始記号が与えられると、前記開始記号をあらわすノードに状態遷移することとしてもよい。
また、上記発明において、前記階層検索オートマトンは、前記開始記号をあらわすノードと下位の階層ノードとの間に、前記下位の階層ノードの階層名をあらわす一連のノード群を有し、前記開始記号をあらわすノードに状態遷移している場合に任意の文字列が与えられると、ヒットミスする文字が出現するまで前記一連のノード群に対し状態遷移することとしてもよい。
また、上記発明において、前記パススキーマを構成する各階層ノードの階層名を固有の文字列に変換し、前記階層検索オートマトンを前記変換手段によって変換された固有の文字列を用いて構成することにより、前記単一オートマトンを生成し、前記開始記号をあらわすノードと下位の階層ノードとの間に、前記下位の階層ノードの階層名から変換された固有の文字列をあらわす一連のノード群を有し、前記開始記号をあらわすノードに状態遷移している場合に任意の文字列が与えられると、ヒットミスする文字が出現するまで前記一連のノード群に対し状態遷移することとしてもよい。
また、上記発明において、前記階層検索オートマトンは、ヒットミスする文字が出現した場合、前記上位の階層ノードに状態遷移することとしてもよい。
また、上記発明において、前記階層検索オートマトンは、前記一連のノード群の中の末尾ノードに状態遷移している場合に前記開始タグの終了記号が与えられると、前記下位の階層ノードに状態遷移することとしてもよい。
また、上記発明において、前記階層検索オートマトンは、遷移元となる下位の階層ノードとその遷移先となる上位の階層ノードとの間に終了タグの開始記号をあらわすノードを有し、前記下位の階層ノードに状態遷移している場合に前記開始記号が与えられると、前記開始記号をあらわすノードに状態遷移することとしてもよい。
また、上記発明において、前記階層検索オートマトンは、前記開始記号をあらわすノードと上位の階層ノードとの間に前記下位の階層ノードの階層名をあらわす一連のノード群を有し、前記開始記号をあらわすノードに状態遷移している場合に任意の文字列が与えられると、ヒットミスする文字が出現するまで前記一連のノード群に対し状態遷移することとしてもよい。
また、上記発明において、前記電子文書内の階層名を固有の文字列に変換し、前記階層検索オートマトンを前記変換手段によって変換された固有の文字列を用いて構成することにより、前記単一オートマトンを生成し、前記階層検索オートマトンは、前記開始記号をあらわすノードと上位の階層ノードとの間に前記下位の階層ノードの階層名から変換された固有の文字列をあらわす一連のノード群を有し、前記開始記号をあらわすノードに状態遷移している場合に任意の文字列が与えられると、ヒットミスする文字が出現するまで前記一連のノード群に対し状態遷移することとしてもよい。
また、上記発明において、前記階層検索オートマトンは、ヒットミスする文字が出現した場合、前記下位の階層ノードに状態遷移することとしてもよい。
また、上記発明において、前記階層検索オートマトンは、前記一連のノード群の中の末尾ノードに状態遷移している場合に前記開始タグの終了記号が与えられると、前記上位の階層ノードに状態遷移することとしてもよい。
また、上記発明において、前記単一オートマトンは、前記階層検索オートマトン内のヒット階層ノードに状態遷移している場合に前記ヒットキーワードの先頭文字が与えられると、前記キーワード検索オートマトン内の前記先頭文字に対応するノードに状態遷移することとしてもよい。
また、上記発明において、前記単一オートマトンは、前記キーワード検索オートマトン内のいずれかのノードに状態遷移している場合にヒットミスする文字が与えられると、前記ヒット階層ノードに状態遷移することとしてもよい。
また、上記発明において、前記パススキーマの中から、前記入力手段によって入力された検索式により特定される検索範囲に関する部分パススキーマを抽出し、抽出された部分パススキーマの階層を検索する階層検索オートマトンと、前記ヒットキーワードを検索するキーワード検索オートマトンとからなり、前記単一オートマトンを生成することとしてもよい。
また、上記発明において、前記検索式により特定されるパスが前記パススキーマ内に複数通り存在するか否かを判断し、判断された判断結果に基づいて、前記部分パススキーマを抽出することとしてもよい。
また、上記発明において、複数通り存在しないと判断された場合、前記パススキーマからルートノードと前記ヒット階層ノードとその子階層ノードとからなる部分パススキーマを抽出することとしてもよい。
また、上記発明において、複数通り存在すると判断された場合、さらに、前記複数通りのパスがどの配列パターンに該当するかを判断し、前記ヒット階層ノードと同一階層名となる他の階層ノードが前記ヒット階層ノードよりも上位階層に存在する配列パターンと判断された場合、ルートノードと、前記他の階層ノードと前記ヒット階層ノードとの間にのみ存在する中間階層ノードと、前記ヒット階層ノードと、からなる部分パススキーマを抽出することとしてもよい。
また、上記発明において、前記ヒット階層ノードと同一階層名となる他の階層ノードが前記ヒット階層ノードよりも上位階層に存在する配列パターンと判断された場合、ルートノードと、前記他の階層ノードと前記ヒット階層ノードとの間に存在する中間階層ノードと、前記ルートノードと前記他の階層ノードとの間に存在する前記中間階層ノードと同一階層名の他の中間階層ノードと、前記ヒット階層ノードと、からなる部分パススキーマを抽出することとしてもよい。
また、上記発明において、前記ヒット階層ノードと同一階層名となる他の階層ノードが前記ヒット階層ノードよりも下位階層に存在する配列パターンと判断された場合、ルートノードと、前記ヒット階層ノードと、当該ヒット階層ノードと前記他の階層ノードとの間に存在する子階層ノードと、からなる部分パススキーマを抽出することとしてもよい。
また、上記発明において、前記ヒット階層ノードと同一階層名となる他の階層ノードが前記ヒット階層ノードよりも上位階層に存在する分岐元の階層ノードから分岐されたパスに存在する配列パターンと判断された場合、ルートノードと、前記分岐元の階層ノードと前記ヒット階層ノードとの間にのみ存在する中間階層ノードと、前記ヒット階層ノードと、からなる部分パススキーマを抽出することとしてもよい。
また、上記発明において、前記ヒット階層ノードと同一階層名となる他の階層ノードが前記ヒット階層ノードよりも上位階層に存在する分岐元の階層ノードから分岐されたパスに存在する配列パターンと判断された場合、ルートノードと、前記分岐元の階層ノードと前記ヒット階層ノードとの間に存在しかつ前記分岐元の階層ノードと前記他の階層ノードとの間に存在しない中間階層ノードと、前記ルートノードと前記分岐元の階層ノードとの間に存在する前記中間階層ノードと同一階層名の他の中間階層ノードと、前記ヒット階層ノードと、からなる部分パススキーマを抽出することとしてもよい。
また、上記発明において、前記ヒット階層ノードと同一階層名となる他の階層ノードが前記ヒット階層ノードよりも上位階層に存在する分岐元の階層ノードから分岐されたパスに存在する配列パターンと判断された場合、ルートノードと、前記ヒット階層ノードと、前記分岐元の階層ノードと前記他の階層ノードとの間にのみ存在する分岐先の階層ノードと、からなる部分パススキーマを抽出することとしてもよい。
また、上記発明において、前記ヒット階層ノードと同一階層名となる他の階層ノードが前記ヒット階層ノードよりも上位階層に存在する分岐元の階層ノードから分岐されたパスに存在する配列パターンと判断された場合、ルートノードと、前記分岐元の階層ノードと前記他の階層ノードとの間に存在しかつ前記分岐元の階層ノードと前記ヒット階層ノードとの間に存在しない中間階層ノードと、前記ルートノードと前記分岐元の階層ノードとの間に存在する前記中間階層ノードと同一階層名の他の中間階層ノードと、前記ヒット階層ノードと、からなる部分パススキーマを抽出することとしてもよい。
また、上記発明において、前記ヒット階層ノードと同一階層名となる他の階層ノードが前記ヒット階層ノードよりも上位階層に存在する分岐元の階層ノードから分岐されたパスに存在すると判断された場合、ルートノードと、当該ルートノードと前記分岐元の階層ノードとの間に存在せずかつ前記分岐元の階層ノードと前記ヒット階層ノードとの間に存在する第1の中間階層ノードと、前記ルートノードと前記第1の中間階層ノードとの間に存在せずかつ前記分岐元の階層ノードと前記第1の中間階層ノードと同一階層名の第2の中間階層ノードのうち最上位の中間階層ノードとの間の第3の中間階層ノードと、からなる部分パススキーマを抽出することとしてもよい。
また、上記発明において、前記ヒット階層ノードと同一階層名となる他の階層ノードが前記ヒット階層ノードよりも上位階層に存在する分岐元の階層ノードから分岐されたパスに存在する配列パターンと判断された場合、ルートノードと、前記分岐元の階層ノードと前記ヒット階層ノードとの間に存在する第1の中間階層ノードと、前記分岐元の階層ノードと前記第1の中間階層ノードとの間に存在せずかつ前記分岐元の階層ノードと前記第1の中間階層ノードと同一階層名の第2の中間階層ノードのうち最上位の中間階層ノードとの間の第3の中間階層ノードと、からなる部分パススキーマを抽出することとしてもよい。
また、上記発明において、前記検索式に、前記ヒット階層ノードおよびその下位のすべての階層ノードを指定するワイルドカードが用いられている場合、ルートノードと、前記ヒット階層ノードと、からなる部分パススキーマを抽出することとしてもよい。
また、上記発明において、前記検索式に、任意の階層名を有するすべての階層ノードを指定するワイルドカードが用いられている場合、ルートノードと、前記階層名を有する階層ノードと、当該階層ノードの子階層ノードと、からなる部分パススキーマを抽出することとしてもよい。
また、上記発明において、ワイルドカードが用いられている検索式が複数存在する場合、前記検索式ごとに特定されるヒット階層ノードの論理和を取ることにより、部分パススキーマを抽出することとしてもよい。
また、上記発明において、前記部分パススキーマ内に階層名が同一のヒット階層ノードが共通の階層ノードから分岐されている場合、子階層ノードを有するヒット階層ノードに縮退させることにより、縮退済みの部分パススキーマを抽出することとしてもよい。
また、上記発明において、前記電子文書の各階層をあらわす開始タグを、階層開始指示子と前記パススキーマを構成するパスごとに割り振られた固有の識別子とからなる開始タグに変換するとともに、前記電子文書の各階層をあらわす終了タグを、階層終了指示子と前記パススキーマを構成するパスごとに割り振られた固有の識別子とからなる終了タグに変換し、変換後の電子文書に関するパススキーマを生成することとしてもよい。
また、上記発明において、生成された前記変換後の電子文書に関するパススキーマの中から、ルートノードと前記検索式により指定されたヒット階層ノードとからなる部分パススキーマを抽出し、前記階層検索オートマトンを前記部分パススキーマおよび当該部分パススキーマに用いられる前記階層指示子および前記固有の識別子を用いて構成することにより、前記単一オートマトンを生成することとしてもよい。
また、上記発明において、前記階層検索オートマトンは、前記ルートノードと前記ヒット階層ノードとの間に、前記階層開始指示子をあらわすノードを有し、当該階層開始指示子をあらわすノードに状態遷移している場合に前記ヒット階層ノードに関する固有の識別子が与えられると、前記ヒット階層ノードに状態遷移し、前記ヒット階層ノード以外の他の階層ノードに関する固有の識別子が与えられると、前記ルートノードに状態遷移することとしてもよい。
また、上記発明において、前記階層検索オートマトンは、前記ルートノードと前記ヒット階層ノードとの間に、前記階層終了指示子をあらわすノードを有し、当該階層終了指示子をあらわすノードに状態遷移している場合に前記ヒット階層ノードの子階層ノードに関する固有の識別子が与えられると、前記ヒット階層ノードに状態遷移し、前記子階層ノード以外の他の階層ノードに関する固有の識別子が与えられると、前記ルートノードに状態遷移することとしてもよい。
また、上記発明において、前記部分パススキーマが前記ルートノードから複数のヒット階層ノードへ分岐している場合、前記各ヒット階層ノードの固有の識別子をまとめることにより、前記ルートノードと前記固有の識別子がまとめられた単一のヒット階層ノードとからなる縮退済み部分パススキーマを抽出し、前記階層検索オートマトンを前記縮退済み部分パススキーマおよび当該縮退済み部分パススキーマに用いられる前記階層指示子および前記固有の識別子を用いて構成することにより、前記単一オートマトンを生成し、前記階層検索オートマトンは、前記ルートノードと前記ヒット階層ノードとの間に、前記階層開始指示子をあらわすノードを有し、当該階層開始指示子をあらわすノードに状態遷移している場合に前記ヒット階層ノードに関するいずれかの固有の識別子が与えられると、前記ヒット階層ノードに状態遷移し、前記ヒット階層ノード以外の他の階層ノードに関する固有の識別子が与えられると、前記ルートノードに状態遷移することとしてもよい。
また、上記発明において、前記検索式が複数存在する場合、前記パススキーマ生成手段によって生成された変換後の電子文書に関するパススキーマの中から、ルートノードと前記検索式により指定されたヒット階層ノードの論理和とからなる部分パススキーマを抽出し、前記階層検索オートマトンを、前記部分パススキーマのうち前記検索式により指定されたヒット階層ノードの中から選ばれた前記検索式ごとの代表ノードと、前記各検索式の論理積により指定されたヒット階層ノードの中から選ばれた代表ノードと、前記部分パススキーマに用いられる前記階層指示子および前記固有の識別子と、を用いて構成することにより、前記単一オートマトンを生成することとしてもよい。
また、上記発明において、前記電子文書の各階層をあらわす開始タグを、階層開始指示子と前記パススキーマを構成するパスごとに割り振られた固有の識別子とからなる開始タグに変換するとともに、前記電子文書の各階層をあらわす終了タグを、前記階層開始指示子と当該終了タグに対応する開始タグの階層名により特定される階層ノードの親ノードを末端とするパスに割り振られた固有の識別子とからなる開始タグに変換し、変換後の電子文書に関するパススキーマを生成することとしてもよい。
また、上記発明において、生成された前記変換後の電子文書に関するパススキーマの中から、ルートノードと前記検索式により指定されたヒット階層ノードとからなる部分パススキーマを抽出し、前記階層検索オートマトンを前記部分パススキーマおよび当該部分パススキーマに用いられる前記階層指示子および前記固有の識別子を用いて構成することにより、前記単一オートマトンを生成することとしてもよい。
また、上記発明において、前記階層検索オートマトンは、ルートノードと前記ヒット階層ノードとの間に、前記階層開始指示子をあらわすノードを有し、当該階層開始指示子をあらわすノードに状態遷移している場合に前記ヒット階層ノードに関する固有の識別子が与えられると、前記ヒット階層ノードに状態遷移し、前記ヒット階層ノード以外の他の階層ノードに関する固有の識別子が与えられると、前記ルートノードに状態遷移することとしてもよい。
また、上記発明において、前記階層検索オートマトンは、前記ヒット階層ノードに状態遷移している場合に前記階層開始指示子が与えられると、当該階層開始指示子をあらわすノードに状態遷移し、前記階層開始指示子以外のデータが与えられると、前記ヒット階層ノードに状態遷移することとしてもよい。
これらの発明によれば、階層検索オートマトンのノード数を削減することができる。また、階層検索オートマトンとキーワード検索オートマトン間の切り替え回数の低減化を図ることができる。
本発明にかかる情報検索プログラム、該プログラムを記録した記録媒体、情報検索装置、および情報検索方法は、階層検索用オートマトンとキーワード検索用オートマトンとの間のオーバーヘッドの低減を図ることにより、検索速度の向上を図ることができるという効果を奏する。
この発明の実施の形態1にかかる情報検索装置のハードウェア構成を示す説明図である。
この発明の実施の形態1にかかる検索対象となる電子文書を示す説明図である。
この発明の実施の形態1にかかるパススキーマを示す説明図である。
図1に示した情報検索装置の機能的構成を示すブロック図である。
この発明の実施の形態1にかかる単一オートマトンを示す説明図である。
変換テーブルを示す説明図である。
変換後のXML文書を示す説明図である。
変換済み単一オートマトンを示す説明図である。
この発明の実施の形態にかかる情報検索処理手順を示すフローチャートである。
この発明の実施の形態2にかかる検索対象となる電子文書の一例を示す説明図である。
この発明の実施の形態2にかかるパススキーマを示す説明図である。
部分パススキーマの抽出例(その1)を示す説明図である。
図12に示した部分パススキーマにより階層検索オートマトンを構成した場合の単一オートマトンを示す説明図である。
部分パススキーマの抽出例(その2)を示す説明図である。
図14に示した部分パススキーマにより階層検索オートマトンを構成した場合の単一オートマトンを示す説明図である。
この発明の実施の形態2にかかる情報検索装置の機能的構成を示すブロック図である。
配列パターンAを示す説明図である。
配列パターンBを示す説明図である。
配列パターンCが適用されるパススキーマを示す説明図である。
抽出パターンC−1により抽出された部分パススキーマを示す説明図である。
抽出パターンC−2により抽出された部分パススキーマを示す説明図である。
抽出パターンC−3により抽出された部分パススキーマを示す説明図である。
抽出パターンC−4により抽出された部分パススキーマを示す説明図である。
抽出パターンC−5により抽出された部分パススキーマを示す説明図である。
抽出パターンC−6により抽出された部分パススキーマを示す説明図である。
この発明の実施の形態2にかかる情報検索処理手順を示すフローチャートである。
抽出処理(ステップS2601,S2602)の詳細な処理手順を示すフローチャートである。
部分パススキーマの抽出例(その3)を示す説明図である。
部分パススキーマの抽出例(その4)を示す説明図である。
部分パススキーマの抽出例(その5)を示す説明図である。
パスIDテーブルを示す説明図である。
パスIDへの変換例(その1)を示す説明図である。
変換済みパススキーマを示す説明図である。
部分パススキーマの抽出例(その6)を示す説明図である。
変換済み部分パススキーマから得られる階層検索オートマトンを示す説明図である。
部分パススキーマの抽出例(その7)を示す説明図である。
変換済み部分パススキーマから得られる階層検索オートマトンを示す説明図である。
複数検索式の変換例を示す説明図である。
部分パススキーマの抽出例(その8)を示す説明図である。
変換済み部分パススキーマから得られる階層検索オートマトンを示す説明図である。
パスIDへの変換例(その2)を示す説明図である。
第4の例の階層検索オートマトンを示す説明図である。
この発明の実施の形態3にかかる情報検索処理手順を示すフローチャートである。
以下に添付図面を参照して、この発明にかかる情報検索プログラム、該プログラムを記録した記録媒体、情報検索装置、および情報検索方法の好適な実施の形態を詳細に説明する。
<実施の形態1>
(情報検索装置のハードウェア構成)
まず、この発明の実施の形態1にかかる情報検索装置のハードウェア構成について説明する。図1は、この発明の実施の形態1にかかる情報検索装置のハードウェア構成を示す説明図である。
図1において、情報検索装置100は、コンピュータ本体110と、入力装置120と、出力装置130と、から構成されており、不図示のルータやモデムを介してLAN,WANやインターネットなどのネットワーク140に接続可能である。
コンピュータ本体110は、CPU,メモリ,インターフェースを有する。CPUは、情報検索装置100の全体の制御を司る。メモリは、ROM,RAM,HD,光ディスク111,フラッシュメモリから構成される。メモリはCPUのワークエリアとして使用される。
また、メモリには各種プログラムが格納されており、CPUからの命令に応じてロードされる。HDおよび光ディスク111はディスクドライブによりデータのリード/ライトが制御される。また、光ディスク111およびフラッシュメモリはコンピュータ本体110に対し着脱自在である。インターフェースは、入力装置120からの入力、出力装置130への出力、ネットワーク140に対する送受信の制御をおこなう。
また、入力装置120としては、キーボード121、マウス122、スキャナ123などがある。キーボード121は、文字、数字、各種指示などの入力のためのキーを備え、データの入力をおこなう。また、タッチパネル式であってもよい。マウス122は、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などをおこなう。スキャナ123は、画像を光学的に読み取る。読み取られた画像は画像データとして取り込まれ、コンピュータ本体110内のメモリに格納される。なお、スキャナ123にOCR機能を持たせてもよい。
また、出力装置130としては、ディスプレイ131、プリンタ132、スピーカ133などがある。ディスプレイ131は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。また、プリンタ132は、画像データや文書データを印刷する。またスピーカ133は、効果音や読み上げ音などの音声を出力する。
(電子文書の一例)
つぎに、この発明の実施の形態1にかかる検索対象となる電子文書について説明する。図2は、この発明の実施の形態1にかかる検索対象となる電子文書を示す説明図である。
階層構造を有する電子文書としてXML文書200がある。XML文書200には、タグが埋め込まれており、このタグにより階層を表現する。タグは、開始タグと終了タグの2種類のタグがある。
本明細書では、タグを構成する記号をタグ記号と呼び、特に、『<』を開始タグのタグ開始記号、『</』を終了タグのタグ開始記号、『>』を開始タグおよび終了タグのタグ終了記号と呼ぶ。また、タグ開始記号とタグ終了記号との間に括られている文字列を階層名と呼ぶ。
(パススキーマの一例)
つぎに、この発明の実施の形態1にかかるパススキーマについて説明する。パススキーマとは、検索対象となるXML文書200中に存在するルートノードからのすべてのパスを抽出し、重複するパスを1本にまとめたパスツリーである。パスツリーのノードはXML文書200の階層をあらわしている。以降、パスツリーのノードを階層ノードと呼ぶ。
図3は、この発明の実施の形態1にかかるパススキーマを示す説明図である。図3に示したパススキーマ300は、図2に示したXML文書200に関するパススキーマである。図3において、階層ノードN0はルートノードである。階層ノードN1はsyainをあらわすノードである。階層ノードN2はACTをあらわすノードである。階層ノードN3はcharaをあらわすノードである。階層ノードN6はnameをあらわすノードである。
(情報検索装置の機能的構成)
つぎに、図1に示した情報検索装置100の機能的構成について説明する。図4は、図1に示した情報検索装置100の機能的構成を示すブロック図である。図4において、情報検索装置100は、取得部401と、パススキーマ生成部402と、入力部403と、オートマトン生成部404と、検索部405と、出力部406と、変換部407と、を備えている。
なお、これら各機能401〜407は、情報検索装置100内のメモリに格納された当該機能に関するプログラムを情報検索装置100内のプロセッサに実行させることにより、または、入出力I/Fにより、当該機能を実現することができる。
また、各機能からの出力データはメモリに保持される。また、図4中矢印で示した接続先の機能は、接続元の機能からの出力データをメモリから読み込んで、当該機能に関するプログラムを情報検索装置100内のプロセッサに実行させる。
まず、取得部401は、検索対象となる階層構造を有する電子文書を取得する機能を有する。具体的には、たとえば、XML文書200を読み込んだり、キーボード121を操作することで作成されたXML文書200を取り込む。
また、パススキーマ生成部402は、取得部401によって取得された電子文書に関するパススキーマを生成する機能を有する。具体的には、たとえば、XML文書200を取得した場合、XMLパーサを用いてXML文書200の構造を解析する。XMLパーサとしては、たとえば、DOMやSAX、または下記文献(1)に示されているXML走査器を用いることができる。これにより、図3に示したようなパススキーマを生成する。
石野明、武田正幸 著、「パスプルーニングによる決定性有限オートマトンを用いたXQuery処理の提案」、DBSJ Letters,Vol. 4, No. 4, pp. 17-20,2006.
http://www.dbsj.org/Japanese/DBSJLetters/vol4/no4/ishino.pdf
また、入力部403は、任意の検索キーワードと当該検索キーワードの検索条件と検索式との入力を受け付ける機能を有する。検索キーワードとは、ユーザが電子文書の中からユーザが拾いたいキーワードであり、文字や数字などの文字列により構成される。
検索条件とは、検索キーワードに対して与えられる条件である。単なるキーワード検索である場合、完全一致、前方一致、部分一致、後方一致、類似語などが検索条件となる。一方、数値範囲検索である場合、入力された数値の数値範囲(以上、以下など)が検索条件となる。
また、検索式とは、検索キーワードの検索範囲を特定する質問式である。検索キーワードは電子文書の中の検索範囲から検索されることとなる。また、検索範囲は、パススキーマ内のパスにより特定される。ここでは、検索範囲は、階層をあらわす要素名を記号「/」を介して羅列した検索式により表現することとする。
ここで、検索式の一例を示す。
/syain/ACT/chara/name = “ブルー”・・・(1)
上記検索式(1)の左辺は、階層ノードN0を始点として、syainをあらわす階層ノードN1、ACTをあらわす階層ノードN2、およびcharaをあらわす階層ノードN3を経由し、nameをあらわす階層ノードN6に到達するパスを表現している。この階層ノードN3を親ノードとする階層ノードN6の階層が検索範囲となる。一方、右辺は検索キーワードをあらわしている。
したがって、左辺で示された検索範囲の中から右辺で示された検索キーワードを検索することとなる。なお、検索範囲の階層ノードを「ヒット階層ノード」と称す。たとえば、上記検索式(1)の例では、階層ノードN3を親ノードとする階層ノードN6がヒット階層ノードとなる。また、検索範囲内において検索条件を満たすことにより検索キーワードに一致または関連することとなったキーワードを、「ヒットキーワード」と称す。上記検索式(1)の例では、「ブルー」がヒットキーワードとなる。
また、図4において、オートマトン生成部404は、階層検索オートマトンとキーワード検索オートマトンとを連結した単一オートマトンを生成する機能を有する。階層検索オートマトンとは、パススキーマ300の階層を検索するオートマトンであり、パススキーマ300を構成する階層ノードをそのままノードとして構成している。すなわち、階層検索オートマトンは、XML文書200の走査位置がパススキーマ300内のどの階層ノードに遷移しているかを判定するオートマトンである。
また、キーワード検索オートマトンは、検索条件を満たすヒットキーワードを検索するオートマトンである。具体的には、たとえば、ヒットキーワードの文字順に遷移する文字ごとのノードにより構成されている。すなわち、階層検索オートマトンは、XML文書200の走査位置がヒットキーワードのどの文字のノードに遷移しているかを判定するオートマトンである。
本実施の形態1では、階層検索オートマトンとキーワード検索オートマトンとを別々に扱うのではなく、階層検索オートマトンのヒット階層ノードとキーワード検索オートマトンのヒットキーワードのノード集合との間で状態遷移するように、ヒット階層ノードとヒットキーワードのノード集合とを遷移枝で連結することで、単一オートマトンを構成している。したがって、XML文書200の走査位置が階層検索オートマトンのヒット階層ノードに状態遷移したときに限り、キーワード検索オートマトンによる状態遷移をおこなう。
図5は、この発明の実施の形態1にかかる単一オートマトンを示す説明図である。この単一オートマトン500は、上記検索式(1)が与えられた場合のオートマトンである。図5において、階層ノードN0は初期状態をあらわす。階層検索オートマトン501の上半部は、上位の階層ノードから下位の階層ノードへの状態遷移をあらわしており、下半部は、下位の階層ノードから上位の階層ノードへの状態遷移をあらわしている。
まず、上半部の状態遷移について説明する。階層検索オートマトン501は、遷移元となる上位の階層ノードとその遷移先となる下位の階層ノードとの間に開始タグのタグ開始記号『<』をあらわすノードを有する。
たとえば、上位の階層ノードN0とその下位の階層ノードN1との間、上位の階層ノードN1とその下位の階層ノードN2との間、上位の階層ノードN2とその下位の階層ノードN3との間、上位の階層ノードN3とその下位の階層ノードN6との間に、開始タグのタグ開始記号『<』をあらわすノードを有する。そして、上位の階層ノードに状態遷移している場合にタグ開始記号『<』が与えられると、タグ開始記号『<』をあらわすノードに状態遷移する。
また、上位の階層ノードに状態遷移している場合にタグ開始記号『<』以外の文字が与えられると、当該上位の階層ノードに状態遷移する。たとえば、階層ノードN0に状態遷移している場合にタグ開始記号『<』以外の文字が与えられると、当該上位の階層ノードN0に状態遷移する。
また、タグ開始記号『<』をあらわすノードと下位の階層ノードとの間に、下位の階層ノードの階層名をあらわす一連のノード群を有する。たとえば、タグ開始記号『<』をあらわすノードと下位の階層ノードN1との間には、階層名の文字『s』、『y』、『a』、『i』、『n』をあらわす一連のノード群を有する。
また、タグ開始記号『<』をあらわすノードと下位の階層ノードN2との間には、階層名の文字『A』、『C』、『T』をあらわす一連のノード群を有する。また、タグ開始記号『<』をあらわすノードと下位の階層ノードN3との間には、階層名の文字『c』、『h』、『a』、『r』、『a』をあらわす一連のノード群を有する。
また、タグ開始記号『<』をあらわすノードと下位の階層ノードN6との間には、階層名の文字『n』、『a』、『m』、『e』をあらわす一連のノード群を有する。そして、タグ開始記号『<』をあらわすノードに状態遷移している場合に任意の文字列が与えられると、ヒットミスする文字が出現するまで一連のノード群に対し状態遷移する。
たとえば、階層ノードN0からタグ開始記号『<』をあらわすノードに状態遷移している場合、XML文書200の走査位置が文字「s」であるとすると、タグ開始記号『<』をあらわすノードから文字『s』をあらわすノードに状態遷移する。つぎの走査位置が文字「y」であるとすると、文字『s』をあらわすノードから文字『y』をあらわすノードに状態遷移する。このあとも、ヒットミスする文字が走査位置に出現するまで状態遷移を続ける。
そして、階層名の末尾文字をあらわすノードに状態遷移している場合、XML文書200の走査位置が記号『>』であるとすると、階層名の末尾文字をあらわすノードの末尾文字をあらわすノードから下位の階層ノードに状態遷移する。
たとえば、上位の階層ノードN0から階層名syainの末尾文字『n』に状態遷移している場合、XML文書200の走査位置が記号『>』であるとすると、階層名の末尾文字『n』をあらわすノードの末尾文字をあらわすノードから下位の階層ノードN1に状態遷移する。他の末尾文字『T』、『a』、『e』についても、それぞれ下位の階層ノードN2、N3、N6に状態遷移する。
また、上位の階層ノードと下位の階層ノードとの間のノードに状態遷移している場合、ヒットミスする文字が走査位置に出現すると、上位の階層ノードに状態遷移する。たとえば、上位の階層ノードN0と下位の階層ノードN1との間の文字『s』をあらわすノードに状態遷移している場合、文字『y』以外のヒットミスする文字が走査位置に出現すると、上位の階層ノードN1に状態遷移する。
つぎに、下半部の状態遷移について説明する。階層検索オートマトン501は、遷移元となる下位の階層ノードとその遷移先となる上位の階層ノードとの間に終了タグのタグ開始記号『</』をあらわすノードを有する。
たとえば、下位の階層ノードN6とその上位の階層ノードN3との間、下位の階層ノードN3とその上位の階層ノードN2との間、下位の階層ノードN2とその上位の階層ノードN1との間、下位の階層ノードN1とその上位の階層ノードN0との間に、終了タグのタグ開始記号『</』をあらわすノードを有する。そして、下位の階層ノードに状態遷移している場合にタグ開始記号『</』が与えられると、タグ開始記号『</』をあらわすノードに状態遷移する。
また、下位の階層ノードに状態遷移している場合にタグ開始記号『</』以外の文字が与えられると、当該下位の階層ノードに状態遷移する。たとえば、階層ノードN6に状態遷移している場合にタグ開始記号『</』以外の文字が与えられると、当該上位の階層ノードN6に状態遷移する。
また、タグ開始記号『</』をあらわすノードと上位の階層ノードとの間に、下位の階層ノードの階層名をあらわす一連のノード群を有する。たとえば、タグ開始記号『</』をあらわすノードと下位の階層ノードN3との間には、階層名の文字『n』、『a』、『m』、『e』をあらわす一連のノード群を有する。
また、タグ開始記号『</』をあらわすノードと下位の階層ノードN2との間には、階層名の文字『c』、『h』、『a』、『r』、『a』をあらわす一連のノード群を有する。また、タグ開始記号『</』をあらわすノードと下位の階層ノードN1との間には、階層名の文字『A』、『C』、『T』をあらわす一連のノード群を有する。
また、タグ開始記号『</』をあらわすノードと下位の階層ノードN0との間には、階層名の文字『s』、『y』、『a』、『i』、『n』をあらわす一連のノード群を有する。そして、タグ開始記号『</』をあらわすノードに状態遷移している場合に任意の文字列が与えられると、ヒットミスする文字が出現するまで一連のノード群に対し状態遷移する。
たとえば、階層ノードN6からタグ開始記号『</』をあらわすノードに状態遷移している場合、XML文書200の走査位置が文字『n』であるとすると、タグ開始記号『</』をあらわすノードから文字『n』をあらわすノードに状態遷移する。つぎの走査位置が文字『a』であるとすると、文字『n』をあらわすノードから文字『a』をあらわすノードに状態遷移する。このあとも、ヒットミスする文字が走査位置に出現するまで状態遷移を続ける。
そして、階層名の末尾文字をあらわすノードに状態遷移している場合、XML文書200の走査位置が記号『>』であるとすると、階層名の末尾文字をあらわすノードの末尾文字をあらわすノードから下位の階層ノードに状態遷移する。
たとえば、上位の階層ノードN6から階層名nameの末尾文字『n』に状態遷移している場合、XML文書200の走査位置が記号『>』であるとすると、階層名の末尾文字『n』をあらわすノードの末尾文字をあらわすノードから下位の階層ノードN3に状態遷移する。他の末尾文字『a』、『T』、『n』についても、それぞれ下位の階層ノードN2、N1、N0に状態遷移する。
また、下位の階層ノードと上位の階層ノードとの間のノードに状態遷移している場合、ヒットミスする文字が走査位置に出現すると、下位の階層ノードに状態遷移する。たとえば、下位の階層ノードN6と上位の階層ノードN3との間の文字『n』をあらわすノードに状態遷移している場合、文字『n』以外のヒットミスする文字が走査位置に出現すると、上位の階層ノードN6に状態遷移する。
つぎに、キーワード検索オートマトン502について説明する。キーワード検索オートマトン502は、ヒットキーワードを文字順に状態遷移する一連のノード群である。図5に示したように、ヒットキーワードが、検索キーワードと同一の「ブルー」である場合、『ブ』、『ル』、『ー』をあらわすノード群がその文字順に状態遷移するように連結されている。
階層検索オートマトン501とキーワード検索オートマトン502とは状態遷移するように連結されている。具体的には、階層検索オートマトン501内のヒット階層ノードに状態遷移している場合にヒットキーワードの先頭文字が与えられると、キーワード検索オートマトン502内の先頭文字をあらわすノードに状態遷移する。たとえば、ヒット階層ノードN6に状態遷移している場合にヒットキーワード「ブルー」の先頭文字『ブ』が与えられると、キーワード検索オートマトン502内の先頭文字『ブ』をあらわすノードに状態遷移する。
また、キーワード検索オートマトン502内のいずれかのノードに状態遷移している場合にヒットミスする文字が与えられると、ヒット階層ノードに状態遷移する。たとえば、先頭文字『ブ』をあらわすノードに状態遷移している場合に遷移先のノードをあらわす文字『ル』以外のヒットミスする文字が走査位置に出現すると、ヒット階層ノードN6に状態遷移する。
また、ヒットキーワードにヒットした場合もヒット階層ノードに状態遷移することで、XML文書200の走査を継続することができる。たとえば、文字『ー』をあらわすノードに状態遷移すると、ヒットキーワードにマッチすることになるが、このとき、ヒット階層ノードN6に状態遷移する。
このように、XML文書200の走査位置が階層検索オートマトン501のヒット階層ノードに状態遷移したときに限り、キーワード検索オートマトン502に状態遷移するため、階層検索オートマトン501とキーワード検索オートマトン502との間の処理の切り替え頻度の低減化を図ることができる。
同様に、ヒットキーワードにマッチしないと、ただちにヒット階層ノードに状態遷移するため、ヒット階層ノードにより特定される検査範囲内の文字列のみを集中的に検索することができる。
また、図4において、検索部405は、単一オートマトン500を用いて、電子文書の中から、検索範囲内のヒットキーワードを検索する機能を有する。具体的には、XML文書200を走査し、その走査位置がどの階層であるかを階層検索オートマトン501により判定する。そして、ヒット階層ノードに状態遷移した場合、XML文書200の走査位置がヒットキーワードのどの文字であるかをキーワード検索オートマトン502により判定する。
出力部406は、キーワード検索オートマトン502においてヒットキーワードにマッチした場合、そのマッチした文字列を検索結果として出力する機能を有する。この出力処理には、ディスプレイ131による画面表示やプリンタ132による印刷出力、音声による読み上げ、半導体メモリやHDへの格納、他のコンピュータ装置への送信などがある。
また、変換部407は、パススキーマ300を構成する各階層ノードの階層名を文字数の少ない固有の文字列に変換する機能を有する。具体的には、取得部401により取得された電子文書内の階層名を固有の文字列に変換しておくことで、パススキーマ生成部402により生成されるパススキーマも固有の文字列を用いたパスツリーとなる。
ここで、固有の文字列とは、階層名よりも文字数が少なければよく、1文字にするのが最適である。ここでは、階層名ごとに1文字分の固有数字を割り当てることにより、変換処理を実現する。
図6は、変換テーブルを示す説明図である。この変換テーブル600を用いることにより、階層名を個有数字に変換することができる。図7は、変換後のXML文書を示す説明図である。図7のXML文書700は、図2に示したXML文書200を変換テーブル600を用いて変換したXML文書である。
図8は、変換済み単一オートマトンを示す説明図である。図8の変換済み単一オートマトン800は、図5と同様、上記検索式(1)が与えられた場合のオートマトンであるが、階層名が固有数字に置き換えられた階層検索オートマトン801となっている。すなわち、遷移元の階層ノードと遷移先の階層ノードとの間のノードがタグ開始記号をあらわすノードと固有数字をあらわすノードのみとなっているため、状態遷移回数の低減化を図ることができ、検索速度の高速化を図ることができる。
(情報検索処理手順)
つぎに、この発明の実施の形態にかかる情報検索処理手順について説明する。図9は、この発明の実施の形態にかかる情報検索処理手順を示すフローチャートである。図9において、まず、取得部401により階層構造を有する電子文書(XML文書200)を取得する(ステップS901)。
そして、変換部407による変換処理をおこなうか否かを判断する(ステップS902)。変換しないと判断された場合(ステップS902:No)、パススキーマ生成部402によりパススキーマ300を生成する(ステップS903)。つぎに、検索キーワードとその検索条件と検索式とが入力されるのを待ち受ける(ステップS904:No)。
検索キーワードとその検索条件と検索式とが入力された場合(ステップS904:Yes)、オートマトン生成部404により単一オートマトン500を生成し(ステップS905)、この単一オートマトン500を用いて検索をおこなう(ステップS906)。このあと、ステップS912に移行する。
一方、ステップS902において、変換すると判断された場合(ステップS902:Yes)、電子文書(XML文書200)内の階層名を変換テーブル600にしたがって変換する(ステップS907)。そして、パススキーマ生成部402により変換済みパススキーマを生成する(ステップS908)。つぎに、検索キーワードとその検索条件と検索式とが入力されるのを待ち受ける(ステップS909:No)。
検索キーワードとその検索条件と検索式とが入力された場合(ステップS909:Yes)、オートマトン生成部404により変換済み単一オートマトン800を生成し(ステップS910)、この変換済み単一オートマトン800を用いて検索をおこなう(ステップS911)。このあと、ステップS912に移行する。最後に、出力部406により検索結果を出力する(ステップS912)ことにより、一連の処理を終了する。
このように、実施の形態1によれば、階層検索オートマトン501(801)とキーワード検索オートマトン502との間の処理の切り替え頻度の低減化を図ることができる。また、ヒットキーワードにマッチしないと、ただちにヒット階層ノードに状態遷移するため、ヒット階層ノードにより特定される検査範囲内の文字列のみを集中的に検索することができる。またこれにより、ハードウェア化が容易となる。
<実施の形態2>
つぎに、実施の形態2について説明する。実施の形態1では、パススキーマから得られるパスをすべてオートマトンで表現しているが、実施の形態2は、ルートノードからヒット階層ノードに一意に到達することができるパスツリーとなる部分パススキーマをパススキーマから抽出する。これにより、生成される単一オートマトン内の階層検索オートマトンのサイズを縮小することができる。
なお、実施の形態1で示した構成と同一構成については同一符号を付し、その説明を省略する。また、説明を簡略化するため、特に断りがない限り、変換テーブル600を用いた場合と用いない場合とを区別せずに説明する。
(電子文書の一例)
つぎに、この発明の実施の形態2にかかる検索対象となる電子文書について説明する。図10は、この発明の実施の形態2にかかる検索対象となる電子文書の一例を示す説明図である。XML文書1000は、検索対象となる電子文書である。
(パススキーマの一例)
つぎに、この発明の実施の形態2にかかるパススキーマについて説明する。図11は、この発明の実施の形態2にかかるパススキーマを示す説明図である。図11に示したパススキーマ1100は、図10に示したXML文書1000に関するパススキーマである。
図11のパススキーマ1100において、階層ノードN0はルートノードである。階層ノードN1は階層名syainをあらわすノードである。階層ノードN2は階層名ACTをあらわすノードである。階層ノードN3は階層名charaをあらわすノードである。階層ノードN4は階層名nickをあらわすノードである。階層ノードN5は階層名castをあらわすノードである。階層ノードN7は階層名IDをあらわすノードである。
なお、階層名nameをあらわす同一の階層ノードN6は3つあるが、説明上それぞれを区別するために、階層ノードN4の子階層ノードを階層ノードN6a、階層ノードN3の子階層ノードを階層ノードN6b、階層ノードN5の子階層ノードを階層ノードN6cとする。つぎに、部分パススキーマの抽出例について説明する。
(部分パススキーマの抽出例)
図12は、部分パススキーマの抽出例(その1)を示す説明図である。図12において、下記検索式(2)が与えられた場合、syain,ACT,castを通るパスP1を部分パススキーマ1200として抽出する。このパスP1はユニークなパスであるため、階層ノードN0とcastをあらわす階層ノードN5とその子ノードであるnameをあらわす階層ノードN6cとからなるパスツリーが部分パススキーマとして抽出される。一方、途中のsyain,ACTをあらわす階層ノードは削除される。また、パスP1から外れた階層ノードも当然削除される。
/syain/ACT/cast = ブルー・・・(2)
図13は、図12に示した部分パススキーマ1200により階層検索オートマトンを構成した場合の単一オートマトンを示す説明図である。この単一オートマトン1300において、階層検索オートマトン1301には、部分パススキーマ1200を構成していない階層ノードN1〜N4,N7が含まれていないため、階層検索オートマトン1301のサイズ縮小化を図ることができる。これにより、状態遷移回数を削減することができるため、検索速度の向上を図ることができる。
図14は、部分パススキーマの抽出例(その2)を示す説明図である。図14において、下記検索式(3)が与えられた場合、syain,ACT,cast,chara,nameを通るパスを部分パススキーマ1400として抽出する。パスP1,P2は、階層ノードN2まで共通するため、階層ノードN1,N2は削除される。
また、階層ノードN6aはヒット階層ノードではないので、削除される。階層ノードN4は階層ノードN3からの分岐先を特定するために残しておく。階層ノードN6bはヒット階層ノードであるため残しておく。階層ノードN7は階層ノードN6bの子階層ノードであるため残しておく。階層ノードN5,N6cはパスP2,P3外なので削除される。
/syain/ACT/cast/chara/name = ブルー・・・(3)
図15は、図14に示した部分パススキーマ1400により階層検索オートマトンを構成した場合の単一オートマトン1500を示す説明図である。階層検索オートマトン1501には、部分パススキーマ1400を構成していない階層ノードN1,N2,N5が含まれていないため、階層検索オートマトン1501のサイズ縮小化を図ることができる。これにより、状態遷移回数を削減することができるため、検索速度の向上を図ることができる。
(情報検索装置100の機能的構成)
図16は、この発明の実施の形態2にかかる情報検索装置100の機能的構成を示すブロック図である。図16において、図4の示した機能401〜407のほかに、抽出部1601と判断部1602とを備える。
なお、これら各機能1601,1602は、情報検索装置100内のメモリに格納された当該機能に関するプログラムを情報検索装置100内のプロセッサに実行させることにより、または、入出力I/Fにより、当該機能を実現することができる。
また、各機能1601,1602からの出力データはメモリに保持される。また、図16中矢印で示した接続先の機能は、接続元の機能からの出力データをメモリから読み込んで、当該機能に関するプログラムを情報検索装置100内のプロセッサに実行させる。
図16において、抽出部1601は、パススキーマの中から、検索式により特定される検索範囲に関する部分パススキーマを抽出する。具体的には、検索式により特定されるパスが1通り、すなわちユニークパスである場合、パススキーマからルートノードとヒット階層ノードとその子階層ノードとからなるパスツリーを部分パススキーマとして抽出する。たとえば、図12に示したように、部分パススキーマ1200を抽出する。
一方、検索式により特定されるパスが複数通りある場合、その複数通りのパスの配列パターンに応じて部分パススキーマを抽出する。具体的な抽出例については、判断部1602の説明で述べる。
いずれにしても、オートマトン生成部404では、図13および図15に示したように、部分パススキーマ1200,1400の階層を検索する階層検索オートマトン1301,1501と、ヒットキーワードを検索するキーワード検索オートマトン502とからなる単一オートマトン1300,1500を生成する。
また、判断部1602は、検索式により特定されるパスがパススキーマ1100内に複数通り存在するか否かを判断する。具体的には、検索式の末尾の階層名をあらわすノードが複数あるか否かにより、パスが複数通りあるか否かを判断することができる。たとえば、図12に示したように、パススキーマ1100から検索式(2)により特定されるパスはパスP1のみであると判断され、パスP1はユニークパスとなる。一方、図14に示したように、パススキーマ1100から検索式(3)により特定されるパスはパスP2,P3の2通りであると判断される。
また、判断部1602は、複数通りあると判断された場合、その複数通りのパスの配列パターンがどの配列パターンに該当するか否かを判断する。以下、配列パターン例について説明する。
図17は、配列パターンAを示す説明図である。配列パターンAは、ヒット階層ノードと同一階層名となる類似ノードがヒット階層ノードよりも上位階層に存在する配列パターンである。図17において、たとえば、検索式が「/a/b/name」である場合、パススキーマ1700の階層ノードN0〜N4までのパスと階層ノードN0〜N8までのパスが特定される。ここで、階層ノードN4,N8のうち階層ノードN8をヒット階層ノードとすると、階層ノードN4は類似ノードとなる。
配列パターンAの場合、抽出パターンA−1,A−2がある。抽出パターンA−1では、ルートノードN0と、類似ノードとヒット階層ノードとの間にのみ存在する中間階層ノードと、ヒット階層ノードと、からなる部分パススキーマを抽出する。
この抽出パターンA−1にしたがうと、ルートノードN0と、集合Yにのみ存在する中間階層ノードN5と、ヒット階層ノードN8と、からなる部分パススキーマ1701を抽出することができる。同様に、ルートノードN0と、中間階層ノードN7と、ヒット階層ノードN8と、からなる部分パススキーマ1702を抽出することができる。
一方、抽出パターンA−2では、ルートノードN0と、類似ノードとヒット階層ノードとの間に存在する中間階層ノードと、ルートノードN0と類似ノードとの間に存在し中間階層ノードと同一階層名である他の中間階層ノードと、ヒット階層ノードと、からなる部分パススキーマを抽出する。
この抽出パターンA−2にしたがうと、ルートノードN0と、集合Yに存在する中間階層ノードN6と、集合Xに存在する他の中間階層ノードN2と、ヒット階層ノードN8と、からなる部分パススキーマ1703を抽出することができる。
なお、中間階層ノードとしてルートノードN0から階層の深いノードを選んでおくと、他の類似ノードに対する中間階層ノードとしても利用することができ、ノード数の削減を図ることができる。
図18は、配列パターンBを示す説明図である。配列パターンBは、ヒット階層ノードと同一階層名となる他の階層ノードがヒット階層ノードよりも下位階層に存在する配列パターンである。図18において、たとえば、検索式が「/a/b/name」である場合、パススキーマ1700の階層ノードN0〜N4までのパスと階層ノードN0〜N8までのパスが特定される。ここで、階層ノードN4,N8のうち階層ノードN4をヒット階層ノードとすると、階層ノードN8は類似ノードとなる。
配列パターンBの場合、抽出パターンB−1がある。抽出パターンB−1では、ルートノードN0と、ヒット階層ノードと、当該ヒット階層ノードと類似ノードとの間に存在する子階層ノードと、からなる部分パススキーマを抽出する。
この抽出パターンB−1にしたがうと、ルートノードN0と、ヒット階層ノードN4と、集合Y(当該ヒット階層ノードN4と類似ノードN8との間)に存在する子階層ノードN5,N6またはN7と、からなる部分パススキーマ1801〜1803を抽出することができる。
図19は、配列パターンCが適用されるパススキーマを示す説明図である。配列パターンCは、類似ノードがヒット階層ノードよりも上位階層に存在する分岐元の階層ノードから分岐されたパスに存在する配列パターンである。図19において、たとえば、検索式が「/a/b/name」である場合、パススキーマ1900の階層ノードN0〜N7までのパスと階層ノードN0〜N3,N8〜N15までのパスが特定される。ここで、階層ノードN7,N15のうち階層ノードN7をヒット階層ノードとすると、階層ノードN15は類似ノードとなる。
配列パターンCの場合、抽出パターンC−1〜C−6がある。抽出パターンC−1では、ルートノードN0と、分岐元の階層ノードとヒット階層ノードとの間にのみ存在する中間階層ノードと、ヒット階層ノードと、からなる部分パススキーマを抽出する。
図20は、抽出パターンC−1により抽出された部分パススキーマを示す説明図である。この抽出パターンC−1では、ルートノードN0と、分岐元の階層ノードとヒット階層ノードとの間にのみ存在する中間階層ノードと、ヒット階層ノードと、からなる部分パススキーマを抽出する。
この抽出パターンC−1にしたがうと、ルートノードN0と、集合Y(分岐元の階層ノードN3とヒット階層ノードN7との間)にのみ存在する中間階層ノードN4と、ヒット階層ノードN7と、からなる部分パススキーマ2000を抽出することができる。
なお、図19に示した集合Yにおいて、階層ノードN5は、同一階層名bの階層ノードN2が集合Xに存在し、また、同一階層名bの階層ノードN10が集合Zに存在するため、選ばれない。同様に、階層ノードN6は、同一階層名bの階層ノードN12,N13が集合Zに存在するため選ばれない。
図21は、抽出パターンC−2により抽出された部分パススキーマを示す説明図である。この抽出パターンC−2では、ルートノードN0と、分岐元の階層ノードとヒット階層ノードとの間に存在しかつ分岐元の階層ノードと類似ノードとの間に存在しない中間階層ノードと、ルートノードと分岐元の階層ノードとの間に存在する中間階層ノードと同一階層名の他の中間階層ノードと、ヒット階層ノードと、からなる部分パススキーマを抽出する。
この抽出パターンC−2にしたがうと、ルートノードN0と、集合Y(分岐元の階層ノードN3とヒット階層ノードN7との間)に存在しかつ集合Z(分岐元の階層ノードN3と類似ノードN15との間)に存在しない中間階層ノードN5と、集合X(ルートノードN0と分岐元の階層ノードN3との間)に存在する中間階層ノードN5と同一階層名の他の中間階層ノードN2と、ヒット階層ノードN7と、からなる部分パススキーマ2100を抽出することができる。
図22は、抽出パターンC−3により抽出された部分パススキーマを示す説明図である。この抽出パターンC−3では、ルートノードN0と、ヒット階層ノードと、分岐元の階層ノードと類似ノードとの間にのみ存在する分岐先の階層ノードと、からなる部分パススキーマを抽出する。
この抽出パターンC−3にしたがうと、ルートノードN0と、ヒット階層ノードN7と、集合Z(分岐元の階層ノードN3と類似ノードN15との間)にのみ存在する分岐先の階層ノードN8,N9またはN11と、からなる部分パススキーマ2201〜2203を抽出することができる。
図23は、抽出パターンC−4により抽出された部分パススキーマを示す説明図である。この抽出パターンC−4では、ルートノードN0と、分岐元の階層ノードと類似ノードとの間に存在しかつ分岐元の階層ノードとヒット階層ノードとの間に存在しない中間階層ノードと、ルートノードN0と分岐元の階層ノードとの間に存在する中間階層ノードと同一階層名の他の中間階層ノードと、ヒット階層ノードと、からなる部分パススキーマを抽出する。
この抽出パターンC−4にしたがうと、ルートノードN0と、集合Z(分岐元の階層ノードN3と類似ノードN15との間)に存在しかつ集合Y(分岐元の階層ノードN3とヒット階層ノードN7との間)に存在しない中間階層ノードN14と、集合X(ルートノードN0と分岐元の階層ノードN3との間)に存在する中間階層ノードN14と同一階層名の他の中間階層ノードN1と、ヒット階層ノードN7と、からなる部分パススキーマ2300を抽出することができる。
図24は、抽出パターンC−5により抽出された部分パススキーマを示す説明図である。この抽出パターンC−5では、ルートノードN0と、当該ルートノードN0と分岐元の階層ノードとの間に存在せずかつ分岐元の階層ノードとヒット階層ノードとの間に存在する第1の中間階層ノードと、ルートノードN0と第1の中間階層ノードとの間に存在せずかつ第1の中間階層ノードと同一階層名の第2の中間階層ノードのうち最上位の中間階層ノードと分岐元の階層ノードとの間の第3の中間階層ノードと、からなる部分パススキーマを抽出する。
この抽出パターンC−5にしたがうと、ルートノードN0と、当該ルートノードN0と集合X(分岐元の階層ノードN3との間)に存在せずかつ集合Y(分岐元の階層ノードN3とヒット階層ノードN7との間)に存在する第1の中間階層ノードN6と、ルートノードN0と第1の中間階層ノードN6との間に存在せずかつ第1の中間階層ノードN6と同一階層名の第2の中間階層ノードN13,N14のうち最上位の中間階層ノードN13と分岐元の階層ノードN3との間の第3の中間階層ノードN8,N9またはN11と、からなる部分パススキーマ2401〜2403を抽出することができる。
図25は、抽出パターンC−6により抽出された部分パススキーマを示す説明図である。この抽出パターンC−6では、ルートノードN0と、分岐元の階層ノードとヒット階層ノードとの間に存在する第1の中間階層ノードと、分岐元の階層ノードと第1の中間階層ノードとの間に存在せずかつ第1の中間階層ノードと同一階層名の第2の中間階層ノードのうち最上位の中間階層ノードと分岐元の階層ノードとの間の第3の中間階層ノードと、からなる部分パススキーマを抽出する。
この抽出パターンC−6にしたがうと、ルートノードN0と、集合Y(分岐元の階層ノードN3とヒット階層ノードN7との間)に存在する第1の中間階層ノードN5と、分岐元の階層ノードN3と第1の中間階層ノードN5との間に存在せずかつ第1の中間階層ノードN5と同一階層名の第2の中間階層ノードN10のうち最上位の中間階層ノードN10と分岐元の階層ノードN3との間の第3の中間階層ノードN8またはN9と、からなる部分パススキーマ2501〜2503を抽出することができる。
(情報検索処理手順)
つぎに、この発明の実施の形態2にかかる情報検索処理手順について説明する。図26は、この発明の実施の形態2にかかる情報検索処理手順を示すフローチャートである。図26において、図9に示したステップと同一処理内容については同一ステップ番号を付し、その説明を省略する。
図26において、ステップS904とステップS905との間において、抽出処理を実行する(ステップS2601)。この抽出処理(ステップS2601)は、上述した判断部1602および抽出部1601により実行される。このため、ステップS905の単一オートマトン生成では、抽出処理(ステップS2601)により抽出された部分パススキーマを用いて構成された階層検索オートマトンとキーワード検索オートマトン502とからなる単一オートマトンを生成することとなる。
同様に、ステップS909とステップS910との間においても、抽出処理を実行する(ステップS2602)。この抽出処理(ステップS2602)も、上述した判断部1602および抽出部1601により実行される。このため、ステップS910の変換済み単一オートマトン生成では、抽出処理(ステップS2602)により抽出された変換済み部分パススキーマを用いて構成された変換済み階層検索オートマトンとキーワード検索オートマトン502とからなる変換済み単一オートマトンを生成することとなる。
つぎに、上述した抽出処理(ステップS2601,S2602)の詳細な処理手順について説明する。図27は、抽出処理(ステップS2601,S2602)の詳細な処理手順を示すフローチャートである。図27において、まず、検索式からルートノードおよびヒット階層ノードを特定し(ステップS2701)、検索式により特定されるパスが複数通りあるか否かを判断する(ステップS2702)。
複数通りない場合(ステップS2702:No)、図12に示したように、そのパスにより特定される部分パススキーマ(または変換済み部分パススキーマ)をパススキーマ(変換済みパススキーマ)から抽出する(ステップS2703)。これにより、ステップS905(S910)に移行する。
一方、複数通りある場合(ステップS2702:Yes)、該当する配列パターンを特定し(ステップS2704)、抽出パターンを選択する(ステップS2705)。抽出パターンの選択はランダムにおこなってもよく、また優先順位をつけて選択してもよい。
このあと、選択された抽出パターンにしたがって部分パススキーマ(または変換済み部分パススキーマ)をパススキーマ(変換済みパススキーマ)から抽出して(ステップS2706)、ステップS905(S910)に移行する。これにより、一連の処理を終了する。
(ワイルドカード検索)
つぎに、ワイルドカード検索について説明する。ワイルドカードとは、検索する際にどんなパターンにもマッチする特殊文字であり、検索式の組み方により、2通りの検索範囲が特定される。ここでは、検索式中において、ワイルドカードを『//』で表記する。
まず、X//のように、ワイルドカードが末尾に記述されている検索式の場合、ヒット階層ノードとしてXを階層名とする階層ノードのみを選択する。図28は、部分パススキーマの抽出例(その3)を示す説明図である。図11に示したパススキーマ1100を例にあげると、下記検索式(4)が与えられた場合、ルートノードN0とヒット階層ノードN3とからなる部分パススキーマ2800を抽出することができ、サイズの縮小を図ることができる。なお、フラグが立っている階層ノードは検索対象となる階層ノードである。
/syain/ACT/chara//・・・(4)
また、//Xのように、ワイルドカードが末尾に記述されていない検索式の場合、ヒット階層ノードとして、上記文献(1)に示したパスプルーニング手法により導き出される階層ノードとその子階層ノードを選択する。図29は、部分パススキーマの抽出例(その4)を示す説明図である。図11に示したパススキーマ1100を例にあげると、下記検索式(5)が与えられた場合、ルートノードN0とヒット階層ノードN6(N6a,N6b,N6c)とからなる部分パススキーマ2900を抽出することができる。なお、フラグが立っている階層ノードは検索対象となる階層ノードである。
//name・・・(5)
また、検索式が複数与えられる場合もある。この場合、すべての検索式から得られるノードを網羅するように、ヒット階層ノードやその子階層ノードを特定する。具体的には、各検索式の論理和を取ることにより、部分パススキーマを抽出する。
図30は、部分パススキーマの抽出例(その5)を示す説明図である。図30に示した抽出例は、上述した検索式(4),(5)が与えられた場合の抽出例である。この場合、ルートノードN0とヒット階層ノードN3,N6(N6a,N6b,N6c)とからなる部分パススキーマ3000を抽出することができ、サイズの縮小を図ることができる。なお、フラグが立っている階層ノードは検索対象となる階層ノードである。
また、ヒット階層ノードN6a,N6bは階層ノードN3からの分岐先ノードであるため、この2本のパスを1本にまとめることができる。具体的には、子階層ノードを有するヒット階層ノードN6bに縮退させる。部分パススキーマ3001は、縮退済み部分パススキーマである。これにより、さらにサイズの縮小を図ることができる。
このように、実施の形態2によれば、ルートノードからヒット階層ノードに一意に到達することができるパスツリーとなる部分パススキーマをパススキーマから抽出するため、階層検索オートマトンの生成元を、ノード数が削減された部分パススキーマに絞り込むことができる。したがって、生成される単一オートマトン内の階層検索オートマトンのサイズを縮小することができる。
階層検索オートマトンのサイズが縮小されると、単一オートマトンを保持するメモリ容量を削減することができる。またこれにより、プロセッサで処理を実行する場合、メモリサイズの削減を図ることができ、キャッシュミス率の低下が見込め、検索速度の高速化を実現することができる。また、階層検索オートマトンのサイズの縮小により、状態遷移回数が低減する。これにより、キャッシュミス率も低下するため、検索速度の高速化を実現することができる。
<実施の形態3>
つぎに、実施の形態3について説明する。実施の形態1では、図6に示した変換テーブル600により、電子文書内の階層名ごとに固有の文字列に変換することで階層検索オートマトンのノード数を削減しているが、実施の形態3では、パススキーマ内のパスごとにタグ記号および固有の識別子を割り当てることにより、階層検索オートマトンのノード数を削減する。
たとえば、図11に示したパススキーマ1100の場合、階層名nameをあらわす階層ノードをヒット階層ノードとするパスは3本存在するが、パスごとに異なる識別子を割り当てることにより、電子文書読み出し時にその識別子を検出するだけでパスを判別することができる。なお、実施の形態1,2で示した構成と同一構成については同一符号を付し、その説明を省略する。
(第1の例)
(パスIDテーブル)
図31は、パスIDテーブル3100を示す説明図である。図31において、パスIDテーブル3100はパスごとにパスIDが割り振られている。このパスIDテーブル3100は、電子文書を読み込んだときに作成される。
具体的には、パスIDテーブル3100にパスIDが割り振られていないパスが検出された場合、その検出されたパスに対して固有のパスIDを割り振る。一方、パスIDが割り振られているパスが検出された場合には、電子文書のタグを変換する。
なお、検索対象がXML文書である場合、開始タグのタグ記号を『<…>』から『[…』に変換する。また、終了タグのタグ記号を『</…>』から『/…』に変換する。この変換処理は、図4に示した変換部407が実行する。また、タグ記号『[』を階層開始指示子と称し、タグ記号『/』を階層終了指示子と称す。
(パスIDへの変換例)
つぎに、パスIDへの変換例(その1)について説明する。図32は、パスIDへの変換例(その1)を示す説明図である。図32において、符号3201は変換前のXML文書であり、符号3202は変換済みXML文書である。
(変換済みパススキーマの生成例)
図33は、変換済みパススキーマを示す説明図である。この変換済みパススキーマ3300は、図32に示した変換済みXML文書3202から生成されたパススキーマである。ここでは、各階層ノードの符号として「n#」を付している。#はパスIDである。したがって、図11に示した階層ノードN6(N6a,N6b,N6c)のように、同一階層名nameのノードが複数存在することはなく、図33では、n4,n6,n9のように、同一階層名nameであっても区別がつくように表現される。
(部分パススキーマの抽出例)
図34は、部分パススキーマの抽出例(その6)を示す説明図である。図34において、下記検索式(6)が与えられると、変換済み部分パススキーマ3400を変換済みパススキーマ3300から抽出することができる。同一検索式が与えられた図14の抽出例と比較するとノード数が削減されていることがわかる。
/syain/ACT/chara/name/・・・(6)
図35は、変換済み部分パススキーマ3400から得られる階層検索オートマトンを示す説明図である。図35において、階層検索オートマトン3500は、変換済み部分パススキーマ3400を構成する階層ノードn0,n4と、階層開始指示子『[』をあらわすノードと、階層終了指示子『/』をあらわすノードとから構成される。階層検索オートマトン3500は、図15に示した階層検索オートマトン1501と比べると、ノード数が削減されている。
階層検索オートマトン3500では、ルートノードn0に状態遷移している場合、階層開始指示子『[』が与えられると、そのノードに状態遷移する。一方、階層終了指示子『/』が与えられると、そのノードに状態遷移する。なお、タグ記号以外の文字が与えられると、ルートノードn0自身に状態遷移する。
また、階層検索オートマトン3500では、ヒット階層ノードn4に状態遷移している場合、階層開始指示子『[』が与えられると、そのノードに状態遷移する。一方、階層終了指示子『/』が与えられると、そのノードに状態遷移する。なお、タグ記号以外の文字が与えられると、ヒット階層ノードn4自身に状態遷移する。
また、階層検索オートマトン3500では、階層開始指示子『[』をあらわすノードに状態遷移している場合、識別子『4』が与えられると、ヒット階層ノードn4に状態遷移する。一方、それ以外の識別子(図中「?」で表記)が与えられると、ルートノードn0に状態遷移する。
また、ヒット階層ノードn469には、ヒット階層ノードn4の子階層ノードn7の識別子『7』も埋め込まれているため、階層検索オートマトン3500では、階層終了指示子『/』をあらわすノードに状態遷移している場合、識別子『7』が与えられると、ヒット階層ノードn4に状態遷移する。一方、それ以外の識別子(図中「?」で表記)が与えられると、ルートノードn0に状態遷移する。
したがって、単一オートマトンを保持するメモリ容量を削減することができる。またこれにより、プロセッサで処理を実行する場合、メモリサイズの削減を図ることができ、キャッシュミス率の低下が見込め、検索速度の高速化を実現することができる。また、階層検索オートマトンのサイズの縮小により、状態遷移回数が低減する。これにより、キャッシュミス率も低下するため、検索速度の高速化を実現することができる。
(第2の例)
(ワイルドカード検索)
第2の例は、ワイルドカード検索に関する検索例である。ワイルドカード検索の場合、複数通りのパスが選択される場合がある。図36は、部分パススキーマの抽出例(その7)を示す説明図である。図36において、たとえば、下記検索式(7)が与えられた場合、変換済みパススキーマ3300から、ルートノードn0とヒット階層ノードn4、n6、n9とからなる変換済み部分パススキーマ3601を抽出することができる。
また、これらのヒット階層ノードn4、n6、n9は同一階層名であるため、縮退させることにより変換済み部分パススキーマ3602を得ることができる。縮退されたヒット階層ノードn469は、ヒット階層ノードn4、n6、n9の識別子『4』,『6』,『9』とヒット階層ノードn4の子階層ノードn7の識別子『7』が埋め込まれたノードである。
図37は、変換済み部分パススキーマ3602から得られる階層検索オートマトンを示す説明図である。図37において、階層検索オートマトン3700は、変換済み部分パススキーマ3602を構成する階層ノードn0,n469と、階層開始指示子『[』をあらわすノードと、階層終了指示子『/』をあらわすノードとから構成される。階層検索オートマトン3700は、図15に示した階層検索オートマトン1501と比べると、ノード数が削減されている。
階層検索オートマトン3700では、ルートノードn0に状態遷移している場合、階層開始指示子『[』が与えられると、そのノードに状態遷移する。一方、階層終了指示子『/』が与えられると、そのノードに状態遷移する。なお、タグ記号以外の文字が与えられると、ルートノードn0自身に状態遷移する。
また、階層検索オートマトン3700では、ヒット階層ノードn469に状態遷移している場合、階層開始指示子『[』が与えられると、そのノードに状態遷移する。一方、階層終了指示子『/』が与えられると、そのノードに状態遷移する。なお、タグ記号以外の文字が与えられると、ヒット階層ノードn469自身に状態遷移する。
また、ヒット階層ノードn469には、ヒット階層ノードn4、n6、n9の識別子『4』,『6』,『9』が埋め込まれているため、階層検索オートマトン3700では、階層開始指示子『[』をあらわすノードに状態遷移している場合、識別子『4』,『6』または『9』が与えられると、ヒット階層ノードn469に状態遷移する。一方、それ以外の識別子(図中「?」で表記)が与えられると、ルートノードn0に状態遷移する。
また、ヒット階層ノードn469には、ヒット階層ノードn4の子階層ノードn7の識別子『7』も埋め込まれているため、階層検索オートマトン3700では、階層終了指示子『/』をあらわすノードに状態遷移している場合、識別子『7』が与えられると、ヒット階層ノードn469に状態遷移する。一方、それ以外の識別子(図中「?」で表記)が与えられると、ルートノードn0に状態遷移する。
したがって、この第2の例では、単一オートマトンの生成に先立って、パススキーマを縮退させることができるため、単一オートマトンを保持するメモリ容量を削減することができる。またこれにより、プロセッサで処理を実行する場合、メモリサイズの削減を図ることができ、キャッシュミス率の低下が見込め、検索速度の高速化を実現することができる。また、階層検索オートマトンのサイズの縮小により、状態遷移回数が低減する。これにより、キャッシュミス率も低下するため、検索速度の高速化を実現することができる。
(第3の例)
第3の例は、複数検索式の場合の検索例である。検索式が複数与えられた場合、すべての検索式から得られるノードを網羅するように、ヒット階層ノードやその子階層ノードを特定する。具体的には、各検索式の論理和を取ることにより、変換済み部分パススキーマを抽出する。
図38は、複数検索式の変換例を示す説明図である。検索式K1=/syain/ACT/chara//と検索式K2=//nameとが与えられた場合、検索式K1および検索式K2を検索式Q1およびQ2に変換する。検索式Q1およびQ2は、検索式K1およびK2内の階層名を、それぞれ階層開始指示子『[』と固有の識別子とからなる記号列に変換し、これらを論理和(図中、「or」で表記)でつなげることにより表現される。
また、検索式Q1およびQ2から、これらの論理積(図中、「&」で表記)ととった検索式Q2&Q1を生成する。この場合、検索式Q1およびQ2から、検索式Q2&Q1に含まれる記号列([4,[6)を削除する。このように、3つの検索式Q1,Q2,Q2&Q1からそれぞれ1つずつ記号列を選択することにより、変換済み部分パススキーマを抽出する。
図39は、部分パススキーマの抽出例(その8)を示す説明図である。図39において、3つの検索式Q1,Q2,Q2&Q1から、それぞれ記号列[3,[4,[9が選ばれたとすると、変換済み部分パススキーマ3900が抽出される。
なお、選ばれなかった記号列は、検索式Q1,Q2,Q2&Q1においてそれぞれ選ばれた記号列の階層ノードに埋め込まれることとなる。たとえば、ヒット階層ノードn3には、階層開始指示子『[』をあらわすノードからの遷移先を特定するため、記号列[3,[5,[7が埋め込まれることとなる。
また、子階層ノードn4,n5を有するため、記号列[4,[5も階層終了指示子『/』をあらわすノードからの遷移先として埋め込まれることとなる。さらに、子階層ノードn5はヒット階層ノードではないため、その子階層ノードであるヒット階層ノードn6の記号列[6も階層終了指示子『/』をあらわすノードからの遷移先として埋め込まれる。
また、ヒット階層ノードn9には、階層開始指示子『[』をあらわすノードからの遷移先を特定するため、記号列[9が埋め込まれることとなる。また、ヒット階層ノードn4には、階層開始指示子『[』をあらわすノードからの遷移先を特定するため、記号列[4,[6が埋め込まれることとなる。また、ヒット階層ノードn4は子階層ノードn7を有するため、記号列[7も階層終了指示子『/』をあらわすノードからの遷移先として埋め込まれることとなる。
図40は、変換済み部分パススキーマ3900から得られる階層検索オートマトンを示す説明図である。図40において、階層検索オートマトン4000は、変換済み部分パススキーマ3900を構成する階層ノードn0,n3,n4,n9と、階層開始指示子『[』をあらわすノードと、階層終了指示子『/』をあらわすノードとから構成される。
階層検索オートマトン4000では、ルートノードn0に状態遷移している場合、階層開始指示子『[』が与えられると、そのノードに状態遷移する。一方、階層終了指示子『/』が与えられると、そのノードに状態遷移する。なお、タグ記号以外の文字が与えられると、ルートノードn0自身に状態遷移する。
また、階層検索オートマトン4000では、ヒット階層ノードn4に状態遷移している場合、階層開始指示子『[』が与えられると、そのノードに状態遷移する。一方、階層終了指示子『/』が与えられると、そのノードに状態遷移する。なお、タグ記号以外の文字が与えられると、ヒット階層ノードn4自身に状態遷移する。
また、階層検索オートマトン4000では、ヒット階層ノードn9に状態遷移している場合、階層開始指示子『[』が与えられると、そのノードに状態遷移する。一方、階層終了指示子『/』が与えられると、そのノードに状態遷移する。なお、タグ記号以外の文字が与えられると、ヒット階層ノードn9自身に状態遷移する。
また、階層検索オートマトン4000では、ヒット階層ノードn3に状態遷移している場合、階層開始指示子『[』が与えられると、そのノードに状態遷移する。一方、階層終了指示子『/』が与えられると、そのノードに状態遷移する。なお、タグ記号以外の文字が与えられると、ヒット階層ノードn3自身に状態遷移する。
また、ヒット階層ノードn4には、ヒット階層ノードn6の識別子『6』が埋め込まれているため、階層検索オートマトン4000では、階層開始指示子『[』をあらわすノードに状態遷移している場合、識別子『4』または『6』が与えられると、ヒット階層ノードn4に状態遷移する。
また、ヒット階層ノードn3には、ヒット階層ノードn3,n5およびn7の識別子『3』,『5』および『7』が埋め込まれているため、階層開始指示子『[』をあらわすノードに状態遷移している場合、識別子『3』,『5』または『7』が与えられると、ヒット階層ノードn3に状態遷移する。
同様に、ヒット階層ノードn9には、ヒット階層ノードn9の識別子『9』が埋め込まれているため、階層開始指示子『[』をあらわすノードに状態遷移している場合、識別子『9』が与えられると、ヒット階層ノードn9に状態遷移する。
一方、階層開始指示子『[』をあらわすノードに状態遷移している場合、それ以外の識別子(図中「?」で表記)が与えられると、ルートノードn0に状態遷移する。
また、ヒット階層ノードn4には、子階層ノードn7の識別子『7』が埋め込まれているため、階層検索オートマトン4000では、階層終了指示子『/』をあらわすノードに状態遷移している場合、識別子『7』が与えられると、ヒット階層ノードn4に状態遷移する。
また、ヒット階層ノードn4には、階層ノードn4,n5,n6の識別子『4』,『5』および『6』が埋め込まれているため、階層検索オートマトン4000では、階層終了指示子『/』をあらわすノードに状態遷移している場合、識別子『4』,『5』または『6』が与えられると、ヒット階層ノードn3に状態遷移する。
一方、階層終了指示子『/』をあらわすノードに状態遷移している場合、それ以外の識別子(図中「?」で表記)が与えられると、ルートノードn0に状態遷移する。
したがって、この第3の例では、単一オートマトンの生成に先立って、パススキーマを縮退させることができるため、単一オートマトンを保持するメモリ容量を削減することができる。またこれにより、プロセッサで処理を実行する場合、メモリサイズの削減を図ることができ、キャッシュミス率の低下が見込め、検索速度の高速化を実現することができる。また、階層検索オートマトンのサイズの縮小により、状態遷移回数が低減する。これにより、キャッシュミス率も低下するため、検索速度の高速化を実現することができる。
(第4の例)
第4の例は、階層指示子を開始タグと終了タグとで区別せず、同一記号を用いる場合の例である。具体的には、たとえば、階層終了指示子『/』を、階層開始指示子『[』に変え、識別子をタグ間文字列の識別子の親となる識別子を用いる。
図41は、パスIDへの変換例(その2)を示す説明図である。図41において、符号3201は変換前のXML文書であり、符号4100は変換済みXML文書である。たとえば、XML文書4100の4行目に着目すると、変換後の終了タグは、階層開始指示子『[』と、開始タグに埋め込まれている識別子『4』の親となる識別子『3』と、からなる記号列『[3』となる。他の変換後のタグも同様に変換される。なお、この場合の変換済み部分パススキーマは、図34に示した場合と同様である。
図42は、第4の例の階層検索オートマトンを示す説明図である。図42において、階層検索オートマトン4200は、ルートノードn0とヒット階層ノードn4と階層開始指示子『[』をあらわすノードから構成される。図35に示した階層検索オートマトン3500と比べると、階層終了指示子『/』をあらわすノードが削除されている分、オートマトンサイズが縮小される。
階層検索オートマトン4200では、ルートノードn0に状態遷移している場合、階層開始指示子『[』が与えられると、そのノードに状態遷移する。一方、階層開始指示子『[』以外の文字が与えられると、ルートノードn0自身に状態遷移する。
また、階層検索オートマトン4200では、ヒット階層ノードn4に状態遷移している場合、階層開始指示子『[』が与えられると、そのノードに状態遷移する。一方、階層開始指示子『[』以外の文字が与えられると、ヒット階層ノードn4自身に状態遷移する。
また、階層検索オートマトン4200では、階層開始指示子『[』をあらわすノードに状態遷移している場合、識別子『4』が与えられると、ヒット階層ノードn4に状態遷移する。一方、それ以外の識別子(図中「?」で表記)が与えられると、ルートノードn0に状態遷移する。
したがって、この第4の例では、単一オートマトンの生成に先立って、パススキーマを縮退させることができるため、単一オートマトンを保持するメモリ容量を削減することができる。またこれにより、プロセッサで処理を実行する場合、メモリサイズの削減を図ることができ、キャッシュミス率の低下が見込め、検索速度の高速化を実現することができる。また、階層検索オートマトンのサイズの縮小により、状態遷移回数が低減する。これにより、キャッシュミス率も低下するため、検索速度の高速化を実現することができる。
(情報検索処理手順)
つぎに、この発明の実施の形態3にかかる情報検索処理手順について説明する。図43は、この発明の実施の形態3にかかる情報検索処理手順を示すフローチャートである。図43において、図9に示したステップと同一処理内容については同一ステップ番号を付し、その説明を省略する。
図43において、ステップS902:Yesのあと、変換部407により、パスIDテーブル3100を用いて、タグ開始記号および階層名を変換する(ステップS4301)。したがって、図32または図41に示したような変換済みXML文書3202,4100が得られ、図33に示したような変換済みパススキーマ3300が生成されることとなる(ステップS908)。
また、ステップS909のあと、変換済みパススキーマ3300から変換済み部分パススキーマを抽出する(ステップS4302)。この場合、図34、図36または図39に示したように、変換済み部分パススキーマ3400,3602,3900が抽出されることとなる。
したがって、ステップS910において、図35,図37,図40または図42に示したように、変換済みの階層検索オートマトン3500,3700,4000,4200を有する変換済み単一オートマトンが生成されることとなる(ステップS910)。
このように、実施の形態3では、パススキーマ内のパスごとにタグ記号および固有の識別子を割り当てることにより、階層検索オートマトンのノード数を削減することができる。
したがって、単一オートマトンを保持するメモリ容量を削減することができる。またこれにより、プロセッサで処理を実行する場合、メモリサイズの削減を図ることができ、キャッシュミス率の低下が見込め、検索速度の高速化を実現することができる。また、階層検索オートマトンのサイズの縮小により、状態遷移回数が低減する。これにより、キャッシュミス率も低下するため、検索速度の高速化を実現することができる。
以上説明したように、本実施の形態によれば、階層検索用オートマトンとキーワード検索用オートマトンとの間のオーバーヘッドの低減を図ることにより、検索速度の向上を図ることができる。
なお、本実施の形態で説明した情報検索方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。このプログラムは、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVD等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。またこのプログラムは、インターネット等のネットワークを介して配布することが可能な伝送媒体であってもよい。
また、本実施の形態で説明した情報検索装置100は、スタンダードセルやストラクチャードASIC(Application Specific Integrated Circuit)などの特定用途向けIC(以下、単に「ASIC」と称す。)やFPGAなどのPLD(Programmable Logic Device)によっても実現することができる。具体的には、たとえば、上述した情報検索装置100の機能的構成(機能ブロックの各符号を入れる)をHDL記述によって機能定義し、そのHDL記述を論理合成してASICやPLDに与えることにより、情報検索装置100を製造することができる。
以上のように、本発明にかかる情報検索プログラム、該プログラムを記録した記録媒体、情報検索装置、および情報検索方法は、階層構造を有する電子文書の検索に有用であり、特に、XML文書やHTML文書などに適している。
100 情報検索装置
401 取得部
402 パススキーマ生成部
403 入力部
404 オートマトン生成部
405 検索部
406 出力部
407 変換部
1601 抽出部
1602 判断部