"コンピュータの処理によって、表示すべき文字列を生成する方法であって、キーワードに従い、文書に対する検索によって、前記キーワードを含む、n個の要素cからなる文脈文字列Cを得るステップと、文字列sが文脈文字列Cをカバーする面積を、sをプリフィックスとする、Cの要素であるcの数とsの長さの積で定義したとき、表示される文字列の最大数がK個以下であるとの条件の下で、前記面積の和を最大にするsの集合を求めるステップとを有する、文字列生成方法。前記sの集合を求めるステップは、動的計画法に基づく、請求項1に記載の方法。検索すべき文書集合が、頻度順接尾辞木データとして構成され、前記動的計画法は、前記頻度順接尾辞木に対する検索結果から得られた頻度順文脈木データ上の動的計画法である、請求項2に記載の方法。前記動的計画法は、頻度順文脈木データ上の探索途中の最大値を渡し、上限がそこに達しなければあきらめる、枝刈り処理を行う、請求項3に記載の方法。コンピュータの処理によって、表示すべき文字列を生成するプログラムであって、前記コンピュータをして、キーワードに従い、文書に対する検索によって、前記キーワードを含む、n個の要素cからなる文脈文字列Cを得るステップと、文字列sが文脈文字列Cをカバーする面積を、sをプリフィックスとする、Cの要素であるcの数とsの長さの積で定義したとき、表示される文字列の最大数がK個以下であるとの条件の下で、前記面積の和を最大にするsの集合を求めるステップを実行させる、文字列生成プログラム。前記sの集合を求めるステップは、動的計画法に基づく、請求項5に記載のプログラム。検索すべき文書集合が、頻度順接尾辞木データとして構成され、前記動的計画法は、前記頻度順接尾辞木に対する検索結果から得られた頻度順文脈木データ上の動的計画法である、請求項6に記載のプログラム。前記動的計画法は、頻度順文脈木データ上の探索途中の最大値を渡し、上限がそこに達しなければあきらめる、枝刈り処理を行う、請求項7に記載のプログラム。コンピュータの処理によって、表示すべき文字列を生成するシステムであって、キーワードに従い、文書に対する検索によって、前記キーワードを含む、n個の要素cからなる文脈文字列Cを得る手段と、文字列sが文脈文字列Cをカバーする面積を、sをプリフィックスとする、Cの要素であるcの数とsの長さの積で定義したとき、表示される文字列の最大数がK個以下であるとの条件の下で、前記面積の和を最大にするsの集合を求める手段を有する、文字列生成システム。前記sの集合を求める手段は、動的計画法に基づく、請求項9に記載のシステム。検索すべき文書集合が、頻度順接尾辞木データとして構成され、前記動的計画法は、前記頻度順接尾辞木に対する検索結果から得られた頻度順文脈木データ上の動的計画法である、請求項10に記載のシステム。前記動的計画法は、頻度順文脈木データ上の探索途中の最大値を渡し、上限がそこに達しなければあきらめる、枝刈り処理を行う、請求項11に記載のシステム。従って、本発明の目的は、検索結果の周辺文脈を、限られた範囲内で適切に集約して表示することを可能ならしめる技法を提供することにある。本発明においては、先ず、全文脈文字列Cc1...cnに対して、文字列sがカバーする面積を、sをプリフィックスとするcの数とsの長さの積で定義する。すると、本発明は、全文脈の集合に対して、最大K個、長さL以下の文字列集合の内、他の文字列の部分文字列を選択しない制約下で、全体でカバーする面積を最大にするものを求める技法である。本発明の知見によれば、この問題は全文脈をTRIEにした頻度順文脈木上の動的計画法で効率的に解ける。本発明の別の知見によれば、動的計画法で最大面積を求める際に、探索で得られる面積の上限を見積もることで、大幅な探索の枝刈りが可能になり、以って処理を高速化できる。さらにまた、文書の接尾辞木の子ノードを出現頻度順に並べた、頻度順接尾辞木を作ることで、検索と最大面積を求めることの両方を高速化することが可能となる。以上の処理は、後方文脈のみではなく前方文脈に対しても自然に適応可能である。また、単語区切りを利用していないため、英語をはじめとした任意の言語データ、さらに時刻付きのイベント列などの解析にも適応できる。この発明によれば、検索結果を、限られた領域に出来るだけ沢山の情報を与えるように圧縮して表示する技法が提供される。しかも、動的計画法を使うことで、そのための計算が、高速化される。以下、図面に基づき、この発明の実施例を説明する。特に断わらない限り、同一の参照番号は、図面を通して、同一の対象を指すものとする。尚、以下で説明するのは、本発明の一実施形態であり、この発明を、この実施例で説明する内容に限定する意図はないことを理解されたい。図1を参照すると、本発明の一実施例に係るシステム構成及び処理を実現するためのコンピュータハードウェアのブロック図が示されている。図1において、システムパス102には、CPU104と、主記憶RAM106と、ハードディスクドライブHDD108と、キーボード110と、マウス112と、ディスプレイ114が接続されている。CPU104は、好適には、32ビットまたは64ビットのアーキテクチャに基づくものであり、例えば、インテル社のPentium商標4、Core商標2Duo、Xeon商標、AMD社のAthlon商標などを使用することができる。主記憶106は、好適には、2GB以上の容量をもつものである。ハードディスクドライブ108は、大量の文書データ及び検索のための頻度順接尾辞木データを格納できるように、例えば、320GB以上の容量をもつものであることが望ましい。ハードディスクドライブ108には、個々に図示しないが、オペレーティングシステムが、予め格納されている。オペレーティングシステムは、Linux商標、マイクロソフト社のWindows商標7、WindowsXP商標、Windows商標2000、アップルコンピュータのMacOS商標などの、CPU104に適合する任意のものでよい。ハードディスクドライブ108にはさらに、検索されるテキストデータと、テキストデータから頻度順接尾辞木データを生成する頻度順接尾辞木作成モジュールと、頻度順接尾辞木作成モジュールによって作成された頻度順接尾辞木データと、ユーザが指定したキーワードに基づき、本発明の技法によって文脈文字列を求め、表示を圧縮した態様で文字列を出力する文字列検索モジュールと、文字列検索モジュールによって出力された文字列を、ディスプレイ114に表示するためのGUIモジュールが保存されている。これらのデータ及びモジュールについては、図2の機能ブロック図を参照して、後で、より詳しく説明する。キーボード110及びマウス112は、オペレーティングシステムまたは、ハードディスクドライブ108から主記憶106にロードされ、ディスプレイ114に表示されたプログラム図示しないを起動したり、検索するための文字を打ち込んだりするために使用される。ディスプレイ114は、好適には、液晶ディスプレイであり、例えば、XGA1024×768の解像度、またはUXGA1600×1200の解像度などの任意の解像度のものを使用することができる。次に、図2の機能ブロック図を参照して、本発明の処理のための機能要素について説明する。テキストファイル202は、ハードディスクドライブ108に保存された大容量ファイルであり、好適には自然言語テキストデータを含む。頻度順接尾辞木構築モジュール204は、テキストファイル202を読み取って、頻度順接尾辞木データ206として、ハードディスクドライブ108に保存する。頻度順接尾辞木構築モジュール204の処理については、図3のフローチャートを参照して、後でより詳細に説明する。文字列検索モジュール208は、本発明の要部をなす処理に関する機能を含むものであって、ユーザーが入力したキーワードに基づき、文脈文字列を検索し、さらに、それを基に、圧縮表示文字列を計算して与える。文字列検索モジュール208の処理は、図6以下のフローチャートを参照して、後でより詳細に説明する。GUIモジュール210は、キーボード110及びマウス112を用いてユーザーが入力した文字列を文字列検索モジュール208に渡し、文字列検索モジュール208の文脈文字列の出力を、ディスプレイ114に表示する機能をもつ。頻度順接尾辞木構築モジュール204、文字列検索モジュール208、及びGUIモジュール210は、C、C、C、Java商標などの既存のプログラム言語で書くことができる。GUIモジュール210は、ユーザーの文字列入力を読み込み、あるいは、文脈文字列の出力を、ディスプレイ114に表示するために、好適には、オペレーティングシステムが提供するAPI関数を呼び出すようにプログラミングされる。次に、図3のフローチャートを参照して、頻度順接尾辞木構築モジュール204が頻度順接尾辞木データを作成して出力する処理について説明する。この処理は、従来技術の範囲であって、本発明の特徴を構成するものでないことを理解されたい。頻度順接尾辞木とは、文書の全接尾辞に対してTRIEを作ったものである。全接尾辞とは、文書の全ての位置以降の文字列の集合のことである。よって、長さnの文書に対して、n個存在する。但し、TRIEの各ノードの子ノードは、葉の総数が多い順にソートする。葉の総数でなく、アルファベット順にソートしたのが、一般の接尾辞木である。サイズは、接尾辞木と同じOであり、最大でも2n個のノードである。さて、頻度順接尾辞木構築モジュール204は、図3のステップ302において、テキストファイル202を読取って、ステップ304で、接尾辞配列構築を行う。この処理は例えば、GeNongSenZhangWaiHongChanTwoEfficientAlgorithmsforLinearSuffixArrayConstructionIEEETransactionsonComputers2008に記述されている技法を使う。ステップ306において、頻度順接尾辞木構築モジュール204は、最大接頭辞長の計算を行う。この処理は例えば、ToruKasaiGunhoLeeHirokiArimuraSetsuoArikawaandKunsooParkLinearTimeLongestCommonPrefixComputationinSuffixArraysandItsApplicationsInprocof12thAnnualSymposiumonCombinatorialPatternMatchingpp1811922001に記述されている技法を使う。ステップ308において、頻度順接尾辞木構築モジュール204は、帰りがけ順で最初のノードをnとおく。接尾辞配列を帰りがけ順に辿る処理も、例えば、ToruKasaiGunhoLeeHirokiArimuraSetsuoArikawaandKunsooParkLinearTimeLongestCommonPrefixComputationinSuffixArraysandItsApplicationsInprocof12thAnnualSymposiumonCombinatorialPatternMatchingpp1811922001に記述されている。ステップ310では、頻度順接尾辞木構築モジュール204は、nが帰りがけ順で最後のノードであるかどうかを判断し、もしそうなら、処理を終わる。そうでなければ、ステップ312に進み、頻度順接尾辞木構築モジュール204は、nの子ノードを頻度順にソートし、ステップ314で、nの子ノードをファイルに出力し、これは、頻度順接尾辞木データ206としてハードディスクドライブ108に保存される。ステップ316では、nにnの次のノードが代入されて、処理は、ステップ310の判断に戻る。図4は、このようにして構築された頻度順接尾辞木の一例の木構造を示す図である。図4において、ボタなどはそれぞれ、頻度順接尾辞木のノードであり、ノードの上に示された数字は、出現回答を示す。特に図4で、参照番号402で示した領域は、ボタンに対する頻度順文脈木を示す。頻度順接尾辞木は、所定の検索すべきテキストファイルに対して、一度だけ作成して、ハードディスクドライブ108に保存しておけば、テキストファイルが変わらない限り作成し直さないで、何度でも検索に使用することができる。一方、図4は、頻度順文脈木の例を示す図である。頻度順文脈木は、特定のキーワードで、頻度順接尾辞木を検索することによって、主記憶またはハードディスクドライブ108上に動的に生成される。後述する、本発明の動的計画法は、このように動的に生成された頻度順文脈木上で実行される。頻度順接尾辞木上での検索は、接尾辞木と同様の方法で実行可能である。但し、各子ノードは、アルファベット順に並んでいないので、線形探索が必要である。このとき、子ノードをデータ構造中に連続させておけば、クエリ長に比例した回数のランダムアクセスだけで検索可能である。そして、検索し終わったノードをルートとする部分木が、頻度順文脈木となる。次に、図3の処理によって構築された頻度順接尾辞木データ206を検索するための処理を、図5に示す。この処理は、好適には、文字列検索モジュール208がもつサブルーチンとしての関数の1つであるsearchとして実装される。図5のsearchという関数のフローチャートにおいて、sをクエリ文字列とする。ステップ502では、nにルートノードが代入される。ステップ504では、p0と置かれ、ステップ506では、psかどうかが判断される。ここで、sとは、sの長さである。もしpsであるなら、関数searchは、nを返して終了する。もしpsでないなら、ステップ508に進み、そこでnnullかどうかが判断される。もしnnullなら、関数searchは、nを返して終了する。もしnnullでないなら、ステップ510に進み、そこで、cgetcharが実行される。getcharは、ノードnに対する文字を返す。ステップ512では、spcかどうかが判断される。ここで、spとは、文字列sのp番目の文字である。もしspcであるなら、ステップ514で、pp1によりpが増分され、ステップ516で、nchdにより、nの最初の子ノードであるchdがnに代入される。そうして処理は、ステップ506に戻る。ステップ512で、spcでないなら、ステップ518で、nsibにより、nの次の兄弟ノードであるsibがnに代入される。そうして処理は、ステップ508に戻る。このsearchの実行後、戻り値のnをルートとする頻度順接尾辞木の部分木が、図4に例示するような頻度順文脈木として、主記憶106または、ハードディスクドライブ108上に構築される。図6は、文字列検索モジュール208が実行する、検索と最適文脈の探索全体の処理のフローチャートを示す図である。文字列検索モジュール208は、ステップ602で、図5のフローチャートで示す関数searchを呼び出して、その結果をnに返す。ここで、sはクエリ文字列であり、GUIモジュール210を介してユーザが入力したものである。文字列検索モジュール208は、ステップ604でnがnullであるかどうかを判断し、もしそうなら、ステップ606で、文字列が見つからない旨を出力して処理を終わる。この処理は典型的には、文字列検索モジュール208がGUIモジュール210にメッセージを渡して、ディスプレイ114に表示させることによって行われる。文字列検索モジュール208がステップ604でnがnullでないと判断すると、ステップ608で、文字列検索モジュール208は、ステップ608で、動的計画法を使った探索の処理を行う。この実施例では、文字列検索モジュール208は、動的計画法として、図7のフローチャートに基づき後で説明する動的計画法の関数fまたは、図8及び図9のフローチャートに基づき後で説明する枝刈り付き動的計画法の関数gをどちらか一方、または両方をサブルーチンとしてもつようにしてよい。なお、ここで、Kは最大文字列選択数である。このステップでは、ステップ602で、searchが構築した頻度順文脈木上で、動的計画法が適用される。gは、枝刈り付き処理により、fよりも大規模な頻度順文脈木に対する探索に適合する。従って、文字列検索モジュール208は、頻度順文脈木が所定の規模よりも大きい場合にgを適用し、そうでない場合にfを適用するようにしてもよい。ステップ608で、fまたはgの一方を実行した後、文字列検索モジュール208は、ステップ610で、に関して最大値を返したノードを関数rで復元する。関数rの処理は、図10のフローチャートを参照して、後で詳細に説明する。こうして、各ノードに対応する文字列が得られると、文字列検索モジュール208は、それらの文字列を、ステップ612でGUIモジュール210に渡して、ディスプレイ114に表示させる。次に、本発明の動的計画法の処理に関する説明に移るが、その前に、本発明における面積、及び面積最大化の定義について説明する。先ず、最大で縦K行、横L文字の表示域に文脈の要約を表示するとする。そこで、n件の文脈集合Cc1cnと、m件の文字列集合Ss1smとする。但し、m≦Klen≦Lとする。ここで、lenは、文字列sの長さである。また、S中の任意の文字列は、他の文字列のプリフィックスではないとする。これは、をとを使うとを使うときのような類似文字列がでるのを防ぐためである。そこで、SがCをカバーする面積Aを、下記の式で定義する。ここで、CPは、C中でsをプリフィックスとするものの個数である。そこで、求めたいのは、あるCに対して、面積を最大にするS、つまりargmaxSAを求めることである。しかし一般的に、Sの候補は膨大なので、本発明では、動的計画法を適用して計算合理的にSを求めるようにする。以上の定義の下で、図7のフローチャートを参照して、fの処理を説明する。fとは、ノードn、その子、その弟のうち、最大k個を選択したとき得られる最大面積を返す関数である。ステップ702では、変数aについて、a0と置かれる。ステップ704では、nnullかどうかが判断される。もしnnullなら、関数fは、aを返して終了する。もしnnullでないなら、ステップ706に進み、は処理済かどうか判断される。もしが処理済なら、ステップ708で、aとしてについての前回処理時の値を用いて、関数fは、aを返して終了する。が処理済でないなら、ステップ710で、ssfk1によって、fが再帰呼び出しされ、それの戻り値がssに代入される。ここで、sibは、nの次の兄弟ノードである。ステップ712では、asssによって、計算された値がaに代入される。ここで、sとは、上記で定義した面積を用いた場合の、ノードnがカバーする面積である。ステップ712での計算結果を、Aとする。次に、ステップ714ではc0と置き、ステップ716からステップ724までは、cを1つずつ増分しつつ、ステップ716でckと判断されるまで、処理を繰り返す。すなわち、ステップ718では、csfcによって、計算された値がcsに代入される。ここで、chdとは、ノードnの最初の子ノードである。ステップ720では、ssfkcによって、計算された値がssに代入される。ステップ722では、amaxによって、計算された値がaに代入される。ステップ722での計算結果を、Bとする。ステップ724では、cc1によってcが増分されて、ステップ716での判断に戻る。ループが廻ってステップ716でckとなると、ステップ726でを処理済にして、関数fは、aを返して終了する。次に、図8及び図9のフローチャートを参照して、枝刈り付き動的計画法の関数gの処理について説明する。図7で説明した関数fは最大値を取る組み合わせを探索する関数であったため、関数gは、探索途中での最大値を渡し、残りの処理を続けてもこれに達しないことがわかれば処理を中断してもよいという方針で処理する。そのため、真の最大値の上限を見積もり、これが探索途中での最大値を超えなければ処理を中断する。すなわち、効率よく枝刈りするためには、真の最大値をなるべく先に探索し、またなるべく真の最大値に近い上限値を、効率よく計算する必要がある。このとき、計算する順番は、経験的に、cが少ない場合が最適値をとることが多いため、cを昇順に探索するのが望ましい。また、上限値uは真の最大値f以上の値を返す任意の関数を適用できる。例えば、自分を含めたk個の兄弟が最大長までに達した場合の値と、kk1のときの上限値のうちの最小値、というようなヒューリスティックスを使うようにする。このとき、子ノードが頻度順に並んでいる性質によって、真の値の上限になっていることが示される。また、計算量が検索ヒット数に依存しないので、効率がよい。このような前提で、枝刈り付き動的計画法の関数gの処理が構成されている。ステップ802では、変数aについて、a0と置かれる。ステップ804では、nnullかどうかが判断される。もしnnullなら、関数gは、aを返して終了する。図8において、もしnnullでないなら、ステップ806に進み、は処理済かどうか判断される。もしが処理済なら、ステップ808で、aとしてについての前回処理時の値を用いることにし、関数gは、aを返して終了する。さて、が処理済でないなら、ステップ812で、ukとなるまで、ステップ820~832が繰り返される。すなわち、ステップ822では、suukcによって、計算された値がsuに代入され、ステップ824では、csgcasuにより、gを再帰呼び出しして計算した結果がcsに代入される。ステップ826では、cskであると判断されると、ステップ834で、akかどうか判断され、そうでないなら、ステップ910で、vvcountLによって、計算された値がvに代入される。ここでLとは、最大文字列長である。また、countとはmの出現回数である。次に、ステップ912では、msibによって、mが、その次の兄弟ノードに置き換えられる。そして、ステップ914、ii1で増分されて、ステップ908に戻る。ステップ908で、ikであると判断されると、ステップ916に進んで、そこで、kkと代入し、次に、ステップ918では、kKであるかどうかが判断される。ここでKとは、最大文字列選択数である。ステップ918で、kKでないと判断されると、ステップ920で、vminによって、計算された値がvに代入される。そして次に、kk1でkが増分されて、ステップ918に戻る。こうして、ステップ920とステップ922が繰り返されて、ステップ918で、kKであると判断されると、関数uは、vを返して終了する。ところで、関数uは、関数fの上限、つまり必ずu≧fの条件が成り立つような関数である。この条件さえ満たせば、本発明のアルゴリズムは正しく動くが、ufが小さいほど枝刈りが効率的に働く。つまり、uの値は条件を満たす中で小さければ小さいほどよく、真の値fと一致しているときが最良である。uppernkは過去に計算した上限を保存したもので、上述したように初期値は∞、つまり、uppernk≧fが必ず成り立つ。すなわち、upperを使って、uを設計している。さて、kは選択する行数なので、kが大きいほどfは大きな値になる。従って,kkならffである。そのため、ff≦uppernkとなる。つまり,uppernkはfの上限の条件を満たす。kの値は最大でもKまでなので,k以上K以下のkの値の中で一番小さなuppernkを関数uの出力として採用している。それならば、uppernkが一番小さくなるのではと思われるかもしれないが、計算順序の関係で、先に大きなkの値に対して上限を計算することがありえる。この計算結果が再利用されている。次に、図10のフローチャートを参照して、図6のフローチャートにおけるに関して最大値を返したノードを関数rで復元、とある関数rの処理を説明する。関数rは、ノードnと、整数kを引数とする。ステップ1002では、nnullかどうかが判断される。もしそうなら、関数rは、直ちに終了する。ステップ1004では、がAで最大かどうか判断される。この判断は、図7の関数fが動的計画法で使われた場合は、ステップ712の計算結果と、ステップ722の計算結果を比較して、ステップ712の計算結果で最大値を計算したことを意味する。図8の関数gが枝刈り付き動的計画法として使われた場合は、ステップ816の計算結果と、ステップ830の計算結果を比較して、ステップ816の計算結果で最大値を計算したことを意味する。ステップ1004で、がAで最大であると判断されると、ステップ1006でnがノード集合に追加され、ステップ1008では、rk1により、rが再帰的に呼び出されて、関数rは終了する。ステップ1004で、がAで最大でないと判断されると、ステップ1010に進み、そこで、がBで最大であるかどうかが判断される。この判断は、図7の関数fが動的計画法で使われた場合は、ステップ712の計算結果と、ステップ722の計算結果を比較して、ステップ722の計算結果で最大値を計算したことを意味する。図8の関数gが枝刈り付き動的計画法として使われた場合は、ステップ816の計算結果と、ステップ830の計算結果を比較して、ステップ830の計算結果で最大値を計算したことを意味する。ステップ1010で、がBで最大であると判断されると、ステップ1012でrcが再帰的に呼び出され、ステップ1014では、rkcにより、rが再帰的に呼び出されて、関数rは終了する。ここでcとは、図7のフローチャートでは、ステップ714で初期化され、その後ステップ722でaの最大値を計算したときの値であり、図8のフローチャートでは、ステップ818で初期化され、その後ステップ830でaの最大値を与えたときの値である。ステップ1010で、がBで最大でないと判断されると、関数rは、直ちに終了する。このようにして復元されたノードが、図6のステップ612でGUIモジュール210に渡されて、ディスプレイ114に表示される。図11は、背景技術のところで示したKWICを、本発明の技法に従い、K3という極端に狭い領域に圧縮して表示する例である。この例では、K3でも、ボタンをクリックしボタンをクリックできボタンを押で、示されているKWICのよい要約になっていることが見て取れる。図12は、ある特定のマニュアル文書に対して、データベースというクエリで、背景技術で記述したような従来の典型的に技法でサーチした結果と、本発明の技法でサーチした結果を比較する図である。特に、長さL10で切って、出現頻度の多いK10件を表示した例で比較している。22などと表示されているのは、出現頻度である。本発明の技法は、データベースサーバーを起動データベースサーバーが停止するなどをデータベースサーバーに集約してカウントするので、頻出文脈が分かりやすい。一方、従来技術では、頻出単語の出現総数が少なく数えられて、最悪、頻出文脈が発見できないということもある。また、特に、枝刈り付き動的計画法を使った実施例の場合、実験では、20MB程度のデータに対して、枝刈りなしの動的計画法に比べ、最大20倍の高速化に成功した。さらに、事前に頻度順接尾辞木を作ることで、Nグラムインデックスなどで検索してから頻度順文脈木を作るよりも効率的である。そのため、大規模化に耐えられるようになる。本発明は、マニュアルやビジネス文書における、表現統一や事例検索にも、有利に適用することができる。テキストマイニングプログラムで、頻度トップのK個を表示するアルゴリズムを用いているものがあるが、その際、集計単位は単語単位となり必ずしもユーザの興味と合わないことが問題となっている。本発明は、ある文脈を適切に表現する可変長のトップK個を表示することが可能になり、テキストマイニングプログラムでの応用も期待できる。尚、上記実施例では、頻度順接頭辞木を構築したが、文書を逆向きにして、接尾辞木を構築することも可能である。これを行うと前方文脈を纏め上げることができる。例えばサーバーというクエリに対してメールサーバーNFSサーバーウェブサーバーなどを返すことが可能となる。その具体的な処理は、文書を逆向きにして頻度順接尾辞木を構築することと、クエリ文字列を逆向きにし、面積最大化の文脈集合を探索し、探索結果を逆向きにして表示することである。以上、本発明の実施例を説明してきたが、本発明は、任意のコンピュータのハードウェア及びプラットフォームで実施可能であることを理解されたい、また、日本語以外の任意の言語に適用可能であることも、この分野の当業者なら、理解するであろう。"