(57)【要約】単語の集合に対して、文書集合内での各単語の出現位置を単語インデックとして記憶し、また、単語に付加されたタグの集合に対して、各タグの右と左に登場した単語の集合を記憶すると共に、各タグとその右に登場する語の組み合わせ、あるいは、各タグとその左に登場する語の組み合わせをキーとして文書集合内の各タグの登場位置をタグＬＲインデックスとして記憶し、タグの検索時にクエリのフレーズに含まれる隣接した単語とタグに対し、タグとその右あるいは左の単語をキーとしてインデックスを参照し、タグ名を２次キーに持たなくとも読み込む文書リストの量を削減する。また、タグを更新する際には、タグＬＲインデックスに２箇所の更新を加えるのみでタグを更新する。
2009063925.tif 000002
【特許請求の範囲】
【請求項１】
単語の集合に対して、文書集合内での各単語の出現位置を記憶する単語インデックス記憶部と、
単語に付加されてその単語の属性を表すタグの集合に対して、各タグの右と左に登場した単語の集合を記憶し、さらに各タグとその右に登場する語の組み合わせ、あるいは、各タグとその左に登場する語の組み合わせをキーとして文書集合内の各タグの登場位置を記憶するタグＬＲインデックス記憶部と、
検索クエリとしてタグと単語から成るフレーズを入力とし、その検索クエリを解釈した上でフレーズ内の隣接する単語とタグの左右の関係を利用して上記タグＬＲインデックス記憶部を参照し、そのフレーズを含む文書の識別子の一覧を返却する文書検索部と、
特定の文書中の部分文字列に対してタグを追加・削除するクエリを解釈し、上記タグＬＲインデックス記憶部の記憶内容を更新するタグ更新部と、
一つ以上の文書が与えられた場合に、上記単語インデックス記憶部内のインデックスを更新する文書インデックス作成部と
を備えたことを特徴とする文書管理・検索システム。
【請求項２】
任意の文字列をキーとし、その文字列に付加されている可能性のあるタグ名の集合を高速に参照可能とする高速タグ値判定部を備え、
前記タグ更新部は、タグを付加する際に上記高速タグ値判定部内のデータを更新する手段を含み、
前記文書検索部は、タグが連続するフレーズが検索クエリとして入力された場合に、上記高速タグ値判定部と前記タグＬＲインデックス記憶部とを参照して、特定のタグ名を含む可能性のある単語に絞って問い合わせを実行する手段を含む
ことを特徴とする請求項１記載の文書管理・検索システム。
【請求項３】
高頻度語とタグ名とをキーとし、その単語およびタグをそれぞれ含む文書の集合を表すビット列を記憶するビット列記憶部を備え、
前記文書インデックス作成部は、文書からインデックスを作成する際に上記ビット列記憶部内のビット列を更新する手段を含み、
前記タグ更新部は、タグを更新する際に追加・削除されたタグを元に上記ビット列記憶部内のビット列を更新する手段を含み、
前記文書検索部は、検索時に予めクエリに含まれる高頻度語およびタグ名を元に上記ビット列記憶部を参照し、クエリ内の高頻度語およびタグ名がすべて含まれる文書番号の集合を得て、その文書番号を元に文書集合を絞り込んだ上で文書集合内にフレーズの登場位置を読み込む手段を含む
ことを特徴とする請求項１または２記載の文書管理・検索システム。
【請求項４】
タグの集合に対して、各タグ名をキーとし、文書集合内のタグの登場位置と左右の単語を記憶するタグＮＬＲインデックス記憶部と、
このタグＮＬＲインデックス記憶部内のインデックスを前記タグＬＲインデックス記憶部内のインデックスに変換する変換手段と、
タグの登場頻度に基づきインデックスの記憶方法を変更する管理手段と
を備えたことを特徴とする請求項１ないし３のいずれか記載の文書管理・検索システム。
【請求項５】
一つ以上の文書が与えられた場合に、その文書に含まれる単語の集合に対し、各単語をキーとして、その登場位置を記憶する文書インデックス作成ステップと、
特定の文書中の部分文字列に対しタグを追加・削除するクエリが与えられた場合に、そのタグ名をキーとしタグの登場位置を記憶するタグ更新ステップと、
このタグ更新ステップ内において、入力されたタグに対し、タグの右と左に登場した単語を記憶し、さらに各タグとその右に登場する語の組み合わせ、あるいは、各タグとその左に登場する語の組み合わせをキーとして文書集合内の各タグの登場位置を記憶するタグＬＲ記憶ステップと、
タグと単語から成るフレーズが検索クエリとして与えられた場合に、その検索クエリを解釈した上でフレーズ内の隣接する単語とタグの左右の関係を利用して複数のキーを作成し、これらのキーを元に上記文書インデックス作成ステップにおいて記憶されたキーを元に単語の登場位置、上記タグ更新ステップにおいて記憶されたキーを元に各タグの登場位置をそれぞれ参照し、その上でそれらを統合することでそのフレーズを含む文書の識別子の一覧を返却する文書検索ステップと
を含むことを特徴とする文書の管理・検索方法。
【請求項６】
任意の文字列をキーとし、その文字列に付加されている可能性のあるタグ名の集合を高速に参照可能とする高速タグ値判定ステップを含み、
前記タグ更新ステップは、タグを付加する際にタグ名と文字列の関係を表すデータを更新するステップを含み、
前記文書検索ステップは、タグ名が連続するフレーズを検索クエリが入力された場合に、高速タグ値判定ステップを利用し、特定のタグ名を含む可能性のある単語のみに絞ってタグの登場位置を読み込むステップを含む
ことを特徴とする請求項５記載の文書の管理・検索方法。
【請求項７】
文書インデックスステップにおいて高頻度語とタグ名とをキーとし、その単語およびタグをそれぞれ含む文書の集合を表すビット列を記憶するビット列記憶ステップを含み、
前記タグ更新ステップは、タグを更新する際に追加・削除されたタグを元にビット列記憶部内のビット列を更新するステップを含み、
文書検索ステップは、検索クエリに含まれる高頻度語とタグ名とをキーとしてビット列記憶ステップで記憶されたビット列を参照し、クエリ内の高頻度語およびタグ名がすべて含まれる文書の集合を表すデータを得、そのデータを元に文書集合を絞り込んだ上で単語とタグの登場位置を読み込むステップを含む
ことを特徴とする請求項５または６記載の文書の管理・検索方法。
【請求項８】
前記タグ更新ステップは、タグの集合に対して、各タグ名をキーとし、文書集合内のタグの登場位置と左右の単語を記憶するタグＮＬＲインデックスステップを含み、
前記タグ更新ステップおよび前記文書検索ステップは、
タグをキーとしその登場位置を更新あるいは検索する際に、そのタグが前記タグＮＬＲインデックスステップで記憶されているか前記タグＬＲ更新ステップで記憶されているかによって、参照先を選択するステップと、
タグに関する頻度を元に、タグＮＬＲインデックスステップで作成されたデータを削除し、タグＬＲインデックスステップで作成するインデックス変換ステップと
を含む
ことを特徴とする請求項５ないし７のいずれか記載の文書の管理・検索方法。
【請求項９】
一つ以上の文書が与えられた場合に、その文書に含まれる単語の集合に対し、各単語をキーとして、その登場位置を記憶する文書インデックス作成処理と、
特定の文書中の部分文字列に対しタグを追加・削除するクエリが与えられた場合に、そのタグ名をキーとしタグの登場位置を記憶するタグ更新処理と、
このタグ更新処理内において、入力されたタグに対し、タグの右と左に登場した単語を記憶し、さらに各タグとその右に登場する語の組み合わせ、あるいは、各タグとその左に登場する語の組み合わせをキーとして文書集合内の各タグの登場位置を記憶するタグＬＲ記憶処理と、
タグと単語から成るフレーズが検索クエリとして与えられた場合に、その検索クエリを解釈した上でフレーズ内の隣接する単語とタグの左右の関係を利用して複数のキーを作成し、これらのキーを元に上記文書インデックス作成処理において記憶されたキーを元に単語の登場位置、上記タグ更新処理において記憶されたキーを元に各タグの登場位置をそれぞれ参照し、その上でそれらを統合することでそのフレーズを含む文書の識別子の一覧を返却する文書検索処理と
をコンピュータに実行させるためのコンピュータ・プログラム。
【請求項１０】
任意の文字列をキーとし、その文字列に付加されている可能性のあるタグ名の集合を高速に参照可能とする高速タグ値判定処理と、
タグ更新処理においてタグを付加する際にタグ名と文字列の関係を表すデータを更新する処理と、
文書検索処理においてタグ名が連続するフレーズを検索クエリが入力された場合に、高速タグ値判定処理を利用し、特定のタグ名を含む可能性のある単語のみに絞ってタグの登場位置を読み込む処理と
をさらにコンピュータに実行させることを特徴とする請求項９記載のコンピュータ・プログラム。
【請求項１１】
文書インデックス処理において高頻度語およびタグ名をキーとし、その単語およびタグを含む文書の集合を表すビット列を記憶するビット列記憶処理と、
前記タグ更新処理において、タグを更新する際に追加・削除されたタグを元に上記ビット列記憶処理で記憶されたビット列を更新する処理と、
前記文書検索処理において、検索クエリに含まれる高頻度語およびタグ名をキーとして上記ビット列記憶処理で記憶されたビット列を参照し、クエリ内の高頻度語およびタグ名がすべて含まれる文書の集合を表すデータを得、そのデータを元に文書集合を絞り込んだ上で単語とタグの登場位置を読み込む処理と
をさらにコンピュータに実行させることを特徴とする請求項９または１０記載のコンピュータ・プログラム。
【請求項１２】
前記タグ更新処理内において、タグの集合に対して、各タグ名をキーとし、文書集合内のタグの登場位置と左右の単語を記憶するタグＮＬＲインデックス処理をコンピュータに実行させ、
前記タグ更新ステップ内および前記文書検索ステップ内において、タグをキーとしその登場位置を更新あるいは検索する際に、そのタグが上記タグＮＬＲインデックス処理で記憶されているか、前記タグＬＲ更新処理で記憶されているかによって、参照先を選択する処理と、タグに関する頻度を元に、タグＮＬＲインデックス処理で作成されたデータを削除し、タグＬＲインデックス処理で作成するインデックス変換処理とをコンピュータに実行させる
ことを特徴とする請求項９ないし１１のいずれか記載のコンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、文書中の部分文字列にタグを付加し、そのタグを元に文書情報を管理および検索する技術に関する。特に、情報検索のための処理要求（クエリ）として、タグを含むフレーズを使用可能とする技術に関する。
【背景技術】
【０００２】
図２はタグ付けされた文書の一例を示す。本明細書において「文章」とは、少なくとも、ユニークな識別子とである文書番号と、検索の対象となる文字列（本文）と、を含むデータをいう。また、「タグ」とは、ある文書中の一つ以上の単語に対して付加されるデータをいう。図２の例では、「ＡＢＣ産業の山田太郎社長は．．．」という文字列を含む文書において、１文字目から５文字目までの「ａｂｃ産業」に対して付加される「企業名」というタグの例と、７文字目から１０文字目までの「山田太郎」に対して、「人名」というタグの例を示している。本明細書では、「企業名」や「人名」ように、タグを表現する文字列をタグ名と呼ぶ。さらに、本明細書において「単語」とは，形態素解析やＮグラム（文字列をＮ文字ごとに区切る）など、何らかの一定の基準で作成された本文の部分文字列をいう。
このようなタグを付加した文章に対して文書管理および検索を行う文書管理・検索システムには、文書中の部分文字列に対してタグを付加あるいは削除する機能と、タグを用いたフレーズによる文書の検索する機能とが備えられる。タグを用いたフレーズによる文書の検索とは、タグ名や文字列を含む連続した文字列を入力とし、そのフレーズを含む文書集合を出力する機能を意味する。例えば、タグを用いたフレーズとして「［企業名］の［人名］」が挙げられる。なお、この構文では「［」と「］」で囲まれた文字列をタグ名として捉える。このとき、このフレーズを検索クエリとして捉えると、「企業名」というタグが付加された任意の語、「の」という語、「人名」というタグが付加された任意の語が連続して登場する文書を返却せよ、という意味になる。
このようなタグを用いた文書の管理・検索を実現する方法として、タグ付きの文書をＸＭＬ（ＥｘｔｅｎｓｉｂｌｅＭａｒｋｕｐ  Ｌａｎｇｕａｇｅ）などの階層的な構造の記述形式で表現した上で、階層的な構造文書の検索装置ＸＭＬＤＢ（ＸＭＬＤａｔａ  Ｂａｓｅ）を利用する方法が知られている（例えば特開２００５−１８８１１号公報参照、以下特許文献１と記す）。
ＸＭＬの一例を図３ないし図５を参照して説明する。図３はタグを付加された文書をＸＭＬにより表現した例を示し、図４は同文書の一部をタグの包含関係を元に木構造として表現したもの、図５は階層的な情報を管理するための表を示す。
図４において、楕円のノードはタグを、長方形の葉ノードはテキストを意味し、それらの間のエッジは、それらのタグもしくはテキストの間に包含関係が存在することを意味している。さらに、図４では、各ノードの下にパス階層と呼ばれる情報を記述している。パス階層とは、各ノードの文書中での位置を表す情報である。パス階層はノードの位置を示す数字を区切り記号（「．」）と共に記述したものである。例えば、図４の「人名」ノードには「１．１．３」というパス階層が付加されているが、これはルートから見て「１番目のノード（「文書」ノード）の下の１番目のノード（「本文」ノード）の下の３番目のノード」という意味を持つ。
これらの階層的な情報は、図５に示したような表で管理される。ただし、この表は論理的な関係を示すものであり、実際には複数の表で表現されることが多い。図５に示した表では、文書集合内のノードに対して、ノードＩＤ、文書番号、テキスト、タグ名、パス階層の情報を管理している。ノードＩＤは、文書集合内の全ノードに対してユニークな識別子である。文書番号とは、そのノードが含まれる文書を示すＩＤである。テキストとは、葉ノードに含まれる文字列である。ただし、葉ノードでないノードに対しては、「ＮＵＬＬ」が入力されるものとする。タグ名とは、各ノードのタグ名である。ただし、葉ノードに対しては「＃ｔｅｘｔ」が入力されるものとする。パス階層とは各ノードのパス階層を意味する。
このような情報を検索する方法について、特許文献１に開示された検索装置の動作を例に説明する。
例えばクエリとして「［企業名］の［人名］」というフレーズが与えられた場合、この検索装置はまず、クエリを複数の検索条件に分解する。このクエリの場合には、Ａ：企業名というタグがあること、Ｂ：「の」という語が含まれること、Ｃ：人名というタグがあること、の３つに分解される。次にこの検索装置は、各条件を元にそれぞれ図５に示した表を参照し、タグ名が「企業名」であるノードのリスト（Ａリストとする）と、テキストが「の」であるノードのリスト（Ｂリストとする）、タグ名が「人名」であるノードのリスト（Ｃリストとする）を得る。次にこの検索装置は、Ａリスト、Ｂリスト、Ｃリスト内のノードを比較し、文書番号が等しいノードの組み合わせを取り出し、Ａリスト内の「企業名」ノード、Ｂリスト内の「の」ノード、Ｃリスト内の「人名」ノードの位置関係がクエリと同じ順序で連続しているものを取り出す。この位置関係の判定はパス階層を比較することで行われる。このクエリの場合、「企業名」ノードと「の」ノードと「人名」ノードは兄弟ノードであり、この検索装置は、次の三つの条件を満たすノードから、検索結果を作成する。
条件１：「企業名」ノードのパス階層と、「の」ノードのパス階層と「人名」ノードのパス階層が、末尾の数以外の部分で一致し；
条件２：「の」ノードのパス階層の末尾の数＝「企業名」ノードのパス階層の末尾の数＋１であり；
条件３：「人名」ノードのパス階層の末尾の数＝「の」ノードのパス階層の末尾の数＋１である。
しかし、この方法には二つの問題がある。まず、第一の問題は、タグを追加した場合にパス階層の更新が必要であり、処理に時間がかかるということである。図６に、タグの追加によるパス階層の変更の例を示す。図６では、文書に人名というタグを追加する例について、追加前の文書構造を左側に、追加後の文書構造とそのパス階層の更新範囲を右側に示す。右側の更新範囲では、点線で示される範囲のノードのパス階層を更新する必要があることを示している。このように、パス階層はノードの位置を文書全体の階層構造を用いて表現しているため、文書中の一部が変更になった場合でも大幅に変更が必要となる。
第二の問題は、一般的な語句や頻度の高いタグ名のみから成るフレーズを検索クエリとした場合に、検索に時間がかかるということである。これは、一般的な語句や頻度の高いタグ名で検索した場合、個々の条件でノードを検索する際に大量のノードが発見されるため、大量のノードに対して文書番号と位置関係を調べる必要があり、検索速度が低下するという問題である。例えば、「［企業名］の［人名］」というクエリの場合、クエリは、企業名というタグがあること、「の」という語が含まれること、人名というタグがあること、に分解され、それぞれの条件に合うノードのリストが取り出される。しかし、それぞれの条件は一般的過ぎるため大量のノードが発見され、位置関係を調べるために大きな時間が必要になる。
このように、ＸＭＬＤＢを用いた文書管理・検索システムは文書の階層構造までをインデックス化するために、タグの更新（追加や削除）や、検索に時間がかかってしまう。そこで、タグを用いたフレーズ検索を実現する別の方法として、階層構造をインデックス化せず、全文検索インデックスで利用される転置インデックスを用いることが考えられる。
図７は転置インデックスの例を示す。図７において（ａ）に示されるデータ構造では、ある単語をキーとして入力することで、その単語を含む文書の数（頻度）と、その単語を含む文書の文書番号と、その文書内でのその単語の登場位置（登場位置、文書前方からの文字数で表現される）のリスト（以下、文書リストと呼ぶ）を得ることができる。転置インデックスを用いてタグによるフレーズ検索を実現するには、（ａ）で示した通常の転置インデックスの他に、（ｂ）に示すタグの転置インデックスを用いる。（ｂ）は、単語の場合と同様、あるタグ名のタグに関して、そのタグを含む文書の数（頻度）と、そのタグを含む文書番号と、その文書内でのタグの登場位置を示す情報（開始位置と終了位置、文書前方からの文字数で表現される）のリスト（以下、タグ文書リストと呼ぶ）を得ることができる。
このようなインデックスを用いることにより、タグを付加・削除する際は、タグの転置インデックスの該当部分のみを追加・削除することで、タグの更新を行うことができる。
しかし、この方法を用いた場合でも、一般的な語句や頻度の高いタグ名のみから成るフレーズを検索クエリとした検索時には、その処理時間が問題となる。例えば、クエリとして「［企業名］の［人名］」というフレーズが与えられた場合、このインデックスを持つ検索システムは、特許文献１で示される装置と同様に、Ａ：企業名というタグがあること、Ｂ：「の」という語が含まれること、Ｃ：人名というタグがあること、に分解し、各転置インデックスを参照する。しかし、ＸＭＬＤＢの場合と同様、それぞれの条件は一般的過ぎるため、個々の条件で非常に長い文書リストが発見され、位置関係を調べるのに時間がかかる。
また、一般的な語句から成る検索クエリに対し、文書リストの長さを削減しフレーズ検索を高速化する手法として、Ｎｅｘｔｗｏｒｄインデックスと呼ばれる手法がある（Ｈ．Ｅ．Ｗｉｌｌｉａｍｓ，Ｊ．Ｚｏｂｅｌ  ａｎｄ  Ｄ．Ｂａｈｌｅ，″Ｆａｓｔ  Ｐｈｒａｓｅ  Ｑｕｅｒｙｉｎｇ  ｗｉｔｈ  Ｃｏｍｂｉｎｅｄ  Ｉｎｄｅｘｅｓ″，ＡＣＭ  Ｔｒａｎｓａｃｔｉｏｎｓ  ｏｎ  Ｉｎｆｏｒｍａｔｉｏｎ  Ｓｙｓｔｅｍｓ，２２（４），ｐｐ．５７３−５９４，２００４を参照、以下非特許文献１と記す）。Ｎｅｘｔｗｏｒｄインデックスは、高い頻度を持つ一般的な語の文書リストを、その次（横書きを前提とし、これを「右」という）に登場する単語を元に分割したデータ構造を持つ。
図８はＮｅｘｔｗｏｒｄインデックスのデータ構造例を示す。Ｎｅｘｔｗｏｒｄインデックスでは、ある単語をキーとし、その単語の右に登場した単語（Ｎｅｘｔｗｏｒｄ）の集合を記憶し、さらに、キーとなった単語と一つのＮｅｘｔｗｏｒｄとの組から、その２つの語が隣接して登場した文書集合に対する文書リストを参照することができる。
図９はインデックスの一例を示す。この例では、「の」という単語のＮｅｘｔｗｏｒｄとして「山田」と「会社」が登録されており、さらにそれぞれに対して「の山田」を含む文書の文書リストと、「の会社」含む文書の文書リストが登録されていることを意味する。以下の説明では、このように２つの単語（あるいは条件）からなるキーを「Ａ→Ｂ」（例えば「の→山田」など）と表現し、Ａを１次キー、Ｂを２次キーと呼ぶこととする。
非特許文献１に開示された検索システムは、高い頻度の単語に対してこのＮｅｘｔｗｏｒｄインデックスを利用することで、検索速度を向上させている。例えば、検索時にクエリとして「ａｂｃ産業の山田」というフレーズが入力され、「ａｂｃ産業」が低い頻度の語、「の」が高い頻度の語であると仮定すると、この検索システムは次のように検索を行う。まず、低い頻度の語に対して通常の転置インデックスを参照し、「ａｂｃ産業」に対応する文書リストを得る。次に、高い頻度の語に対しては、Ｎｅｘｔｗｏｒｄインデックスを参照し、「の→山田」という参照から文書リストを得る。さらに、これらの二つの文書リストを比較し、同じ文書で、かつ、登場位置がクエリと同じである文書の集合を出力する。このように、Ｎｅｘｔｗｏｒｄインデックスによると、２つの語の隣接関係をキーとして文書リストを読み込むことができるため、検索速度を向上させることができる。
しかし、この手法はあくまで単純なフレーズ検索のために用いられるものであり、タグを付加された文書を対象とした場合、タグの更新処理に時間がかかるという問題がある。
図１０はＮｅｘｔｗｏｒｄインデックスを用いた検索システムにおいてタグの更新処理に時間がかかることを説明する図である。ここでは、「ａｂｃ産業の山田」というフレーズについて、タグを追加・削除する際に更新が必要な範囲を示す。
図１０において（ａ）に示すように、「ａｂｃ産業の山田」という文字列に対して、ａｂｃ産業に［名詞］、［企業名］というタグが、「の」に対して［助詞］というタグが、山田に対して［人名］というタグが付加されている。（ａ）内の８本の点線の矢印は、それぞれＮｅｘｔｗｏｒｄインデックス内に作成される隣接関係のキーを意味する。なお、図１０内の「ａｂｃ産業」は低頻度とし、通常の転置インデックスに格納されるものとしている。
このとき、このうち「の」という語に［所属］というタグを追加することを考える。この場合、新たに（ｂ）内の実線の矢印の関係が発生するため、「［名詞］→［所属］」というキー、「［企業名］→［所属］」というキー、「［所属］→山田」というキー、「［所属］→［名詞］」というキーに対応する部分を更新せねばならない。
また、「の」に付加された［助詞］というタグを削除することを考える。この場合、同様に（ｃ）内の実線の矢印の関係を削除しなければならない。つまり「［名詞］→［助詞］」というキー、「［企業名］→［助詞］」というキー、「［助詞］→山田」というキー、「［助詞］→［固有名詞］」というキーに対応するについて文書リストを参照し、該当部分を修正する必要がある。
このように、Ｎｅｘｔｗｏｒｄインデックスはタグを付加することを想定しておらず、単純にタグ付き文書に適用すると、更新する箇所が多く、タグの更新に時間がかかるという問題がある。なお、これは２次キーにタグを用いると、あるタグに関する参照が分散することが原因となっている。
【発明の開示】
【発明が解決しようとする課題】
【０００３】
上述したように、特許文献１に記載された検索装置では、フレーズ検索だけでなく、階層的なタグ構造によるクエリ（「／文書／本文／企業名」という構造を持つ文書を返せ、など）も想定しており、階層的なインデックスを持つために、インデックスの更新に時間がかかっていた。また、特許文献１に記載された検索装置は、フレーズを個々の単語の条件に分解した後、個々の条件で検索する、という思想に基づいており、個々の単語の条件がすべて一般的なパターンである場合、大量の情報を読み出さなければならず、検索に時間がかかっていた。
非特許文献１に記載の検索システムでは、二つの語の隣接関係を元に読み込む文書リストの量を削減することができるが、タグの付加された文書を考慮しておらず、タグの付加された文書では単語やタグ間の隣接関係が複雑するため、タグの更新に時間がかかっていた。
本発明は、このような課題を解決し、タグを含むフレーズの検索において、一般的な語句と頻度の高いタグとからなるクエリに対する効率の良い検索と、タグの効率良い更新と、を両立した文書管理・検索システムおよび文書の管理・検索方法を提供することを目的とする。
【課題を解決するための手段】
【０００４】
本発明発の文書管理・検索システムは、単語の集合に対して、文書集合内での各単語の出現位置を記憶する単語インデックス記憶部と、単語に付加されてその単語の属性を表すタグの集合に対して、各タグの右と左に登場した単語の集合を記憶し、さらに各タグとその右に登場する語の組み合わせ、あるいは、各タグとその左に登場する語の組み合わせをキーとして文書集合内の各タグの登場位置を記憶するタグＬＲインデックス記憶部と、検索クエリとしてタグと単語から成るフレーズを入力とし、その検索クエリを解釈した上でフレーズ内の隣接する単語とタグの左右の関係を利用してタグＬＲインデックス記憶部を参照し、そのフレーズを含む文書の識別子の一覧を返却する文書検索部と、特定の文書中の部分文字列に対してタグを追加・削除するクエリを解釈し、タグＬＲインデックス記憶部の記憶内容を更新するタグ更新部と、一つ以上の文書が与えられた場合に、単語インデックス記憶部内のインデックスを更新する文書インデックス作成部とを備えたことを特徴とする。
この構成において、任意の文字列をキーとし、その文字列に付加されている可能性のあるタグ名の集合を高速に参照可能とする高速タグ値判定部を備え、タグ更新部は、タグを付加する際に高速タグ値判定部内のデータを更新する手段を含み、文書検索部は、タグが連続するフレーズが検索クエリとして入力された場合に、高速タグ値判定部とタグＬＲインデックス記憶部とを参照して、特定のタグ名を含む可能性のある単語に絞って問い合わせを実行する手段を含むことが望ましい。
高頻度語とタグ名とをキーとし、その単語およびタグをそれぞれ含む文書の集合を表すビット列を記憶するビット列記憶部を備え、文書インデックス作成部は、文書からインデックスを作成する際にビット列記憶部内のビット列を更新する手段を含み、タグ更新部は、タグを更新する際に追加・削除されたタグを元にビット列記憶部内のビット列を更新する手段を含み、文書検索部は、検索時に予めクエリに含まれる高頻度語およびタグ名を元にビット列記憶部を参照し、クエリ内の高頻度語およびタグ名がすべて含まれる文書番号の集合を得て、その文書番号を元に文書集合を絞り込んだ上で文書集合内にフレーズの登場位置を読み込む手段を含むこともできる。
タグの集合に対して、各タグ名をキーとし、文書集合内のタグの登場位置と左右の単語を記憶するタグＮＬＲインデックス記憶部と、このタグＮＬＲインデックス記憶部内のインデックスをタグＬＲインデックス記憶部内のインデックスに変換する変換手段と、タグの登場頻度に基づきインデックスの記憶方法を変更する管理手段とを備えることもできる。
本発明の文書の管理・検索方法は、一つ以上の文書が与えられた場合に、その文書に含まれる単語の集合に対し、各単語をキーとして、その登場位置を記憶する文書インデックス作成ステップと、特定の文書中の部分文字列に対しタグを追加・削除するクエリが与えられた場合に、そのタグ名をキーとしタグの登場位置を記憶するタグ更新ステップと、このタグ更新ステップ内において、入力されたタグに対し、タグの右と左に登場した単語を記憶し、さらに各タグとその右に登場する語の組み合わせ、あるいは、各タグとその左に登場する語の組み合わせをキーとして文書集合内の各タグの登場位置を記憶するタグＬＲ記憶ステップと、タグと単語から成るフレーズが検索クエリとして与えられた場合に、その検索クエリを解釈した上でフレーズ内の隣接する単語とタグの左右の関係を利用して複数のキーを作成し、これらのキーを元に文書インデックス作成ステップにおいて記憶されたキーを元に単語の登場位置、タグ更新ステップにおいて記憶されたキーを元に各タグの登場位置をそれぞれ参照し、その上でそれらを統合することでそのフレーズを含む文書の識別子の一覧を返却する文書検索ステップとを含むことを特徴とする。
任意の文字列をキーとし、その文字列に付加されている可能性のあるタグ名の集合を高速に参照可能とする高速タグ値判定ステップを含み、タグ更新ステップは、タグを付加する際にタグ名と文字列の関係を表すデータを更新するステップを含み、文書検索ステップは、タグ名が連続するフレーズを検索クエリが入力された場合に、高速タグ値判定ステップを利用し、特定のタグ名を含む可能性のある単語のみに絞ってタグの登場位置を読み込むステップを含むことが望ましい。
文書インデックスステップにおいて高頻度語とタグ名とをキーとし、その単語およびタグをそれぞれ含む文書の集合を表すビット列を記憶するビット列記憶ステップを含み、タグ更新ステップは、タグを更新する際に追加・削除されたタグを元にビット列記憶部内のビット列を更新するステップを含み、文書検索ステップは、検索クエリに含まれる高頻度語とタグ名とをキーとしてビット列記憶ステップで記憶されたビット列を参照し、クエリ内の高頻度語およびタグ名がすべて含まれる文書の集合を表すデータを得、そのデータを元に文書集合を絞り込んだ上で単語とタグの登場位置を読み込むステップを含むことができる。
タグ更新ステップは、タグの集合に対して、各タグ名をキーとし、文書集合内のタグの登場位置と左右の単語を記憶するタグＮＬＲインデックスステップを含み、タグ更新ステップおよび文書検索ステップは、タグをキーとしその登場位置を更新あるいは検索する際に、そのタグがタグＮＬＲインデックスステップで記憶されているかタグＬＲ更新ステップで記憶されているかによって、参照先を選択するステップと、タグに関する頻度を元に、タグＮＬＲインデックスステップで作成されたデータを削除し、タグＬＲインデックスステップで作成するインデックス変換ステップとを含むこともできる。
本発明はコンピュータ・プログラムとして実施することもできる。すなわち、一つ以上の文書が与えられた場合に、その文書に含まれる単語の集合に対し、各単語をキーとして、その登場位置を記憶する文書インデックス作成処理と、特定の文書中の部分文字列に対しタグを追加・削除するクエリが与えられた場合に、そのタグ名をキーとしタグの登場位置を記憶するタグ更新処理と、このタグ更新処理内において、入力されたタグに対し、タグの右と左に登場した単語を記憶し、さらに各タグとその右に登場する語の組み合わせ、あるいは、各タグとその左に登場する語の組み合わせをキーとして文書集合内の各タグの登場位置を記憶するタグＬＲ記憶処理と、タグと単語から成るフレーズが検索クエリとして与えられた場合に、その検索クエリを解釈した上でフレーズ内の隣接する単語とタグの左右の関係を利用して複数のキーを作成し、これらのキーを元に文書インデックス作成処理において記憶されたキーを元に単語の登場位置、タグ更新処理において記憶されたキーを元に各タグの登場位置をそれぞれ参照し、その上でそれらを統合することでそのフレーズを含む文書の識別子の一覧を返却する文書検索処理とをコンピュータに実行させることを特徴とする。
任意の文字列をキーとし、その文字列に付加されている可能性のあるタグ名の集合を高速に参照可能とする高速タグ値判定処理と、タグ更新処理においてタグを付加する際にタグ名と文字列の関係を表すデータを更新する処理と、文書検索処理においてタグ名が連続するフレーズを検索クエリが入力された場合に、高速タグ値判定処理を利用し、特定のタグ名を含む可能性のある単語のみに絞ってタグの登場位置を読み込む処理とをさらにコンピュータに実行させることが望ましい。
文書インデックス処理において高頻度語およびタグ名をキーとし、その単語およびタグを含む文書の集合を表すビット列を記憶するビット列記憶処理と、タグ更新処理において、タグを更新する際に追加・削除されたタグを元にビット列記憶処理で記憶されたビット列を更新する処理と、文書検索処理において、検索クエリに含まれる高頻度語およびタグ名をキーとしてビット列記憶処理で記憶されたビット列を参照し、クエリ内の高頻度語およびタグ名がすべて含まれる文書の集合を表すデータを得、そのデータを元に文書集合を絞り込んだ上で単語とタグの登場位置を読み込む処理とをさらにコンピュータに実行させることもできる。
タグ更新処理内において、タグの集合に対して、各タグ名をキーとし、文書集合内のタグの登場位置と左右の単語を記憶するタグＮＬＲインデックス処理をコンピュータに実行させ、タグ更新ステップ内および文書検索ステップ内において、タグをキーとしその登場位置を更新あるいは検索する際に、そのタグがタグＮＬＲインデックス処理で記憶されているか、タグＬＲ更新処理で記憶されているかによって、参照先を選択する処理と、タグに関する頻度を元に、タグＮＬＲインデックス処理で作成されたデータを削除し、タグＬＲインデックス処理で作成するインデックス変換処理とをコンピュータに実行させることもできる。
【発明の効果】
【０００５】
本発明によれば、検索時にクエリのフレーズに含まれる隣接した単語とタグに対し、タグとその右あるいは左の単語をキーとしてインデックスを参照でき、読み込む文書リストの量を削減できるため、高速に検索処理を行うことができる。また、タグを更新する際には、タグＬＲインデックス記憶部に２箇所の更新を加えるのみでタグの更新が可能であり、少量の更新を行うのみでタグの更新を高速に行うことができる。
【図面の簡単な説明】
【０００６】
図１は本発明の望ましい第一の実施形態を示すブロック構成図である。
図２はタグ付けされた文書の一例を示す図である。
図３はタグが付加された文書をＸＭＬで表現した例を示す図である。
図４はＸＭＬＤＢで用いられるパス階層を示す図である。
図５はＸＭＬＤＢで用いられるインデックスの論理的構造を示す図である。
図６はＸＭＬＤＢにおいてタグを追加する際に更新が必要な範囲を示す図である。
図７は転置インデックスの一例を示す図である。
図８はＮｅｘｔｗｏｒｄインデックスのデータ構造例を示す図である。
図９はＮｅｘｔｗｏｒｄインデックスの一例を示す図である。
図１０はＮｅｘｔｗｏｒｄインデックスを用いた検索システムにおいてタグを追加・削除する際に更新が必要な範囲を示す図である。
図１１は本発明の第一の実施形態で想定する転置インデックスの例を示す図である。
図１２はタグＬＲインデックス記憶部内のデータの一例を示す図である。
図１３は本発明の望ましい第二の実施形態を示すブロック構成図である。
図１４は高速タグ値判定部の構成例を示すブロック図である。
図１５はタグ値テーブルの一例を示す図である。
図１６は問い合わせタスクのリストの一例を示す図である。
図１７は文書リスト列の一例を示す図である。
図１８は検索プロセスの処理のフローチャートである。
図１９はキー列の一例を示す図である。
図２０は問い合わせタスクのリストを作成する処理のフローチャートである。
図２１は問い合わせタスクの実行処理のフローチャートである。
図２２は文書リストの統合処理のフローチャートである。
図２３は位置関係のチェック処理を説明する図であり、キーごとの問い合わせにおける４つのケースを示す図である。
図２４は位置関係のチェック処理のフローチャートである。
図２５はタグの更新プロセスを説明する図である。
図２６は単語と文書番号と登場位置のリストの一例を示す図である。
図２７はキー列の一例を示す図である。
図２８は本発明の本発明の望ましい第三の実施形態を示すブロック構成図である。
図２９はビット列記憶部に記憶されるデータの一例を示す図である。
図３０は本発明の望ましい第四の実施形態を示すブロック構成図である。
図３１はタグＬＲ文書リストの一例を示す図である。
図３２は管理テーブルの一例を示す図である。
図３３はインデックス種がＮＬＲである場合の処理のフローチャートである。
図３４はインデックスの最適化プロセスのフローチャートである。
【発明を実施するための最良の形態】
【０００７】
本発明を実施するための最良の形態について図面を参照して詳細に説明する。
（第一の実施形態）
図１は本発明の第一の望ましい実施形態を示すブロック構成図であり、文書管理・検索システムの構成例を示す。この文書管理・検索システムは、単語の集合に対して、文書集合内での各単語の出現位置を記憶する単語インデックス記憶部１３と、単語に付加されてその単語の属性を表すタグの集合に対して、各タグの右と左に登場した単語の集合を記憶し、さらに各タグとその右に登場する語の組み合わせ、あるいは、各タグとその左に登場する語の組み合わせをキーとして文書集合内の各タグの登場位置を記憶するタグＬＲインデックス記憶部１４と、検索クエリとしてタグと単語から成るフレーズを入力とし、その検索クエリを解釈した上でフレーズ内の隣接する単語とタグの左右の関係を利用してタグＬＲインデックス記憶部１４を参照し、そのフレーズを含む文書の識別子の一覧を返却する文書検索部１５と、特定の文書中の部分文字列に対してタグを追加・削除するクエリを解釈し、タグＬＲインデックス記憶部１４の記憶内容を更新するタグ更新部１２と、一つ以上の文書が与えられた場合に、単語インデックス記憶部１３内のインデックスを更新する文書インデックス作成部１１とを備える。
単語インデックス記憶部１３は、単語に対する転置インデックス（Ｎとする）を記憶する。転置インデックスとは、単語をキーとし、文書集合内でその単語が登場する文書の文書番号とその文書内での登場位置の集合を参照できるデータを意味する。
図１１は本実施形例で想定する転置インデックスの例を示す。この例では、「山田」という単語をキーとし、「山田」という単語が文書集合において２回登場し、文書番号が３３３の文書において１回登場し、その登場位置は前方から７文字目であること、また、文書番号が３４６の文書において２回登場し、その登場位置は前方から４文字目と２０文字目であること、を示している。
単語インデックス記憶部１３は、文書インデックス作成部１１から、単語と、その単語を含む文書の文書番号と、その文書中での登場位置と、から成るデータの集合を受け取る。単語インデックス記憶部１３は、このデータを各単語をキーとした文書リストとして記憶する。さらに単語インデックス記憶部１３は、問い合わせ実行手段１５２から、少なくとも一つの単語から成るクエリを受け取ると、その単語の文書リストを返却する。
タグＬＲインデックス記憶部１４は、タグとその左右の語に対する転置インデックスとして、タグＬインデックス（ＴＬとする）とタグＲインデックス（ＴＲとする）から成るタグＬＲインデックスを記憶する。タグＬインデックスはあるタグに対して、そのタグが登場した際にその左に登場した単語の集合と、そのタグとその左に登場した単語をキーとするタグ文書リストを記憶する。同様に、タグＲインデックスはあるタグに対して、そのタグが登場した際に右側に存在した単語の集合と、そのタグとその右に登場した単語をキーとするタグ文書リストを記憶する。これにより、あるタグとその右／左に単語が存在するという条件でタグ文書リストを取り出すことができる。
図１２はタグＬＲインデックスの例を示す。この例では、［人名］というタグのタグＬインデックス内に「の」と「最近」という左の語のリストを、タグＲインデックス内に「社長」と「氏」という右の語のリスト持つ。タグＬインデックス・タグＲインデックス内の各データはタグ文書リストへの参照（ポインタ）として表現されており、例えば「［人名］→の」に対応するタグ文書リストはポインタ「＃Ｉ２５６」の位置にあり、このパターンは全文書中１９８５９回発生しており、文書番号が３３３の文書において［人名］タグが前方から７文字目から１０文字目に付加されていることを示している。
タグＬＲインデックス記憶部１４は、タグ更新部１２から命令種、タグ名、文書番号、開始位置、終了位置、左の単語、右の単語を含むデータを受け取り、内部のタグＬＲインデックスを更新する。命令種とは、少なくとも追加／削除の２種類のどちらかを識別する情報である。タグ名とは、追加／削除されるタグの名前を示す。文書番号とは、タグを追加／削除する対象の文書の文書番号である。開始位置と終了位置は、タグを追加／削除する文書内での位置である。左の単語は、開始位置の左に登場する単語である。右の単語は、開始位置の右に登場する単語である。
また、タグＬＲインデックス記憶部１４は、文書検索部１５から、参照先と参照キーとからなる問い合わせを受ける。なお、このうち参照先とはタグＬインデックスかタグＲインデックスかのどちらかを示すデータである。参照キーは「タグ名」か「タグ名→単語」で指定される。タグＬＲインデックス記憶部１４は、参照先と参照キーを入力として問い合わせを受け、参照キーが「タグ名」である場合、タグ名を元に参照先のタグＬインデックス／タグＲインデックス内を参照し、該当する左の語のリスト／右の語のリストを返却する。また、参照キーが「タグ名→単語」である場合、「タグ名→単語」というキーを元に参照先のタグＬインデックス／タグＲインデックス内を参照し、該当するタグ文書リストを返却する。
文書インデックス作成部１１は外部のプログラムあるいはユーザによって実行され、一つ以上の文書の集合が与えられた場合に、文書内に含まれる全単語を取り出し各単語に対し、少なくともその単語と、その文書の文書番号と、単語がその文書の本文内先頭から何文字目に登場するかを表す登場位置と、を単語インデックス記憶部１３に入力する。
タグ更新部１２は外部のプログラムあるいはユーザによって実行され、タグの追加・削除に関する命令文を入力とし、その命令文に従って、タグＬＲインデックス記憶部１４内のインデックスを更新する。タグの追加・削除に関する命令文とは、命令種、タグ名、文書番号、開始位置、終了位置、対象単語列、左の単語、右の単語、から成る情報である。
文書検索部１５は外部のプログラムあるいはユーザによって実行され、一つ以上のタグあるいは単語からなるフレーズ（検索クエリ）を入力とする。文書検索部１５はこの入力を元に、単語インデックス記憶部１３と、タグＬＲインデックス記憶部１４と、高速タグ値判定部１６とに問い合わせを行い、少なくとも文書番号のリストを検索結果として出力する。
この実施形態では、文書の検索時に、検索クエリに含まれる隣接した単語とタグに対し、タグＬＲインデックス記憶部１４内に記憶されたインデックスの双方向性を利用することでインデックスを参照でき、タグ名を２次キーに持たなくとも読み込む文書リストの量を削減できるため、高速に検索処理を行うことができる。また、タグの更新時に、タグＬＲインデックス記憶部１４内の２箇所に更新を加えるのみであり、少量の更新でタグの追加・削除を高速に行うことができる。
（第二の実施形態）
図１３は本発明の第二の望ましい実施形態を示すブロック構成図であり、文書管理・検索システムの構成例を示す。この文書管理・検索システムは、任意の文字列に付加されている可能性のあるタグ名のリストを持ち、文字列に付加される可能性のあるタグ名のリストを高速に参照可能とする高速タグ値判定部１６を備えたことが第一の実施形態と異なる。また、図１３には文書検索部１５の詳細を示す。すなわち文書検索部１５は、検索クエリを解釈し複数の条件に分解するクエリ解釈手段１５１と、クエリ解釈手段１５１によって解釈された複数の条件を元に単語インデックス記憶部１３とタグＬＲインデックス記憶部１４と高速タグ値判定部１６に対して問い合わせを行う問い合わせ実行手段１５２と、問い合わせ実行手段１５２において得られた一つ以上の文書リスト／タグ文書リストをお互いに比較し、同じ文書番号を持ちかつ検索クエリと同じフレーズを持つ文書だけの文書リストに統合する文書リスト統合手段１５３と、を有する。
図１４は高速タグ値判定部１６の構成例を示すブロック図である。高速タグ値判定部１６は、内部に、タグ値テーブル１６１と、更新手段１６２と、判定手段１６３とを備える。タグ値テーブル１６１は、タグとタグが付加される単語列との関係を記憶したテーブルである。更新手段１６２は、タグの更新部１２によって呼び出され、タグ名と、対象単語列（タグ付けの対象となる一つ以上の単語）と、命令種（追加／削除のどちらか）を入力とし、タグ値テーブル１６１内の関係情報を更新する。判定手段１６３は、問い合わせ実行手段１５２によって呼び出され、ある単語列を入力とし、タグ値テーブル１６１を参照した上で、その単語列に付加されている可能性のあるタグ名のリストを高速に返す。
図１５はタグ値テーブル１６１の一例を示す。タグ値テーブル１６１として、単語を２文字ごとに区切った文字列（２グラム）と、その２グラムに付加される可能性のあるタグ名のリスト（タグ名列）との間の関係を記憶したものを用いることができる。このタグ値テーブル１６１は、メモリ上のプログラムとして実装することができる。図１５に示した例では、例えば「山田」が含まれる文字列には、［人名］タグか［地名］タグが付加される可能性があることを示している。なお、この例では、元々１文字の単語（「の」など）に関しては、１文字のままタグ値テーブル内に記憶するものとしている。
このようなタグ値テーブル１６１に対して更新手段１６２は、タグ更新部１２によって入力された対象単語列を２グラムごとに区切り、各２グラムでタグ値テーブル１６１を参照し、対応するタグ名列を更新する。また、判定手段１６３は、問い合わせ実行手段１５２によって入力された文字列を２グラムごとに区切り、タグ値テーブル１６１を参照した上で、その文字列に付加されている可能性のあるタグ名のリストを返す。
文書検索部１５内のクエリ解釈手段１５１、問い合わせ実行手段１５２および文書リスト統合手段１５３について説明する。
クエリ解釈手段１５１は、外部のプログラムあるいはユーザによって実行され、検索クエリを入力とし、問い合わせ実行手段１５２に問い合わせタスクのリストを出力する。問い合わせタスクとは、参照先と参照キー、位置番号から成るデータである。参照先とは、問い合わせ時に参照するインデックスを意味しており、単語インデックス記憶部１３内の転置インデックス（Ｎ）か、タグＬＲインデックス記憶部１４内のタグＬインデックス（ＴＬ）か、タグＲインデックス（ＴＲ）か、のどれかである。参照キーは、インデックス内から文書リストを取り出すためのキーであり、参照先がＮである場合は一つの単語、参照先がＴＬかＴＲである場合は「［タグ名］→単語」あるいは「［タグ名］→［タグ名］」のような文字列で表現される１次キーと２次キーのセットである。なお、本発明では２次キーがタグ名となるインデックスを持たないため、単純に「［タグ名］→［タグ名］」をキーとしたタグ文書リストを取得することはできないが、この点はこの時点では考慮しない。また、位置番号とは、参照キーのクエリ中での位置を示しており、キー列内の位置番号から作成される。
図１６は、問い合わせタスクのリストの一例として、「［企業名］の［人名］」というクエリを元に作成されたものを示す。この例では、位置番号が１であり参照先がＴＲすなわちタグＲインデックスであり参照先が「［企業名］→の」である問い合わせタスクと、位置番号が３であり参照先がＴＬすなわちタグＬインデックスであり参照先が「［人名］→の」である問い合わせタスクとの二つの問い合わせタスクが作成されている。
問い合わせ実行手段１５２は文書検索部１５によって呼び出され、問い合わせタスクのリストを入力とする。問い合わせ実行手段１５２は、この問い合わせタスクのリストを元に、単語インデックス記憶部１３と、高速タグ値判定部１６と、タグＬＲインデックス記憶部１４と、を参照し、文書リスト列を文書リスト統合手段１５３に出力する。
図１７は文書リスト列の一例を示す。文書リスト列とは、単語インデックス記憶部１３とタグＬＲインデックス記憶部１４から得られた文書リスト・タグ文書リストの集合について、それぞれの文書リストと問い合わせタスクとを関連付ける情報である。図１７に示した例では、各問い合わせタスクの位置番号と、参照キーと、問い合わせによって得られた文書リストとを関係づけている。
文書リスト統合手段１５３は文書検索部１５によって呼び出され、文書リスト列を入力とし、それらを一つにまとめた文書リストを結果リストとして出力する。
次に、この実施形態における処理の流れを説明する。この実施形態おける処理は主に、検索プロセスと、タグの更新プロセスと、文書のインデックスプロセスの３つのプロセスを持つ。以下ではこれらを順に説明する。
図１８は検索プロセスの処理の流れを示す。検索プロセスは、ユーザもしくは外部のプログラムが検索クエリを文書検索部１５に入力することで開始する。
文書検索部１５はまず、クエリ解釈手段１５１を利用し、入力された検索クエリからキー列を作成する（Ｓ１１）。この処理は形態素解析やＮグラムなど、何らかの辞書やルールを用いて行われる。例えば、検索クエリの構文として、タグは「［」と「］」で囲まれ、その内部にタグ名あるいは、「タグ名：タグが付加される文字列」が記述されるもの、タグ以外の部分は自然言語で記述されるもの、として定義すると、この処理は、次のように行われる。クエリ解釈手段１５１はまず、検索クエリに対して「［」と「］」で囲まれる部分を取り出し、タグ名、あるいはタグ名とタグが付加される文字列を取り出す。次に、クエリ解釈手段１５１は形態素解析を行い、入力されたフレーズを単語ごとに区切った上でキー列を作成する。キー列は単語キーの列とタグキーの列であり、単語キーとはフレーズ内の一つの単語を表す。タグキーはフレーズ内の一つのタグ名を表す。単語キーとタグキーはフレーズを単語・タグごとに区切った場合に各単語／タグが先頭から何番目に登場するかを表す位置番号と共に記憶される。
図１９はキー列の一例を示す。ここでは、「［企業名：ａｂｃ産業］の［人名］社長］」というフレーズを元に作成したキー列を示す。このクエリは、［企業名］タグが付加された「ａｂｃ産業」という文字列、「の」という文字列、［人名］タグが付加された任意の文字列、「社長」という文字列、が連続して登場する文書を返せ、というクエリを意味し、図１９では、位置１に「ａｂｃ産業」という単語と［企業名］というタグが、位置２に「の」という単語が、位置３に［人名］というタグが、位置４に「社長」という単語が示される。またそれ以外の位置に記述されている「−」は、その位置に条件が無いことを意味している。
次にクエリ解釈手段１５１は、キー列を元に、問い合わせタスクのリスト（タスクリスト）を作成する（Ｓ１２）。このステップＳ１２について、本発明では、次の条件に基づいて問い合わせタスクを作成する任意の処理として定義する。
・［条件１］キー列内の各タグキーに対して、そのタグを１次キーとする問い合わせタスクを一つ以上作成すること。
・［条件２］キー列内の各単語キーに対して、その単語がキーに含まれる問い合わせタスクを一つ以上作成すること。
・［条件３］単語とタグが並んでいる場合は、タグＬＲインデックス記憶部１４への問い合わせを優先的に選択して問い合わせタスクを作成すること。
図２０は問い合わせタスクのリストを作成する処理（図１８のステップＳ１２）を実現するアルゴリズムの一例のフローチャートを示す。
クエリ解釈手段１５１はまず、キー列内の各タグキーの左右に単語がある場合に、タグＬＲインデックス記憶部１４への問い合わせタスクを作成する（Ｓ１２１）。クエリ解釈手段１５１は、キー列を左から（位置１から）順番に調べ、タグキーの右に単語キーが存在しないか調べる。存在する場合には、参照先を「ＴＲ」とし、参照キーを「そのタグキーのタグ名→その右の単語」、位置を「そのタグキーの位置番号」をとして問い合わせタスクを作成し、タスクリストに追加する。タグキーの右に単語キーが存在しない場合には、タグキーの左に単語キーが存在しないか調べる。存在する場合には、参照先を「ＴＬ」とし、参照キーを「そのタグキーのタグ名→その左の単語」、位置を「そのタグキーの位置番号」をとして問い合わせタスクを作成し、タスクリストに追加する。
次にクエリ解釈手段１５１は、まだ問い合わせタスクが作成されていないタグキーに対して、タグを連結した問い合わせタスクを作成する（Ｓ１２２）。クエリ解釈手段１５１はキー列を左から（位置１から）順番に調べ、タグキーを１次キーとする問い合わせタスクがまだ作成されていない場合、そのタグキーの右にタグキーが存在しないか調べる。存在する場合には、参照先を「ＴＲ」とし、参照キーを「そのタグキーのタグ名→右のタグキーのタグ名」、位置を「そのタグキーの位置番号」をとして問い合わせタスクを作成し、タスクリストに追加する。タグキーの右に単語キーが存在しない場合には、タグキーの左に単語キーが存在しないか調べる。存在する場合は、参照先を「ＴＬ」とし、参照キーを「そのタグキーのタグ名→左のタグキーのタグ名」、位置を「そのタグキーの位置番号」をとして問い合わせタスクを作成し、タスクリストに追加する。
最後に、クエリ解釈手段１５１は、まだ問い合わせタスクが作成されていない単語キーに対して、問い合わせタスクを作成する（Ｓ１２３）。クエリ解釈手段１５１はキー列を左から（位置１から）順番に調べ、単語キーを１次キーあるいは２次キーとする問い合わせタスクがまだ作成されていない場合、参照先を「Ｎ」、参照キーを「その単語」、位置を「その単語の位置」をとして問い合わせタスクを作成し、タスクリストに追加する。
なお、図２０のフローチャートで示されるアルゴリズムは右方向（Ｒインデックス）への参照を優先するアルゴリズムになっているが、左方向を優先したアルゴリズムも考えられる。また、上記の３つの条件を満たす上で左右どちらの参照でも良い場合に、両方の参照を元に文書リストの先頭の頻度を読み込み、少ない方を選択する、というアルゴリズムも考えられる。
次に、クエリ解釈手段１５１が作成した問い合わせタスクの集合を元に、問い合わせ実行手段１５２で各インデックスに問い合わせを行う（Ｓ１３）。図２１にこの処理を実現するアルゴリズムの一例のフローチャートを示す。この処理はステップＳ１２で作成された問い合わせタスクそれぞれに対して行われる。
問い合わせタスクの参照先が「Ｎ」である場合、問い合わせ実行手段１５２はその問い合わせタスクの参照キーで単語インデックス記憶部１３を調べ、該当する文書リストを読み込み、問い合わせタスクの参照キー、位置情報と共に保持する（Ｓ１３１）。
また、問い合わせタスクの参照先が「ＴＬ」もしくは「ＴＲ」である場合、問い合わせ実行手段１５２はその問い合わせタスクの参照キー内の２次キーが単語であるかタグであるかを調べる。単語である場合、参照先と参照キー「タグ名→単語」とをタグＬＲインデックス記憶部１４に問い合わせ、該当するタグ文書リストを読み込む（Ｓ１３２）。問い合わせタスクの参照キー内の２次キーがタグである場合、問い合わせ実行手段１５２はタグＬＲインデックス記憶部１４と高速タグ値判定部１６を利用してタグ文書リストを読み込む（Ｓ１３３）。
ステップＳ１３３の処理をさらに詳細に説明する。問い合わせ実行手段１５２はまず、参照先と「１次キーのタグ名」とをタグＬＲインデックス記憶部１４に問い合わせ、Ｌインデックス／Ｒインデックス内の左の語のリスト／右の語のリストを得る（Ｓ１３３１）。次に問い合わせ実行手段１５２は、右の語のリスト／左の語リスト内の各単語を高速タグ値判定部１６に入力し、タグ名列を取得する。そしてタグ名列に２次キーのタグ名が含まれるかどうかを調べ、含まれない場合、その単語は読み込んだ右の語のリスト／左の語リストから削除する（Ｓ１３３２）。
次に問い合わせ実行手段１５２は、１次キーのタグ名と、右の語のリスト／左の語リスト内の各語を２次キーとしたものを参照キーとして利用してタグＬＲインデックス記憶部１４に問い合わせを行い、得られたタグ文書リストの集合を足し合わせたものを一つのタグ文書リストとする。
ステップＳ１３の処理においては、複数の問い合わせタスクを実行するが、その順番は任意で良い。さらに、ある問い合わせタスクの結果から文書番号のリストＤＬを保持しておき、それ以降の問い合わせタスクにおいて文書リスト／タグ文書リストを読み込む際に、ＤＬ内に文書番号が含まれない登場位置／開始位置と終了位置を読み込まないことで処理の高速化を計ることもできる。
ここでは高速タグ値判定部１６を利用したアルゴリズムについて説明したが、このアルゴリズムを少し修正することで、第一の実施形態のように高速タグ値判定部１６を設けない場合にも利用することができる。例えば、図２１のフローによって示されるアルゴリズムにおいて、ステップＳ１３３２を行わず、ステップＳ１３３３において、１次キーのタグ名だけを条件としすべての右の語のリスト／左の語リストに対してタグ文書リストを読み込む、などが考えられる。また、予め一つのタグ名だけをキーとしたタグ文書リストを記憶する転置インデックスを作成しておき、ステップＳ１３３を、１次キーだけを用いてその転置インデックスを参照し、タグ文書リストを読み込む処理、に置き換えても良い。
次に、問い合わせ実行手段１５２によって得られたＭ本の文書リスト／タグ文書リストから成る文書リスト列を元に、文書リスト統合手段１５３で、文書番号がすべて等しくかつ単語・タグの登場位置がキー列と等しい文書の文書番号を取り出す（Ｓ１４）。図２２にこの処理を実現するアルゴリズムの一例のフローチャートを示す。なお、このアルゴリズムは、単語インデックス記憶部１３内に記憶される文書リストと、タグＬＲインデックス記憶部１４内に記憶されるタグ文書リストと、がそれぞれ文書番号と登場位置／開始位置を元にソートされていることを前提とする。
文書リスト統合手段１５３はまず、各文書リストに対応するＭ個の整数値のポインタを用意し、初期値をすべて１として作成する（Ｓ１４１）。次に文書リスト統合手段１５３は、各文書リスト／タグ文書リストからポインタ番目にある登場位置とその文書番号のセット／開始位置と終了位置と文書番号のセットを取り出す（Ｓ１４２）。次に文書リスト統合手段１５３は、ステップＳ１４２で得られたＭ個の文書番号がすべて等しいかどうか（Ｓ１４３）、また、それぞれの登場位置が、キー列の位置番号の隣接関係と正しいかどうか（Ｓ１４４）を調べ、それらの条件を満たす場合、その文書がヒットしたと判定し、文書番号を出力結果リストに追加する（Ｓ１４５）。そうでない場合、Ｍ個のポインタのうち、最小のものに１を足し（Ｓ１４６）、そのポインタが文書リストの末尾に達したかどうかを調べる（Ｓ１４７）。もし末尾に達している場合、処理を終了する（Ｓ１４８）。そうでない場合、ステップＳ１４２に戻る。
図２３はステップＳ１４４のアルゴリズムを説明する図である。このアルゴリズムでは、キー列を左から順番に調べていき、各キーを１次キーとして得た文書中の登場位置／開始位置と、一つ左のキーから得た終了位置と比較し、隣接しているかどうかを調べていく。ただし、この評価の方法はｉ番目のキーに対してどのように問い合わせが行われたかに依存する。そこでまず、位置ｉのキーに対してその問い合わせ方を４つのケースに分類する。図２３はこの４つのケースを示し、各ケースを表現するために、それぞれキー列の例とそのキー列において問い合わせに使用した１次キーを点線の楕円で、１次キーから２次キーへの参照を点線の矢印で表現している。
まず、ケースＡはｉ番目のキーを１次キーとして使用した問い合わせが存在しないケースである。このケースは図で示すように単語キーが２次キーとして使用されたケースである。ケースＢはｉ番目にタグキーのみが存在し、１次キーがタグである問い合わせが行われたケースである。よって、１次キーがタグである問い合わせ（この例では「Ｂ→Ａ」）に対して位置のチェックを行う必要がある。ケースＣはｉ番目に単語キーのみが存在し、単語キーを１次キーとして問い合わせが行われたケースである。よって、この単語キーのみを利用した問い合わせに対して位置のチェックを行う必要がある。ケースＤはｉ番目に単語キーとタグキーの両方があり、それぞれを１次キーとした問い合わせが行われたケースである。よって、これらの問い合わせに対してそれぞれ位置関係をチェックする必要がある。そこで本アルゴリズムでは、これらのケースごとに位置のチェックを行っていくこととする。
図２４はステップＳ１４４のアルゴリズムを説明するフローチャートである。
ステップＳ１４４において文書リスト統合手段１５３は、まず、二つの変数ｉを１にＰを−１に初期化する（Ｓ１４４０１）。なお、本アルゴリズムはキー列を左から順番に調べていく処理になっており、変数ｉは現在調べているキーのキー列内での位置を表す。また、変数Ｐは一つ左のキーから予測される位置ｉ番目のキーの文書内での登場位置／開始位置を表す。
次に文書リスト統合手段１５３は、キー列ｉ番目のキーに対してどのような問い合わせが行われたかを判定する（Ｓ１４４０２）。この判定処理は、位置番号がｉとなっている問い合わせタスクの参照キーにおいて１次キーを調べ、それがタグキーであるか単語キーであるかを調べることで行われる。ケースＡの場合、位置チェックは行われず、Ｐが初期値（−１）で無ければ次の（ｉ＋１番目の）キーの位置チェックに備え、Ｐに単語キーの文字長を足す（Ｓ１４４０３）。
ケースＢの場合、ｉ番目のタグキーに対する位置チェックが行われる（Ｓ１４４０４）。タグキーに対する位置チェックとは、次の条件Ｔ１とＴ２が満たされるかどうかを判定する処理を指す。
条件Ｔ１：タグキーを１次キーとした問い合わせが複数ある場合に、それぞれの問い合わせで得られた開始位置同士と終了位置同士が一致していること。
条件Ｔ２：Ｐが−１である（タグキーが先頭である）、もしくは、Ｐがタグキーを１次キーとして得られた開始位置と等しい（左のキーで得られた登場位置と隣接している）こと。
これらが満たされる場合、一致しているとみなし、Ｐにタグキーを元に得られた終了位置＋１を代入する（Ｓ１４４０５）。そうでない場合、一致しないと判定し、Ｓ１４４の処理を終える。
ケースＣの場合、ｉ番目の単語キーに対する位置チェックが行われる（Ｓ１４４０６）。単語キーに対する位置チェックとは、次の条件Ｗが満たされるかどうかを判定する処理を指す。
条件Ｗ：Ｐが−１である（単語キーが先頭である）、もしくは、Ｐが単語キーを１次キーとして得られた登場位置と等しい（左のキーで得られた登場位置と隣接している）こと。これが満たされる場合、一致しているとみなし、Ｐに単語キーを元に得られた登場位置＋単語キーの文字長を代入する（Ｓ１４４０７）。そうでない場合、一致しないと判定し、Ｓ１４４の処理を終える。
ケースＤの場合、ｉ番目の単語キーとタグキーに対する位置チェックが行われる（Ｓ１４４０８）。単語キーとタグキーに対する位置チェックとは、条件Ｔ１、条件Ｔ２、条件Ｗの条件に加え、次の条件ＴＷがすべて満たされるかどうかを判定する処理を指す。
条件ＴＷ：タグキーを１次キーとした問い合わせから得た終了位置と、単語キーをキーとした問い合わせから得た登場位置＋単語キーの文字長と、が一致すること。
これが満たされている場合、一致しているとみなし、Ｐにタグキーを元に得られた終了位置＋１を代入する（Ｓ１４４０９）。そうでない場合、一致しないと判定し、Ｓ１４４の処理を終える。
さらに、ステップＳ１４４１１において文書リスト統合手段１５３はｉに１を足し、ｉがキー列の長さを超えないかを調べ（Ｓ１４４１２）、もし超える場合、すべての位置関係が正しいと判断し、Ｓ１４４の処理を終える。そうでない場合、ステップＳ１４４０２に戻る。
最後に、文書検索部１５は文書リスト統合手段１５３によって得られた結果リストを出力する（Ｓ１５）。
次に、文書インデックスの作成プロセスについて説明する。文書インデックスの作成プロセスは、外部のプログラムあるいはユーザによって一つ以上の文書が入力されることによって、動作を開始する。
一つ以上の文書が入力されると、文書インデックス作成部１１は、入力されたそれぞれの文書に対して、文書の本文を読み込み、形態素解析プログラムやＮグラム作成プログラムを用いて本文を単語ごとに区切り、単語列を作成する。次に、文書インデックス作成部１１は単語列を前方から順に調べ、各単語に対して文書先頭前方からの文字数を登場位置として数える。さらに文書インデックス作成部１１は、単語インデックス記憶部１３に対して各単語、文書番号、登場位置を与える。
図２５はタグの更新プロセスを説明する図である。タグの更新プロセスは、外部のプログラムあるいはユーザによってタグの追加・削除に関する命令文が入力され、タグ更新部１２が呼び出されることによって開始される。タグの追加・削除に関する命令文とは、命令種（追加／削除）、タグ名、文書番号、開始位置、終了位置、タグ付けされる（されている）対象文字列、タグの左の単語、タグの右の単語、から成る情報である。
命令文が入力されると、タグ更新部１２は、タグ名とタグ付けされる左の語を元にタグＬＲインデックス記憶部１４内のＬインデックスを参照し、該当のタグ文書リストを命令種に応じてタグ文書リストの更新を行う（Ｓ２１）。命令種が追加である場合、該当のタグ文書リストに、文書番号とタグの開始位置とタグの終了位置とを追加する。命令種が削除である場合、該当するタグ文書リストを読み込み、文書番号、開始位置、終了位置が一致する部分を探し、その部分を削除する。同様に、タグ名とタグ付けされる右の語を元にタグＬＲインデックス記憶部１４内のＲインデックスを参照し、文書番号とタグの開始位置とタグの終了位置の追加・削除を行う（Ｓ２２）。
次にタグ更新部１２は、高速タグ値判定部１６内の更新手段１６２を呼び出し、命令種、タグ名、タグ付けされる対象文字列を入力する（Ｓ２３）。例えば、タグ値テーブル１６１が図１５に示すテーブルをメモリ上のプログラムとして実装したものであるとする。この場合、更新手段１６２は、命令種が追加である場合、タグの付加された文字列を２グラムに区切り、各２グラムに対してタグ値テーブル１６１を参照し、入力されたタグ名がタグ名列に含まれるか否かを調べる。もしタグ名がタグ名列に含まれない場合、そのタグ名をタグ名列に追加する。命令種を調べ削除である場合、何もしない。なお、第一の実施形態のように高速タグ値判定部１６を用いない場合には、Ｓ２３の処理を行わないものとする。
以上説明した実施形態の動作について、具体的な例を用いてさらに詳しく説明する。
ここではまず、文書インデックスの作成プロセスについて説明する。例えば、図２に示した文書３３３が文書インデックス作成部１１に入力されると、文書インデックス作成部１１は本文内の単語を区切り、単語と文書番号と登場位置のリストを作成する。このリストの一部を図２６に示す。次に文書インデックス作成部１１は、このリストを単語インデックス記憶部１３に入力する。単語インデックス記憶部１３は図２６のリストを元に、転置インデックスを作成する。この転置インデックスの一部の例が図１１に示したものである。
次に、タグの更新プロセスについて説明する。例えば、図２に示した文書３３３の７文字目から１０文字目の「山田太郎」という２単語に、「人名」というタグを付加することを考える。このとき、命令文として「命令種（タグ名、文書番号、開始位置、終了位置、対象語、左の語、右の語）」という構文を想定すると、「ＡＤＤ（”人名”、３３３、７、１０、”山田太郎”、”の”、”社長”）」という命令文が入力される。なお、「ＡＤＤ」は追加を意味する。
このとき、タグ更新部１２は、タグＬＲインデックス記憶部１４内のＬインデックスに「［人名］→の」というキーで問い合わせを行い、該当するタグ文書リストに、文書番号３３３、開始位置７、終了位置１０を追記する。さらに、タグＬＲインデックス記憶部１４内のＲインデックスに「［人名］→社長」というキーで問い合わせを行い該当するタグ文書リストに、文書番号３３３、開始位置７、終了位置１０を追記する。この結果作成されたタグＬＲインデックス記憶部１４内のデータが図１２に示したものである。
また、タグ更新部１２は、命令文内の［人名］というタグ名と、「山田太郎」という文字列と、命令種「ＡＤＤ」とを、高速タグ値判定部１６内の更新手段１６２に入力する。更新手段１６２は「山田太郎」という文字列を２文字ごとに区切り、「山田」、「田太」および「太郎」という文字列を作成する。次に更新手段１６２は、タグ値テーブル１６１を参照し、「山田」、「田太」および「太郎」をキーとするタグ名列を参照し、「人名」が含まれていない場合、「人名」を追加する。この結果作成されたタグ値テーブル１６１の例が図１５に示したものである。
次に、削除の例を挙げる。ここでは同様に、図２に示した文書３３３の７文字目から１０文字目の「山田太郎」という２単語に付加された「人名」というタグを付加することを考える。このとき、命令文として「ＲＭ（”人名”、３３３、７、１０、”山田太郎”、”の”、”社長”）」という命令文が入力される。なお、「ＲＭ」は削除を意味する。
このとき、タグ更新部１２は、タグＬＲインデックス記憶部１４内のＬインデックスに「［人名］→の」というキーで問い合わせを行い、該当するタグ文書リストを読み込み、文書番号３３３、開始位置７、終了位置１０となっている部分を削除する。
さらに、タグＬＲインデックス記憶部１４内のＲインデックスに「［人名］→社長」というキーで問い合わせを行い該当するタグ文書リストに、文書番号３３３、開始位置７、終了位置１０となっている部分を削除する。
また、タグ更新部１２は、命令文内の［人名］というタグ名と「山田太郎」という文字列と命令種「ＲＭ」を高速タグ値判定部１６内の更新手段１６２に入力する。この場合、命令種が「ＲＭ」（削除）であるため、更新手段１６２は何もしない。
次に、検索プロセスの具体的な例を示す。例えば、検索クエリの構文として、タグは「［」と「］」で囲まれ、その内部にタグ名あるいは、「タグ名：タグが付加される文字列」が記述されるもの、タグ以外の部分は自然言語で記述されるもの、として定義したときに、「［企業名］の［人名］」というクエリが投げられた場合、文書検索部１５は次のように動作する。
クエリ解釈手段１５１はまず、このクエリを解釈し、図２７に示したキー列に変換する（Ｓ１１）。次にクエリ解釈手段１５１は、このキー列を元にステップＳ１２１の処理を行い、図１６に示した問い合わせタスクを作成する（Ｓ１２）。
問い合わせ実行手段１５２は、これら二つのタスクをそれぞれタグＬＲインデックス記憶部１４に問い合わせ、図１７に示したような文書リスト列を作成する。
文書リスト統合手段１５３は、この文書リスト列を元に、文書番号が一致し、各単語／タグがフレーズ通りになっている文書集合を表す結果リストを作成する。この処理は次のように行われる。
文書リスト統合手段１５３はまず、図１７に示したタグ文書リストを先頭から順に読み込み、「［企業名］→の」という問い合わせから文書番号３３３、開始位置１、終了位置５、「［人名］→の」という問い合わせから文書番号３３３、開始位置７、終了位置１０、というデータを読み出す（Ｓ１４２）。
文書リスト統合手段１５３は、これらのデータの間で文書番号が一致していることを確かめ（Ｓ１４３）、ステップＳ１４４の処理に進む。ステップＳ１４４で文書リスト統合手段１５３は、キー列を前方から順に調べる。キー列の１番目はタグキー［企業名］であり、［企業名］を１次キーとする問い合わせタスクが存在するため、ステップＳ１４４０２ではケースＢとして判定し、Ｓ１４４０４の処理を行う。ここではタグキーが単一でＰが初期値の−１であるため、ステップＳ１４４０５の処理を行い、Ｐ＝６（「［企業名］→の」という問い合わせから得た終了位置５＋１）とされる。
次に文書リスト統合手段１５３は、キー列２番を読み込む。キー列の２番目は「の」であるが、「の」を１次キーとする問い合わせタスクが存在しないため、ステップＳ１４４０２ではケースＡとして判定し、Ｐに「の」の長さ１を加え、Ｐ＝７とする（Ｓ１４４０３）。
次に文書リスト統合手段１５３は、キー列の３番目を読み込む。キー列の３番目は［人名］であり、該当する問い合わせタスクが存在するため、さらに、キー列３番のタグキー［人名］に対しては、ステップＳ１４４０２でケースＢとして判定し、「［人名］→の」という問い合わせから得られた開始位置７とＰの比較を行う（Ｓ１４４０４）。現在Ｐ＝７であるため、［企業名］タグと「の」と［人名］タグが隣接しており、文書リスト統合手段１５３はステップＳ１４４０５、Ｓ１４４１０、Ｓ１４４１１の処理を経て、正しいと判定され、Ｓ１４５の処理を行う。Ｓ１４５では、文書番号３３３を結果リストに加える。
文書リスト統合手段１５３は、Ｓ１４７の条件を満たすまでこの処理を行い、最終的に得られた結果リストを出力する（Ｓ１５）。
また、別の検索クエリの例として「［企業名］［助詞］［人名］」というフレーズを考える。この例の場合、クエリ解釈手段１５１はクエリを解釈し（Ｓ１１）、キー列に変換した上で下記の問い合わせタスクを作成する（Ｓ１２）。
・参照先「ＴＲ」、参照キー「［企業名］→［助詞］」、位置「１」
・参照先「ＴＲ」、参照キー「［助詞］→［人名］」、位置「２」
・参照先「ＴＬ」、参照キー「［人名］→［助詞］」、位置「３」
問い合わせ実行手段１５２は、ステップＳ１３の処理において、各問い合わせタスクをタグＬＲインデックス記憶部１４に問い合わせる。なお、ここではこのうち、参照先「ＴＬ」、参照キー「［人名］→［助詞］」、位置「３」の問い合わせタスクについて説明する。
システムはまず、［人名］を１次キーとして、図１３に示した左の語リストとして、「の」と「最近」を読み込む（Ｓ１３３１）。次に問い合わせ実行手段１５２は、高速タグ値判定部１６にそれぞれの語を問い合わせ、助詞が含まれる可能性が無い語を削除する。例えば、高速タグ値判定部１６内のタグ値テーブルが図１５の通りであるとすると、「最近」という語に助詞は含まれないので削除する（Ｓ１３３２）。次に問い合わせ実行手段１５２は、残った語「の」を利用して「［人名］→「の」」という参照を元にタグＬインデックス内からタグ文書リストを読み出す（Ｓ１３３３）。以降のステップＳ１４、Ｓ１５は前述の例と同様であるため説明を省略する。
この実施形態では、第一の実施形態と同様に、高速に検索処理を行うことができるとともに、少量の更新でタグの追加・削除を高速に行うことができる。さらに、任意の文字列をキーとし、その文字列に付加されている可能性のあるタグ名の集合を高速に参照可能とする高速タグ値判定部１６を備えたことにより、検索時に隣接したタグＡＢに対し、Ａの右に登場する単語の集合に対してＢのタグが付加されている可能性のある単語に絞ってタグ文書リストを読み出すことができるため、タグが隣接するクエリに対しても高速にフレーズを高速に参照できる。
（第三の実施形態）
図２８は本発明の第三の望ましい実施形態を示すブロック構成図であり、文書管理・検索システムの構成例を示す。この文書管理・検索システムは、本発明の第二の実施形態の構成に、ビット列記憶部１７をさらに備える。
ビット列記憶部１７は、単語あるいはタグ名と、各単語あるいはタグ名に対して、そのタグ名がどの文書に含まれるかを表すビット列との関係を記憶する。このビット列は文書集合と同じ長さを持ち、各ビットが各文書に対応し、キーが各文書に含まれている（１）かそうでない（０）かを表す。
図２９はビット列記憶部１７内に記憶されるデータの一例を示す。このデータはＮ番目のビットが文書番号Ｎ番に対応しており、例えば、「は」という単語は文書番号１番、２番、３番、４番、６番・・・の文書に含まれ、また、［人名］というタグは文書番号１番、２番、４番、５番・・・の文書に含まれることを意味している。なお、図２９はビット列記憶部１７で管理されるデータの論理的な関係を表したものであり、実際のデータの記憶形式はどのようなものでも良いものとする。
ビット列記憶部１７は、文書インデックス作成部１１から単語と文書番号を受け取り、入力された単語をキーとするビット列の更新を行う。また、ビット列記憶部１７は、タグ更新部１２からタグ名と文書番号と命令種とを受け取り、このタグ名に対応するビット列を更新する。また、ビット列記憶部１７は、問い合わせ実行手段により呼び出され、単語またはタグ名を入力とし、内部に対応するキーが存在する場合、対応するビット列を返却する。
このとき、検索プロセスは次のように行われる。文書検索部１５に検索クエリが入力されると、文書検索部１５は検索プロセスＰ１０のステップＳ１１によりクエリを解釈した後、キー列に含まれる単語・タグ名をそれぞれビット列記憶部１７に問い合わせ、それぞれのビット列を取り出す。そして文書検索部１５は、得られた複数のビット列に対しＡＮＤ演算を行うことで、キー列内のすべてのキーが含まれる集合を表現したビット列ＢＬを作成する。次に文書検索部１５は、Ｓ１２の処理を行い問い合わせタスクの集合を作成した後、Ｓ１３において各問い合わせタスクの文書リスト・タグ文書リストに対する問い合わせを行い、文書リスト／タグ文書リストを読み込む際（Ｓ１３１、Ｓ１３２、Ｓ１３３３）に、ビット列ＢＬを参照し、文書リスト／タグ文書リスト内の個々の文書番号番目のビットが１である場合（対応する文書にキーがすべて含まれている場合）のみに登場位置／開始位置と終了位置を読み込む。さらに、Ｓ１４においては、Ｓ１４３の処理を行わず、Ｓ１４３の条件分岐では必ずＳ１４４へ進むものとする。以降の処理は第一および第二の実施形態における検索プロセスと同じである。
タグの更新プロセスは次のように行われる。タグ更新部１２はステップＳ２１からＳ２３の処理を終えた後、新たにビット列記憶部１７の更新処理としてステップＳ２４を行う。ステップＳ２４とは、タグ名と文書番号と命令種をビット列記憶部１７に入力し、ビット列の更新を行う処理である。ステップＳ２４においてビット列記憶部１７はまず、命令種を調べ、命令種が追加である場合、タグ名をキーとして対応するビット列を読み出し、文書番号番目のビットを「１」に更新する。命令種が削除である場合、何もしない。
文書の更新プロセスは次のように行われる。第一および第二の実施形態と同様の文書の更新プロセスを終えた後、ステップＳ３１を行う。ステップＳ３１とは、文書インデックス作成部１１が、ビット列記憶部１７に単語と文書番号を入力する処理である。この処理においてビット列記憶部１７は、単語をキーとして対応するビット列を読み出し、文書番号番目のビットを「１」に更新する。
なお、ステップＳ３１の処理は、特定の単語のみに対して行うもの、としても良い。例えば、予め高い頻度を持つ単語の辞書ＨＤを用意しておき、ステップＳ３１の処理を行う前に単語とＨＤを比較し、単語がＨＤ内に含まれる場合のみＳ３１を行うことが考えられる。
次に、具体的な例を用いて本実施形態の動作を説明する。例えば、「［企業名］の［人名］」というクエリが入力されたとすると、クエリ解釈手段１１は、Ｓ１１の処理を行い、［企業名］、「の」、［人名］というキーから成るキー列を作成する。次に問い合わせ実行手段１５２は、ビット列記憶部１７内に記憶されたデータ（図２９）を参照し、それぞれのキーに対応するビット列を読み出し、ＡＮＤ演算を行う。この結果「１１００１０１０００１００」というビット列を得る。これにより、［企業名］、「の」、［人名］という３つのキーが登場する文書の集合を文書番号１番、文書番号２番、文書番号５番・・・に絞り込むことができる。次に問い合わせ実行手段１５２は、ステップＳ１３において文書リスト・タグ文書リストを読み込む際に、この文書集合に当てはまる部分だけを読み込む。以降の処理は、第一および第二の実施形態における文書の更新プロセスと同様である。
この実施形態では、問い合わせ実行手段において、検索時に予めクエリに含まれる単語／タグ名を元にビット列記憶部を参照してビット列を読み込み、それをＡＮＤ演算によって調べることで、クエリ内のすべての単語／タグ名が含まれる文書を高速に発見できるため、文書リストの読み込み量を削減でき、検索をさらに高速に行うことができる。
（第四の実施形態）
図３０は本発明の第四の望ましい実施形態を示すブロック構成図である。この文書管理・検索システムは、タグを管理するタグ管理部１９を備え、このタグ管理部１９内に、タグＬＲインデックス記憶部１４と、タグの集合に対して文書集合内のタグの登場位置と左右の単語を記憶するタグＮＬＲインデックス記憶部１８と、タグＮＬＲインデックス記憶部１８内のインデックスをタグＬＲインデックス記憶部１４内のインデックスに変換する変換手段２０と、タグの統計情報に基づきインデックスの持ち方を変更する管理手段２１と、を備える。
タグ管理部１９は、問い合わせ実行手段１５２から問い合わせを受けると、内部の管理手段２１にその入力のデータを渡し、管理手段２１が出力するデータを問い合わせ実行手段１５２に返却する。また、タグ管理部１９は、タグ更新部１２から更新の命令文を受けると、内部の管理手段２１にその命令文に入力する。
タグＮＬＲインデックス記憶部１８は、内部に、タグの集合に対して各タグ名をキーとするタグＬＲ文書リストを持つ。タグＬＲ文書リストとは、タグ文書リストが持つデータに加えて、左の単語と、右の単語とを加えたデータである。
図３１はタグＬＲ文書リストの一例を示す。この例では、［人名］というタグが文書集合内で１００００１回登場し、文書番号３３３の文書において７文字目から１０文字目にあり、その左には「の」という単語が、その右には「社長」という単語があることを示している。
タグＬＲインデックス記憶部１４は、第一の実施形態で示した図１２のタグＬＲインデックスと同じ情報を持つ。
変換手段２０は、管理手段２１に呼び出され、タグＬＲ文書リストを入力とし、ＬインデックスとＲインデックスを出力する。
管理手段２１は、内部に管理テーブルを持つ。管理テーブルとは、タグ名、タグの文書内の頻度、インデックス種の関係を記憶するテーブルである。なお、このうちインデックス種とは、該当のタグのインデックスがどこに作成されているかを表し、その値はタグＮＬＲインデックス記憶部１８である（ＮＬＲ）か、タグＬＲインデックス記憶部１４である（ＬＲ）かのどちらかである。
図３２に管理テーブルの一例を示す。この例は、［人名］タグが文書集合に１００００１回登場しており、インデックスが現在タグＮＬＲインデックス記憶部１８内に記憶されていることを意味する。
管理手段２１は、命令種、タグ名、文書番号、開始位置、終了位置、左の単語、右の単語を含むデータ（命令文）を入力されると、タグ名を元に管理テーブルを参照し、タグ名に対応するインデックス種を取り出し、該当のインデックスに入力された命令文をそのままを入力する。管理手段２１は、参照キーと参照先とを入力とする問い合わせを受け、参照キー内のタグ名を元に管理テーブルを参照し、タグ名に対応するインデックス種を取り出し、該当のインデックスに問い合わせを行う。管理手段２１はまた、任意のタイミングで管理テーブル内のタグの頻度とインデックス種を調べる。そして、タグの頻度が閾値αよりも大きく、かつ、インデックス種が「ＮＬＲ」であるタグ名がある場合、タグＮＬＲインデックス記憶部１８内からそのタグ名に対応するタグＬＲ文書リストを読み込み、変換手段２０を利用してタグＬインデックスとタグＲインデックスを作成し、タグＬＲインデックス記憶部１４内に追加する。なお、閾値αとは任意の固定的な数である。
次にこの実施形態における処理の流れを説明する。この実施形態は主に、検索プロセスと、タグの更新プロセスと、文書のインデックスプロセスの３つのプロセスを持つが、これらのプロセスは、第一ないし第三の実施形態におけるタグＬＲインデックス記憶部１４の動作をタグ管理部１９に置き換えたものと等しい。そこでここでは、タグ管理部１９内の処理のみを説明することとし、タグ管理部１９に対するタグの更新プロセスと、タグ管理部１９に対する問い合わせプロセスと、インデックスの最適化プロセスとを説明する。
まず、タグ管理部１９に対するタグの更新プロセスについて説明する。タグの更新プロセスは、タグ更新部１２が、タグの追加・削除に関する命令文を管理部１９に入力することで開始される。このとき、システムはまず、タグ名を元に管理テーブルを参照し、タグ名に対応する頻度を更新する。頻度の更新は次のように行われる。命令文の命令種が追加である場合には頻度に１を足し、命令種が削除である場合には頻度から１を引く。
次にシステムは、タグ名を元に管理テーブルを参照し、該当するインデックス種を取り出す。インデックス種がＬＲである場合、命令文をタグＬＲインデックス記憶部１４に与え、ステップＳ２１とＳ２２の処理を行う。インデックス種がＮＬＲである場合、システムは次のように処理を行う。システムは、入力されたタグ名をキーとしてタグＬＲ文書リストを読み込んだ上で、命令種が追加である場合には、タグＬＲ文書リストに文書番号、開始位置、終了位置、左の単語、右の単語を追加する。命令種が削除である場合には、タグＬＲ文書リストから文書番号、開始位置、終了位置が一致する部分を探し出しその部分を削除する。
次に、タグ管理部１９に対する問い合わせプロセスについて説明する。このプロセスは、問い合わせ実行手段１５２がタグ管理部１９に参照キーと参照先とを入力とする問い合わせを行うことで開始される。
このとき、システムはまず、タグ名を元に管理テーブルを参照し、該当するインデックス種を取り出す。インデックス種がＬＲである場合、タグＬＲインデックス記憶部１４に対し問い合わせが行われる。この問い合わせ処理は、第一の実施形態におけるタグＬＲインデックス記憶部１４に対する問い合わせと同様である。
図３３はインデックス種がＮＬＲである場合の処理のフローチャートを示す。インデックス種がＮＬＲである場合、システムは、問い合わせ内の参照キーに含まれるタグ名を元に、対応するタグＬＲ文書リストを読み込み、変換手段２０を利用してタグＬインデックスとタグＲインデックスを作成する。
すなわち、システムはまず、コンピュータのメモリ上など高速に追加・参照できる位置に、空のタグＬインデックスと空のＲインデックスを作成する（Ｓ５１）。
次にシステムは、タグＬＲインデックスを前方から順に調べ、文書番号、開始位置、終了位置、左の語、右の語とから成る５つのデータを読み込むたびに、次の処理を行う。システムは、タグＬインデックス内に「タグ名→左の語」というキーを持つタグ文書リストが存在するかどうか調べ、もし存在すれば、タグ文書リストの末尾に文書番号と開始位置と終了位置を追加する。もし存在しなければ文書番号と開始位置と終了位置とを元に新たにタグ文書リストを作成し「タグ名→左の語」というキーで登録する。さらに、タグＲインデックスに対しても同様の処理を行い、タグＲインデックスに「タグ名→右の語」というキーで文書番号と開始位置と終了位置とを追加する（Ｓ５２）。
この上で、参照キーが「タグ名」である場合は右の単語リスト／左の単語リストを返却し、参照キーが「タグ名→単語」である場合は該当するタグＬインデックス／タグＲインデックス内の該当の位置を参照し、タグ文書リストを返却する（Ｓ５３）。
図３４はインデックスの最適化プロセスのフローチャートを示す。インデックスの最適化プロセスは、管理テーブル内の１行のデータ（タグ名、頻度、インデックス種）を入力とし、任意のタイミングで実行される。例えば、この実行のタイミングとして、タグ管理部１９に対するタグの更新プロセスが終わった際にタグの更新プロセス内で更新された管理テーブル内の行に対して実行することや、毎日午前３時に全行に対してそれぞれ実行すること、などが考えられる。
インデックスの最適化プロセスが開始されると、システムは頻度とインデックス種を調べる。閾値α以上でありかつインデックス種が「ＮＬＲ」である場合、管理手段２１はタグＮＬＲインデックス記憶部１８を調べ、このタグ名に対応するタグＬＲ文書リストを読み込む（Ｓ６１）。次に管理手段２１は、変換手段２０を利用してこのタグＬＲ文書リストからタグＬインデックスとタグＲインデックスを作成する（Ｓ６２）。さらに管理手段２１は、作成したタグＬインデックスとタグＲインデックスをタグＬＲインデックス記憶部１４内に追加する（Ｓ６３）。次に、管理手段２１は同タグ名を用いて管理テーブル内を参照し、インデックス種を「ＬＲ」に更新する（Ｓ６４）。最後に管理手段２１は、このタグ名に対応するタグＮＬＲインデックス記憶部１８内からこのタグＬＲ文書リストとキーを削除する（Ｓ６５）。
なお、上記のアルゴリズムでは、タグの頻度を元にインデックスの記憶先を変更しているが、この判定基準は他にも、左の語の種類数、右の語の種類数、タグに対する問い合わせ回数、あるいはそれらを組み合わせて算出される数などが考えられる。
次に、具体的な例を用いてこの実施形態の動作を説明する。なお、ここでは、インデックスの最適化プロセスについて説明する。
例えば、図３２で示した管理テーブル内の人名タグの行に注目し、閾値αが１０００００である状況を想定する。このとき、インデックスの最適化プロセスは次のように動作する。管理手段２１はまず頻度とインデックス種を調べる。このとき、タグの頻度が閾値以上でありインデックス種が「ＮＬＲ」であることから、管理手段２１はタグＮＬＲインデックス記憶部１８に対して問い合わせを行い、図３１の人名をキーとしたタグＬＲ文書リストを取得する（Ｓ６１）。さらに管理手段２１は、変換手段２０を利用してこのタグＬＲ文書リストからタグＬインデックスとタグＲインデックスを作成し、図１２で示したインデックスを得（Ｓ６２）、これをタグＬＲインデックス記憶部１４に記憶する（Ｓ６３）。さらに管理手段２１は、図３２で示した管理テーブル内の人名に対するインデックス種を「ＬＲ」に変更し（Ｓ６４）、タグＮＬＲインデックス記憶部１８内からこのタグＬＲ文書リストと「人名」というキーを削除する（Ｓ６５）。
このように、本実施形態では、タグの統計情報を元に、タグＮＬＲインデックスと、タグＬＲインデックスを切り替えて用いる。タグＬＲインデックスは左右の単語を元にそれぞれ文書リストを持つために高速な反面、双方向にインデックスを作成するため冗長であり記憶するデータ量が大きくなるという特徴がある。そこで、元々頻度が短く、検索時に文書リストの読み込み量が少ない低頻度なタグに関してはタグＮＬＲインデックスを利用してインデックスを小さくしておくことで、データ量と検索の高速化のバランスを取ることができる。すなわち、元々文書リストが短い低頻度なタグに対してＬＲインデックスを作成することを避けることができ、インデックスとして保持するデータの量を削減しつつ、検索の高速性を維持することができる。
（第五の実施形態）
本発明はコンピュータ・プログラムとして実施することができ、また、記憶媒体あるいはネットワークを経由して頒布することができる。
このようなコンピュータ・プロクラムは、一つ以上の文書が与えられた場合に、その文書に含まれる単語の集合に対し、各単語をキーとして、その登場位置を記憶する文書インデックス作成処理と、特定の文書中の部分文字列に対しタグを追加・削除するクエリが与えられた場合に、そのタグ名をキーとしタグの登場位置を記憶するタグ更新処理と、このタグ更新処理内において、入力されたタグに対し、タグの右と左に登場した単語を記憶し、さらに各タグとその右に登場する語の組み合わせ、あるいは、各タグとその左に登場する語の組み合わせをキーとして文書集合内の各タグの登場位置を記憶するタグＬＲ記憶処理と、タグと単語から成るフレーズが検索クエリとして与えられた場合に、その検索クエリを解釈した上でフレーズ内の隣接する単語とタグの左右の関係を利用して複数のキーを作成し、これらのキーを元に文書インデックス作成処理において記憶されたキーを元に単語の登場位置、タグ更新処理において記憶されたキーを元に各タグの登場位置をそれぞれ参照し、その上でそれらを統合することでそのフレーズを含む文書の識別子の一覧を返却する文書検索処理とをコンピュータに実行させるためのコードで構成される。
任意の文字列をキーとし、その文字列に付加されている可能性のあるタグ名の集合を高速に参照可能とする高速タグ値判定処理と、タグ更新処理においてタグを付加する際にタグ名と文字列の関係を表すデータを更新する処理と、文書検索処理においてタグ名が連続するフレーズを検索クエリが入力された場合に、高速タグ値判定処理を利用し、特定のタグ名を含む可能性のある単語のみに絞ってタグの登場位置を読み込む処理とをさらにコンピュータに実行させるコードを含むことが望ましい。
文書インデックス処理において高頻度語およびタグ名をキーとし、その単語およびタグを含む文書の集合を表すビット列を記憶するビット列記憶処理と、タグ更新処理において、タグを更新する際に追加・削除されたタグを元にビット列記憶処理で記憶されたビット列を更新する処理と、文書検索処理において、検索クエリに含まれる高頻度語およびタグ名をキーとしてビット列記憶処理で記憶されたビット列を参照し、クエリ内の高頻度語およびタグ名がすべて含まれる文書の集合を表すデータを得、そのデータを元に文書集合を絞り込んだ上で単語とタグの登場位置を読み込む処理とをさらにコンピュータに実行させるコードを含むことができる。
タグ更新処理内において、タグの集合に対して、各タグ名をキーとし、文書集合内のタグの登場位置と左右の単語を記憶するタグＮＬＲインデックス処理をコンピュータに実行させ、タグ更新ステップ内および文書検索ステップ内において、タグをキーとしその登場位置を更新あるいは検索する際に、そのタグがタグＮＬＲインデックス処理で記憶されているか、タグＬＲ更新処理で記憶されているかによって、参照先を選択する処理と、タグに関する頻度を元に、タグＮＬＲインデックス処理で作成されたデータを削除し、タグＬＲインデックス処理で作成するインデックス変換処理とをコンピュータに実行させるコードを含むこともできる。
本発明はタグを用いて文書を管理・検索するシステムの一部分として有効である。本発明では、タグを含むフレーズを元に、そのフレーズを含む文書集合を表す文書番号のリストを高速に決定する部分に焦点を絞っている。よって、本発明の構成に加え、文書番号から、その文書自体を参照する文書データベースを用意することにより、タグを含むフレーズにより、文書集合を読み出せる検索エンジンとして利用可能である。
本発明は、タグの更新を想定した上でタグを含むフレーズ検索を実現する技術である。このような技術が求められるアプリケーションとしては、大規模な文書集合を分析するテキストマイニングの分野が挙げられる。テキストマイニングでは、文書にタグを付加し、そのタグを利用して分析が行われる。通常、文書集合に対してどのようなタグ付けが好ましいかどうかは事前にわからないことが多い。そこで、大量の文書集合を予めインデックス化しておき、種々のタグ付け手段を用いてタグ付けを行っていき、タグやそのタグを含むフレーズで検索し、その頻度や文書集合を取り出すことで、効率良く文書集合から知識を取り出すことができる。本発明はこのような場合に有益である。
この出願は、２００７年１１月１５日に出願された日本出願特願第２００７−２９６３８６号を基礎とする優先権を主張し、その開示のすべてをここに取り込むものである。
【図１】
2009063925.tif 000003
【図２】
2009063925.tif 000004
【図３】
2009063925.tif 000005
【図４】
2009063925.tif 000006
【図５】
2009063925.tif 000007
【図６】
2009063925.tif 000008
【図７】
2009063925.tif 000009
【図８】
2009063925.tif 000010
【図９】
2009063925.tif 000011
【図１０】
2009063925.tif 000012
【図１１】
2009063925.tif 000013
【図１２】
2009063925.tif 000014
【図１３】
2009063925.tif 000015
【図１４】
2009063925.tif 000016
【図１５】
2009063925.tif 000017
【図１６】
2009063925.tif 000018
【図１７】
2009063925.tif 000019
【図１８】
2009063925.tif 000020
【図１９】
2009063925.tif 000021
【図２０】
2009063925.tif 000022
【図２１】
2009063925.tif 000023
【図２２】
2009063925.tif 000024
【図２３】
2009063925.tif 000025
【図２４】
2009063925.tif 000026
【図２５】
2009063925.tif 000027
【図２６】
2009063925.tif 000028
【図２７】
2009063925.tif 000029
【図２８】
2009063925.tif 000030
【図２９】
2009063925.tif 000031
【図３０】
2009063925.tif 000032
【図３１】
2009063925.tif 000033
【図３２】
2009063925.tif 000034
【図３３】
2009063925.tif 000035
【図３４】
2009063925.tif 000036
【国際調査報告】
2009063925.tif 000037
2009063925.tif 000038