(57)【特許請求の範囲】
【請求項１】
文書を分割して生成したＮ（Ｎは自然数）文字の文字列、又は検索時にキーワードとして使用される頻度が一定条件を超えるＮ＋１文字以上の文字列をキーとし、そのキーを含む文書の識別子、及びその文書におけるキーの出現位置を保持する混合Ｎ−ｇｒａｍインデックスを作成する、インデックス作成部と、
前記混合Ｎ−ｇｒａｍインデックスを参照することにより、入力された検索キーを含む文書のリストを出力する検索部と、を備え、
前記インデックス作成部は、前記文書のある位置からＮ文字分の文字列を前記混合Ｎ−ｇｒａｍインデックスに登録すると共に、前記ある位置からＮ＋１文字以上Ｎ＋Ｍ（Ｍは２以上の自然数）文字以下の各々の文字列について、検索時にキーワードとして使用される頻度が一定条件を超える場合には、前記混合Ｎ−ｇｒａｍインデックスに登録し、
前記検索部は、まず、前記検索キーそのもので前記混合Ｎ−ｇｒａｍインデックスを検索し、前記検索キーと一致するキーが存在する場合には、そのキーを含む文書のリストを出力し、前記検索キーと一致するキーが存在しない場合には、前記検索キーをＮ文字の文字列に分割し、分割した各々の文字列で前記混合Ｎ−ｇｒａｍインデックスを検索し、各々の文字列と一致するキーが存在する場合には、そのキーを含む文書におけるキーの出現位置に基づいて、その文書が前記検索キーを含むか否かを判定し、前記検索キーを含むと判断された文書のリストを出力する、文書検索装置。
【請求項２】
前記検索部は、
検索時にキーワードとして使用された文字列をキーとし、そのキーワードの使用回数を保持する検索キーインデックスを作成し、
前記インデックス作成部は、
前記検索キーインデックスを参照し、前記使用回数が一定条件を超えるＮ＋１文字以上のキーを混合Ｎ−ｇｒａｍインデックスのキーとして登録する、請求項１に記載の文書検索装置。
【請求項３】
文書を分割して生成したＮ（Ｎは自然数）文字の文字列、又は検索時にキーワードとして使用される頻度が一定条件を超えるＮ＋１文字以上の文字列をキーとし、そのキーを含む文書の識別子、及びその文書におけるキーの出現位置を保持する混合Ｎ−ｇｒａｍインデックスを作成する工程と、
前記混合Ｎ−ｇｒａｍインデックスを参照することにより、入力された検索キーを含む文書のリストを出力する工程と、を備え、
前記インデックスを作成する工程では、前記文書のある位置からＮ文字分の文字列を前記混合Ｎ−ｇｒａｍインデックスに登録すると共に、前記ある位置からＮ＋１文字以上Ｎ＋Ｍ（Ｍは２以上の自然数）文字以下の各々の文字列について、検索時にキーワードとして使用される頻度が一定条件を超える場合には、前記混合Ｎ−ｇｒａｍインデックスに登録し、
前記文書のリストを出力する工程では、まず、前記検索キーそのもので前記混合Ｎ−ｇｒａｍインデックスを検索し、前記検索キーと一致するキーが存在する場合には、そのキーを含む文書のリストを出力し、前記検索キーと一致するキーが存在しない場合には、前記検索キーをＮ文字の文字列に分割し、分割した各々の文字列で前記混合Ｎ−ｇｒａｍインデックスを検索し、各々の文字列と一致するキーが存在する場合には、そのキーを含む文書におけるキーの出現位置に基づいて、その文書が前記検索キーを含むか否かを判定し、前記検索キーを含むと判断された文書のリストを出力する、文書検索方法。
【請求項４】
コンピュータを、
文書を分割して生成したＮ（Ｎは自然数）文字の文字列、又は検索時にキーワードとして使用される頻度が一定条件を超えるＮ＋１文字以上の文字列をキーとし、そのキーを含む文書の識別子、及びその文書におけるキーの出現位置を保持する混合Ｎ−ｇｒａｍインデックスを作成する、インデックス作成部と、
前記混合Ｎ−ｇｒａｍインデックスを参照することにより、入力された検索キーを含む文書のリストを出力する検索部と、して機能させるプログラムであって、
前記インデックス作成部は、前記文書のある位置からＮ文字分の文字列を前記混合Ｎ−ｇｒａｍインデックスに登録すると共に、前記ある位置からＮ＋１文字以上Ｎ＋Ｍ（Ｍは２以上の自然数）文字以下の各々の文字列について、検索時にキーワードとして使用される頻度が一定条件を超える場合には、前記混合Ｎ−ｇｒａｍインデックスに登録し、
前記検索部は、まず、前記検索キーそのもので前記混合Ｎ−ｇｒａｍインデックスを検索し、前記検索キーと一致するキーが存在する場合には、そのキーを含む文書のリストを出力し、前記検索キーと一致するキーが存在しない場合には、前記検索キーをＮ文字の文字列に分割し、分割した各々の文字列で前記混合Ｎ−ｇｒａｍインデックスを検索し、各々の文字列と一致するキーが存在する場合には、そのキーを含む文書におけるキーの出現位置に基づいて、その文書が前記検索キーを含むか否かを判定し、前記検索キーを含むと判断された文書のリストを出力する、プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、文書検索装置、文書検索方法、及びプログラムに関する。
【背景技術】
【０００２】
記憶装置に記憶された大量の文書ファイルの中から、入力されたキーワードを含む文書を検索する全文検索技術が知られている。全文検索を行う文書検索装置においては、予め検索対象の文書ファイルのインデックスを作成しておき、検索時にはこのインデックスのキーワードと入力された検索キーワードを照合する方法が一般的である。
【０００３】
従来の文書検索装置は、インデックスの作成方法によって大きく２つに分けられる。１つは、辞書を用いて文書を単語に分割し、単語をインデックスのキーとする形態素解析方式であり、もう１つは、文書をＮ文字ずつに分割してインデックスのキーとするＮ−ｇｒａｍ方式である。
【０００４】
形態素解析方式は検索速度が速いという利点があるが、インデックス作成速度は遅い。また、インデックス作成の際に間違った単語の切り出しを行うと、検索漏れが発生するという問題がある。間違った単語の切り出しを避けるためには、インデックス作成の際に用いる辞書のメンテナンスが必要である。
【０００５】
Ｎ−ｇｒａｍ方式は、インデックス作成速度が速く、検索漏れも少ないため広く利用されている方式であるが、検索時に入力された検索キーをＮ文字のキーに分割し、それぞれのキーでのインデックス検索結果を統合する必要があるため、検索速度が遅いという短所を持っている。なお、Ｎ−ｇｒａｍ方式では、Ｎが小さすぎても大きすぎても性能が劣化するため、一般に２文字ずつに文書を分割するｂｉ−ｇｒａｍ方式が広く利用されている。
【０００６】
特許文献１には、テキストデータを全文検索する情報検索方法において、検索対象テキストを単語単位に分割し、単語単位に分割したテキストから、単語の区切りを示す単語情報を持ち文字数がＮである単語情報付文字列インデックスを作成し、単語情報付文字列インデックスから、検索語を文字列検索または単語検索もしくはその両方で検索する方法が記載されている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００１−０３４６２３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
特許文献１に記載された方法では、単語の区切りを調べることにより検索ノイズを減らそうとしているが、通常のＮ−ｇｒａｍ方式に比べると検索漏れが増える可能性がある。
【０００９】
そこで、本発明の目的は、検索漏れを起こさず、かつ検索を高速に行うことが可能な文書検索装置を得ることである。
【課題を解決するための手段】
【００１０】
本発明に係る文書検索装置は、文書を分割して生成したＮ（Ｎは自然数）文字の文字列、又は検索時にキーワードとして使用される頻度が一定条件を超えるＮ＋１文字以上の文字列をキーとし、そのキーを含む文書の識別子、及びその文書におけるキーの出現位置を保持する混合Ｎ−ｇｒａｍインデックスを作成する、インデックス作成部と、前記混合Ｎ−ｇｒａｍインデックスを参照することにより、入力された検索キーを含む文書のリストを出力する検索部と、を備え、前記検索部は、まず、前記検索キーそのもので前記混合Ｎ−ｇｒａｍインデックスを検索し、前記検索キーと一致するキーが存在する場合には、そのキーを含む文書のリストを出力し、前記検索キーと一致するキーが存在しない場合には、前記検索キーをＮ文字の文字列に分割し、分割した各々の文字列で前記混合Ｎ−ｇｒａｍインデックスを検索し、各々の文字列と一致するキーが存在する場合には、そのキーを含む文書におけるキーの出現位置に基づいて、その文書が前記検索キーを含むか否かを判定し、前記検索キーを含むと判断された文書のリストを出力するものである。
【発明の効果】
【００１１】
本発明によれば、検索漏れを起こさず、かつ検索を高速に行うことが可能な文書検索装置を得ることができる。
【図面の簡単な説明】
【００１２】
【図１】本発明の実施の形態による、文書検索装置の構成を示すブロック図。
【図２】本発明の実施の形態による、文書検索装置の動作を説明する図。
【図３】本発明の実施の形態による、文書検索装置の動作のフローチャート。
【図４】本発明の実施の形態による、文書検索装置の動作のフローチャート。
【図５】本発明の実施の形態による、文書検索装置の動作のフローチャート。
【発明を実施するための形態】
【００１３】
次に、本発明を実施するための形態について、図面を参照して詳細に説明する。
実施の形態
図１は、本発明の実施の形態による文書検索装置１０の構成を示すブロック図である。
文書検索装置１０は、入力部１、出力部２、検索部３、検索キーインデックス記憶部４、混合ｂｉ−ｇｒａｍインデックス（混合Ｎ−ｇｒａｍインデックス）記憶部５、及びインデックス作成部６を備えている。なお、文書検索装置１０はＮ−ｇｒａｍ方式の中でも、２文字ずつに文書を分割するｂｉ−ｇｒａｍ方式を用いている。
【００１４】
入力部１、出力部２、検索部３、およびインデックス作成部６は、プログラムに従ってコンピュータのプロセッサが行う動作のモジュールを表している。検索キーインデックス記憶部４、混合ｂｉ−ｇｒａｍインデックス記憶部５は、メモリやハードディスクにより実現される。
【００１５】
入力部１は、利用者が、検索を実行する際に検索キーの入力を行うキーボード、マウス等によって実現される。
【００１６】
出力部２は、検索結果としてヒットした文書ファイル等のリストを表示するディスプレイなどの表示装置によって実現される。
【００１７】
検索部３は、混合ｂｉ−ｇｒａｍインデックス記憶部５を参照し、入力部１を介して入力された検索キーを含む文書ファイルのリストを結果として出力する。検索部３は、まず検索キーそのもので混合ｂｉ−ｇｒａｍインデックス記憶部５を参照し、検索キーと一致するキーワードを有する文書ファイルがあれば、ヒットした文書ファイルをリストの形式で出力部２へ通知する。
【００１８】
もし、検索キーと一致するキーワードを有する文書ファイルがない場合、検索キーの長さが２文字より長い場合は、検索キーを２文字ずつに分割して混合ｂｉ−ｇｒａｍインデックス記憶部５を参照し、ヒットしたレコードのファイルＩＤと文字の出現位置に基づいて、検索キーを含む文書ファイルを取得し、取得した文書ファイルをリストの形式で出力部２へ通知する。さらに、検索キーが２文字より長い場合は、その検索キーを検索キーインデックス記憶部４に登録する。
【００１９】
検索キーインデックス記憶部４は、検索に用いられた検索キーをキーとして、検索回数、最終検索日時を保持するインデックスを記憶する。
【００２０】
混合ｂｉ−ｇｒａｍインデックス記憶部５は、文書を各文字位置から２文字ずつ取り出したものと検索に利用された検索キーをキーとするインデックスを記憶する。
【００２１】
インデックス作成部６は、文書ファイルを走査して混合ｂｉ−ｇｒａｍインデックスを作成し、混合ｂｉ−ｇｒａｍインデックス記憶部５に記憶する。すなわち、インデックス作成部６は、通常のｂｉ−ｇｒａｍインデックスの２文字キーに加えて、検索キーインデックス記憶部４を参照し、２文字より長いキーを追加する。
【００２２】
次に、文書検索装置１０の動作について説明する。
なお、一般の検索装置では、フォルダと時間等を指定すると、指定されたフォルダの配下にあるフォルダ内の文書ファイルを定期的に参照し、更新されたファイルがあったら、その更新内容をインデックスに反映させるような仕組みで運用される。また、Ｗｅｂ上の文書ファイルを検索対象とする場合は、フォルダをたどる代わりに、ｈｔｍｌファイル内のＵＲＬをたどってインデックスを更新する。ここでは、単純化のため、ファイルを指定すると、そのファイルに関してインデックスを更新する仕組みとする。
【００２３】
まず、図２と図３用いてインデックス作成部６の動作について説明する。
インデックス作成部６は、文書ファイルｆｉｌｅ１．ｔｘｔやｆｉｌｅ２．ｔｘｔなどから、混合ｂｉ−ｇｒａｍインデックスを作成する。図２に示すように、ｆｉｌ１．ｔｘｔの内容は、「今日は良い天気です。・・・」であり、ｆｉｌ２．ｔｘｔの内容は、「今日は良い日です。・・・」である。
【００２４】
まず、インデックス作成部６は、ｆｉｌｅ１．ｔｘｔとそのＩＤ（１）を受け取る（図３：ステップＳ１）。
【００２５】
ｆｉｌｅ名とＩＤの対応関係は、図２に示す「ファイルＩＤ対応テーブル」に保持される。ファイルＩＤ対応テーブルは、例えば、混合ｂｉ−ｇｒａｍインデックス記憶部５に保持することができる。なお、ファイルのＩＤの変わりに直接ファイル名を混合ｂｉ−ｇｒａｍインデックス記憶部５に保持するようにしてもよい。ただし、文字列のままでは記憶容量が大きくなり、処理効率も悪いので、ここではファイル名をＩＤに変換している。
【００２６】
次に、まず同一のファイルが更新された場合のことを想定し、すでに、混合ｂｉ−ｇｒａｍインデックス中の「ファイルＩＤ＝出現位置」を保持するフィールドに、ｆｉｌｅ１．ｔｘｔのＩＤがあれば、それを消去する（ステップＳ２）。すなわち、１＝〜（〜は任意）のペアを削除する。ファイルＩＤ＝出現位置フィールドが空になれば、キー自体も削除する。
【００２７】
次に、ファイル中の文書をバッファに読み込み、先頭から１文字ずつずらして、インデックス登録処理を行う（ステップＳ３〜Ｓ７）。
【００２８】
まず、ｆｉｌｅ１．ｔｘｔの先頭から２文字のキーを登録する。すなわち、キー：「今日」、ファイルＩＤ＝出現位置：１＝０というレコードを混合ｂｉ−ｇｒａｍインデックス記憶部５に登録する（ステップＳ４）。
【００２９】
次に、２文字より大きいキーを、検索キーインデックス記憶部４を参照して検索する。すなわち、検索キーインデックス記憶部４から「今日は」、「今日は良」、「今日は良い」等を検索する。最大何文字まで検索するかは、例えば８文字のように、あらかじめ決めておく。
【００３０】
２文字より大きいキーが検索キーインデックスに存在し、検索回数が一定以上（例えば５件）で、検索日時が現在より一定期間内（例えば１０日）などの条件を満たす場合には、そのキーを混合ｂｉ−ｇｒａｍインデックス記憶部５に登録する。
【００３１】
例えば、ポインタが文書の先頭から３つ進んだ状態でキーが「良い天気です。」の場合、図２に示す検索キーインデックスの中の「良い天気」がヒットするので、キー：「良い天気」、ファイルＩＤ＝出現位置：１＝３というデータを混合ｂｉ−ｇｒａｍインデックス記憶部５に登録する（ステップＳ５）。
【００３２】
ポインタを１文字進め（ステップＳ６）、ファイルの最後まで進んだら、登録が完了する（ステップＳ７：ＮＯ）。
【００３３】
次に、図４を用いて検索部３の動作を説明する。
まず、検索部３は、利用者が入力部１を介して入力した検索キーを取得する（ステップＳ１１）。
【００３４】
次に、検索部３は、入力された検索キーで、混合ｂｉ−ｇｒａｍインデックス記憶部５を検索する（ステップＳ１２）。
【００３５】
入力された検索キーでヒットするキーがあった場合には（ステップＳ１３：ＹＥＳ）、そのキーのファイルＩＤ＝出現位置に登録されているファイルＩＤをファイル名に変換して出力部２に出力する（ステップＳ１５）。
【００３６】
入力された検索キーでヒットするキーがなかった場合には（ステップＳ１３：ＮＯ）、検索キーを２文字ずつに分割して、それぞれのキーについて混合ｂｉ−ｇｒａｍインデックス記憶部５を検索し、ヒットするキーに登録されているファイルＩＤのリストを取得する（ステップＳ１４）。さらに、ファイルＩＤをファイル名に変換して出力部２に出力する（ステップＳ１５）。
【００３７】
さらに、検索キーが３文字以上である場合には（ステップＳ１６：ＹＥＳ）、その検索キーを検索キーインデックス記憶部４に登録する（ステップＳ１７）。
【００３８】
次に、図５を用いて検索キーインデックス記憶部４の更新処理について説明する。
まず、検索部３は、利用者が入力部１を介して入力した検索キーを取得する（ステップＳ２１）。
【００３９】
次に、取得した検索キーで検索キーインデックス記憶部４を検索する（ステップＳ２２）。
【００４０】
検索キーインデックスに、取得した検索キーでヒットするキーがあった場合には（ステップＳ２３：ＹＥＳ）、そのキーのレコードの「検索回数」を１加算し、「検索日時」に現在の日時を登録する（ステップＳ２４）。
【００４１】
取得した検索キーでヒットするキーがなかった場合には（ステップＳ２３：ＮＯ）、検索キーインデックス記憶部４にそのキーのレコードを追加し、「検索日時」には現在の日時を登録する（ステップＳ２５）。
【００４２】
以上のように、本実施形態によれば、混合ｂｉ−ｇｒａｍインデックスとして、通常のｂｉ−ｇｒａｍインデックスのキーに加え、よく利用される検索キーの場合には、その検索キー自体をインデックスのキーとすることにより、同一の検索キーが何度も検索される環境において、検索漏れを起こさずに、かつ検索速度を向上させることができる。特に、社内文書の検索など、同一の文字列が検索キーとしてよく使われる環境では有効である。
【００４３】
本発明の効果について具体例を用いて説明する。例えば、検索キーとして「良い天気」が入力された場合を例に説明する。また、混合ｂｉ−ｇｒａｍインデックスの内容は図２に示すものとする。
【００４４】
まず、「良い天気」という４文字の検索キーが混合ｂｉ−ｇｒａｍインデックス記憶部５に登録されていない場合には、検索キーを２文字ずつに分割し、それぞれのキーについて混合ｂｉ−ｇｒａｍインデックス記憶部５を検索する（通常のＮ−ｇｒａｍ方式の検索）。
【００４５】
この結果、キー：「良い」、ファイルＩＤ＝出現位置：１＝３、２＝３、及びキー：「天気」、ファイルＩＤ＝出現位置：１＝５の２つのレコードがヒットする。この中で、ファイルＩＤが共通に存在し、それぞれの出現位置が順番どおりつながるものを探す。この場合、「天気」の出現位置が「良い」の出現位置より２文字分後のものを選ぶ必要がある。キー「良い」のファイルＩＤ＝出現位置「１＝３」、キー「天気」のファイルＩＤ＝出現位置「１＝５」がこの条件を満たすため、ファイルＩＤ＝１、すなわち（ｆｉｌｅ１．ｔｘｔ）に「良い天気」が含まれると判断できる。
【００４６】
インデックスの規模が大きくなると、それぞれのキーについてレコードが何千件もヒットする可能性があり、検索速度が遅くなってしまう。一方、本実施形態によれば、「良い天気」という検索キーの使用頻度が多い場合には、混合ｂｉ−ｇｒａｍインデックスに登録されているため、上記のような通常のＮ−ｇｒａｍ方式の検索処理を省略することができ、検索の高速化が実現できる。
【００４７】
上記の実施の形態の一部または全部は、以下の付記のようにも記載されうるが、以下には限られない。
（付記１）文書を分割して生成したＮ（Ｎは自然数）文字の文字列、又は検索時にキーワードとして使用される頻度が一定条件を超えるＮ＋１文字以上の文字列をキーとし、そのキーを含む文書の識別子、及びその文書におけるキーの出現位置を保持する混合Ｎ−ｇｒａｍインデックスを作成する、インデックス作成部と、
前記混合Ｎ−ｇｒａｍインデックスを参照することにより、入力された検索キーを含む文書のリストを出力する検索部と、を備え、
前記検索部は、まず、前記検索キーそのもので前記混合Ｎ−ｇｒａｍインデックスを検索し、前記検索キーと一致するキーが存在する場合には、そのキーを含む文書のリストを出力し、前記検索キーと一致するキーが存在しない場合には、前記検索キーをＮ文字の文字列に分割し、分割した各々の文字列で前記混合Ｎ−ｇｒａｍインデックスを検索し、各々の文字列と一致するキーが存在する場合には、そのキーを含む文書におけるキーの出現位置に基づいて、その文書が前記検索キーを含むか否かを判定し、前記検索キーを含むと判断された文書のリストを出力する、文書検索装置。
【００４８】
（付記２）前記検索部は、
検索時にキーワードとして使用された文字列をキーとし、そのキーワードの使用回数を保持する検索キーインデックスを作成し、
前記インデックス作成部は、
前記検索キーインデックスを参照し、前記使用回数が一定条件を超えるＮ＋１文字以上のキーを混合Ｎ−ｇｒａｍインデックスのキーとして登録する、付記１に記載の文書検索装置。
【００４９】
（付記３）文書を分割して生成したＮ（Ｎは自然数）文字の文字列、又は検索時にキーワードとして使用される頻度が一定条件を超えるＮ＋１文字以上の文字列をキーとし、そのキーを含む文書の識別子、及びその文書におけるキーの出現位置を保持する混合Ｎ−ｇｒａｍインデックスを作成する工程と、
前記混合Ｎ−ｇｒａｍインデックスを参照することにより、入力された検索キーを含む文書のリストを出力する工程と、を備え、
前記文書のリストを出力する工程では、まず、前記検索キーそのもので前記混合Ｎ−ｇｒａｍインデックスを検索し、前記検索キーと一致するキーが存在する場合には、そのキーを含む文書のリストを出力し、前記検索キーと一致するキーが存在しない場合には、前記検索キーをＮ文字の文字列に分割し、分割した各々の文字列で前記混合Ｎ−ｇｒａｍインデックスを検索し、各々の文字列と一致するキーが存在する場合には、そのキーを含む文書におけるキーの出現位置に基づいて、その文書が前記検索キーを含むか否かを判定し、前記検索キーを含むと判断された文書のリストを出力する、文書検索方法。
【００５０】
（付記４）コンピュータを、
文書を分割して生成したＮ（Ｎは自然数）文字の文字列、又は検索時にキーワードとして使用される頻度が一定条件を超えるＮ＋１文字以上の文字列をキーとし、そのキーを含む文書の識別子、及びその文書におけるキーの出現位置を保持する混合Ｎ−ｇｒａｍインデックスを作成する、インデックス作成部と、
前記混合Ｎ−ｇｒａｍインデックスを参照することにより、入力された検索キーを含む文書のリストを出力する検索部と、して機能させるプログラムであって、
前記検索部は、まず、前記検索キーそのもので前記混合Ｎ−ｇｒａｍインデックスを検索し、前記検索キーと一致するキーが存在する場合には、そのキーを含む文書のリストを出力し、前記検索キーと一致するキーが存在しない場合には、前記検索キーをＮ文字の文字列に分割し、分割した各々の文字列で前記混合Ｎ−ｇｒａｍインデックスを検索し、各々の文字列と一致するキーが存在する場合には、そのキーを含む文書におけるキーの出現位置に基づいて、その文書が前記検索キーを含むか否かを判定し、前記検索キーを含むと判断された文書のリストを出力する、プログラム。
【符号の説明】
【００５１】
１  入力部、２  出力部、３  検索部、４  検索キーインデックス記憶部、５  混合ｂｉ−ｇｒａｍインデックス記憶部、６  インデックス作成部、１０  文書検索装置
【図１】
0005560971.tif 000002
【図３】
0005560971.tif 000003
【図４】
0005560971.tif 000004
【図５】
0005560971.tif 000005
【図２】
0005560971.tif 000006