(57)【特許請求の範囲】
【請求項１】
文字情報を文字コードとして蓄積したテキストデータベースを対象として、
対象テキストデータから所定の部分文字列と、該部分文字列の対象テキストデータにおける出現位置情報を抽出し、該出現位置情報をインデクスとして二次記憶装置に格納するインデクス作成登録ステップと、
検索タームから所定の部分文字列を抽出し、該部分文字列に対応するインデクスを読み出し、該検索タームにおける部分文字列と同じ位置関係を持つ出現位置情報を抽出するインデクス検索ステップを有する文書登録検索方法において、
一つ以上のテキストデータにおける所定の部分文字列の出現位置情報の容量を加算することによって算出した該部分文字列のインデクス容量に基づき、主メモリ上にインデクス一時格納領域を確保するワークインデクス初期化ステップと、
前記一つ以上のテキストデータから所定の部分文字列と、該部分文字列の対象テキストデータにおける出現位置情報を抽出し、該出現位置情報を一時的に前記インデクス一時格納領域に格納するワークインデクス作成ステップと、
前記インデクス一時格納領域に格納した一つ以上のテキストデータから抽出した前記出現位置情報をインデクスとして二次記憶装置に格納するインデクス作成ステップとを有することを特徴とする文書登録検索方法。
【請求項２】
請求項１記載の文書登録検索方法において、
前記出現位置情報として、対象テキストデータにおける文字位置情報及びテキスト指定情報を含む位置情報を用いることを特徴とする文書登録検索方法。
【請求項３】
文字情報を文字コードとして蓄積したテキストデータベースを対象として、
対象テキストデータから所定の部分文字列と、該部分文字列の対象テキストデータにおける出現位置情報を抽出し、該出現位置情報をインデクスとして二次記憶装置に格納するインデクス作成登録ステップと、
検索タームから所定の部分文字列を抽出し、該部分文字列に対応するインデクスを読み出し、該検索タームにおける部分文字列と同じ位置関係を持つ出現位置情報を抽出するインデクス検索ステップを有する文書登録検索方法において、
一つ以上のテキストデータにおける所定の部分文字列の出現位置情報の容量を加算することによって算出したインデクス容量を記憶するインデクス容量記憶ステップと、
上記記憶された該部分文字列のインデクス容量に基づき、主メモリ上にインデクス一時格納領域を確保するワークインデクス初期化ステップと、
前記一つ以上のテキストデータから所定の部分文字列と、該部分文字列の対象テキストデータにおける出現位置情報を抽出し、該出現位置情報を一時的に前記インデクス一時格納領域に格納するワークインデクス作成ステップと、
前記インデクス一時格納領域に格納した一つ以上のテキストデータから抽出した前記出現位置情報をインデクスとして二次記憶装置に格納するインデクス作成ステップとを有することを特徴とする文書登録検索方法。
【請求項４】
請求項３記載の文書登録検索方法において、
前記出現位置情報として、対象テキストにおける文字位置情報及びテキスト指定情報を含む位置情報を用いることを特徴とする文書登録検索方法。
【請求項５】
文字情報を文字コードとして蓄積したテキストデータベースを対象として、
対象テキストデータから所定の部分文字列と、該部分文字列の対象テキストデータにおける出現位置情報を抽出し、該出現位置情報をインデクスとして二次記憶装置に格納するインデクス作成登録手段と、
検索タームから所定の部分文字列を抽出し、該部分文字列に対応するインデクスを読み出し、該検索タームにおける部分文字列と同じ位置関係を持つ出現位置情報を抽出するインデクス検索手段を有する文書登録検索装置において、
一つ以上のテキストデータにおける所定の部分文字列の出現位置情報の容量を加算することによって算出した該部分文字列のインデクス容量に基づき、主メモリ上にインデクス一時格納領域を確保するワークインデクス初期化手段と、
前記一つ以上のテキストデータから所定の部分文字列と、該部分文字列の対象テキストデータにおける出現位置情報を抽出し、該出現位置情報を一時的に前記インデクス一時格納領域に格納するワークインデクス作成手段と、
前記インデクス一時格納領域に格納した一つ以上のテキストデータから抽出した前記出現位置情報をインデクスとして二次記憶装置に格納するインデクス作成手段とを有することを特徴とする文書登録検索装置。
【請求項６】
請求項５記載の文書登録検索装置において、
前記出現位置情報として、対象テキストデータにおける文字位置情報及びテキスト指定情報を含む位置情報を用いることを特徴とする文書登録検索装置。
【請求項７】
文字情報を文字コードとして蓄積したテキストデータベースを対象として、
対象テキストデータから所定の部分文字列と、該部分文字列の対象テキストデータにおける出現位置情報を抽出し、該出現位置情報をインデクスとして二次記憶装置に格納するインデクス作成登録手段と、
検索タームから所定の部分文字列を抽出し、該部分文字列に対応するインデクスを読み出し、該検索タームにおける部分文字列と同じ位置関係を持つ出現位置情報を抽出するインデクス検索手段を有する文書登録検索装置において、
一つ以上のテキストデータにおける所定の部分文字列の出現位置情報の容量を加算することによって算出したインデクス容量を記憶するインデクス容量記憶手段と、
上記記憶された該部分文字列のインデクス容量に基づき、主メモリ上にインデクス一時格納領域を確保するワークインデクス初期化手段と、
前記一つ以上のテキストデータから所定の部分文字列と、該部分文字列の対象テキストデータにおける出現位置情報を抽出し、該出現位置情報を一時的に前記インデクス一時格納領域に格納するワークインデクス作成手段と、
前記インデクス一時格納領域に格納した一つ以上のテキストデータから抽出した前記出現位置情報をインデクスとして二次記憶装置に格納するインデクス作成手段とを有することを特徴とする文書登録検索装置。
【請求項８】
請求項７記載の文書登録検索装置において、
前記出現位置情報として、対象テキストにおける文字位置情報及びテキスト指定情報を含む位置情報を用いることを特徴とする文書登録検索装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、大規模な文書データベースから所望の文書を探索する文書検索に係わり、特に使用可能な主メモリ容量が少ない場合でも大量件数の文書登録を高速に行う文書登録検索システムおよび装置に関する。
【０００２】
【従来の技術】
大規模な文書データベースから指定された検索文字列（以下、検索タームと呼ぶ）が含まれる文書を高速に探し出す方式として、ｎ文字インデクス方式がある。本方式については、「特開昭６４−３５６２７号」（以下、公知例１と呼ぶ）に詳細に開示されている。本公知例では、文書の登録時に、データベースへ登録する文書を文字コード化したテキストから文字連鎖と呼ばれる連続するｎ文字の部分文字列とその部分文字列のテキストにおける出現位置を示す情報をインデクスとして磁気ディスク装置に格納しておく。検索時には検索タームから連続するｎ文字の部分文字列、すなわち文字連鎖を抽出し、これらに対応するインデクスを上記磁気ディスク装置から読み込み、検索ターム中の文字連鎖の位置関係とインデクス中の文字連鎖の位置情報の関係が等しいかを判定することによって、指定された検索タームが出現する文書を高速に探し出すことができる。以下、この公知例１について図２を用いて具体的にその内容を説明する。本公知例では文字連鎖の長さを３に想定している。まず、文書の登録時にデータベースに登録するテキスト１００がインデクス作成部２００に読み込まれ、文字連鎖インデクス２０１が作成される。この文字連鎖インデクス２０１には、テキスト１００に出現する全ての３文字の部分文字列、すなわち文字連鎖とその文字連鎖のテキスト１００における出現位置を示すポインタが格納される。例えば、本図に示すテキスト１００では、“ａｂｃ”という文字連鎖は、テキスト１００でポインタｐｔ１，ｐｔ２，・・・として示される位置に現われるので、文字連鎖インデクス２０１には文字連鎖“ａｂｃ”とこれに対応した形でポインタｐｔ１，ｐｔ２，・・・が格納される。検索時には、まず、検索タームが文字連鎖抽出部２０２に入力され、検索ターム中に存在する全ての３文字の文字連鎖とその文字連鎖の検索ターム中における出現位置を示す番号として文字連鎖位置が生成される。次に、生成された文字連鎖とこれに対応する文字連鎖位置がインデクス検索部２０３に入力される。インデクス検索部２０３では、検索タームから抽出された文字連鎖に対応するインデクスが文字連鎖インデクス２０１から読み込まれ、これらのインデクスの間でポインタによって示される文字位置が隣接しているものが抽出され検索結果として出力される。例えば、検索タームとして“ａｂｃｄ”が入力された場合には、まず、文字連鎖抽出部２０２において、検索ターム“ａｂｃｄ”から〈文字連鎖“ａｂｃ”、文字連鎖位置“０”〉と〈文字連鎖“ｂｃｄ”、文字連鎖位置“１”〉が抽出される。ここで、文字連鎖位置“０”は検索タームの先頭、文字連鎖位置“１”はその次の文字位置を示している。次に、インデクス検索部２０３において、文字連鎖インデクス２０１から文字連鎖“ａｂｃ”および“ｂｃｄ”に対応するインデクスが読み込まれる。これらのインデクスにおける位置ポインタが文字連鎖位置“０”と文字連鎖位置“１”のようにその位置関係の連続するものが、すなわち隣接するものが抽出され検索結果として出力される。本図では、文字連鎖“ａｂｃ”のポインタｐｔ１と文字連鎖“ｂｃｄ”のポインタｐｔ３が示す位置が隣接するため、文字連鎖“ａｂｃｄ”が文字列として存在することが分かり、テキスト中に検索ターム“ａｂｃｄ”が出現することが示される。
【０００３】
公知例１において、インデクスは登録テキストの数倍の容量となるため、大規模な文書データベースを対象とした場合には、磁気ディスク装置などの大容量な二次記憶装置に格納する必要がある。ここで、このインデクスを磁気ディスク装置上に作成する方法として従来より用いられている方法を以下に示す。
【０００４】
（１）１文字毎の逐次登録方法（以下、公知例２と呼ぶ）
公知例２は、登録するテキストの先頭から１つずつ所定の部分文字列を抽出し、その部分文字列の出現位置を示す情報を対応するインデクスに順次格納していく方法である。図３に本公知例における登録方法を示す。本図では所定の部分文字列として長さ１の部分文字列を用いている。また、本図においては部分文字列の出現位置を示す情報として、文書番号と文字位置を用いている。
【０００５】
まず、登録するテキスト１００の先頭から１つ目の部分文字列“海”を抽出し、その部分文字列が出現する文書の番号“０２３”および文字位置“０”を磁気ディスク装置１０２上の“海”のインデクス１０６に追加する。次に、２つ目の部分文字列“洋”を抽出し、その部分文字列が出現する文書の番号“０２３”および文字位置“１”を磁気ディスク装置１０２上の“洋”のインデクス３００に追加する。この処理を登録するテキスト１００の先頭から末尾まで繰り返す。すなわち、登録するテキストの文字数分の磁気ディスク装置１０２上のインデクスへの書込みが発生する。
【０００６】
本公知例における登録方法は、特にインデクス作成用の主メモリは必要なく、単純な処理で登録を実現することができる。しかし、インデクスへの出現位置情報の格納の際に、登録するテキストの文字数分、磁気ディスク装置へのランダムな書込みが発生するため、登録処理に長時間を要する。
【０００７】
（２）主メモリを使用した複数件一括登録方法（以下、公知例３と呼ぶ）
主メモリを使用すれば、インデクスのまとめ書きが可能となり、磁気ディスク装置への書込回数を削減することができる。そのため、公知例３では、登録するテキストに出現する可能性のある部分文字列全てに対してワークインデクス用の主メモリを割り当て、テキストから抽出した部分文字列の出現位置を示す情報を一時的にワークインデクスに格納する。複数件のテキストについて処理を行った後、ワークインデクス内の出現位置情報を磁気ディスク装置上のインデクスへ追加する。
【０００８】
図４に本公知例における登録方法を示す。本図では所定の部分文字列として長さ１の部分文字列を用いている。また、本図においては部分文字列の出現位置を示す情報として、文書番号と文字位置を用いている。
【０００９】
まず、登録するテキスト１００の先頭から１つ目の部分文字列“海”を抽出し、その部分文字列が出現する文書の番号“０２３”および文字位置“０”を主メモリ１０１上の“海”のワークインデクス１０４に格納する。次に、２つ目の部分文字列“洋”を抽出し、その部分文字列が出現する文書のその部分文字列が出現する文書の番号“０２３”および文字位置“１”を主メモリ１０１上の“洋”のワークインデクス１０５に格納する。この処理を登録するテキスト１００全ての先頭から末尾まで繰り返す。以上の処理の間にいずれかのワークインデクスがいっぱいになった場合には、一時的に部分文字列の抽出処理を中断し、主メモリ１０１上のワークインデクスに格納されている出現位置情報を磁気ディスク装置１０２上のインデクスに追加する。例えば、部分文字列“海”のワークインデクス１０４に格納されている出現位置情報を、磁気ディスク装置１０２上の“海”のインデクス１０６に追加する。本処理は部分文字列の抽出処理が全て終了した際にも行う。
【００１０】
本公知例における登録方法では、主メモリ上のワークインデクスに出現位置情報を複数件分まとめてから磁気ディスク装置上のインデクスへ追加するため、磁気ディスク装置への書込回数を削減することが可能となる。
【００１１】
【発明が解決しようとする課題】
以上説明した公知例３に示された登録方法によると、テキストから抽出した部分文字列の出現位置情報を、主メモリ上のワークインデクスに複数件分まとめてから磁気ディスク装置上のインデクスへ追加するため、磁気ディスク装置への書込回数を削減することが可能となる。しかし、登録テキストにおける部分文字列の出現頻度は事前には分からない。そこで、登録テキストに出現する可能性のある部分文字列全てに対し、同じようにワークインデクスを割り当てるとすると、ワークインデクスとして使用可能な主メモリ容量が少ない場合には、個々の部分文字列に割り当てられるワークインデクス容量が少なくなり、まとめて処理できる件数が減ることになる。その分、磁気ディスク装置への書込みが多発することになるため、テキストの登録に時間が掛かることになる。
【００１２】
こうした問題に対し、本発明では以下の課題を解決することを目的とする。すなわち、本発明の目的は、使用可能な主メモリ容量が少ない場合でも、その主メモリを効率的に用いて大量件数のインデクスのまとめ書きを行うことによって、大量文書の登録を高速に行うことが可能な文書登録検索システムを提供することにある。
【００１３】
【課題を解決するための手段】
上記課題を解決するために、文書登録処理として、
（ステップ１）登録するテキストの先頭から１文字ずつ走査し、テキストに存在する所定の部分文字列のインデクス容量を算出するインデクス容量算出ステップ（ステップ２）上記インデクス容量算出ステップで算出したインデクス容量に応じて、各部分文字列に対して主メモリ上のワークインデクスを配分するワークインデクス初期化ステップ
（ステップ３）上記登録テキストを再び走査し、各部分文字列のテキストにおける出現位置を示す情報を、上記ワークインデクス初期化ステップで配分されたワークインデクスに格納するワークインデクス作成ステップ
（ステップ４）上記ワークインデクス作成ステップでワークインデクスに格納した各部分文字列の出現位置を示す情報を、磁気ディスク装置上のインデクスに追加するインデクス作成ステップ
を含む文書登録方法を用いる。
【００１４】
以下、この文書登録方法による処理内容について図１を用いて順に説明する。本図では所定の部分文字列として長さ１の部分文字列を用いている。また、本図においては部分文字列の出現位置を示す情報として、文書番号と文字位置を用い、それぞれ４バイトとしてインデクスに格納している。
【００１５】
本文書登録方法ではまず、登録するテキスト１００を走査し、テキスト１００に存在する各部分文字列の出現位置情報をインデクス化した際のインデクス容量を算出し、インデクス容量テーブル１０３に格納する。図１に示す例の場合、テキスト１００に存在する部分文字列“海”は〈文書番号“０２３”、文字位置“０”〉、〈文書番号“０２４”、文字位置“２”〉および〈文書番号“０２５
”、文字位置“３”〉に出現しており、インデクス容量は２４バイトとなるため、その“２４”をインデクス容量テーブル１０３に格納する。次に、算出されたインデクス容量に応じて、各部分文字列に対して主メモリ上のワークインデクスを配分する。たとえば、部分文字列“海”に対してはインデクス容量として算出された２４バイトのワークインデクスを割り当てる。次に、再び登録テキスト１００の先頭から１文字ずつ走査し、テキスト１００に存在する各部分文字列の出現位置を示す情報を該当するワークインデクスに格納する。例えば、図１に示す例の場合、まずテキスト１００から部分文字列“海”を抽出し、その出現位置を示す情報〈文書番号“０２３”、文字位置“０”〉を主メモリ１０１上の“海”のワークインデクス１０４に格納する。次にテキスト１００から次の部分文字列“洋”を抽出し、その出現位置を示す情報〈文書番号“０２３”、文字位置“１”〉を主メモリ１０１上の“洋”のワークインデクス１０５に格納する。最後に、主メモリ１０１上のワークインデクスに格納した各部分文字列の出現位置情報を、磁気ディスク装置１０２上のインデクスに追加する。例えば、部分文字列“海”に対応するワークインデクス１０４に格納されている出現位置を示す情報〈文書番号“０２３”、文字位置“０”〉、〈文書番号“０２４”、文字位置“２”〉および〈文書番号“０２５”、文字位置“３”〉を、磁気ディスク装置１０２上の部分文字列“海”に対応するインデクス１０６に格納する。
【００１６】
本方式では、登録するテキストを予め一度走査することによって、登録テキスト中に存在する各部分文字列のインデクス容量を算出し、その容量に応じて主メモリ上のワークインデクスを配分している。このように、ワークインデクスとして使用可能な主メモリ容量が少ない場合でも、必要のない部分文字列に対してワークインデクスを割り当てることなく、効率的に主メモリを利用して、大量件数のテキストから作成されたインデクスをまとめて磁気ディスク装置へ書き込んでいる。その結果、磁気ディスク装置への書込回数を削減することができるため、使用可能な主メモリ容量が少ない場合でも文書登録時間を短縮することが可能となる。
【００１７】
【発明の実施の形態】
以下、本発明の第一の実施例について図５を用いて説明する。
【００１８】
本発明を適用した文書登録検索システムは、ディスプレイ５００、キーボード５０１、中央演算処理装置（ＣＰＵ）５０２、テキスト１００およびインデクス５０３を格納する二次記憶装置の一つである磁気ディスク装置１０２、フロッピディスクドライバ（ＦＤＤ）５０４、主メモリ１０１から構成される。バス５０６にはＣＰＵ５０２、磁気ディスク装置１０２、ＦＤＤ５０４および主メモリ１０１が接続されている。フロッピディスク５０５に格納されている情報は、ＦＤＤ５０４によりアクセスされる。
【００１９】
主メモリ１０１には、文書登録制御プログラム５０７、テキスト登録プログラム５０９、インデクス作成登録プログラム５１０、検索制御プログラム５０８、インデクス検索プログラム５１５が格納されるとともにワークインデクス５１６、インデクス容量テーブル１０３およびワークエリア５１７が確保される。インデクス作成登録プログラム５１０はインデクス容量算出プログラム５１１、ワークインデクス初期化プログラム５１２、ワークインデクス作成プログラム５１３およびインデクス作成プログラム５１４で構成される。文書登録制御プログラム５０７および検索制御プログラム５０８はユーザによるキーボード５０１からの指示に応じてＣＰＵ５０２で実行される。
【００２０】
以下、本実施例における登録処理と検索処理について説明する。登録の際は図６のＰＡＤ（Ｐｒｏｂｌｅｍ  Ａｎａｌｙｓｉｓ  Ｄｉａｇｒａｍ）図に示すように、ステップ６００でキーボード５０１からコマンドを入力し、文書登録制御プログラム５０７を起動する。次に、ステップ６０１で上記文書登録制御プログラム５０７はテキスト登録プログラム５０９を起動して、ＦＤＤ５０４に挿入されたフロッピディスク５０５から登録文書のテキストデータをワークエリア５１７に読み込み、これをテキスト１００として磁気ディスク装置１０２へ格納する。テキストデータはフロッピディスクを用いて入力するだけに限らず、通信回線やＣＤ−ＲＯＭ装置（図５には示していない）等を用いて他の装置から入力するような構成をとることも可能である。最後に、ステップ６０２で文書登録制御プログラム５０７は、インデクス作成登録プログラム５１０を起動して、テキスト１００から所定の部分文字列とテキスト１００における出現位置を示す情報を抽出し、インデクス５０３として磁気ディスク装置１０２へ格納する。
【００２１】
インデクス作成登録プログラム５１０は図７に示すように、まずステップ７００で、ステップ７０１からステップ７０４の一連の処理を、全ての登録テキストからインデクスを作成するまで繰り返す。次に、ステップ７０１でインデクス容量算出プログラム５１１を起動し、磁気ディスク装置１０２に格納されたテキスト１００をワークエリア５１７に読み込む。そして、このテキスト１００に出現する所定の部分文字列のインデクス容量を算出する。本処理は、各部分文字列のインデクス容量の合計がワークインデクスとして使用可能な主メモリ容量に収まらなくなったところで終了する。次に、ステップ７０２でワークインデクス初期化プログラム５１２を起動し、前記インデクス容量算出プログラム５１１によって算出されたインデクス容量に応じて、各部分文字列にワークインデクス５１６を配分する。次に、ステップ７０３でワークインデクス作成プログラム５１３を起動し、テキスト１００を再度ワークエリア５１７に読み込む。そして、このテキスト１００から所定の部分文字列とそのテキスト１００における出現位置情報を抽出し、それをインデクスとしてワークインデクス５１６に格納する。本処理は、ステップ７０１でインデクス容量算出プログラム５１１が処理したテキスト全てに対して行われる。最後に、ステップ７０４でインデクス作成プログラム５１４を起動し、ワークインデクス５１６に格納されている出現位置情報をインデクス５０３として磁気ディスク装置１０２へ格納する。
【００２２】
検索の際には、検索制御プログラム５０８がキーボード５０１から入力された検索条件式をインデクス検索プログラム５１５へ渡す。このインデクス検索プログラム５１５の処理内容は公知例１と同様である。
【００２３】
以上が本発明の文書登録方法を適用した第一の実施例の概略である。
【００２４】
以下、図７に示した本実施例におけるインデクス作成登録プログラム５１０の処理手順について詳細に説明する。
【００２５】
まず、図７に示すインデクス作成登録プログラム５１０のステップ７０１におけるインデクス容量算出プログラム５１１の処理について図８を用いて説明する。インデクス容量算出プログラム５１１はインデクス作成登録プログラム５１０によって起動される。ここでは、まずステップ８００で、図１に示すインデクス容量テーブル１０３を“０”にリセットする。リセット後のインデクス容量テーブル１０３を図９に示す。インデクス容量テーブル１０３には、登録テキストに出現する可能性のある全ての所定の部分文字列に対してインデクス容量格納領域が設けられており、そのインデクス容量格納領域を全て“０”にリセットする。次に、ステップ８０１で各部分文字列のインデクス容量の合計がワークインデクスとして使用可能な主メモリ容量に収まらなくなるか、全ての登録テキストからインデクス容量を算出するまで、ステップ８０２からステップ８０４の一連の処理を繰り返す。本処理では、まずステップ８０２で、磁気ディスク装置１０２からテキスト１００を一文書分ワークエリア５１７に読み込む。そして、ステップ８０３で、ステップ８０２でワークエリア５１７に読み込んだテキスト１００から所定の部分文字列とその部分文字列のテキスト１００における出現位置情報を抽出する。最後に、ステップ８０４で、ステップ８０３で抽出した部分文字列の出現位置情報の容量をインデクス容量テーブル１０３の該当するインデクス容量格納領域に加算する。ステップ８０２からステップ８０４の一連の処理を図１０を用いて具体的に説明する。本図においては、所定の部分文字列として１文字の部分文字列を用いている。また、出現位置を示す情報としては文書番号と文字位置を用い、それぞれ４バイトとしてインデクスに格納している。まず、ステップ８０２で、登録するテキスト１００を一文書分ワークエリア５１７に読み込む。図１０では、登録テキストとして文書番号０２３「海洋には数万種の微生物が生息する…」が読み込まれたとする。次に、ステップ８０３で、ステップ８０２でワークエリア５１７に読み込んだテキスト１００から所定の部分文字列とその部分文字列のテキスト１００における出現位置情報を抽出する。図１０に示す例では、文書番号０２３のテキストから部分文字列と出現位置として“海〈０２３，０〉、洋〈０２３，１〉、に〈０２３，２〉、は〈０２３，３〉、数〈０２３，４〉…”が抽出される。ここで、“海〈０２３，０〉”とは部分文字列“海”が文書番号“０２３”のテキストの先頭に出現していることを示しており、“洋〈０２３、１〉”とは部分文字列“洋”が文書番号“０２３”のテキストの先頭の次の文字位置に出現していることを示す。最後に、ステップ８０４で、ステップ８０３で抽出した部分文字列の出現位置情報の容量をインデクス容量テーブル１０３の該当するインデクス容量格納領域に加算する。図１０に示す例では、文書番号、文字位置としてそれぞれ４バイトを用いているので、“海”、“洋”、“に”、“は”、“数”のインデクス容量テーブル１０３における該当箇所に文書番号分の４バイトと文字位置分の４バイトをそれぞれ加算する。
【００２６】
以上が、図７のインデクス作成登録プログラム５１０のステップ７０１におけるインデクス容量算出プログラム５１１の詳細な処理内容である。
【００２７】
次に、図７に示すインデクス作成登録プログラム５１０のステップ７０２におけるワークインデクス初期化プログラム５１２の処理について説明する。ワークインデクス初期化プログラム５１２はインデクス作成登録プログラム５１０によってインデクス容量算出プログラム５１１の次に起動される。ここでは、インデクス容量算出プログラム５１１によって算出した各部分文字列のインデクス容量に応じて、各部分文字列にワークインデクス５１６を配分する。例えば、インデクス容量算出プログラム５１１によって、図１１に示すように各部分文字列のインデクス容量が算出されたとすると、部分文字列“に”に対して１６バイト、部分文字列“は”に対して２４バイト、部分文字列“海”に対して２４バイト、部分文字列“洋”に対して８バイト、部分文字列“数”に対して８バイト、…と主メモリ１０１上のワークインデクス５１６を配分する。
【００２８】
次に、図７に示すインデクス作成登録プログラム５１０のステップ７０３におけるワークインデクス作成プログラム５１３の処理について図１２を用いて説明する。ワークインデクス作成プログラム５１３はインデクス作成登録プログラム５１０によってワークインデクス初期化プログラム５１２の次に起動される。ここでは、まずステップ１２００で、インデクス容量算出プログラム５１１でインデクス算出処理を行ったテキストについて、ステップ１２０１からステップ１２０３の一連の処理を繰り返す。本処理では、まずステップ１２０１で、磁気ディスク装置１０２からテキスト１００を一文書分ワークエリア５１７に読み込む。そして、ステップ１２０２で、ステップ１２０１でワークエリア５１７に読み込んだテキスト１００から所定の部分文字列とその部分文字列のテキスト１００における出現位置情報を抽出する。最後に、ステップ１２０３で、ステップ１２０２で抽出した部分文字列の出現位置情報をインデクスとして主メモリ１０１上のワークインデクス５１６に格納する。ステップ１２０１からステップ１２０３の一連の処理を図１３を用いて具体的に説明する。本図においては、所定の部分文字列として１文字の部分文字列を用いている。また、出現位置を示す情報として文書番号と文字位置を用いている。まず、ステップ１２０１で、登録するテキスト１００を一文書分ワークエリア５１７に読み込む。図１３では、登録テキストとして文書番号０２３「海洋には数万種の微生物が生息する…」が読み込まれたとする。次に、ステップ１２０２で、ステップ１２０１でワークエリア５１７に読み込んだテキスト１００から所定の部分文字列とその部分文字列のテキスト１００における出現位置情報を抽出する。図１３に示す例では、文書番号０２３のテキストから部分文字列とその出現位置情報として“海〈０２３，０〉、洋〈０２３，１〉、に〈０２３，２〉、は〈０２３，３〉、数〈０２３，４〉…”が抽出される。ここで、“海〈０２３，０〉”とは部分文字列“海”が文書番号“０２３”のテキストの先頭に出現していることを示しており、“洋〈０２３，１〉”とは部分文字列“洋”が文書番号“０２３”のテキストの先頭の次の文字位置に出現していることを示す。最後に、ステップ１２０３で、ステップ１２０２で抽出した部分文字列の出現位置情報をインデクスとして主メモリ１０１上のワークインデクス５１６に格納する。図１３に示す例では、部分文字列“海”の出現位置情報として、文書番号“０２３”と文字位置“０”が抽出されているので、それらの情報を“海”のワークインデクス１０６に格納する。
【００２９】
以上が、図７のインデクス作成登録プログラム５１０のステップ７０３におけるワークインデクス作成プログラム５１３の詳細な処理内容である。
【００３０】
最後に、図７に示すインデクス作成登録プログラム５１０のステップ７０４におけるインデクス作成プログラム５１４の処理について図１４を用いて説明する。インデクス作成プログラム５１４はインデクス作成登録プログラム５１０によってワークインデクス作成プログラム５１３の次に起動される。ここでは、まずステップ１４００で、ワークインデクス作成プログラム５１３でワークインデクスを作成した部分文字列について、ステップ１４０１を繰り返す。このステップ１４０１では、主メモリ１０１上のワークインデクスを磁気ディスク装置１０２上の該当するインデクス５０３に追加する。図１に示す例を用いて、本処理を具体的に説明する。例えば、部分文字列“海”のワークインデクス１０４には、文書番号“０２３”とそれに対応して文字位置“０”、文書番号“０２４”とそれに対応して文字位置“２”、文書番号“０２５”とそれに対応して文字位置“３”が格納されているので、それらの情報を磁気ディスク装置１０２上の“海”のインデクス１０６に追加する。
【００３１】
以上が、図７のインデクス作成登録プログラム５１０のステップ７０４におけるインデクス作成プログラム５１４の詳細な処理内容である。
【００３２】
以上のように、本発明では登録するテキストから作成される各部分文字列のインデクス容量を予め算出しておき、その容量に応じて主メモリの使用領域を各部分文字列に配分することによって、主メモリを無駄なく、効率的に用いている。その結果、主メモリに一時的に格納しておけるインデクス容量が増え、すなわち磁気ディスク装置へ一度に書き込めるインデクス容量が増えるため、磁気ディスク装置への書き込み回数を削減でき、登録処理の高速化が実現できる。なお、本実施例では所定の部分文字列として１文字の部分文字列を用いているが、２文字以上の部分文字列を用いる場合でも同様の処理で実現できる。また、所定の部分文字列として、単語などのように部分文字列によってその長さが異なるようなものを用いてもよい。
【００３３】
以上により、使用可能な主メモリ容量が少ない場合でも、その主メモリを効率的に用いて大量件数のインデクスのまとめ書きを行うことによって、大量件数の文書登録を高速に行うことが可能となる。
【００３４】
以下、本発明の第二の実施例について説明する。
【００３５】
本実施例はインデクスの作成登録処理が二回以上行われる場合に、前回のインデクス作成登録処理で作成したインデクスの容量を統計情報として利用して、各部分文字列に対する主メモリ容量の配分を行う方法である。この方法によれば、一番最初に行われるインデクス作成登録処理時のみ、インデクス容量算出処理を実行すればよく、二回目以降のインデクス作成登録処理におけるインデクス容量算出処理が不要となる。この結果、二回目以降のインデクス作成登録処理においてインデクス容量を算出するための文書読込み、走査処理を削減することができるため、大量件数の高速な文書登録を実現できることになる。
【００３６】
本実施例は基本的に第一の実施例（図５）と同様の構成をとるが、その中のインデクス作成登録制御プログラム５１０が異なる。このインデクス作成登録制御プログラム５１０は図１５に示すような構成となる。インデクス作成登録プログラム５１０ａはインデクス容量算出プログラム５１１、ワークインデクス初期化プログラム５１２、ワークインデクス更新プログラム１５００、ワークインデクス作成プログラム５１３、予備メモリ利用型ワークインデクス作成プログラム１５０１、インデクス容量テーブル更新プログラム１５０２およびインデクス作成プログラム５１４で構成される。
【００３７】
以下、第一の実施例と異なるインデクス作成登録プログラム５１０ａの処理内容について説明する。
【００３８】
インデクス作成登録プログラム５１０ａでは、図１６に示すように、まずステップ１６００で、図７に示すステップ７０１からステップ７０４の一連の処理を実行する。本処理の内容は第一の実施例で詳細に述べたので省略する。次に、ステップ１６０１で、全ての登録テキストからインデクスを作成するまで、ステップ１６０２からステップ１６０５の一連の処理を繰り返す。ここで、もしステップ１６００で全ての登録テキストに対する処理が終了している場合には、ステップ１６０２からステップ１６０５の一連の処理は行われない。繰り返し処理においては、まずステップ１６０２で、ワークインデクス更新プログラム１５００を起動し、ワークインデクス５１６として使用可能な主メモリ１０１から予め定められた割合で予備インデクス用にワークインデクス５１６を配分する。そして、インデクス容量テーブル１０３に格納されているインデクス容量に比例して、各部分文字列に残りのワークインデクス５１６を配分する。次に、ステップ１６０３で予備インデクス利用型ワークインデクス作成プログラム１５０１を起動し、テキスト１００をワークエリア５１７に読み込む。そして、このテキスト１００から所定の部分文字列とその部分文字列のテキスト１００における出現位置情報を抽出し、それをインデクスとしてワークインデクス５１６に格納する。本処理において、前回のインデクス作成登録処理で出現しなかった部分文字列が存在した場合には、その部分文字列に対してワークインデクスが割り当てられていないため、予備インデクスを利用して出現位置情報を格納する。次に、ステップ１６０４でインデクス容量テーブル更新プログラム１５０２を起動し、インデクス容量テーブル１０３に格納してあるインデクス容量を、予備インデクス利用型ワークインデクス作成プログラム１５０１によって作成されたワークインデクス容量で書き換える。最後に、ステップ１６０５でインデクス作成プログラム５１４を起動し、ワークインデクス５１６に格納されている出現位置情報をインデクス５０３として磁気ディスク装置１０２へ格納する。
【００３９】
以上が本発明の文書登録方法を適用した第二の実施例の概略である。
【００４０】
以下、図１６に示した本実施例におけるインデクス作成登録プログラム５１０ａの処理内容について、第一の実施例と処理内容が異なるステップ１６０２におけるワークインデクス更新プログラム１５００、ステップ１６０３における予備インデクス利用型ワークインデクス作成プログラム１５０１およびステップ１６０４におけるインデクス容量テーブル更新プログラム１５０２の処理内容を詳細に説明する。
【００４１】
まず、図１６に示すインデクス作成登録プログラム５１０ａのステップ１６０２におけるワークインデクス更新プログラム１５００の処理について図１７を用いて説明する。ワークインデクス更新プログラム１５００はインデクス作成登録プログラム５１０ａによって起動される。ここでは、まずステップ１７００で、ワークインデクス５１６として使用可能な主メモリ１０１から予め定められた割合で予備インデクス用にワークインデクス５１６を配分する。この予め定められた割合としては、ワークインデクス５１６として使用可能な主メモリ１０１容量の０．１％などを用いる。次に、ステップ１７０１で、インデクス容量テーブル１０３に格納されているインデクス容量に比例して、各部分文字列に残りのワークインデクス５１６を配分する。図１８に本プログラムによって配分されたワークインデクス５１６の例を示す。本図では、前回インデクス作成登録処理を行った際にインデクスを作成した部分文字列“に”、“は”、“海”、“洋”、“数”、…と予備インデクス用にそれぞれワークインデクス５１６が配分されている。
【００４２】
次に、図１６に示すインデクス作成登録プログラム５１０ａのステップ１６０３における予備インデクス利用型ワークインデクス作成プログラム１５０１の処理について図１９を用いて説明する。予備インデクス利用型ワークインデクス作成プログラム１５０１はインデクス作成登録プログラム５１０ａによってワークインデクス更新プログラム１５００の次に起動される。ここでは、まずステップ１９００で、いずれかのワークインデクスがいっぱいになるか、全ての登録テキストについて終了するまで、ステップ１９０１からステップ１９０６の一連の処理を繰り返す。本処理では、まずステップ１９０１で、磁気ディスク装置１０２からテキスト１００を一文書分ワークエリア５１７に読み込む。そして、ステップ１９０２で、ステップ１９０１でワークエリア５１７に読み込んだテキスト１００から所定の部分文字列とその部分文字列のテキスト１００における出現位置情報を抽出する。そして、ステップ１９０３で、抽出した部分文字列について、ステップ１９０４からステップ１９０６の一連の処理を繰り返す。この繰り返し処理の中で、まずステップ１９０４で、処理対象である部分文字列に対してワークインデクス５１６が割り当てられているかどうかを判定する。もし、割り当てられていない場合には、ステップ１９０５で、予備インデクスとして確保してある主メモリを１０１を処理対象である部分文字列のワークインデクスとして割り当てる。最後に、ステップ１９０６で、抽出した部分文字列の出現位置情報をインデクスとして主メモリ１０１上のワークインデクス５１６に格納する。ステップ１９０１からステップ１９０６の一連の処理内容について図２０を用いて具体的に説明する。本図においては、所定の部分文字列として１文字の部分文字列を用いている。また、出現位置情報として文書番号と文字位置を用いている。まず、ステップ１９０１で、登録するテキスト１００を一文書分ワークエリア５１７に読み込む。図２０では、登録テキストとして文書番号０２６「海で誕生した最初の生命は非常に…」が読み込まれたとする。次に、ステップ１９０２で、ステップ１９０１でワークエリア５１７に読み込んだテキスト１００から所定の部分文字列とその部分文字列のテキスト１００における出現位置情報を抽出する。図２０に示す例では、文書番号０２６のテキストから部分文字列と出現位置として“海〈０２６，０〉、で〈０２６，１〉、誕〈０２６，２〉、…、は〈０２６，１１〉、…”が抽出される。ここで、“海〈０２６，０〉”とは部分文字列“海”が文書番号“０２６”のテキストの先頭に出現していることを示しており、“で〈０２６，１〉”とは部分文字列“で”が文書番号“０２６”のテキストの先頭の次の文字位置に出現していることを示す。そして、ステップ１９０３で、抽出した部分文字列について、ステップ１９０４からステップ１９０６の一連の処理を繰り返す。この繰り返し処理の中で、まずステップ１９０４で、処理対象である部分文字列に対してワークインデクス５１６が割り当てられているかどうかを判定する。もし、割り当てられていない場合には、ステップ１９０５で、予備インデクスとして確保してある主メモリを１０１を処理対象である部分文字列のワークインデクスとして割り当てる。例えば、図２０に示す例の場合、抽出された部分文字列の中で、“海”、“で”、“は”、…は、前回のインデクス作成登録処理の対象となったテキスト１００中に出現していたので、ワークインデクス５１６が配分されている。しかし、部分文字列“誕”は前回のインデクス作成登録処理の対象となったテキスト１００中に出現していなかったので、ワークインデクス５１６が配分されていない。このような部分文字列に対しては、確保しておいた予備インデクス２０００を用いるようにする。最後に、ステップ１９０６で
、抽出した部分文字列の出現位置情報をインデクスとして主メモリ１０１上のワークインデクス５１６に格納する。図２０に示す例では、部分文字列“海”の出現位置情報として、文書番号“０２６”と文字位置“０”が抽出されているので、それらの情報を“海”のワークインデクス１０６に格納する。
【００４３】
最後に、図１６に示すインデクス作成登録プログラム５１０ａのステップ１６０４におけるインデクス容量テーブル更新プログラム１５０２の処理について説明する。インデクス容量テーブル更新プログラム１５０２はインデクス作成登録プログラム５１０ａによって予備インデクス利用型ワークインデクス作成プログラム１５０１の次に起動される。ここでは、インデクス容量テーブル１０３に格納してあるインデクス容量を、予備インデクス利用型ワークインデクス作成プログラム１５０１によって作成されたワークインデクス容量で書き換える。図２１にその具体例を示す。例えば、前回のインデクス作成登録処理で作成された部分文字列“海”のインデクス容量は２４バイトだったので、インデクス容量テーブル１０３の“海”に該当するインデクス容量格納領域には“２４”が格納されている。ここで、本図に示すように、今回のインデクス作成登録処理での部分文字列“海”のワークインデクス１０６に格納された情報の容量は、文書番号、文字位置ともに４バイトとすると１６バイトであるため、書き換え後のインデクス容量テーブルには“１６”が格納される。また、前回のインデクス作成登録処理では部分文字列“誕”のインデクスは作成されなかったため、該当するインデクス容量格納領域には“０”が格納されているが、今回のインデクス作成登録処理では８バイトのインデクスが作成されたので、“８”が格納される。
【００４４】
以上のように、本発明ではインデクスの作成登録処理が二回以上行われる場合に、前回のインデクス作成登録処理で作成したインデクスの容量を統計情報を利用して、各部分文字列に対する主メモリ容量の配分を行っている。その結果、二回目以降のインデクス作成登録処理におけるインデクス容量を算出するための文書読込み、走査処理を削減できるため、大量件数の高速な文書登録を実現できる。なお、本実施例では所定の部分文字列として１文字の部分文字列を用いているが、２文字以上の部分文字列を用いる場合でも同様の処理で実現できる。また、所定の部分文字列として、単語などのように部分文字列によってその長さが異なるようなものを用いてもよい。
【００４５】
以上により、使用可能な主メモリ容量が少ない場合でも、文書の読込み、走査処理を削減しつつ、主メモリを効率的に用いて大量件数のインデクスのまとめ書きを行うことによって、大量件数の文書登録を高速に行うことが可能となる。
【００４６】
【発明の効果】
本発明によれば、登録する文書を一度走査して登録文書中に存在する部分文字列のインデクス容量を予め算出し、その容量に応じて主メモリを割り当てることによって、主メモリを効率的に用いることができるため、大量件数のインデクスのまとめ書きを実現することができる。その結果、使用可能な主メモリ容量が少ない場合でも、高速な大量件数の文書登録が行える文書登録検索システムを提供することが可能となる。
【図面の簡単な説明】
【図１】本発明の処理内容を示す図
【図２】公知例１「特開昭６４−３５６２７号」の構成を示す図
【図３】公知例２の構成を示す図
【図４】公知例３の構成を示す図
【図５】本発明の第一の実施例の構成を示す図
【図６】文書登録制御プログラム５０７の処理内容を示すＰＡＤ図
【図７】インデクス作成登録プログラム５１０の処理内容を示すＰＡＤ図
【図８】インデクス容量算出プログラム５１１の処理内容を示すＰＡＤ図
【図９】インデクス容量テーブル１０３の説明図
【図１０】インデクス容量算出方法の説明図
【図１１】ワークインデクス初期化方法の説明図
【図１２】ワークインデクス作成プログラム５１３の処理内容を示すＰＡＤ図
【図１３】ワークインデクス作成方法の説明図
【図１４】インデクス作成プログラム５１４の処理内容を示すＰＡＤ図
【図１５】本発明の第ニの実施例の構成を示す図
【図１６】インデクス作成登録プログラム５１０ａの処理内容を示すＰＡＤ図
【図１７】ワークインデクス更新プログラム１５００の処理内容を示すＰＡＤ図
【図１８】ワークインデクス更新方法の説明図
【図１９】予備インデクス利用型ワークインデクス作成プログラム１５０１の処理内容を示すＰＡＤ図
【図２０】予備インデクスを利用したワークインデクス作成方法の説明図
【図２１】インデクス容量テーブル更新方法の説明図
【符号の説明】
１００…テキスト、    １０１…主メモリ、  １０２…磁気ディスク装置、
１０３…インデクス容量テーブル、
１０４…部分文字列“海”のワークインデクス、
１０５…部分文字列“洋”のワークインデクス、
１０６…部分文字列“海”のインデクス、    ２００…インデクス作成部、
２０１…文字連鎖インデクス、  ２０２…文字連鎖抽出部、
２０３…インデクス検索部、    ３００…部分文字列“洋”のインデクス、
５００…ディスプレイ、５０１…キーボード、５０２…ＣＰＵ、
５０３…インデクス、  ５０４…フロッピディスクドライバ、
５０５…フロッピディスク、      ５０６…バス、
５０７…文書登録制御プログラム、５０８…検索制御プログラム、
５０９…テキスト登録プログラム、５１０…インデクス作成登録プログラム、
５１１…インデクス容量算出プログラム、
５１２…ワークインデクス初期化プログラム、
５１３…ワークインデクス作成プログラム、
５１４…インデクス作成プログラム、５１５…インデクス検索プログラム、
５１６…ワークインデクス、        ５１７…ワークエリア、
５１０ａ…インデクス作成登録プログラム、
１５００…ワークインデクス更新プログラム、
１５０１…予備メモリ利用型ワークインデクス作成プログラム、
１５０２…インデクス容量テーブル更新プログラム、
２０００…予備インデクス。
【図１】
0003564952.tif 000002
【図２】
0003564952.tif 000003
【図３】
0003564952.tif 000004
【図４】
0003564952.tif 000005
【図５】
0003564952.tif 000006
【図６】
0003564952.tif 000007
【図７】
0003564952.tif 000008
【図８】
0003564952.tif 000009
【図９】
0003564952.tif 000010
【図１０】
0003564952.tif 000011
【図１１】
0003564952.tif 000012
【図１２】
0003564952.tif 000013
【図１３】
0003564952.tif 000014
【図１４】
0003564952.tif 000015
【図１５】
0003564952.tif 000016
【図１６】
0003564952.tif 000017
【図１７】
0003564952.tif 000018
【図１８】
0003564952.tif 000019
【図１９】
0003564952.tif 000020
【図２０】
0003564952.tif 000021
【図２１】
0003564952.tif 000022