(57)【要約】      （修正有）【課題】より高速な近傍top-k検索を可能にする。【解決手段】文章の集合において、少なくとも一部の単語の出現箇所を階層的に特定するステップと、単語毎に各単語に対応する前記特定された出現箇所のより上位階層に基づいて第１インデックスを作成するステップと、検索対象の単語の入力を受け付けるステップと、前記検索対象の単語の出現箇所を階層的に特定するステップと、前記検索対象の単語に対応する前記特定された出現箇所のより上位階層に基づいて第２インデックスを作成するステップと、前記第１インデックスと前記第２インデックスとを比較し、前記検索対象の単語の周辺における一の単語の出現数の概算値を演算するステップと、前記概算値が所定数以上であることを条件に、前記出現箇所の上位階層及び下位階層に基づき、前記検索対象の単語の周辺における前記一の単語の出現数のより正確な値を演算するステップとを備える。【選択図】図７
2014035760.tif 000002
【特許請求の範囲】
【請求項１】
複数の単語を含む複数の文章の集合をコンピュータにより処理する方法であり、
前記文章の集合において、少なくとも一部の単語の出現箇所を階層的に特定するステップと、
前記少なくとも一部の単語毎に、各単語に対応する前記特定された出現箇所のより上位階層に基づいて第１インデックスを作成するステップと、
検索対象の単語の入力を受け付けるステップと、
前記文章の集合において、前記検索対象の単語の出現箇所を階層的に特定するステップと、
前記検索対象の単語に対応する前記特定された出現箇所のより上位階層に基づいて第２インデックスを作成するステップと、
前記第１インデックスと前記第２インデックスとを比較し、前記検索対象の単語の周辺における一の単語の出現数の概算値を演算するステップと、
前記概算値が所定数以上であることを条件に、前記出現箇所の上位階層及び下位階層に基づき、前記検索対象の単語の周辺における前記一の単語の出現数のより正確な値を演算するステップと
を備える方法。
【請求項２】
前記第１インデックス及び第２インデックスが、前記上位階層のビットセットを１／Ｎ（Ｎ：自然数）に圧縮したものであり、圧縮元ビットが１つ以上trueであることを条件に、圧縮先ビットをtrueとする請求項１に記載の方法。
【請求項３】
前記第１インデックスと前記第２インデックスとの比較は、ビット演算により行われる請求項２に記載の方法。
【請求項４】
前記概算値を演算するステップは、
前記圧縮元ビットが２つ以上trueであることを条件に、対応する前記上位階層の要素を記憶し、前記要素に基づいて、前記検索対象の単語の周辺における一の単語の出現数の概算値を演算する請求項２又は３に記載の方法。
【請求項５】
前記概算値を演算するステップは、
前記圧縮元ビットが２つ以上trueであることを条件に、対応する前記上位階層の要素の数を記憶し、前記要素の数に基づいて、前記検索対象の単語の周辺における一の単語の出現数の概算値を演算する請求項２又は３に記載の方法。
【請求項６】
各単語に対応する前記特定された出現箇所のより上位階層のビットセットを１／Ｎ（Ｎ：自然数）に圧縮したものであり、圧縮元ビットが２つ以上trueであることを条件に、圧縮先ビットをtrueとする第３インデックスを作成するステップと、
前記検索対象の単語に対応する前記特定された出現箇所のより上位階層のビットセットを１／Ｎ（Ｎ：自然数）に圧縮したものであり、圧縮元ビットが２つ以上trueであることを条件に、圧縮先ビットをtrueとする第４インデックスを作成するステップとを更に備え、
前記概算値を演算するステップは、
前記第３インデックスと前記第４インデックスとをビット演算により比較する請求項５に記載の方法。
【請求項７】
前記概算値が所定数に満たないことを条件に、前記少なくとも一部の単語のうち、次の単語の出現数の概算値を演算する請求項１乃至６のいずれかに記載の方法。
【請求項８】
前記概算値が所定数に満たないことを条件に、前記一の単語の出現数のより正確な値を演算するステップをスキップする請求項１乃至７のいずれかに記載の方法。
【請求項９】
前記検索対象の単語の周辺において出現する単語のうち、暫定的な頻出上位Ｋ個の単語（Ｋ：自然数）を保持するステップを更に備え、
前記一の単語の出現数のより正確な値を演算するステップは、
前記概算値が前記暫定的な頻出上位Ｋ番目の単語の出現数以上であることを条件に、前記出現箇所の上位階層及び下位階層に基づき、前記検索対象の単語の周辺における前記一の単語の出現数のより正確な値を演算する
請求項１乃至８のいずれかに記載の方法。
【請求項１０】
前記演算された前記一の単語の出現数が前記暫定的な頻出上位Ｋ番目の単語の出現数以上であることを条件に、前記暫定的な頻出上位Ｋ個の単語を更新するステップを更に備える請求項９に記載の方法。
【請求項１１】
前記一の単語の出現数の概算値は、前記一の単語の出現数の正確な値以上の値である請求項１乃至１０のいずれかに記載の方法。
【請求項１２】
前記少なくとも一部の単語を前記複数の文章の集合において頻出する順に、前記一の単語としてその出現数の概算値を演算する請求項１乃至１１のいずれかに記載の方法。
【請求項１３】
前記少なくとも一部の単語のすべての検討が終了することを条件に、前記暫定的な頻出上位Ｋ個の単語（Ｋ：自然数）を最終的な頻出上位Ｋ個の単語として出力するステップを更に備える請求項９乃至１２のいずれかに記載の方法。
【請求項１４】
前記少なくとも一部の単語は、前記複数の文章の集合に含まれる頻出上位Ｌ単語（Ｌ：自然数）を含む請求項１乃至１３のいずれかに記載の方法。
【請求項１５】
前記少なくとも一部の単語は、前記複数の文章の集合に含まれる特定品詞の単語を含む請求項１乃至１４のいずれかに記載の方法。
【請求項１６】
前記検索対象の単語の周辺は、前記検索対象の単語の出現箇所よりも前方にＸ単語（Ｘ：整数）、後方にＹ単語（Ｙ：整数）の範囲として予め設定される請求項１乃至１５のいずれかに記載の方法。
【請求項１７】
前記出現箇所の上位階層は、前記複数の文章のうち一の文章を特定する文章ＩＤであり、前記出現箇所の下位階層は、前記一の文章中の位置を特定する位置ＩＤである請求項１乃至１６のいずれかに記載の方法。
【請求項１８】
コンピュータにより実行されることにより、前記コンピュータに請求項１乃至１７のいずれかに記載の方法を実行させるコンピュータ・プログラム。
【請求項１９】
複数の単語を含む複数の文章の集合を処理するコンピュータであり、
前記文章の集合において、少なくとも一部の単語の出現箇所を階層的に特定する手段と、
前記少なくとも一部の単語毎に、各単語に対応する前記特定された出現箇所のより上位階層に基づいて第１インデックスを作成する手段と、
検索対象の単語の入力を受け付ける手段と、
前記文章の集合において、前記検索対象の単語の出現箇所を階層的に特定する手段と、
前記検索対象の単語に対応する前記特定された出現箇所のより上位階層に基づいて第２インデックスを作成する手段と、
前記第１インデックスと前記第２インデックスとを比較し、前記検索対象の単語の周辺における一の単語の出現数の概算値を演算する手段と、
前記概算値が所定数以上であることを条件に、前記出現箇所の上位階層及び下位階層に基づき、前記検索対象の単語の周辺における前記一の単語の出現数のより正確な値を演算する手段と
を備えるコンピュータ。
【請求項２０】
前記コンピュータは半導体メモリを備え、
前記概算値を演算する手段は、前記半導体メモリ上に前記第１インデックスと前記第２インデックスを記憶し、ビット演算により比較する請求項１９に記載のコンピュータ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、テキスト処理技術に関し、特に、注目する単語の周辺にどのような単語が頻出するかを高速に検出する技術に係る。
【背景技術】
【０００２】
情報処理技術の伸展に伴い、多様で大量のテキストデータを分析し、新たな知見を引き出すことが様々な分野で行われている。例えば、ネットワーク上のマイクロブログデータ、製造業者における製品情報データ、販売者における製品販売データ、医療機関内の診療データ等が分析の対象となっている。これらのテキストデータを対象とし、頻出する単語を上位ｋ件抽出する問題は、top-k問題と呼ばれ、本発明者らによるもの（特許文献１及び２）を含め、従来から様々なアプローチが提案されている。また、転置インデックス等を用い、ある検索キーワードの周辺にどのような単語が頻出使用されているかを検索する近傍検索技術も従来から提案されている（特許文献３乃至１４）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００７-１５６７３９号公報
【特許文献２】特開２００９−２１１２６３号公報
【特許文献３】特開２０１０−１９８４２５号公報
【特許文献４】特開２００８−２４３０７４号公報
【特許文献５】特開平０６−３４８７５７号公報
【特許文献６】特開２００９−１９９１５１号公報
【特許文献７】特開平０８−２８７１０５号公報
【特許文献８】特開平０７-１８２３５４号公報
【特許文献９】特開平１１−１５４１６４号公報
【特許文献１０】特開２００１−７５９８１号公報
【特許文献１１】特開２０１１−２５３５７２号公報
【特許文献１２】特開２００１−１３４５７５号公報
【特許文献１３】特開２００１−１０１１９４号公報
【特許文献１４】特開平１０−３３４１１４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、対象とする文章が大量である場合、リアルタイムで分析を行う場合など、一層高速な近傍検索技術が求められている。とりわけ、複数のコンピュータ・システムを並列処理する場合には、検索精度の低下や運用の複雑化等を招くため、単体のコンピュータ・システムで、より高速に近傍検索を行うことが望ましい。
【０００５】
本発明はこのような課題に鑑みてなされたものであり、その目的の一つは、より高速に近傍検索を可能にするテキスト処理方法、コンピュータ及びコンピュータ・プログラムを提供することにある。
【課題を解決するための手段】
【０００６】
本発明を方法として把握すると、以下の通りとなる。すなわち、本発明は、複数の単語を含む複数の文章の集合をコンピュータにより処理する方法であり、前記文章の集合において、少なくとも一部の単語の出現箇所を階層的に特定するステップと、前記少なくとも一部の単語毎に、各単語に対応する前記特定された出現箇所のより上位階層に基づいて第１インデックスを作成するステップと、検索対象の単語の入力を受け付けるステップと、前記文章の集合において、前記検索対象の単語の出現箇所を階層的に特定するステップと、前記検索対象の単語に対応する前記特定された出現箇所のより上位階層に基づいて第２インデックスを作成するステップと、前記第１インデックスと前記第２インデックスとを比較し、前記検索対象の単語の周辺における一の単語の出現数の概算値を演算するステップと、前記概算値が所定数以上であることを条件に、前記出現箇所の上位階層及び下位階層に基づき、前記検索対象の単語の周辺における前記一の単語の出現数のより正確な値を演算するステップと
を備える方法である。
【０００７】
ここで、前記第１インデックス及び第２インデックスが、前記上位階層のビットセットを１／Ｎ（Ｎ：自然数）に圧縮したものであり、圧縮元ビットが１つ以上trueであることを条件に、圧縮先ビットをtrueとすることができる。さらにこの場合、前記第１インデックスと前記第２インデックスとの比較は、ビット演算により高速に行うことができる。
【０００８】
概算値の演算方法の一例としては、前記圧縮元ビットが２つ以上trueであることを条件に、対応する前記上位階層の要素を記憶し、前記要素に基づいて、前記検索対象の単語の周辺における一の単語の出現数の概算値を演算することができる。また他の例としては、前記圧縮元ビットが２つ以上trueであることを条件に、対応する前記上位階層の要素の数を記憶し、前記要素の数に基づいて、前記検索対象の単語の周辺における一の単語の出現数の概算値を演算することができる。さらに具体的には、各単語に対応する前記特定された出現箇所のより上位階層のビットセットを１／Ｎ（Ｎ：自然数）に圧縮したものであり、圧縮元ビットが２つ以上trueであることを条件に、圧縮先ビットをtrueとする第３インデックスを保持するステップと、前記検索対象の単語に対応する前記特定された出現箇所のより上位階層のビットセットを１／Ｎ（Ｎ：自然数）に圧縮したものであり、圧縮元ビットが２つ以上trueであることを条件に、圧縮先ビットをtrueとする第４インデックスを保持するステップとを更に備え、前記概算値を演算するステップは、前記第３インデックスと前記第４インデックスとをビット演算により比較することにより、さらに高速に概算値を演算することができる。
【０００９】
また、前記概算値が所定数に満たないことを条件に、前記一の単語の出現数のより正確な値を演算するステップをスキップし、次の単語の出現数の概算値を演算することで、全体の演算をより高速に行うことができる。
【００１０】
また、前記検索対象の単語の周辺において出現する単語のうち、暫定的な頻出上位Ｋ個の単語（Ｋ：自然数）を保持するステップを更に備え、前記一の単語の出現数のより正確な値を演算するステップは、前記概算値が前記暫定的な頻出上位Ｋ番目の単語の出現数以上であることを条件に、前記出現箇所の上位階層及び下位階層に基づき、前記検索対象の単語の周辺における前記一の単語の出現数のより正確な値を演算することもできる。この場合、前記演算された前記一の単語の出現数が前記暫定的な頻出上位Ｋ番目の単語の出現数以上であることを条件に、前記暫定的な頻出上位Ｋ個の単語を更新するステップを更に備えることができる。
【００１１】
なお、前記一の単語の出現数の概算値は、前記一の単語の出現数のより正確な値以上の値となることが望ましい。つまり、前記一の単語の出現数の概算値は、前記一の単語の出現数の上限値となることが望ましい。また、前記少なくとも一部の単語を前記複数の文章の集合において頻出する順に、前記一の単語としてその出現数の概算値を演算することができる。さらに、前記少なくとも一部の単語のすべての検討が終了することを条件に、前記暫定的な頻出上位Ｋ個の単語（Ｋ：自然数）を最終的な頻出上位Ｋ個の単語として出力するステップを更に備えてもよい。
【００１２】
ここで、前記少なくとも一部の単語は、前記複数の文章の集合に含まれる頻出上位Ｌ単語（Ｌ：自然数）を含むことが望ましい。また、前記少なくとも一部の単語は、前記複数の文章の集合に含まれる特定品詞の単語を含むよう設定することができる。さらに、前記検索対象の単語の周辺は、前記検索対象の単語の出現箇所よりも前方にＸ単語（Ｘ：自然数）、後方にＹ単語（Ｙ：自然数）の範囲として予め設定することができる。なお、前記出現箇所の上位階層は、前記複数の文章のうち一の文章を特定する文章ＩＤであり、前記出現箇所の下位階層は、前記一の文章中の位置を特定する位置ＩＤとすることもできる。
【００１３】
本発明をこれらコンピュータ・プログラム、コンピュータ・システムとして把握した場合にも、上述した本発明を方法として把握した場合と実質的に同一の技術的特徴を備える事ができるのは当然である。
【発明の効果】
【００１４】
本発明によれば、より高速な近傍top-k検索が可能となる。
【図面の簡単な説明】
【００１５】
【図１】図１は、本実施形態に係るコンピュータ１のハードウェア構成を示すブロック図である。
【図２】図２は、コンピュータ１の機能モジュールを説明するブロック図である。
【図３】図３は、このコンピュータ１が実行する処理を説明するフローチャートである。
【図４】図４は、図３のステップＳ１の処理をさらに詳細に説明するフローチャートである。
【図５】図５は、ステップＳ１１を模式的に説明する図である。
【図６】図６は、ステップＳ１２１とステップＳ１２２を模式的に説明する図である。
【図７】図７は、１／Ｎ圧縮及び概算値演算を説明する模式図である。
【図８】図８は、図３のステップＳ３の処理をさらに詳細に説明するフローチャートである。
【図９】図９は、暫定top-kのリストを説明する概念図である。
【図１０】図１０は、検索圧縮インデックスの作成を説明する概念図である。
【図１１】図１１は、変形例に係る１／Ｎ圧縮及び概算値演算を説明する模式図である。
【発明を実施するための形態】
【００１６】
実施形態
図１は、本実施形態に係るコンピュータ１のハードウェア構成を示すブロック図である。コンピュータ１のハードウェア構成は、（低速及び高速の）バス１０、バス１０に接続されるＣＰＵ（演算制御装置）１１、ＲＡＭ（ランダム・アクセス・メモリ：記憶装置）１２、ＲＯＭ（リード・オンリ・メモリ：記憶装置）１３、ＨＤＤ（ハード・ディスク・ドライブ：記憶装置）１４、通信インタフェース１５、入出力インタフェース１６を備えている。さらに、入出力インタフェース１６に接続されるマウス（ポインティング装置）１７、フラット・パネル・ディスプレイ（表示装置）１８、キーボード１９等を備えている。なお、コンピュータ１は一般的なパーソナル・コンピュータ・アーキテクチャを採用するものとして説明したが、例えば、より高いデータ処理能力や可用性を求めて、ＣＰＵ１１やＨＤＤ１４等を多重化することができる。また、デスクトップ型の他、ラップトップ型やタブレット型のパーソナル・コンピュータなど、様々なタイプのコンピュータ・システムを採用することができる。
【００１７】
このコンピュータ１のソフトウェア構成は、基本的な機能を提供するオペレーティング・システム（ＯＳ）と、OSの機能を利用するアプリケーション・ソフトウェアと、入出力装置のドライバ・ソフトウェアとを備えている。これらの各ソフトウェアは、各種データと共にRAM１２上にロードされ、CPU１１等により実行され、コンピュータ１は全体として、図２に示す機能モジュールを構成し、図３に示す処理を実行する。
【００１８】
図２は、コンピュータ１の機能モジュールを説明するブロック図である。このコンピュータ１は、特定モジュール（特定手段）１０１、インデックス作成モジュール（作成手段）１０２、入力モジュール（入力手段）１００、演算モジュール（演算手段）１０４、保持モジュール（保持手段）１０３、更新モジュール（更新手段）１０５、出力モジュール（出力手段）１０６を備えている。これらの具体的な機能については、後述の図３等に示す処理の説明を通じて説明する。
【００１９】
図３は、このコンピュータ１が実行する処理を説明するフローチャートである。まず、ワード圧縮インデックス（第１インデックス）を作成する（ステップＳ１）。このステップＳ１の処理はバッチ処理で行うことができる。次に、キーボード１９及び入力モジュール１００を介して、ユーザから検索キーワードｗｔの入力がなされる（ステップＳ２）。検索キーワードｗｔが入力されると、そのキーワードの周辺に頻出する単語の上位ｋ件を各出現数とともに出力モジュール１０６及びディスプレイ１８を介して、ユーザに出力（表示）する（ステップＳ３）。このステップＳ３の処理はリアルタイム処理で行うため、特に高速化が望まれる。以下、上記ステップＳ１及びＳ３を中心に、図４乃至図１１を参照し、コンピュータ１の処理をより詳細に説明する。
【００２０】
図４は、図３のステップＳ１の処理をさらに詳細に説明するフローチャートである。まず、特定モジュール１０１がＨＤＤ１４内に記憶されている複数の文章集合（例えば、５０万文章）を検索し、その文章集合に含まれる各ワードの出現箇所を（文章ＩＤ（上位階層）、文章内位置（下位階層））の形式で階層的に特定し、各ワードの出現箇所のリストを出現回数の降順（より正確には、文章ＩＤの数の降順）でソートする（ステップＳ１１）。図５は、ステップＳ１１を模式的に説明する図である。文章ＩＤ：０〜Ｍで特定される文章内には、複数の単語が含まれる。これらの単語のうち、最も頻出する単語ｗ１とし、その出現箇所を（文章ＩＤ，文章内位置）の形式で（１，１５）、（３，２）、…とリストしている。例えば、文章ＩＤ：１で特定される文章中の１５番目の単語として単語ｗ１が出現することが分かる。同様に、単語ｗ１に次いで最も頻出する単語ｗ２，単語ｗ２に次いで最も頻出する単語ｗ３、…と単語ｗｎまでソートされている。
【００２１】
ここで、本発明を適用するにあたり、文章の種類に制限はなく、例えば、ネットワーク上のマイクロブログデータ、製造業者における製品情報データ、販売者における製品販売データ、医療機関内の診療データ等を対象とすることができる。また、文章の単位も対象とするデータに合わせて任意に設定することができる。例えば、診療データを対象とする場合には、患者毎のカルテを上位階層とし、診察日時を下位階層としてワードの出現箇所を特定することができる。また、複数の文章の集合内に含まれるすべての単語を対象としてもよいが、一部の単語のみ対象とすることもできる。その場合、少なくとも複数の文章の集合内の出現回数が比較的上位の単語を対象としておくことが望ましい。また、データの利用形態やユーザの好みに応じて、対象とする単語の品詞を特定することもできる。例えば、名詞のみを対象とすることもできるし、助詞を対象から除外することもできる。
【００２２】
次に、図５に示したソートされたリストに基づいて、インデックス作成モジュール１０２により、ワード圧縮インデックスが作成される（ステップＳ１２）。以下、最頻出の単語ｗ１を例に、説明するが、他の単語（ｗ２〜ｗｎ）についても同様である。図６は、ステップＳ１２１とステップＳ１２２を模式的に説明する図である。インデックス作成モジュール１０１は、単語ｗ１に対応する出現箇所のリストｗ１：（１，１５）、（３，２）、…から、文書内位置を棄却し、文章ＩＤのみのリストｗ１‘：１，３，３，５，…を作成する（ステップＳ１２１）。さらに、インデックス作成モジュール１０１は、リストｗ１’から重複する文章ＩＤを纏め（ここでは、「３，３」を「３」に纏め）、リストｗ１“：１，３，５，…を作成する（ステップＳ１２２）。図７は、１／Ｎ圧縮を説明する模式図である。インデックス作成モジュール１０２は、文章ＩＤのビットセットを１／Ｎ倍に圧縮し、ワード圧縮インデックスＷ１を作成する（ステップＳ１２３）。すなわち、リストｗ１”：１，３，５，８，１０，１１…を１／Ｎ圧縮（ここではＮ＝４）し、圧縮元ビットが１つ以上trueであることを条件に、圧縮先ビットをtrueとし、圧縮元ビットが２つ以上trueであることを条件に、対応する文章ＩＤの要素を記憶する。ここでは、文章ＩＤ：１と３、８と１０と１１が記憶される。以上、最頻出の単語ｗ１を例に、ワード圧縮インデックスＷ１が作成される処理を説明したが、同様に、他の単語（ｗ２〜ｗｎ）についても、それぞれワード圧縮インデックスＷ２〜Ｗｎが作成される。
【００２３】
図８は、図３のステップＳ３の処理をさらに詳細に説明するフローチャートである。まず、更新モジュール１０５が、暫定top-kのリストを初期化する（ステップＳ３１）。図９は、暫定top-kのリストを説明する概念図である。検索キーワードｗｔの周辺に頻出する単語の上位ｋ件が、暫定top-k（単語、出現数）のリストの形式で記憶されている。つまり、#top-k≦…≦#top-2≦#top-1の関係が成立する。ここで、自然数ｋは予め設定することもできるし、ユーザにより個別に指定することもできる。また、検索キーワードｗｔの周辺としては、検索キーワードｗｔの前方にX単語（X：整数）、検索キーワードｗｔの後方にY単語（Y：整数）として予め設定することもできるし、ユーザにより指定することもできる。また、XとYのいずれかをゼロやマイナスの整数に設定、指定することもできる。なお、暫定top-kのリストは、保持モジュール１０３により、比較的アクセスが高速な半導体メモリ上に保持される。
【００２４】
次に、特定モジュール１０１及びインデックス作成モジュール１０２により、検索圧縮インデックス（第２インデックス）を作成する（ステップS３２）。図１０は、検索圧縮インデックスの作成を説明する概念図である。特定モジュール１０１がＨＤＤ１４内に記憶されている複数の文章集合を検索し、その文章集合に含まれる検索キーワードｗｔの出現箇所を（文章ＩＤ）、文章内位置）の形式で階層的に特定し、検索キーワードｗｔの出現箇所のリストwtを作成する。ここでは、検索キーワードｗｔの出現箇所を（２，１２）、（８，５）、…とリストしている。すなわち、文章ＩＤ：２で特定される文章中の１２番目の単語として検索キーワードｗｔが出現することが分かる。次いで、インデックス作成モジュール１０１は、検索キーワードｗｔに対応する出現箇所のリストｗｔ：（２，１２）、（８，５）、…から、文書内位置を棄却し、文章ＩＤのみのリストｗｔ‘：２，８，８，１０，…を作成する。さらに、インデックス作成モジュール１０１は、リストｗｔ’から重複する文章ＩＤを纏め（ここでは、「８，８」を「８」に纏め）、リストｗｔ“：２，８，１０，…を作成する。図７は、１／Ｎ圧縮を説明する模式図である。インデックス作成モジュール１０１は、リストｗｔ”：２，８，１０…を１／Ｎ圧縮（ここではＮ＝４）し、圧縮元ビットが１つ以上trueであることを条件に、圧縮先ビットをtrueとし、圧縮元ビットが２つ以上trueであることを条件に、対応する文章ＩＤの要素を記憶する。ここでは、文章ＩＤ：８と１０が記憶される。
【００２５】
次に、各単語ｗ１〜ｗｎについて、降順に（ｗ１→ｗｎの順に）以下の処理を行う（ステップS３３）。まず、演算モジュール１０４が、当該単語の出現数が、暫定top-kリスト（図９参照）の第ｋ位（最下位）の周辺出現数未満（より正確には以下）か否かを判断する（ステップS３４）。「YES」の場合には、ステップS３９へ進み、出力モジュール１０６が暫定top-kリストを最終結果として出力する。他方、「NO」の場合には、ステップS３５へ進み、圧縮インデックスWと検索圧縮インデックスWtとを比較して、周辺出現数の概算値を求める。この処理について、図７を参照して、後述する。なお、圧縮インデックスWと検索圧縮インデックスWtとは比較的アクセスが高速な半導体メモリ上に保持される。
【００２６】
次に、ステップS３５により得られた概算値が暫定top-kリスト（図９参照）の第ｋ位（最下位）の周辺出現数未満（より正確には以下）か否かを判断する（ステップS３６）。「YES」の場合には、ステップS３８へ進み、次の単語があるか否かを判断する。ここで「YES」の場合には、さらにステップS３４から繰り返す。一方、「NO」の場合には、出力モジュール１０６が暫定top-kリストを最終結果として出力する。他方、ステップS３６の判断が「NO」の場合には、ステップS３７へ進み、演算モジュール１０４は、当該単語の出現箇所と検索キーワードの出現箇所とを用いて、より正確な近傍判定を行う。その結果、当該単語の周辺出現数が、暫定top-kリスト（図９参照）の第ｋ位（最下位）の周辺出現数以上の場合には、更新モジュール１０５は、暫定top-kリストを更新する。
【００２７】
演算モジュール１０４は、以下のように、周辺出現数の概算値を求める（図７参照）。まず、圧縮インデックスW１と検索圧縮インデックスWtとを比較し、両インデックスの積集合の大きさを演算する。ここでは、０ビット目と２ビット目の二箇所がtrueのため、演算モジュール１０４は、「２」を記憶する。なお、かかる演算はビット演算で行われるため、非常に高速である。さらに、演算モジュール１０４は、圧縮インデックスW1の２ビット目に対応して記憶している文章ID：８，１０，１１と、同じく検索圧縮Wtの２ビット目に対応して記憶している文章ID：８，１０とを比較し、両者の先頭「８」を除外し、文章ID：１０，１１と文章ID：１０の積集合の大きさ（一致する数）「１」を記憶する。他の実装例としては、演算モジュール１０４は、圧縮インデックスW1の２ビット目に対応して記憶している文章ID：８，１０，１１と、同じく検索圧縮Wtの２ビット目に対応して記憶している文章ID：８，１０とを比較し、共通の要素が1つ以下の場合はゼロ、共通の要素が2つ以上の場合、共通の要素数から１を減じた値の「１」を記憶する。いずれの場合も、結果として、演算モジュール１０４は、概算値として２＋１＝３を得る。
【００２８】
変形例
先に説明した実施形態では、周辺出現数の概算値を演算する際にビット演算を用いることより、高速に概算値を得るものであるが、さらに、ビット演算を多用する手法について、変形例として説明する。図１１は、変形例を説明する概念図である。上述の実施形態と同様の構成については、同一の符号を付し、その説明を省略する。
【００２９】
インデックス作成モジュール１０１は、リストｗ１”：１，３，５…を１／Ｎ圧縮（ここではＮ＝４）し、圧縮元ビットが２つ以上trueであることを条件に、圧縮先ビットをtrueとし、圧縮インデックスW１‘（第三インデックス）を作成する。また、対応する文章ＩＤの要素の数を記憶する。ここでは、第０ビットに対応する文章IDの要素：１，３の数「２」と、第２ビットに対応する文章IDの要素：８，１０，１１の数「３」とを記憶する。同様に、インデックス作成モジュール１０１は、リストｗｔ”：２，８，１０…を１／Ｎ圧縮（ここではＮ＝４）し、圧縮元ビットが２つ以上trueであることを条件に、圧縮先ビットをtrueとし、検索圧縮インデックスWt‘を作成する。また、対応する文章ＩＤの要素の数を記憶する。ここでは、第０ビットに対応する文章IDの要素：８，１０の数「２」を記憶する。なお、圧縮インデックスW１’と検索圧縮インデックスWt‘はいずれも比較的アクセスが高速な半導体メモリ上に保持される。
【００３０】
演算モジュール１０４は、以下のように、周辺出現数の概算値を求める（図１１参照）。まず、圧縮インデックスW１と検索圧縮インデックスWtとを比較し、両インデックスの積集合の大きさを演算する。ここでは、０ビット目と２ビット目の二箇所がtrueのため、演算モジュール１０４は、「２」を記憶する。なお、かかる演算はビット演算で行われるため、非常に高速である。さらに、演算モジュール１０４は、圧縮インデックスW１‘と検索圧縮インデックスWt’とを比較し、両インデックスの積集合を演算する。つまり、積集合のtrueのビットに対応して、記憶しているW１‘の文書IDの数とWt’の文書IDの数の小さい方の数を、積集合の各trueビットについて足した値を演算する。なお、かかる演算もビット演算で行われるため、非常に高速である。ここでは、２ビット目の一箇所がtrueのため、演算モジュール１０４は、さらに、圧縮インデックスW1‘の２ビット目に対応して記憶している文章ID：８，１０，１１の数：３と、検索圧縮Wt’の２ビット目に対応して記憶している文章ID：８，１０の数：２とを比較し、両者の小さいほうの数：２からマイナス１とし、「１」を得る。その結果、演算モジュール１０４は、概算値として２＋１＝３を得る。
【００３１】
以上、本発明の実施形態（含む変形例）を詳細に説明した。なお、本発明の技術的範囲は実施形態に限定して解釈すべきでないことは勿論である。
【符号の説明】
【００３２】
1…パーソナル・コンピュータ（コンピュータ・システム）、
１１…ＣＰＵ（演算制御装置）、
１２…ＲＡＭ（ランダム・アクセス・メモリ：記憶装置）、
１３…ＲＯＭ（リード・オンリ・メモリ：記憶装置）、
１４…ＨＤＤ（ハード・ディスク・ドライブ：記憶装置）、
１７…マウス（ポインティング装置）、
１８…フラット・パネル・ディスプレイ（表示装置）、
１００…入力モジュール（入力手段）、
１０１…特定モジュール（特定手段）、
１０２…インデックス作成モジュール（作成手段）、
１０３…保持モジュール（保持手段）、
１０４…演算モジュール（演算手段）、
１０５…更新モジュール（更新手段）
１０６…出力モジュール（出力手段）
【図１】
2014035760.tif 000003
【図２】
2014035760.tif 000004
【図３】
2014035760.tif 000005
【図４】
2014035760.tif 000006
【図５】
2014035760.tif 000007
【図６】
2014035760.tif 000008
【図７】
2014035760.tif 000009
【図８】
2014035760.tif 000010
【図９】
2014035760.tif 000011
【図１０】
2014035760.tif 000012
【図１１】
2014035760.tif 000013