(57)【特許請求の範囲】
【請求項１】
コンピュータ・システムを用いて、検索照会によってデータを検索する方法であって、
コンピュータ・メモリ内で前記データを受け取るステップと、
前記データ内に含まれると期待される複数のデータ断片を含む検索照会をコンピュータ・メモリ内で受け取るステップと、
前記データと前記データ断片のそれぞれとの間の一致を突き止めるために前記データを中央処理装置が検索するステップと、
前記データ断片のすべてとの一致を含む前記データの最小部分を前記中央処理装置が識別するステップと
を含み、
前記データと前記データ断片のそれぞれとの間の一致を突き止めるために前記データを検索するステップと、
前記一致のメモリ・アドレスを記録するステップと、
一致のそれぞれについて、他の一致との部分的オーバーラップのすべてを識別するステップと、
そのような部分的オーバーラップのそれぞれについて、他の一致とオーバーラップしない新しい一致を探すために、前記データを検索するステップと、
前記データの、最初のオーバーラップしない一致の位置から最後のオーバーラップしない一致の位置までの部分を識別するステップと
を含む、方法。
【請求項２】
コンピュータ・システムを用いて、検索照会によってデータを検索する方法であって、
前記データ内に含まれると期待される複数のデータ断片を含む検索照会をコンピュータ・メモリ内で受け取るステップと、
前記データと前記データ断片のそれぞれとの間の一致を突き止めるために前記データを中央処理装置が検索するステップと、
前記データ断片のすべてとの一致を含む前記データの最小部分を前記中央処理装置が識別するステップと
を含み、
（ｉ）前記データ断片をコンピュータ・メモリ内でストリング変数として保管するステップと、
（ｉｉ）前記データと各データ断片との間の最初の一致を突き止め、各データ断片について、その最初の一致の位置をそれぞれのポインタ変数として保管するために、前記データを検索するステップと、
（ｉｉｉ）前記ポインタ変数および前記データ断片のストリング長さへの参照によって、前記一致の間の部分的オーバーラップのすべてを判定するステップと、
（ｉｖ）そのような部分的オーバーラップのすべてについて、関連するデータ断片との次の一致を突き止め、その次の一致の位置をそれぞれのさらなるポインタ変数に保管するために、前記データを検索するステップと、
（ｖ）前記ポインタ変数を参照することによって、前記一致の間の残りの部分的オーバーラップのすべてを判定し、前記データ断片のすべてを、その間のオーバーラップなしに含む前記データの部分が識別されるまで、ステップ（ｉｖ）を繰り返すステップと
を含む、方法。
【請求項３】
前記データを表示モニタに表示し、データの前記識別された部分を前記表示モニタにおいて強調表示するステップを含む、請求項１又は２に記載の方法。
【請求項４】
検索照会によって識別されるデータの部分を突き止めるために前記データを検索するコンピュータ・システムであって、
コンピュータ・メモリ内で前記データを受け取る受け取り手段と、
複数のデータ断片を含む検索照会をコンピュータ・メモリにおいて受け取る入力手段と、
検索されるデータをハードディスク、記憶媒体、またはインターネット経由にて供給するデータ供給手段と、
前記入力手段および前記データ供給手段に接続され、前記データと前記データ断片のそれぞれとの間の一致を突き止めるために、前記データ供給手段によって使用可能にされるデータを中央処理装置に検索するように動作可能である制御手段と、
前記データ断片のすべてとの一致を含む前記データの最小部分を識別する情報を登録する手段と
を含み、
前記データと前記データ断片のそれぞれとの間の一致を突き止めるために前記データを検索する検索手段と、
前記一致のメモリ・アドレスを記録する記録手段と、
一致のそれぞれについて、他の一致との部分的オーバーラップのすべてを識別する識別手段と、
そのような部分的オーバーラップのそれぞれについて、他の一致とオーバーラップしない新しい一致を探すために、前記データを検索する検索手段と、
前記データの、最初のオーバーラップしない一致の位置から最後のオーバーラップしない一致の位置までの部分を識別する識別手段と
を含む、コンピュータ・システム。
【請求項５】
検索照会によって識別されるデータの部分を突き止めるために前記データを検索するコンピュータ・システムであって、
複数のデータ断片を含む検索照会をコンピュータ・メモリにおいて受け取る入力手段と、
検索されるデータをハードディスク、記憶媒体、またはインターネット経由にて供給するデータ供給手段と、
前記入力手段および前記データ供給手段に接続され、前記データと前記データ断片のそれぞれとの間の一致を突き止めるために、前記データ供給手段によって使用可能にされるデータを中央処理装置に検索するように動作可能である制御手段と、
前記データ断片のすべてとの一致を含む前記データの最小部分を識別する情報を登録する手段と
を含み、
（ｉ）前記データ断片をコンピュータ・メモリ内でストリング変数として保管する保管手段と、
（ｉｉ）前記データと各データ断片との間の最初の一致を突き止め、各データ断片について、その最初の一致の位置をそれぞれのポインタ変数として保管するために、前記データを検索する検索手段と、
（ｉｉｉ）前記ポインタ変数および前記データ断片のストリング長さへの参照によって、前記一致の間の部分的オーバーラップのすべてを判定する判定手段と、
（ｉｖ）そのような部分的オーバーラップのすべてについて、関連するデータ断片との次の一致を突き止め、その次の一致の位置をそれぞれのさらなるポインタ変数に保管するために、前記データを検索する検索手段と、
（ｖ）前記ポインタ変数を参照することによって、前記一致の間の残りの部分的オーバーラップのすべてを判定し、前記データ断片のすべてを、その間のオーバーラップなしに含む前記データの部分が識別されるまで、ステップ（ｉｖ）を繰り返す繰り返し手段と
を含む、コンピュータ・システム。
【請求項６】
検索照会によって識別されるデータの部分を突き止めるために前記データを検索するようにコンピュータ・システムを動作可能にするコンピュータ記憶媒体を含むコンピュータ・プログラムであって、
コンピュータ・メモリ内で前記データを受け取ることを可能にするコンピュータ・コード部分と、
中央処理装置が複数のデータ断片を含む検索照会をコンピュータ・メモリにおいて受け取ることを可能にするコンピュータ・コード部分と、
前記中央処理装置に、前記データと前記データ断片のそれぞれとの間の一致を突き止めるために前記データを検索するように指令するコンピュータ・コード部分と、
前記中央処理装置に、前記前記データの最小部分を識別させるコンピュータ・コード部分と
を含み、
前記データと前記データ断片のそれぞれとの間の一致を突き止めるために前記データを検索するコンピュータ・コード部分と、
前記一致のメモリ・アドレスを記録するコンピュータ・コード部分と、
一致のそれぞれについて、他の一致との部分的オーバーラップのすべてを識別するコンピュータ・コード部分と、
そのような部分的オーバーラップのそれぞれについて、他の一致とオーバーラップしない新しい一致を探すために、前記データを検索するコンピュータ・コード部分と、
前記データの、最初のオーバーラップしない一致の位置から最後のオーバーラップしない一致の位置までの部分を識別するコンピュータ・コード部分と
を含む、コンピュータ・プログラム。
【請求項７】
検索照会によって識別されるデータの部分を突き止めるために前記データを検索するようにコンピュータ・システムを動作可能にするコンピュータ記憶媒体を含むコンピュータ・プログラムであって、
中央処理装置が複数のデータ断片を含む検索照会をコンピュータ・メモリにおいて受け取ることを可能にするコンピュータ・コード部分と、
前記中央処理装置に、前記データと前記データ断片のそれぞれとの間の一致を突き止めるために前記データを検索するように指令するコンピュータ・コード部分と、
前記中央処理装置に、前記前記データの最小部分を識別させるコンピュータ・コード部分と
を含み、
（ｉ）前記データ断片をコンピュータ・メモリ内でストリング変数として保管するコンピュータ・コード部分と、
（ｉｉ）前記データと各データ断片との間の最初の一致を突き止め、各データ断片について、その最初の一致の位置をそれぞれのポインタ変数として保管するために、前記データを検索するコンピュータ・コード部分と、
（ｉｉｉ）前記ポインタ変数および前記データ断片のストリング長さへの参照によって、前記一致の間の部分的オーバーラップのすべてを判定するコンピュータ・コード部分と、
（ｉｖ）そのような部分的オーバーラップのすべてについて、関連するデータ断片との次の一致を突き止め、その次の一致の位置をそれぞれのさらなるポインタ変数に保管するために、前記データを検索するコンピュータ・コード部分と、
（ｖ）前記ポインタ変数を参照することによって、前記一致の間の残りの部分的オーバーラップのすべてを判定し、前記データ断片のすべてを、その間のオーバーラップなしに含む前記データの部分が識別されるまで、ステップ（ｉｖ）を繰り返すコンピュータ・コード部分と
を含む、コンピュータ・プログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、コンピュータ環境でのデータ検索すなわち、ユーザによってコンピュータに供給された検索照会に作用し、照会に従ってデータを突き止める方法、システム、およびプログラム製品に関する。排他的ではなく、具体的には、本発明は、保管されたテキスト・ファイルのデータベース内に存在する可能性があり、ユーザが供給した検索照会に従うテキストを突き止めることに関する。
【０００２】
本明細書での用語「プログラム製品」は、ＣＤ−ＲＯＭもしくは１つまたは複数のフロッピ（Ｒ）・ディスクなどの機械可読記憶媒体によって保管されるか、リモート・コンピュータ・サイトからダウンロードのために使用可能にされるコンピュータ・コードの本体を意味する。
【０００３】
【従来の技術】
テキスト・ファイルのデータ・ベース内で特定の文書またはテキストのブロックを識別するか突き止めるために、特定のテキスト・ストリングを含むユーザ供給の検索要求を受け取ることができ、索引付きデータベースの階層検索を実行してデータベース内の一致するストリングを見つける方法および装置を提供することが既知である。そのような既知の方法および装置の１つが、米国特許第５７８１７７２号に開示されている。また、データベースに保管された文書が、AND、OR、およびAND NOTなどの論理演算子によってリンクされた複数のテキスト・ストリングからなる検索照会に基づいて突き止められる、ブール検索を実行するシステムが既知である。時には、たとえば、２つの特定の単語が、文書内で互いに並んでまたはお互いから指定された単語数以内に現れる場合に文書が突き止められる「near」など、特殊な論理演算子も使用可能である。
【０００４】
大きいデータベースの検索の結果には、多数の、おそらくは大量の「ヒット」が含まれることが当然であり、これは、検索者が、自分が探している項目を正確に想起することができないことと、検索をさらに洗練することを可能にするある検索機能が欠けていることに起因する。また、既知のシステムは、検索照会に含まれるテキスト・ストリングを含む特定の文書を識別することができるが、見つかった各文書を検索して、テキスト・ストリングがその文書内のどこにあるかと、たとえば意味のある形で一節を識別するテキスト節に含まれるかどうかなど、テキスト・ストリングが意味のある全体になっているかどうかを識別する必要がある。
【０００５】
本願の譲受人に譲渡され、参照によって本明細書に組み込まれる米国特許出願第０９／５７４１５２号に、一実施形態が所定の順序でのテキスト断片を含むテキスト部分を探すことを目的とする、テキスト検索方法が開示されている。より一般的には、この方法に、データの本体（データは、テキストとすることができるが、必ずテキストであるわけではない）内に含まれることが期待される複数のデータ断片のシーケンスを受け取るステップと、データとそれぞれのデータ断片の間の一致を突き止めるためにデータの本体を検索するステップと、シーケンスの最初のデータ断片との一致のアドレスおよびシーケンス内の最後のデータ断片との一致の終端アドレスから、データの本体の部分を識別するステップが含まれる。
【０００６】
上記の特許出願書に記載された方法の一実施形態では、所与の順序のテキスト断片を含む最小テキスト部分が識別される（この用語最小部分は、テキスト断片の１つの完全なシーケンスだけを含む部分を意味する。一般に、断片の少なくとも１つが、１回だけ現れるが、この部分に、１つまたは複数の断片の複数のインスタンスが含まれる可能性がある）。しかし、おそらくは、複数の所与のテキスト断片を含むが、その順序が既知でない部分について、所与のテキスト内を検索する必要がある。たとえば、見つけたいテキスト部分が、
１．  The man was lurking in the dark alley.
または
２．  The alley was dark.  The man was lurking there.
のいずれかであることを曖昧に記憶している場合がある。
【０００７】
テキスト断片"man ... lurking ... dark"を含む検索要求が、前に提案されたアルゴリズムに渡される場合には、この要求によって、第１のテキスト部分が見つかるが、第２のテキスト部分は見つからない。その一方で、検索要求がテキスト断片"dark ... man ... lurking"からなる場合には、第２のテキスト部分が見つかるが、第１のテキスト部分は見つからない。これは、前に提案されたアルゴリズムが、テキストのうち、テキスト断片が検索要求で与えられたものと同一の順序で現れる部分を探すからである。
【０００８】
【発明が解決しようとする課題】
本発明の目的は、文書を識別するかテキスト・ファイルのデータベース内のテキストのブロックを突き止めるための、追加の機能性または追加の検索照会フォーマットを提供する検索アルゴリズムを使用可能にすることである。
【０００９】
本発明のもう１つの目的は、検索照会によって識別されるテキストの特定のブロックをよりよく区別することができるデータ検索の装置および方法を提供することである。
【００１０】
具体的には、目的は、テキスト断片を含む検索照会を処理し、これらの断片を検索照会の順序と異なる順序で含むテキスト部分を見つける、アルゴリズムを提供することである。
【００１１】
【課題を解決するための手段】
本発明には、検索照会によって識別されるデータの部分を突き止めるために前記データを検索するコンピュータ方法、システム、およびプログラム製品が含まれる。本発明には、前記データ内に含まれると期待される複数のデータ断片を含む検索照会を受け取り、前記データと前記データ断片のそれぞれとの間の一致を突き止めるために前記データを検索し、前記データ断片のすべてとの一致を含む前記データの最小部分を識別する、ステップ、手段、またはプログラム部分が含まれる。
【００１２】
本発明では、用語「最小部分」によって、データ断片の１つの完全な組だけを含むデータの部分を意味する。すなわち、最小部分に、その部分に複数回現れる１つまたは複数の断片が含まれる場合があるが、これらのすべてが複数回現れることはできず、データ断片の少なくとも１つが、１回だけ現れる。これをさらに説明するために、検索照会に、データ断片Ａ、Ｂ、およびＣが含まれるが、検索される所与のデータに次の断片が含まれるものとする。
ＡＢＢＡＡＣＣＡ
【００１３】
最小部分は、下線付きの部分である。すなわち、最小部分には、検索照会のデータ断片Ａ、Ｂ、およびＣのすべてが含まれるが、そのうちの少なくとも２つ、この例では２番目と最後が、１回だけ現れる。テキスト断片を含むデータの最小部分を識別することによって、意味のある形で断片に関連する部分が見つかる可能性が高まり、たとえば、断片"man"、"lurking"、および"dark"を含む照会の前の例では、最小部分が、これらの断片を含む所与の文または句になる。データの最小部分を識別するために、この「課題を解決するための手段」で前に説明したように、検索照会を受け取り、データとそれぞれのデータ断片との間の一致を突き止めるためにデータを検索した後に、本発明に、前記データ断片のすべてを含み、
前記データ断片のうちデータ内で最後に現れる１つとの最初の一致の終端位置である終了位置と、
前記データ断片のうちデータ内で最初に現れる１つとの、前記終了位置の前の最も近い一致の位置である開始位置と
の間に存在する部分を識別することを含めることができる。
【００１４】
どの場合でも、データを、データの前記識別された部分の強調表示または他の形でその部分をグラフィカルに示すことを用いて表示画面に表示することができる。
【００１５】
本発明のよりよい理解と、本発明を実施できる方法を示すために、例として添付図面を参照する。
【００１６】
【発明の実施の形態】
本明細書で説明する方法は、下記の機能を提供することを意図されている。すなわち、テキストと、各テキスト断片が区切り記号によってテキストから分離される複数のテキスト断片を含む検索要求とを与えられるものとして、作業は、テキストの先頭から、すべてのテキスト断片を含むが、断片が検索要求に現れる順序に無関係な、テキストの最初の最小部分を見つけることである。検索は、そのようなテキストの最小部分が見つかる場合に成功とみなされる。このアルゴリズムは、特定の順序で断片を含むテキストを見つける、前述の前に提案されたアルゴリズムをも含むソフトウェアに関連して使用されることを意図され、また、そのようなソフトウェアに組み込むことができる。どの特定のアルゴリズムを使用するかを指定するために、それぞれの異なる区切り文字を、テキスト断片の間で使用することができる。たとえば、前の特許出願で開示された、順序に依存する検索について、省略記号を使用することができ（前の特許出願に開示されているように）、たとえばアンド記号などの代替分離文字を、順序に依存しない検索に使用することができる。
【００１７】
テキストの最小部分には、検索テキスト断片の１つの完全な組だけが含まれる。しかし、検索要求からの、すべてではないが１つまたは複数のテキスト断片が、この部分に複数回現れる場合がある。複数のテキスト断片は、同一の内容を担わず、テキスト断片を、検索要求内の別のテキスト断片のサブストリングにすることもできない。本明細書で説明する本発明の好ましい実施形態では、テキスト断片が、互いに部分的にオーバーラップすることができるが、このオーバーラップを解決するためには、アルゴリズムに複雑さが追加される。
【００１８】
検索要求に、１つのテキスト断片だけが含まれる場合には、テキストの最小部分は、単純に、所与のテキスト内のそのテキスト断片の最初のオカレンスである。
【００１９】
本明細書で説明するアルゴリズムが有用になる可能性がある状況の具体的な例は、次のとおりである。
"insurgent&&&gent and &&&her cat&&& and other&&&green&&&sun"
が、検索要求であるものとする。ここには、６つのテキスト断片すなわち、"insurgent"、"gent and "、"her cat"、" and other"、"green"、および"sun"がある。テキスト断片が、３つの連続するアンド記号（本明細書で使用される区切り記号）によって区切られていることに留意されたい。テキスト断片の先頭および末尾の空白は、存在する場合に、そのテキスト断片の一部とみなされる。テキスト
"Counterinsurgent and other categories of insurgent people sat around her cat.  The gent and others with him stood a little far off from this group.  With the setting sun, and the lake on one side of the house, and a green pasture on the other, it was a picturesque scene."
と、上の検索要求を与えられたものとして、作業は、テキストの先頭から、検索要求を満足する「テキストの最小部分」を見つけることである。
【００２０】
この例では、成功するアルゴリズムが、「テキストの最小部分」が下記であることを見つける。
" and other categories of insurgent people sat around her cat.  The gent and others with him stood a little far off from this group.  With the setting sun, and the lake on one side of the house, and a green"
【００２１】
テキスト検索と同様に、本発明による検索の方法、システム、およびプログラムは、下記などの他の状況で使用することができる。
１．断片間の間隔が未知の状況で、ＤＮＡ断片を見つけることが所望される、ゲノム内のＤＮＡシーケンスの検索（たとえば、遺伝子と、それらにコード化された、治療的価値を有する可能性があるタンパクの探求を助けるため。ＤＮＡのコードの９７％が、遺伝子ではなく、したがって、よい検索技法が真に有用になる可能性があることに留意されたい）。
２．データ・マイニングすなわち、データ・フィールドへの明示的な参照なしでのデータベース・レコードの検索。たとえば、アプリケーション・プログラムによってデータベースから照合されたテキスト・ファイルとして作成された住所のリストを使用して、その人に関する断片的な情報だけが使用可能である人を検索することができる。この場合に、データベースの構造は重要ではなく、アプリケーション・プログラムによって作成されるテキスト・ファイルが重要である。
３．ウェブ検索。ウェブ上の文書のより意味のある検索。ウェブでのキーワード検索が、非常に長い文書のリストをもたらす時に、本発明などの検索アルゴリズムによって、特に自分の専門領域の文書を検索する領域専門家によって使用される時に、関連性に関する、リストされた文書のさらなる検索を自動化することができる。
４．非常に大きいコード内のあるパターンに従うコード断片の検索。
【００２２】
図１に、本発明を実施することができるコンピューティング環境の１例を示す。
【００２３】
この実施形態には、いわゆる独立型のコンピュータ１すなわち、ネットワークに永久的にリンクされてはおらず、表示モニタ２、キーボード３、マイクロプロセッサ・ベースの中央処理装置４、ハード・ディスク５、およびランダム・アクセス・メモリ６を含み、これらのすべてが接続バス７によって互いに結合される、コンピュータである。キーボード３は、ユーザが、検索照会などのユーザ・データと共にコマンドをコンピュータに入力できるようにするために動作可能である。キーボード３と同様に、コンピュータには、特にコンピュータがグラフィカル・ユーザ・インターフェースを有するオペレーティング・システムによって制御される場合に、ユーザ・コマンドを入力するためのマウスまたはトラック・ボール（図示せず）を含めることができる。
【００２４】
プログラム命令をコンピュータ１に導入するため、すなわち、プログラム命令をランダム・アクセス・メモリ６にロードするか、ハード・ディスク５に保管するか、その両方を行い、その結果、コンピュータが、動作を開始するか、指令された時に動作できるようにされるようにするために、本発明に従って、コンピュータ１に、ＣＤ−ＲＯＭ９を受け取るＣＤ−ＲＯＭドライブ８が含まれる。
【００２５】
プログラム命令が、ＣＤ−ＲＯＭ９に保管され、このＣＤ−ＲＯＭ９から、ＣＤ−ＲＯＭドライブ８によって読み取られる。しかし、当業者によってよく理解されるように、ＣＤ−ＲＯＭドライブ８によって読み取られる命令は、ＣＤ−ＲＯＭ９から直接に使用可能ではなく、ランダム・アクセス・メモリ６にロードされ、ハード・ディスク５に保管され、そこからコンピュータ１によって使用される場合がある。また、命令は、ＣＤ−ＲＯＭ上またはランダム・アクセス・メモリ６内の適当な伸長ソフトウェアを使用してＣＤ−ＲＯＭから伸長される必要がある場合があり、どの場合でも、ＣＤ−ＲＯＭに保管されるシーケンスと異なるシーケンスでコンピュータ１によって受け取られ、保管される場合がある。
【００２６】
ＣＤ−ＲＯＭドライブ８の他に、またはその代わりに、たとえばフロッピ（Ｒ）・ディスク・ドライブ、磁気テープ・ドライブ、または、赤外線レシーバなどの無線通信デバイス（いずれも図示せず）などの他の適当な入力手段を設けることができる。
【００２７】
最後に、コンピュータ１には、電話モデム１０も含まれ、この電話モデム１０を介して、コンピュータが、電話回線１１、インターネット・サービス・プロバイダ（ＩＳＰ）の構内に配置されたモデム１２、およびＩＳＰのコンピュータ１３を介して、インターネットに一時的にリンク・アップすることができる。やはりインターネットに接続されるのが、コンピュータ１４などの多数のリモート・コンピュータであり、これらのリモート・コンピュータから、コンピュータ１へのダウロードのために情報、ソフトウェア、および他のサービスが使用可能である。
【００２８】
したがって、本発明によるプログラム製品には、コンピュータ１に発明的方法を実行させるコンピュータ・コードの本体を保管されたＣＤ−ＲＯＭなどの記憶媒体を含めることができる。その代わりに、プログラム製品を、コンピュータ１４を運営または使用する供給者によってコンピュータ１４からコンピュータ１へのダウンロードのために使用可能にされるコンピュータ・コードの本体として実施することができる。ＩＳＰのコンピュータ１３も、コンピュータ１４と同一の形で使用することができる。
【００２９】
コンピュータ１は、独立型環境にある必要はない。その代わりに、永久的に接続される他のコンピュータと共にネットワーク（図示せず）の一部を形成することができる。コンピュータ１は、いわゆるイントラネットに永久的に結合されるか、一時的リンクを有することもでき、このイントラネットは、インターネット・サイトまたはＵＲＬに類似する、インターネットと同一の形で配置されるが、たとえば特定の会社の従業員など、特定のユーザだけがアクセス可能な、データ保持サイトのグループである。電話モデム１０の代わりに、コンピュータ１が、ＩＳＰのコンピュータ１３へのディジタル・ハードワイヤード・リンクを有することができ、また、コンピュータ１自体に、他のリモート・ユーザのためのＩＳＰとして働くか否かに無関係に、永久的に接続されたインターネット・サイト（ＵＲＬ）を含めることができる。言い換えると、本発明は、ローカルのキーボード３を介してのみ使用可能であるのではなく、ＩＳＰとしてまたは単にインターネット・サイトとして働くコンピュータ１への一時的または永久的リンクを介して作業するリモート・ユーザに使用可能にすることができる。
【００３０】
検索されるデータは、おそらくは長い期間にわたって、キーボード３を介してコンピュータに入力され、ハード・ディスク５または、ドライブおよび他のＣＤ−ＲＯＭが、ＣＤ−ＲＯＭへのデータの書換が可能であると仮定してＣＤ−ＲＯＭドライブ８に入れられた別のＣＤ−ＲＯＭ、または前述の任意選択のフロッピ（Ｒ）・ディスクまたは磁気テープ・ドライブに保管された、データとすることができる。検索されるデータは、プログラム命令と共にＣＤ−ＲＯＭ９に保管されたデータとすることもでき、また、たとえば前述のネットワークの一部を形成するファイル・サーバ（図示せず）から、または、インターネットまたは前述のイントラネット内のデータ保持サイトから入手可能なデータとすることができる。
【００３１】
検索方法を、図２を参照して下で説明するが、図２の番号付きのステップは、下の説明のステップ番号に対応する。しかし、まず、検索要求内の所与のテキストおよびまたはテキスト断片を、検索を開始する前に標準形にフォーマットできることを諒解されたい。これは、図２には示されていないが、推奨される。この標準形では、たとえば、複数の連続する空白を、単一の空白によって置換することができ、ある句読点（ピリオド、コンマ、セミコロン、コロン、ハイフン、感嘆符、疑問符など）の前に空白が見つかった場合に、その空白が除去され、そのような句読点の後に空白がない場合に、空白が置かれる。この標準フォーマッティングは、たとえば、検索されるテキストが専門家によって編集されていない場合に役立つ。
【００３２】
この検索方法は、上で定義したテキストの最小部分ｂを見つけることを意図されている。変数bstartおよびbendが、それぞれ部分ｂの先頭および末尾を指すのに使用される。
【００３３】
このアルゴリズムを実行するコンピュータ・コードに、ブロックｂの強調表示ならびにその中のテキスト断片の強調表示などの機能を組み込むことができる。
【００３４】
検索作業を達成するアルゴリズムを、これから説明する。
【００３５】
frag[0]、frag[1]、…、frag[n-1]が、検索要求のテキスト断片であるものとする。同一の断片がなく、別の断片のサブストリングである断片もないと仮定する。そのような断片の組について、ｉ≠ｊであるものとして、frag[i]の末尾部分がfrag[j]の先頭部分とオーバーラップする場合に、frag[i]がfrag[j]にオーバーラップすると言う。上の仮定の下で、オーバーラップが、部分的になるに過ぎず、絶対に完全にならないことに留意されたい。このテキスト断片の組に対して、ｉ、ｊ＝０、…、ｎ−１について、下記の動作を実行する。
【００３６】
ステップ１  ストリング配列変数を作成し、これをfrag[ ]と呼び、この配列に、検索要求内に現れるのと同一のシーケンスで（便宜上。どのような順序付けでも構わない）テキスト断片を書き込む。したがって、上に示した検索の例について、ｎ＝６であり、下記が得られる。
frag[0] = "insurgent"
frag[1] = "gent and "
frag[2] = "her cat"
frag[3] = " and other"
frag[4] = "green"
frag[5] = "sun"
【００３７】
frag[0]がfrag[1]にオーバーラップし、frag[1]がfrag[3]にオーバーラップし、frag[3]がfrag[2]にオーバーラップすることに留意されたい。frag[i]のそれぞれについて、対応するポインタ変数fptr[i]を作成して、テキスト内で見つかったfrag[i]のインスタンスの位置に関する情報、および、このインスタンスに関するオーバーラップがあればそのオーバーラップ情報を保管する。また、対応するポインタ変数nptr[i]を作成して、テキスト内で次に見つかったfrag[i]のインスタンスの位置に関する情報を保管する。bstart=0にする。以下では、ステップ２ないし８が反復的である。
【００３８】
ステップ２  frag[i]のそれぞれについて、所与のテキストの先頭からその最初のインスタンスを探し、見つかった場合に、frag[i]のインスタンスへのポインタを、文字ストリングの形でfptr[i]に保管する。この保管されたポインタを、<fptr[i]>と表す。すべてのfrag[i]のインスタンスが見つかった場合には、次のステップに進み、そうでない場合には、ステップ９に進む。
【００３９】
ステップ３  ｉのそれぞれについて、あるfptr[j]（ｊ≠ｉ）に保管されたアドレス（すなわち<fptr[j]>）が、<fptr[i]>と<fptr[i]> + strlen(frag[i])の間にある、すなわち<fptr[j]> > <fptr[i]>かつ<fptr[j]> < <fptr[i]> + strlen(frag[i])であるかどうかを判定する。あるｊについてそうである場合に、fptr[i]に保管されたアドレスに、ストリング".<fptr[j]>,j"を付加し、その結果、fptr[i]に、修正されたストリング"<fptr[i]>.<fptr[j]>,j"が含まれるようにする。ここでは、ドットを使用して、frag[i]のこのインスタンスについて、frag[i]が終わる前にfrag[j]が始まることを示し、",j"を使用して、後の参照のためにインデックスｊを保管することに留意されたい。また、frag[j]が、たとえばもう１つの断片frag[k]とオーバーラップする場合に、この事実が、fptr[j]が検査される時に明らかになることに留意されたい。したがって、そのような性質の複数のオーバーラップを、互いに連鎖し、追跡することができる。最後に、少なくとも１つのfptr[i]が、ドット付き拡張を有しない、たとえば、最上位アドレスを有するfptr[i]が、ドット付き拡張を有しないことに留意されたい。
【００４０】
ステップ４  fptr[i]のどれもが、ステップ３でドット付きにならなかった場合には、現在の反復を終え、bstart = min(fptr[ ])、およびbend = lptr + strlen(lptr) - 1、ただしlptr = max(fptr[ ])を計算し、ステップ８に進む。そうでない場合には、次のステップに進む。
【００４１】
ステップ５  ｉのそれぞれについて、frag[i]の次のインスタンスを検索し、見つかった場合に、そのポインタをnptr[i]に保管する。見つからない場合には、ヌル・ポインタをnptr[i]に保管する。
【００４２】
ステップ６  ドット付き拡張、たとえばfptr[j]を有するfptr[i]について（すなわち、<fptr[i]>.<fptr[j]>,jの形を有する）、fptr[j]、nptr[i]、およびnptr[j]を調べ、適用可能な下記のサブステップ（ａ）ないし（ｆ）に進む。ドット付き拡張を有するfptr[i]がなくなるまでこのステップを繰り返し、その後、ステップ７に進む。
（ａ）fptr[j]がドット付き拡張を有しておらず、かつ、nptr[i]およびnptr[j]の両方にヌル・ポインタが含まれる場合には、ステップ９に進む。
（ｂ）fptr[j]がドット付き拡張を有しておらず、かつ、nptr[i]にヌル・ポインタが含まれるが、nptr[j]にヌル・ポインタが含まれない場合には、fptr[i]の内容からドット付き拡張を削除し（すなわち、サブストリング".<frag[j]>,j"を除去し）、fptr[j]の内容をnptr[j]の内容に置換する。
（ｃ）fptr[j]がドット付き拡張を有しておらず、かつ、nptr[i]にヌル・ポインタが含まれないが、nptr[j]にヌル・ポインタが含まれる場合には、fptr[i]の内容をnptr[i]の内容に置換する。
（ｄ）fptr[j]がドット付き拡張を有しておらず、かつ、<nptr[i]> < <nptr[j]>である場合には、fptr[ ]内で"<fptr[k]>.<fptr[i]>,i"を検索し（存在するとしても１つだけである）、見つかった場合には、"<fptr[k]>.<fptr[i]>,i"を"<fptr[k]>"に置換する。"<fptr[i]>.<fptr[j]>,i"を"<nptr[i]>"に置換する。
（ｅ）fptr[j]がドット付き拡張を有しておらず、かつ、<nptr[i]> > <nptr[j]>である場合には、fptr[i]の内容からドット付き拡張を削除し（すなわち、サブストリング".<frag[j]>,j"を除去し）、fptr[j]の内容をnptr[j]の内容に置換する。
（ｆ）fptr[j]がドット付き拡張を有する場合には、ドット付き拡張のないfptr[l]が見つかるまでチェーンをたどる（そのようなものが１つある）。fptr[l]への上向きリンクがfptr[k]である（すなわち、fptr[k]の内容が、<fptr[k]>.<fptr[l]>,lである）ものとする。fptr[k]をfptr[i]として扱い、fptr[l]をfptr[j]として扱い、上のステップ６（ａ）からもう一度開始する。
【００４３】
ステップ７  ステップ３に進む。
【００４４】
ステップ８  ステップ２に進み、テキストを、ポインタbstart + 1から始まり、ポインタbendで終わる文字シーケンスとして再定義して、次の反復を開始する。このステップで、検索要求内のテキスト断片のすべての少なくとも１つのインスタンスを含むテキスト・ブロックを有することに留意されたい。反復では、検索要求の条件に違反しない、bstartの最も高い値を探すことによって、このブロックのサイズを圧縮するという作業を行う。
【００４５】
ステップ９  bstart = 0の場合には、検索を不成功としてマークし、そうでない場合には成功としてマークする。成功の場合に、見つかったテキストｂは、bstartから始まり、bendで終わる。ｂが、前の反復の所与のテキストであることに留意されたい。
【００４６】
説明した方法へのさらなる洞察を与えるために、所与のテキストが下記である例（前に説明した）にこの方法を適用する。
"Counterinsurgent and other categories of insurgent people sat around her cat.  The gent and others with him stood a little far off from this group.  With the setting sun, and the lake on one side of the house, and a green pasture on the other, it was a picturesque scene."
【００４７】
所与のテキストは（メモリに保管される時にメモリ・アドレス１０００から始まると仮定）され、検索要求は次の通りである。
"insurgent&&&gent and &&&her cat&&& and other&&&green&&&sun"
【００４８】
最初の反復
ステップ１  ｎ＝６であり、テキスト断片は次の通りである。
frag[0] = "insurgent"
frag[1] = "gent and "
frag[2] = "her cat"
frag[3] = " and other"
frag[4] = "green"
frag[5] = "sun"
frag[0]がfrag[1]にオーバーラップし、frag[1]がfrag[3]にオーバーラップし、frag[3]がfrag[2]にオーバーラップすることに留意されたい。配列fptr[i]およびnptr[i]を作成する。bstart = 0にする。最初の反復を開始する。
【００４９】
ステップ２  テキスト断片の最初のインスタンスへのポインタを、それぞれのfptr[ ]に保管する。すなわち、
fptr[0] = "1007"
fptr[1] = "1012"
fptr[2] = "1023"
fptr[3] = "1016"
fptr[4] = "1214"
fptr[5] = "1164"
ただし、所与のテキストが、アドレス１０００から始まると仮定されている。すべてのfptr[ ]が取り込まれたので、次のステップに進む。
【００５０】
ステップ３  オーバーラップについて検索した後に、fptr[ ]の内容が次のように修正される。
fptr[0] = "1007.1012,1"
fptr[1] = "1012.1016,3"
fptr[2] = "1023"
fptr[3] = "1016.1023,2"
fptr[4] = "1214"
fptr[5] = "1164"
【００５１】
ステップ４  fptr[ ]のいくつかにドット付き項目があるので、次のステップに進む。
【００５２】
ステップ５  nptr[ ]の項目は次の通りである。
nptr[0] = "1041"
nptr[1] = "1082"
nptr[2] = "1069"
nptr[3] = "1086"
nptr[4] = ""
nptr[5] = ""
【００５３】
ステップ６  fptr[0]を検査する時に、サブステップ６（ｆ）で設定された条件が当てはまることがわかる。したがって、fptr[0]からfptr[1]に進み、その後fptr[3]に進み、最後にfptr[2]に進む。fptr[2] = "1023"への上向きリンクは、fptr[3] = "1016.1023,2"である。fptr[i] = fptr[3]かつfptr[j] = fptr[2]として、サブステップ６（ａ）に進む。サブステップ６（ａ）ないし６（ｄ）は当てはまらない。fptr[2]がドット付き拡張を有しておらず、<nptr[3]>が<nptr[2]>より大きいので、サブステップ６（ｅ）が当てはまる。したがって、fptr[3]の内容からドット付き拡張を削除し、"1016"が残され、fptr[2]の内容が、nptr[2]の内容に置換される。更新されたfptr[ ]の内容は、次の通りである。
fptr[0] = "1007.1012,1"
fptr[1] = "1012.1016,3"
fptr[2] = "1069"
fptr[3] = "1016"
fptr[4] = "1214"
fptr[5] = "1164"
サブステップ６（ｆ）は当てはまらない。まだドット付き拡張を有するfptr[ ]があるので、ステップ６を繰り返す。
【００５４】
ステップ６（繰返し）  fptr[0]を検査する時に、サブステップ６（ｆ）が当てはまることがわかる。fptr[0]からfptr[1]に進み、最後にfptr[3]に進む。fptr[3] = "1016"への上向きリンクは、fptr[1] = "1012.1016,3"である。fptr[i] = fptr[1]かつfptr[j] = fptr[3]として、サブステップ６（ａ）に進む。サブステップ６（ａ）ないし６（ｃ）は当てはまらない。fptr[3]がドット付き拡張を有しておらず、<nptr[1]>が<nptr[3]>より小さいので、サブステップ６（ｄ）が当てはまる。fptr[l]がドット付き拡張であるfptr[k]（k = 0）があるので、ドット付き拡張をfptr[0]の内容から削除し、fptr[1]の内容を、nptr[1]の内容に置換する。fptr[ ]の更新された内容は、次のようになる。
fptr[0] = "1007"
fptr[1] = "1082"
fptr[2] = "1069"
fptr[3] = "1016"
fptr[4] = "1214"
fptr[5] = "1164"
サブステップ６（ｅ）および６（ｆ）で設定された条件は当てはまらない。fptr[ ]は、ドット付き拡張を有する要素を有しないので、ステップ７に進み、これによって、この方法が、もう１つの検索反復のためにステップ３に向けられる。
【００５５】
ステップ３  fptr[ ]にオーバーラップがないので、この方法は、ステップ４に進み、bstart = 1007およびbend = 1214 + strlen(frag[4]) - 1 = 1214 + 5 - 1 = 1218を計算する。bstartおよびbendによって挟まれるテキストの部分は次のとおりである。
"insurgent and other categories of insurgent people sat around her cat.  The gent and others with him stood a little far off from this group.  With the setting sun, and the lake on one side of the house, and a green"
この方法は、ステップ８を介してステップ２に進み、所与のテキストが、bstart + 1およびbendによって挟まれる、すなわち、所与のテキストが、次のようになる。
"nsurgent and other categories of insurgent people sat around her cat.  The gent and others with him stood a little far off from this group.  With the setting sun, and the lake on one side of the house, and a green"
【００５６】
２回目の反復
ステップ２  これによって下記が作られる。
fptr[0] = "1041"
fptr[1] = "1012"
fptr[2] = "1023"
fptr[3] = "1016"
fptr[4] = "1214"
fptr[5] = "1164"
【００５７】
ステップ３  オーバーラップの検索によって、fptr[ ]が次のように修正される。
fptr[0] = "1041"
fptr[1] = "1012.1016,3"
fptr[2] = "1023"
fptr[3] = "1016.1023,2"
fptr[4] = "1214"
fptr[5] = "1164"
【００５８】
ステップ４  fptr[ ]のいくつかにドット付き項目があるので、次のステップに進む。
【００５９】
ステップ５  nptr[ ]の項目が次のようになる。
nptr[0] = ""
nptr[1] = "1082"
nptr[2] = "1069"
nptr[3] = "1086"
nptr[4] = ""
nptr[5] = ""
【００６０】
ステップ６  fptr[1]を検査する時に、６（ｆ）が当てはまることがわかる。fptr[1]からfptr[3]に進み、最後にfptr[2]に進む。fptr[2] = "1023"への上向きリンクは、fptr[3] = "1016.1023,2"である。fptr[i] = fptr[3]かつfptr[j] = fptr[2]として、ステップ６（ａ）に進む。ステップ６（ａ）ないし６（ｄ）は当てはまらない。fptr[2]がドット付き拡張を有しておらず、<nptr[3]>が<nptr[2]>より大きいので、ステップ６（ｅ）が当てはまる。したがって、fptr[3]の内容からドット付き拡張を削除し、"1016"が残され、fptr[2]の内容をnptr[2]の内容に置換する。fptr[ ]の更新された内容は、次のようになる。
fptr[0] = "1041"
fptr[1] = "1012.1016,3"
fptr[2] = "1069"
fptr[3] = "1016"
fptr[4] = "1214"
fptr[5] = "1164"
ステップ６（ｆ）が当てはまらないことがわかる。ドット付き拡張を有するfptr[ ]がまだあるので、ステップ６を繰り返す。
【００６１】
ステップ６（繰返し）  fptr[1]を検査する時に、fptr[3]がドット付き拡張を有しておらず、<nptr[1]>が<nptr[3]>より小さいので、ステップ６（ｄ）が当てはまることがわかる。fptr[1]がそのドット付き拡張であるfptr[k]がないので、fptr[1]の内容をnptr[1]の内容に置換する。fptr[ ]の更新された内容は、次のようになる。
fptr[0] = "1041"
fptr[1] = "1082"
fptr[2] = "1069"
fptr[3] = "1016"
fptr[4] = "1214"
fptr[5] = "1164"
ステップ６（ｅ）および６（ｆ）が当てはまらないことがわかる。fptr[ ]は、ドット付き拡張を有する要素を有しないので、ステップ７に進み、これによって、もう１つの検索反復のためにステップ３に進む。
【００６２】
ステップ３  fptr[ ]内でオーバーラップが見つからなかった。ステップ４に進む。
【００６３】
ステップ４  bstart = 1016およびbend = 1214 + strlen(frag[4]) - 1 = 1214 + 5 - 1 = 1218を計算する。bstartおよびbendによって挟まれるテキストの部分は、次のようになる。
" and other categories of insurgent people sat around her cat.  The gent and others with him stood a little far off from this group.  With the setting sun, and the lake on one side of the house, and a green"
ステップ８に進み、そこからステップ２に進んで、所与のテキストが、bstart + 1およびbendによって挟まれる、すなわち、所与のテキストが次のようになる。
"and other categories of insurgent people sat around her cat.  The gent and others with him stood a little far off from this group.  With the setting sun, and the lake on one side of the house, and a green"
【００６４】
３回目の反復
ステップ２  これによって下記が作られる。
fptr[0] = "1041"
fptr[1] = "1082"
fptr[2] = "1023"
fptr[3] = "1086"
fptr[4] = "1214"
fptr[5] = "1164"
【００６５】
ステップ３  オーバーラップの検索によって、fptr[ ]が次のように修正される。
fptr[0] = "1041"
fptr[1] = "1082.1086,3"
fptr[2] = "1023"
fptr[3] = "1086"
fptr[4] = "1214"
fptr[5] = "1164"
【００６６】
ステップ４  fptr[ ]のいくつかにドット付き項目があるので、次のステップに進む。
【００６７】
ステップ５  nptr[ ]の項目が次のようになる。
nptr[0] = ""
nptr[1] = ""
nptr[2] = "1069"
nptr[3] = ""
nptr[4] = ""
nptr[5] = ""
【００６８】
ステップ６  fptr[1]を検査する時に、６（ａ）が当てはまることがわかる。したがって、ステップ９に進む。
【００６９】
ステップ９  bstart≠0なので、検索が成功した。すなわち、前の反復のテキストが、所望のｂである。
【００７０】
本発明の特定の好ましい実施形態を図示し、本明細書で説明してきたが、当業者が、実施形態を修正でき、そのような修正形態および開発が、記載されたまたは請求された発明の範囲内であることを理解されたい。
【００７１】
まとめとして、本発明の構成に関して以下の事項を開示する。
【００７２】
（１）コンピュータ環境において、検索照会によって識別されるデータの部分を突き止めるために前記データを検索する方法であって、
前記データ内に含まれると期待される複数のデータ断片を含む検索照会を受け取るステップと、
前記データと前記データ断片のそれぞれとの間の一致を突き止めるために前記データを検索するステップと、
前記データ断片のすべてとの一致を含む前記データの最小部分を識別するステップと
を含む方法。
（２）前記データ断片のうち前記データ内に最後に現れるものとの最初の一致の位置である終了位置と、
前記データ断片のうち前記データ内に最初に現れるものとの、前記終了位置の前の最も近い一致の位置である開始位置と
の間に存在する、前記データ断片のすべてを含む前記データの部分を識別するステップを含む、上記（１）に記載の方法。
（３）（ｉ）コンピュータ・メモリ内で前記データを受け取るステップと、
（ｉｉ）複数のデータ断片を含む検索照会を受け取るステップと、
（ｉｉｉ）前記データと前記データ断片のそれぞれとの間の一致を突き止めるために前記データを検索するステップと、
（ｉｖ）前記一致のメモリ・アドレスを記録するステップと、
（ｖ）一致のそれぞれについて、他の一致との部分的オーバーラップのすべてを識別するステップと、
（ｖｉ）そのような部分的オーバーラップのそれぞれについて、他の一致とオーバーラップしない新しい一致を探すために、前記データを検索するステップと、
（ｖｉｉ）前記データの、最初のオーバーラップしない一致の位置から最後のオーバーラップしない一致の位置までの部分を識別するステップと
を含む、上記（１）に記載の方法。
（４）（ｉ）前記データ断片をコンピュータ・メモリ内でストリング変数として保管するステップと、
（ｉｉ）前記データと各データ断片との間の最初の一致を突き止め、各データ断片について、その最初の一致の位置をそれぞれのポインタ変数として保管するために、前記データを検索するステップと、
（ｉｉｉ）前記ポインタ変数および前記データ断片のストリング長さへの参照によって、前記一致の間の部分的オーバーラップのすべてを判定するステップと、
（ｉｖ）そのような部分的オーバーラップのすべてについて、関連するデータ断片との次の一致を突き止め、その次の一致の位置をそれぞれのさらなるポインタ変数に保管するために、前記データを検索するステップと、
（ｖ）前記ポインタ変数を参照することによって、前記一致の間の残りの部分的オーバーラップのすべてを判定し、前記データ断片のすべてを、その間のオーバーラップなしに含む前記データの部分が識別されるまで、ステップ（ｉｖ）を繰り返すステップと
を含む、上記（１）に記載の方法。
（５）前記データを表示画面に表示し、データの前記識別された部分を強調表示するステップを含む、上記（１）に記載の方法。
（６）検索照会によって識別されるデータの部分を突き止めるために前記データを検索するシステムであって、
複数のデータ断片を含む検索照会を受け取る入力手段と、
検索されるデータを供給するデータ供給手段と、
前記入力手段および前記データ供給手段に接続され、前記データと前記データ断片のそれぞれとの間の一致を突き止めるために、前記データ供給手段によって使用可能にされるデータを検索するように動作可能である制御手段と、前記データ断片のすべてとの一致を含む前記データの最小部分を識別する情報を登録する手段と
を含むシステム。
（７）ユーザが供給する検索照会によって識別されるデータの部分を突き止めるために前記データを検索するようにコンピュータを動作可能にするコンピュータ・コードの本体を含むコンピュータ・プログラム製品であって、
前記コンピュータが複数のデータ断片を含む検索照会を受け取ることを可能にするコンピュータ・コード部分と、
前記コンピュータに、前記データと前記データ断片のそれぞれとの間の一致を突き止めるために前記データを検索するように指令するコンピュータ・コード部分と、
前記コンピュータに、前記データ断片のすべてとの一致を含む前記データの最小部分を識別させるコンピュータ・コード部分と
を含むコンピュータ・プログラム製品。
【図面の簡単な説明】
【図１】コンピューティング環境のブロック図である。
【図２】データ検索処理を示す流れ図である。
【符号の説明】
１  コンピュータ
２  表示モニタ
３  キーボード
４  中央処理装置
５  ハード・ディスク
６  ランダム・アクセス・メモリ
７  接続バス
８  ＣＤ−ＲＯＭドライブ
９  ＣＤ−ＲＯＭ
１０  電話モデム
１１  電話回線
１２  モデム
１３  コンピュータ
１４  コンピュータ
【図１】
0003832821.tif 000002
【図２】
0003832821.tif 000003