(57)【要約】【課題】文書に共通して出現する頻度が高く、かつ、長い文字列を出力（又は抽出）することを目的とする。【解決手段】木構造生成手段は、文字列に含まれる文字をノードに設定する際に、通過したノードに対応するカウンタの値をインクリメントし、更に、各ノードに対応するカウンタの値と、各ノードまでの文字列長と、に基づき、出力する文字列に関するノード期待値を算出する算出手段と、親ノードのノード期待値と、子ノードのノード期待値と、に基づき、親ノードと子ノードとの間を切断する切断手段と、切断手段で切断され、木構造から切り離された枝の最上位のノードが表す文字に基づいて、木構造から切り離された枝を木構造に接続する接続手段と、木構造の枝の末端のノードのノード期待値が１以上の枝を文書に共通して出現する文字列として出力する出力手段と、を有することによって課題を解決する。【選択図】図２０
2010086525.tif 000002
【特許請求の範囲】
【請求項１】
対象となる文書に含まれる文字列に基づいて、前記文字列に含まれる設定された文字数の文字をノードとする木構造を生成する木構造生成手段を有し、
前記木構造生成手段は、前記文字列に含まれる各字をノードに設定する際に、通過したノードに対応するカウンタの値をインクリメントし、
更に、
各ノードに対応するカウンタの値と、各ノードまでの文字列長と、に基づき、出力する文字列に関するノード期待値を算出する算出手段と、
親ノードの前記ノード期待値と、子ノードの前記ノード期待値と、に基づき、前記親ノードと前記子ノードとの間を切断する切断手段と、
前記切断手段で切断され、前記木構造から切り離された枝の最上位のノードが表す文字に基づいて、前記木構造から切り離された枝を前記木構造に接続する接続手段と、
前記木構造の枝の末端のノードの前記ノード期待値が１以上の枝を文書に共通して出現する文字列として出力する出力手段と、
を有することを特徴とする情報処理装置。
【請求項２】
前記算出手段は、各ノードに対応するカウンタの値と、各ノードまでの文字列長と、前記文書を識別する文書番号を記憶するのに要するリソース情報と、に基づき、出力する文字列に関するノード期待値を算出することを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記切断手段は、親ノードの前記ノード期待値が子ノードの前記ノード期待値より大きい場合、前記親ノードと前記子ノードとの間を切断することを特徴とする請求項１又は２に記載の情報処理装置。
【請求項４】
前記木構造生成手段は、文字列を表す前記木構造の枝と、前記文字列が含まれる文書と、を関連付け、
前記切断手段は、親ノードの前記ノード期待値が子ノードの前記ノード期待値より大きい場合、前記親ノードと前記子ノードとの間を切断すると共に、関連付けられている文書の数が一つの枝のノード間を切断することを特徴とする請求項３に記載の情報処理装置。
【請求項５】
前記切断手段は、親ノードの前記ノード期待値が子ノードの前記ノード期待値より大きい場合、前記親ノードと前記子ノードとの間を切断すると共に、ノードに対応するカウンタ値が所定の値のノードの前、又は後を切断することを特徴とする請求項３に記載の情報処理装置。
【請求項６】
前記接続手段は、前記切断手段で切断され、前記木構造から切り離された枝の最上位のノードが表す文字と、前記木構造のルート直下のノードが表す文字と、に基づいて、前記木構造から切り離された枝を前記木構造に接続することを特徴とする請求項１乃至５の何れか１項に記載の情報処理装置。
【請求項７】
前記接続手段は、前記切断手段で切断され、前記木構造から切り離された枝の最上位のノードが表す文字と、前記木構造のルート直下のノードが表す文字と、が同一の場合、前記ルート直下のノードに前記木構造から切り離された枝を接続することを特徴とする請求項６に記載の情報処理装置。
【請求項８】
情報処理装置が実行する共通文字列出力方法であって、
対象となる文書に含まれる文字列に基づいて、前記文字列に含まれる設定された文字数の文字をノードとする木構造を生成する木構造生成ステップを有し、
前記木構造生成ステップでは、前記文字列に含まれる各字をノードに設定する際に、
通過したノードに対応するカウンタの値をインクリメントし、
更に、
各ノードに対応するカウンタの値と、各ノードまでの文字列長と、に基づき、出力する文字列に関するノード期待値を算出する算出ステップと、
親ノードの前記ノード期待値と、子ノードの前記ノード期待値と、に基づき、前記親ノードと前記子ノードとの間を切断する切断ステップと、
前記切断ステップで切断され、前記木構造から切り離された枝の最上位のノードが表す文字に基づいて、前記木構造から切り離された枝を前記木構造に接続する接続ステップと、
前記木構造の枝の末端のノードの前記ノード期待値が１以上の枝を文書に共通して出現する文字列として出力する出力ステップと、
を有することを特徴とする共通文字列出力方法。
【請求項９】
コンピュータを、
対象となる文書に含まれる文字列に基づいて、前記文字列に含まれる設定された文字数の文字をノードとする木構造を生成する木構造生成手段として機能させ、
前記木構造生成手段は、前記文字列に含まれる各字をノードに設定する際に、通過したノードに対応するカウンタの値をインクリメントし、
前記コンピュータを、更に、
各ノードに対応するカウンタの値と、各ノードまでの文字列長と、に基づき、出力する文字列に関するノード期待値を算出する算出手段と、
親ノードの前記ノード期待値と、子ノードの前記ノード期待値と、に基づき、前記親ノードと前記子ノードとの間を切断する切断手段と、
前記切断手段で切断され、前記木構造から切り離された枝の最上位のノードが表す文字に基づいて、前記木構造から切り離された枝を前記木構造に接続する接続手段と、
前記木構造の枝の末端のノードの前記ノード期待値が１以上の枝を文書に共通して出現する文字列として出力する出力手段と、
して機能させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、共通文字列出力方法及びプログラムに関する。
【背景技術】
【０００２】
昨今では数多くのポータルサイトが存在し、情報量（文書数）が増大している。検索エンジンを例にとると、検索対象となる文書数が増大することにより、インデックスサイズが大きくなり、検索処理に要するリソースが増加すると共に、検索処理の速度が低下する。
特許文献１には、サンプルデータの中の文字列を先頭３文字が等しい文字列同士のグループに分類し、各グループからサンプルデータ中において最も出現頻度が高い文字列（最頻出文字列）を１個ずつ抽出し、各グループから抽出した最頻出文字列を出現頻度順に初期値として辞書に登録する技術が開示されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００７−１２９６８３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
インデックスサイズを小さくするためには、膨大な情報量の中から、共通して出現し、かつ、出来るだけ長い文字列を抽出することが必要となる。上述した特許文献１の技術は、上述したように、サンプルデータの中の文字列を先頭３文字が等しい文字列同士のグループに分類し、各グループからサンプルデータ中において最も出現頻度が高い文字列（最頻出文字列）を１個ずつ抽出し、各グループから抽出した最頻出文字列を出現頻度順に初期値として辞書に登録だけであるため、文書に共通して出現する頻度が高く、かつ、長い文字列を出力（又は抽出）するには十分ではない。
【０００５】
本発明はこのような問題点に鑑みなされたもので、文書に共通して出現する頻度が高く、かつ、長い文字列を出力（又は抽出）することを目的とする。
【０００６】
本発明はこのような問題点に鑑みなされたもので、文書に共通して出現する頻度が高く、かつ、長い文字列を出力することを目的とする。
【課題を解決するための手段】
【０００７】
そこで、本発明は、対象となる文書に含まれる文字列に基づいて、前記文字列に含まれる設定された文字数の文字をノードとする木構造を生成する木構造生成手段を有し、前記木構造生成手段は、前記文字列に含まれる各字をノードに設定する際に、通過したノードに対応するカウンタの値をインクリメントし、更に、各ノードに対応するカウンタの値と、各ノードまでの文字列長と、に基づき、出力する文字列に関するノード期待値を算出する算出手段と、親ノードの前記ノード期待値と、子ノードの前記ノード期待値と、に基づき、前記親ノードと前記子ノードとの間を切断する切断手段と、前記切断手段で切断され、前記木構造から切り離された枝の最上位のノードが表す文字に基づいて、前記木構造から切り離された枝を前記木構造に接続する接続手段と、前記木構造の枝の末端のノードの前記ノード期待値が１以上の枝を文書に共通して出現する文字列として出力する出力手段と、を有することを特徴とする。
【０００８】
かかる構成とすることにより、文書に共通して出現する頻度が高く、かつ、長い文字列を出力することができる。
なお、ノード期待値とは、例えば、後述する圧縮期待値等に対応する。
【０００９】
また、本発明は、共通文字列出力方法及びプログラムとしてもよい。
【発明の効果】
【００１０】
本発明によれば、文書に共通して出現する頻度が高く、かつ、長い文字列を出力することができる。
【図面の簡単な説明】
【００１１】
【図１】索引情報作成装置の一例である情報処理装置１のハードウェア構成の一例を示す図である。
【図２】情報処理装置１の機能構成の一例を示す図（その１）である。
【図３】検索対象文書抽出部２０が抽出した文書を識別する文書番号と、前記文書の内容と、を示す図である。
【図４】文書間で共通する文字列と、前記文字列を含む文書の文書番号のグループと、を対応付けた情報の一例を示す図である。
【図５】共通する文字列を含む文書の文書番号のグループと、新たな文書番号と、を対応付けた情報の一例を示す図である。
【図６】文字列抽出部２１によって抽出された文字列と、置き換えた新たな文字番号と、を対応付けた情報の一例を示す図である。
【図７】本実施形態に係る索引情報の一例を示す図である。
【図８】従来の方法で作成された索引情報の一例を示す図である。
【図９】索引情報作成処理の一例を示すフローチャートである。
【図１０】部分文字列及び部分文字列が含まれる文書の文書番号のグループの一例を示す図である。
【図１１】従来の方法で作成された索引情報の一例を示す図である。
【図１２】本実施形態の方法で作成された索引情報の一例を示す図である。
【図１３】文字列抽出部２１の一例を示す図である。
【図１４】木構造の一例を示す図である。
【図１５】切断の一例を示す図（その１）である。
【図１６】接続（マージ）の一例を示す図である。
【図１７】切断の一例を示す図（その２）である。
【図１８】切断の一例を示す図（その３）である。
【図１９】切断及び接続が実行された後の木構造の一例を示す図である。
【図２０】文字列抽出処理の一例を示すフローチャートである。
【発明を実施するための形態】
【００１２】
以下、本発明の実施形態について図面に基づいて説明する。
【００１３】
＜実施形態１＞
図１は、索引情報作成装置の一例である情報処理装置（コンピュータ）１のハードウェア構成の一例を示す図である。図１に示されるように情報処理装置１は、ハードウェア構成として、ＣＰＵ１１を含む。ＣＰＵ１１が、記憶装置１３に記憶されているプログラムに基づき処理を行うことによって、後述する索引情報作成等の機能、又はフローチャートに係る処理を実現する。
ＣＰＵ１１には、バス１０を介して、入力装置１２、記憶装置１３及び表示装置１４が接続されている。記憶装置１３は、例えば、ＲＯＭ、ＲＡＭ、ハードディスク装置等からなり、上述した各プログラム以外に、プログラムに基づく処理で用いられるデータを記憶する。表示装置１４は、情報を表示する例えばディスプレイ等である。入力装置１２は、情報を入力する例えば操作キー等である。
なお、入力装置１２及び表示装置１４は、情報処理装置１の必須の構成要素ではない。
【００１４】
図２は、情報処理装置１の機能構成の一例を示す図（その１）である。図２に示されるように、情報処理装置１は、機能構成として、検索対象文書抽出部２０と、文字列抽出部２１と、置き換え部２２と、索引情報作成部２３と、を含む。
検索対象文書抽出部２０は、検索対象となる複数の文書を抽出（又は選択）する。図３は、検索対象文書抽出部２０が抽出した文書を識別する文書番号と、前記文書の内容と、を示す図である。
文字列抽出部２１は、検索対象文書抽出部２０が抽出した、検索対象となる複数の文書から、文書間で共通する出現頻度が高く、かつ、長い文字列を抽出する。例えば、文字列抽出部２１は、検索対象となる複数の文書が図３に示すような場合、"ありがとう"の文字列を文書間で共通する文字列として抽出する。図３は、文書番号及び文書の内容の一例を示す図である。
なお、文字列抽出部２１は、文書に記載されたデータを木構造で表し、木構造の各ノードを通る毎にインクリメントするカウンタを備えて、カウンタ値を基に頻出文字列を抽出する。文字列抽出部２１の詳細は、後述する図１３以降、説明を行う。
そして、文字列抽出部２１は、抽出した文字列（例えば"ありがとう"）と、前記文字列を含む文書の文書番号のグループと、を対応付けた、図４に示すような情報を作成し、記憶装置１３の例えばＲＡＭ上に一時的に保持する。ここで、図４は、文書間で共通する文字列と、前記文字列を含む文書の文書番号のグループと、を対応付けた情報の一例を示す図である。
【００１５】
置き換え部２２は、文字列抽出部２１が作成した図４に示すような情報に含まれる文書番号のグループを、一つの文字で表される新たな文書番号に置き換え（図５参照）、文字列抽出部２１によって抽出された文字列と、置き換えた新たな文字番号と、を対応付けた、図６に示すような情報を作成し、記憶装置１３の、例えばＲＡＭ上に一時的に保持する。ここで、図５は、共通する文字列を含む文書の文書番号のグループと、新たな文書番号と、を対応付けた情報の一例を示す図である。また、図６は、文字列抽出部２１によって抽出された文字列と、置き換えた新たな文字番号と、を対応付けた情報の一例を示す図である。
なお、置き換え部２２は、新たな文書番号として置き換える際、"Ｘ"のような文字では無く、文書番号として使用されていない数字（図４の例であれば、１、２、３、５、６、９、１０以外の数字である"−１"）を、新たな文書番号として用い、置き換えを行うようにしてもよい。
なお、置き換え部２２は、置き換えた文書番号のグループと、新たな文字番号と、を対応付けた、図５に示されるような情報（文書番号変換情報）を、記憶装置１３のＨＤＤ上に保存されている、検索の際に用いられる索引辞書データに追加して保存する。
【００１６】
索引情報作成部２３は、置き換え部２２が作成した図６に示される情報に基づき、文書間で共通する文字列をＮ−ｇｒａｍ（本実施形態の例ではＮ＝２のバイグラム）で分割し、図７に示されるような索引情報を作成し、前記索引辞書データに索引として追加して保存する。図７は、本実施形態に係る索引情報の一例を示す図である。
一方、図８は、従来の方法で作成された索引情報の一例を示す図である。
図７と、図８と、を比較すると、本実施形態の方法で作成した索引情報の方が、記憶容量が少なくて済むことが解かる。例えば、図８の例では、文書番号の最大を１０としているが、実際、本発明が対象としている検索対象の文書数（文書番号）は１億程度を想定している。このような場合、図８に示されるような索引情報だけで相当な記憶領域を必要とする。一方、本実施形態で作成された索引情報では、共通する文字列を含む文書の文書番号のグループを、一つの文字等で表される新たな文書番号に置き換えているので、従来に比べて、索引（索引情報）のサイズが小さくなり、必要とする記憶領域を削減することができる。
なお、索引情報作成部２３は、勿論、検索対象文書抽出部２０が抽出した文書に含まれる他の文字列（他の文書に共通して含まれていない文字等）に基づき、上述した索引情報以外の索引情報も作成する。図３を例に説明を行うと、索引情報作成部２３は、索引語：三橋、文書番号：１の索引情報や、索引語：橋で、文書番号：１等の索引情報も作成する。
【００１７】
図９は、索引情報作成処理の一例を示すフローチャートである。
ステップＳ１０において、検索対象文書抽出部２０は、検索対象となる複数の文書を抽出（又は選択）する。
ステップＳ１１において、文字列抽出部２１は、検索対象文書抽出部２０が抽出した、検索対象となる複数の文書から、文書間で共通する、出現する頻度が高く、かつ、長い文字列を抽出する。なお、この抽出する処理の詳細は、後述する図１３以降の図を用いて説明を行う。また、文字列抽出部２１は、抽出した文字列と、前記文字列を含む文書の文書番号のグループと、を対応付けた、図４に示すような情報を作成し、記憶装置１３のＲＡＭ上に一時的に保持する。
【００１８】
ステップＳ１２において、置き換え部２２は、ステップＳ１１で作成された図４に示すような情報に含まれる文書番号のグループを、一つの文字で表される新たな文書番号に置き換え（図５参照）、文字列抽出部２１によって抽出された文字列と、置き換えた新たな文字番号と、を対応付けた、図６に示すような情報を作成し、記憶装置１３のＲＡＭ上に一時的に保持する。なお、置き換え部２２は、置き換えた文書番号のグループと、新たな文字番号と、を対応付けた、図５に示されるような情報（文書番号変換情報）を、記憶装置１３のＨＤＤ上に保存されている、検索の際に用いられる索引辞書データに追加して保存する。
【００１９】
ステップＳ１３において、索引情報作成部２３は、ステップＳ１２で作成された図６に示される情報に基づき、文書間で共通する文字列をＮ−ｇｒａｍ（本実施形態の例ではＮ＝２のバイグラム）で分割し、図７に示されるような索引情報を作成し、前記索引辞書データに索引（索引情報）として追加して保存する。
【００２０】
以下、図１０〜図１２を用いて、本実施形態の処理（又は方法）により、従来の索引情報のサイズと比べて何バイトのメモリを削減可能か示す。なお、以下、図１に示されるように文字長ｍの部分文字列がｎ個の文書に共通して存在した場合で、かつ、文書番号を１つ記録するのにｂバイト必要とするものとして説明を行う。図１０は、部分文字列及び部分文字列が含まれる文書の文書番号のグループの一例を示す図である。
【００２１】
図１１は、従来の方法で作成された索引情報の一例を示す図である。図１１に示されるように、従来の方法で作成された索引情報の記憶容量は、（ｍ−１）×ｎ×ｂバイトである。
図１２は、本実施形態の方法で作成された索引情報の一例を示す図である。図１２に示されるように、本実施形態の方法で作成された索引情報の記憶容量は、新たにｎ＋１個の文書番号変換情報の記憶領域が増えるので、（ｎ＋１）×ｂ＋（ｍ−１）×ｂ＝（ｍ＋ｎ）×ｂバイトである。
よって、本実施形態の方法（又は処理）により、削減することができる記憶容量は、（ｍ−１）×ｎ×ｂ−（ｍ＋ｎ）×ｂ＝｛（ｎ−１）×（ｍ−２）−２｝×ｂバイトとなる。
従って、文字列抽出部２１によって長い文字列の頻出文字列を抽出することによって、ｍ、ｎは大きくなり、より記憶容量を削減することが可能になる。
【００２２】
図１３は、文字列抽出部２１の一例を示す図である。図１３に示されるように、文字列抽出部２１は、前処理部３１と、木構造生成部３２と、算出部３３と、切断部３４と、接続部３５と、出力部３６と、を含む。
前処理部３１は、検索対象文書抽出部２０が抽出した検索対象文書から所定のデリミタ（例えば、"、"や"。"等）に基づき、文字列を読み込む。
木構造生成部３２は、前処理部３１が読み込んだ文字列に基づいて、前記文字列に含まれる各文字をノードとする、図１４に示されるような木構造を生成する。図１４は、木構造の一例を示す図である。木構造生成部３２は、前記文字列に含まれる各文字をノードに設定する際に、通過したノードに対応するカウンタの値を一つインクリメントする。図１４の例では、カウンタの値をｎで表しており、上述したｎの意味と同一のものである。
また、図１４において、ｍは文字列の長さを表しており、上述したｍの意味と同一のものである。また、図１４において、各枝の最後に付されてある四角内の番号は文書番号を表しており、各枝（文字列）が含まれていた文書を示すものである。
なお、木構造生成部３２は、予め設定された文字数（例えば、２文字以上の文字数）を各ノードに設定してもよい。例えば、図１４において「ご（ｎ＝１，ｍ＝１）」「め（ｎ＝１，ｍ＝２）」「ん（ｎ＝１，ｍ＝３）」「ね（ｎ＝１，ｍ＝４）」と生成された木構造において、各ノードに２文字ずつ設定された場合、各ノードに「ごめ（ｎ＝１，ｍ＝１）」「めん（ｎ＝１，ｍ＝２）」「んね（ｎ＝１，ｍ＝３）」のようになる。また、各ノードに設定する文字数について、ユーザが任意に設定できる設定ツールを設けておいてもよい。つまり、木構造生成部３２は、前記設定ツールを介して設定された文字数を各ノードに設定してもよい。
また、木構造生成部３２は、文字の種類に応じて、各ノードに設定する文字数を自身で設定してもよい。例えば、木構造生成部３２は、平仮名であれば各ノードに２文字ずつ設定すると設定し、漢字であれば３文字ずつノードに設定すると設定する。
また、木構造生成部３２は、各ノードに設定する文字数をインデックスサイズとあわせて設定してもよい。例えば、木構造生成部３２は、インデックスが２文字単位で作成されるのであれば各ノードに設定する文字数を２文字ずつと設定し、インデックスが３文字単位で作成されるのであれば各ノードに設定する文字数を３文字ずつと設定し、木構造を生成する。
【００２３】
算出部３３は、圧縮期待値Ｓを算出する。本実施形態の例では、算出部３３は、圧縮期待値Ｓを、
Ｓ＝｛（ｎ−１）×（ｍ−２）−２｝×ｂ
を用いて算出する。なお、本実施形態の例では、圧縮期待値Ｓは、上述した式で表されるが、文字列抽出部２１を適用（実装）する装置や木構造生成部３２において生成される木構造の各ノードに設定される文字数等に応じて圧縮期待値Ｓを求める式は変わり得るものである。
【００２４】
切断部３４は、算出部３３が算出した圧縮期待値Ｓに基づき、親ノードの圧縮期待値が子ノードの圧縮期待値より大きい場合、前記親ノードと前記子ノードとの間を切断する。
図１５は、切断の一例を示す図（その１）である。図１５において、「ありがとうございました」の「う」は、ｎ＝３、ｍ＝５である。したがって、算出部３３は、前記「う」の圧縮期待値Ｓを｛（３−１）×（５−２）−２｝×ｂ＝４ｂと算出する。また、図１５において、「ありがとうございました」の「ご」は、ｎ＝２、ｍ＝６である。したがって、算出部３３は、前記「ご」の圧縮期待値Ｓを｛（２−１）×（６−２）−２｝×ｂ＝２ｂと算出する。よって、親ノードの圧縮期待値が子ノードの圧縮期待値より大きいので、切断部３４は、図１５に示すように、「ありがとうございました」の「う」と「ご」との間を切断する。
【００２５】
接続部３５は、切断部３４で切断され、木構造から切り離された枝の最上位のノードが表す文字と、木構造のルート直下のノードが表す文字と、に基づいて、木構造から切り離された枝を木構造に接続する。より具体的に説明すると、接続部３５は、切断部３４で切断され、木構造から切り離された枝の最上位のノードが表す文字と、木構造のルート直下のノードが表す文字と、が同一の場合、ルート直下のノードに木構造から切り離された枝を接続する。
接続部３５は、切断部３４において、木構造から切り離された「ございました」の最上位のノードが表す文字「ご」に基づき、木構造のルート直下のノードが表す文字の中で「ご」が存在するか否か検索する。図１５の例の場合、木構造に「ごめんね」の枝があり、ルート直下のノードが表す文字に「ご」が存在するため、接続部３５は、木構造から切り離された「ございました」を図１６に示すように、木構造に接続する。図１６は、接続（マージ）の一例を示す図である。
【００２６】
また、切断部３４は、上述したような圧縮期待値に基づいて、切断を行う他に、図１７に示されるように、カウンタの値が１の枝を切断するようにしてもよい。図１７は、切断の一例を示す図（その２）である。
また、切断部３４は、上述したような圧縮期待値に基づいて、切断を行う他に、図１８に示されるように、枝に関連付けられている文書が１つの枝を切断するようにしてもよい。図１８は、切断の一例を示す図（その３）である。また、図１９は、切断及び接続が実行された後の木構造の一例を示す図である。
【００２７】
再び、図１３の説明に戻り、出力部３６は、木構造の枝の末端のノードの圧縮期待値が１以上の枝を文書に共通して出現する頻度が高く、かつ、長い文字列として出力する。
【００２８】
図２０は、文字列抽出処理の一例を示すフローチャートである。
ステップＳ２０において、前処理部３１は、検索対象文書抽出部２０が抽出した検索対象文書から所定のデリミタ（例えば、"、"や"。"等）に基づき、文字列を読み込む。
ステップＳ２１において、木構造生成部３２は、前処理部３１が読み込んだ文字列に基づいて、前記文字列に含まれる各文字をノードとする、図１４に示されるような木構造を生成する。なお、このとき、ノードに設定する文字数は、上述の通り、１文字に限定する必要はなく、木構造生成部３２は、適宜設定された（又は自身で設定した）文字数を各ノードに設定してもよい。
ステップＳ２２において、例えば文字列抽出部２１は、予め定められた回数、ステップＳ２３〜ステップＳ２５の処理を繰り返したか否かを判定する。文字列抽出部２１は、予め定められた回数、ステップＳ２３〜ステップＳ２５の処理を繰り返したと判定すると、ステップＳ２６に進み、予め定められた回数、ステップＳ２３〜ステップＳ２５の処理を繰り返していないと判定すると、ステップＳ２３に進む。
なお、ステップＳ２２において、例えば文字列抽出部２１は、木構造のノードの数が最小になったか否か（つまり、ステップＳ２３〜ステップＳ２５の処理を繰り返してもノードの数が変化しなくなったか否か）に基づいて、ステップＳ２３に進むか、ステップＳ２６に進むかを判断するようにしてもよい。つまり、例えば文字列抽出部２１は、木構造のノードの数が最小になったと判定すると、ステップＳ２６に進み、木構造のノードの数が最小ではないと判定すると、ステップＳ２３に進むようにしてもよい。
【００２９】
ステップＳ２３において、算出部３３は、圧縮期待値Ｓを算出する。
ステップＳ２４において、切断部３４は、ステップＳ２３で算出された圧縮期待値Ｓに基づき、親ノードの圧縮期待値が子ノードの圧縮期待値より大きい場合、前記親ノードと前記子ノードとの間を切断する。また、切断部３４は、更に、カウンタの値が１の枝を切断したり、枝に関連付けられている文書が１つの枝を切断したりする。なお、切断部３４は、カウンタの値が１の枝を切断すると共に枝に関連付けられている文書が１つの枝を切断してもよいし、どちらか一方だけを実行するようにしてもよい。また、切断部３４は、圧縮期待値Ｓに基づく切断のみを実行するようにしてもよい。
ステップＳ２５において、接続部３５は、ステップＳ２４で切断され、木構造から切り離された枝の最上位のノードが表す文字と、木構造のルート直下のノードが表す文字と、が同一の場合、ルート直下のノードに木構造から切り離された枝を接続する。
【００３０】
一方、ステップＳ２６において、出力部３６は、木構造の枝の末端のノードの圧縮期待値が１以上の枝を文書に共通して出現する頻度が高く、かつ、長い文字列として出力する。
【００３１】
以上、上述したように本実施形態によれば、文書に共通して出現する頻度が高く、かつ、長い文字列を出力（又は抽出）することができる。また、文書に共通して出現する頻度が高く、かつ、長い文字列を出力（又は抽出）することができることにより、検索エンジンにおけるインデックスサイズの削減及びインデックスサイズの削減による検索処理の高速化が可能となる。また、木構造の各ノードに複数文字を設定した場合は、各ノードに持たせた情報を、そのまま検索エンジンにおけるインデックス作成に使用可能になるので、検索処理の高速化が可能となる。
【００３２】
また、上述した実施形態１では、「文書に共通して出現する頻度が高く、かつ、長い文字列を出力（又は抽出）することができる」を例に説明を行い、Ｎ−ｇｒａｍの検索エンジンにおけるインデックスサイズの削減及びインデックスサイズの削減による検索処理の高速化について説明したが、本発明の実施はＮ−ｇｒａｍの検索処理の高速化に限定されるものではない。
【００３３】
＜実施形態２＞
文書に共通して出現する頻度が高い文字列（頻出文字列）を抽出することを応用し、例えば、形態素解析の辞書作成支援に用いてもよい。この場合、上述した段落番号００２０〜００２５等で説明した文字列抽出部２１による処理を行うことによって頻出文字列を抽出し、抽出した文字列を辞書に登録する。また、木構造生成部３２は、実施形態１においてはｎ個の文書に共通して存在した場合をカウントしたが、実施形態２においては、同一文書中に複数回出現する文字列があった場合、同一文書中に出現した回数についても同様にカウンタの値をインクリメントしてもよい。このようにして作成された辞書を使用して、ＣＰＵ１１が、形態素解析を行うことによって、従来の形態素解析において困難であった特殊用語（新語、専門用語、略語等）に対しても対応が可能になり、精度が向上する。
【００３４】
また検索エンジンにおいては、そもそも辞書として持つのではなく、抽出した頻出文字列を用いてインデックスを作成し、辞書不要の検索エンジンを実現することも可能である。
【００３５】
また実施形態１においては、Ｎ−ｇｒａｍ検索エンジンにおけるインデックスサイズの削減について説明したため、文字列抽出部２１の算出部３３は、圧縮期待値をＳ＝｛（ｎ−１）×（ｍ−２）−２｝×ｂを用いて算出した。しかしながら、実施形態２のように文字列長よりも出現頻度（ｎ）をより重視する場合、Ｓの式を実施形態１のときより"ｎ"の影響を受け易い式にすればよい。例えば、文字列抽出部２１の算出部３３は、Ｓ＝｛（ｎ2−１）×（ｍ−２）−２｝×ｂ等を用いて期待値を算出するようにしてもよい。
また、文字列の長さ（ｍ）を予め設定して、頻出文字列長を調整することによって、目的に適った辞書が作成し易くするようにしてもよい。
また、文字列の長さ（ｍ）や式（Ｓ）について、ユーザが任意に設定できる設定ツールを設けておいてもよい。
【００３６】
以上、本実施形態によれば、文書に共通して出現する頻度が高く、かつ、長い文字列を出力（又は抽出）することができることにより、圧縮率の高いスライド型辞書登録用の初期値の生成が可能となる。
【００３７】
以上、本発明の好ましい実施形態について詳述したが、本発明は係る特定の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形・変更が可能である。
【符号の説明】
【００３８】
１１  ＣＰＵ
１２  入力装置
１３  記憶装置
１４  表示装置
【図１】
2010086525.tif 000003
【図２】
2010086525.tif 000004
【図３】
2010086525.tif 000005
【図４】
2010086525.tif 000006
【図５】
2010086525.tif 000007
【図６】
2010086525.tif 000008
【図７】
2010086525.tif 000009
【図８】
2010086525.tif 000010
【図９】
2010086525.tif 000011
【図１０】
2010086525.tif 000012
【図１１】
2010086525.tif 000013
【図１２】
2010086525.tif 000014
【図１３】
2010086525.tif 000015
【図１４】
2010086525.tif 000016
【図１５】
2010086525.tif 000017
【図１６】
2010086525.tif 000018
【図１７】
2010086525.tif 000019
【図１８】
2010086525.tif 000020
【図１９】
2010086525.tif 000021
【図２０】
2010086525.tif 000022