(57)【特許請求の範囲】
【請求項１】
コンピュータに、
区切文字または所定の文字に対応する複数のノードが木構造にて接続され、単一のノードに対して区切文字を含む単一の文字列または区切文字を含まない単一の文字列を含むタグキーと、所定のノードにより表現される文字列と該所定のノードの子ノード又は親ノードにより表現される文字列との間で一致する文字の数を示す一致数とが対応付けられ、根ノードから所定のノードに至るまでに辿るノードに対応する各文字と、前記所定のノードに登録されたタグキーの文字列と、前記一致数に対応する文字列とを組合せることで当該ノードの文字列を表現するトライ木データを記憶装置から取得するトライ木取得手順と、
前記トライ木データに含まれる各ノードのうち、タグキーに区切文字を含まないノードを検出し、検出したノードにより表現される文字列と該ノードの子ノード又は親ノードにより表現される文字列とを同一の組にまとめることで、前記トライ木データに含まれる各文字列を分類する分類手順と
を実行させることを特徴とするトライ木分類プログラム。
【請求項２】
前記分類手順は、前記タグキーに区切文字を含むノードを検出した場合に、検出したノードにより表現される文字列と、前記ノードの子ノード又は親ノードにより表現される文字列とを異なる組に分けることで、前記トライ木データに含まれる各文字列を分類することを特徴とする請求項１に記載のトライ木分類プログラム。
【請求項３】
前記分類手順は、前記タグキーに複数の区切文字を含むノードを検出した場合に、検出したノードにより表現される文字列のうち、各区切文字よりも前に存在する文字列をそれぞれ特定し、特定した各文字列を異なる組に分けることで、前記トライ木データに含まれる各文字列を分類することを特徴とする請求項２に記載のトライ木分類プログラム。
【請求項４】
前記トライ木データに含まれる複数のノードは所定の数値を保持し、前記分類手順によって分類された文字列の組毎にノードが保持する値を集計する集計手順を更にコンピュータに実行させることを特徴とする請求項１、２または３に記載のトライ木分類プログラム。
【請求項５】
トライ木分類装置が、
区切文字または所定の文字に対応する複数のノードが木構造にて接続され、単一のノードに対して区切文字を含む単一の文字列または区切文字を含まない単一の文字列を含むタグキーと、所定のノードにより表現される文字列と該所定のノードの子ノード又は親ノードにより表現される文字列との間で一致する文字の数を示す一致数とが対応付けられ、根ノードから所定のノードに至るまでに辿るノードに対応する各文字と、前記所定のノードに登録されたタグキーの文字列と、前記一致数に対応する文字列とを組合せることで当該ノードの文字列を表現するトライ木データを記憶装置から取得するトライ木取得ステップと、
前記トライ木データに含まれる各ノードのうち、タグキーに区切文字を含まないノードを検出し、検出したノードにより表現される文字列と該ノードの子ノード又は親ノードにより表現される文字列とを同一の組にまとめることで、前記トライ木データに含まれる各文字列を分類する分類ステップと
を含んだことを特徴とするトライ木分類方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、トライ木分類プログラムおよびトライ木分類方法等に関する。
【背景技術】
【０００２】
従来、検索装置は、入力キーに対応する文書や値等を高速に検索するべく、トライ木を用いる。このトライ木は、複数のノードと各ノードの根となるルートノードとを含み、各ノードは木構造を成す。また、各ノードには１文字ずつキーが割当てられ、例えば、所定の文字列に含まれる各キーのうち、最後のキーに対応するノードには、所定の値が割当てられる。
【０００３】
図２８は、従来のトライ木の一例を示す図である。図２８に示すトライ木は、ルートノード１の配下にノード２〜２０が接続されている。そして、ノード２〜２０には、それぞれキー「b、l、a、c、k、u、e、g、r、e、y、e、n、y、e、l、l、o、w」が割当てられる。ここで、ルートノード１からノード２〜６の順にキーを辿ると、文字列「black」となり、ルートノード１からノード２，３，７，８の順にキーを辿ると、文字列「blue」となる。また、ルートノード１からノード９〜１２の順にキーを辿ると、文字列「grey」となり、ルートノード１からノード９〜１１、１３，１４の順にキーを辿ると、文字列「green」となる。また、ルートノード１からノード９〜１１、１３〜２０の順にキーを辿ると、文字列「greenyellow」となる。
【０００４】
そして、文字列「black」の最後のキー「k」に対応するノード６に値「１，３」が割当てられ、文字列「blue」の最後のキー「e」に対応するノード８に値「４」が割当てられ、文字列「grey」の最後のキー「y」に対応するノード１２に値「５，２」が割当てられる。また、文字列「green」の最後のキー「ｎ」に対応するノード１４に値「３」が割当てられ、文字列「greenyellow」の最後のキー「w」に対応するノード２０に値「１」が割当てられる。図２８に示すトライ木のように、各キー及び各値が各ノードに割当てられることで、文字列「black」に値「１，３」、文字列「blue」に値「４」が割当てられたことを意味する。同様に、文字列「grey」に値「５，２」、文字列「green」に値「３」、文字列「greenyellow」に値「１」が割当てられたことを意味する。
【０００５】
検索装置が入力キーを指定された場合には、入力キーを先頭から１文字ずつ取り出し、取り出したキーと同じキーのノードを辿ることで、入力キーに対応する値を検索する。例えば、検索装置が入力キー「blue」を指定された場合には、入力キーに含まれる各キー「b、l、u、e」に対応するノードは、ノード２，３，７，８となる。このため、検索装置は、トライ木のノードをノード２，３，７，８の順に辿ることで、文字列「blue」に割当てられた値「４」を検索し、検索結果「４」を出力する。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開平９−２４５０４５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、上記従来技術では、トライ木を構築する文字列が長い場合には、ノードの数が増えてしまう。このため、従来技術では、辿るべきノードの数が増加し、文字列の検索に要する時間が増加するため、トライ木に登録された各文字列を効率的に分類することができないという問題があった。また、ノードの数の増加に伴って、メモリ使用量が増加してしまうという問題も発生する。
【０００８】
開示の技術は、上記に鑑みてなされたものであって、メモリ使用量を削減しつつ、文字列を効率よく分類することができるトライ木分類プログラムおよびトライ木分類方法を提供することを目的とする。
【課題を解決するための手段】
【０００９】
本願の開示するトライ木分類プログラムは、記憶装置からトライ木データを取得する。このトライ木データは、区切文字または所定の文字に対応する複数のノードが木構造にて接続されたデータである。トライ木データの各ノードは、単一のノードに対して区切文字を含む単一の文字列または区切文字を含まない単一の文字列を含むタグキーに対応付けられる。また、トライ木データの各ノードは、所定のノードにより表現される文字列と該所定のノードの子ノード又は親ノードにより表現される文字列との間で一致する文字の数を示す一致数に対応付けられる。トライ木データの各ノードは、根ノードから所定のノードに至るまでに辿るノードに対応する各文字と、所定のノードに登録されたタグキーの文字列と、一致数に対応する文字列とを組合せることでノードの文字列を表現する。トライ木分類プログラムは、トライ木データに含まれる各ノードのうち、タグキーに区切文字を含まないノードを検出する。そして、トライ木分類プログラムは、検出したノードにより表現される文字列と該ノードの子ノード又は親ノードにより表現される文字列とを同一の組にまとめることで、トライ木データに含まれる各文字列を分類する。
【発明の効果】
【００１０】
本願の開示するトライ木分類プログラムによれば、メモリ使用量を削減しつつ、文字列を効率よく分類することができるという効果を奏する。
【図面の簡単な説明】
【００１１】
【図１】図１は、本実施例１にかかるトライ木分類装置の構成を示す図である。
【図２】図２は、トライ木内の各ノードの名称を説明するための図である。
【図３】図３は、本実施例２にかかるデータ処理装置の構成を示す図である。
【図４】図４は、入力キー管理テーブルのデータ構造の一例を示す図である。
【図５】図５は、トライ木データのデータ構造の一例を示す図である。
【図６】図６は、トライ木データに含まれるノードのデータ構造の一例を示す図である。
【図７】図７は、出力結果データのデータ構造の一例を示す図である。
【図８】図８は、本実施例２にかかるトライ木データを生成する処理を説明するための図（１）である。
【図９】図９は、本実施例２にかかるトライ木データを生成する処理を説明するための図（２）である。
【図１０】図１０は、本実施例２にかかるトライ木データを生成する処理を説明するための図（３）である。
【図１１】図１１は、本実施例２にかかるトライ木データを生成する処理を説明するための図（４）である。
【図１２】図１２は、本実施例２にかかるトライ木データを生成する処理を説明するための図（５）である。
【図１３】図１３は、本実施例２にかかるトライ木データを生成する処理を説明するための図（６）である。
【図１４】図１４は、本実施例２にかかるトライ木データを生成する処理を説明するための図（７）である。
【図１５】図１５は、集計処理部が区切文字に基づいて文字列を分類する処理の概要を説明するための図である。
【図１６】図１６は、集計処理部の処理を具体的に説明するための図（１）である。
【図１７】図１７は、集計処理部の処理を具体的に説明するための図（２）である。
【図１８】図１８は、集計処理部の処理を具体的に説明するための図（３）である。
【図１９】図１９は、集計処理部の処理を具体的に説明するための図（４）である。
【図２０】図２０は、集計処理部の処理を具体的に説明するための図（５）である。
【図２１】図２１は、集計処理部の処理を具体的に説明するための図（６）である。
【図２２】図２２は、トライ木生成処理部の処理手順を示すフローチャートである。
【図２３】図２３は、データ追加処理の処理手順を示すフローチャート（１）である。
【図２４】図２４は、データ追加処理の処理手順を示すフローチャート（２）である。
【図２５】図２５は、データ追加処理の処理手順を示すフローチャート（３）である。
【図２６】図２６は、集計処理部の処理手順を示すフローチャートである。
【図２７】図２７は、本実施例にかかるデータ処理装置を構成するコンピュータのハードウェア構成を示す図である。
【図２８】図２８は、従来のトライ木の一例を示す図である。
【発明を実施するための形態】
【００１２】
以下に、本願の開示するトライ木分類プログラムおよびトライ木分類方法の実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
【実施例１】
【００１３】
本実施例１にかかるトライ木分類装置の構成について説明する。図１は、本実施例１にかかるトライ木分類装置の構成を示す図である。図１に示すように、このトライ木分類装置１００は、記憶部１１０と、分類部１２０とを有する。
【００１４】
このうち、記憶部１１０は、トライ木データ１１０ａを記憶する記憶部である。トライ木データ１１０ａは、区切文字または所定の文字に対応する複数のノードが木構造にて接続されたデータである。そして、トライ木データ１１０ａの各ノードは、単一のノードに対して区切文字を含む単一の文字列または区切文字を含まない単一の文字列を含むタグキーに対応付けられる。また、トライ木データ１１０ａの各ノードは、所定のノードにより表現される文字列と該所定のノードの子ノードにより表現される文字列との間で一致する文字の数を示す一致数に対応付けられる。そして、トライ木データ１１０ａの各ノードは、根ノードから所定のノードに至るまでに辿るノードに対応する各文字と、前記所定のノードに登録されたタグキーの文字列と、一致数に対応する文字列とを組合せることで当該ノードの文字列を表現する。
【００１５】
分類部１２０は、トライ木データ１１０ａに含まれる各ノードのうち、タグキーに区切文字を含まないノードを検出する。そして、分類部１２０は、検出したノードにより表現される文字列と該ノードの子ノードにより表現される文字列とを同一の組にまとめることで、トライ木データに含まれる各文字列を分類する。
【００１６】
従来のトライ木データは、各ノードに対応する文字が１文字であった。このため、従来のトライ木データに含まれる文字列を分類する場合には、ノードに対応する文字が区切文字であるか否かを利用して文字列の分類を行っていた。ここで、メモリ使用量を削減すべく、単一のノードに単一の文字列を割当てると、トライ木データは、ノードに所定の文字列の一部を対応付け、残りの部分をタグキーや一致数としてノードに対応付けることになる。この場合、従来技術では、タグキーに含まれる文字列や一致数に対応する文字列を、間接的にしか参照することができない。このため、単一のノードに単一の文字列を割当てたトライ木データの文字列を分類する場合には、各ノードに含まれるタグキーの文字列や一致数に対応する文字列をそれぞれ新たなノードに割当てることで、トライ木上に展開する必要があった。このように、タグキー・一致数に対応する文字列のノードをトライ木上に展開すると、せっかく削減したメモリ使用量が元の状態に戻るだけではなく、ノード数の増加により文字列を検索する時間が増加してしまう。したがって、従来技術では、トライ木データに含まれる文字列を効率的に分類することができなかった。
【００１７】
ここで、本実施例１にかかるトライ木分類装置１００は、分類部１２０が、トライ木データ１１０ａのノードのタグキーに区切文字が含まれるか否かを利用して、トライ木に登録された区切文字を含む文字列を分類する。このため、本実施例１にかかるトライ木分類装置１００は、ノードのタグキーに含まれる各文字をトライ木に展開することなく、文字列を分類できるので、メモリ使用量を削減しつつ、効率的に文字列を分類することができる。
【実施例２】
【００１８】
本実施例２にかかるデータ処理装置の説明を行う前に、トライ木について説明する。トライ木に含まれる各ノードは、トライ木内の位置や他のノードとの関係から各種の名称で定義される。図２は、一例として、図２に示すトライ木は、ノード１〜１３を有しているものとする。また、ここでは説明の便宜上、ノード６を基準ノードとする。ノード１〜５，７〜１３は、トライ木内の位置や基準ノードとの関係から、ルートノードまたは親ノード、先祖ノード、兄ノード、弟ノード、子ノード、子孫ノードと呼ばれる。
【００１９】
ルートノードは、トライ木を構成する各ノード１〜１３のうち、最上層に位置するノードを示す。図２に示す例では、ノード１がルートノードに該当する。親ノードは、基準ノードのひとつ上の層に存在し、基準ノードに接続されたノードを示す。図２に示す例では、ノード３が親ノードに該当する。先祖ノードは、ルートノードから親ノードに至るまでのノードを示す。図２に示す例では、ノード１〜３が先祖ノードに該当する。
【００２０】
兄ノードは、基準ノードと同じ層に存在し、基準ノードと同じ親ノードに接続され、基準ノードの上側に存在するノードを示す。図２に示す例では、ノード４、５が兄ノードに該当する。また、ノード４，５のうち、ノード４は長男ノードと呼ばれる。弟ノードは、基準ノードと同じ層に存在し、基準ノードと同じ親に接続され、基準ノードの下側に存在するノードを示す。図２に示す例では、ノード７，８が弟ノードに該当する。
【００２１】
子ノードは、基準ノードのひとつ下の層に存在し、基準ノードに接続されたノードを示す。図２に示す例では、ノード９，１０が子ノードに該当する。子孫ノードは、基準ノードの配下に存在するノードを示す。図２に示す例では、ノード９〜１３が子孫ノードに該当する。
【００２２】
次に、本実施例２にかかるデータ処理装置の構成の一例について説明する。図３は、本実施例２にかかるデータ処理装置の構成を示す図である。図３に示すように、このデータ処理装置２００は、入力部２１０、出力部２２０、入出力制御部２３０、記憶部２４０、制御部２５０を有する。
【００２３】
このうち、入力部２１０は、トライ木データに登録する入力キー等のデータを入力する入力装置である。例えば、入力部２１０は、キーボードやマウス等に該当する。出力部２２０は、トライ木データを用いた処理の結果などを出力する出力装置である。出力部２２０は、ディスプレイやモニタ、タッチパネルなどに対応する。入出力制御部２３０は、入力部２１０および出力部２２０、記憶部２４０、制御部２５０によるデータの入出力を制御する処理部である。
【００２４】
記憶部２４０は、制御部２５０による各種処理に必要なデータおよびプログラムを記憶する記憶部である。図３に示すように、この記憶部２４０は、入力キー管理テーブル２４０ａおよびトライ木データ２４０ｂ、出力結果データ２４０ｃを記憶する。
【００２５】
このうち、入力キー管理テーブル２４０ａは、トライ木データ２４０ｂに登録する複数の文字列と文字列に対応する値とを対応付けて記憶するテーブルである。トライ木データ２４０ｂは、複数のノードが木構造状に接続されたデータである。このトライ木データ２４０ｂに含まれるノードは、区切文字を含む所定の文字列に対応付けられる。また、このトライ木データ２４０ｂのノードは、所定の値が設定される。出力結果データ２４０ｃは、トライ木データ２４０ｂの各ノードに設定された値を、所定の文字列毎に集計した値を含むデータである。
【００２６】
制御部２５０は、トライ木データ２４０ｂを生成する処理および出力結果データ２４０ｃを生成する処理を実行する処理部である。図３に示すように、この制御部２５０は、トライ木生成部２５０ａおよび集計処理部２５０ｂを有する。
【００２７】
このうち、トライ木生成部２５０ａは、入力キー管理テーブル２４０ａに含まれる文字列と値とを利用して、トライ木データ２４０ｂを生成する処理部である。集計処理部２５０ｂは、トライ木データ２４０ｂに含まれる文字列を区切文字に基いて分類し、分類した文字列毎に値を集計することで、出力結果データ２４０ｃを生成する処理部である。トライ木生成部２５０ａおよび集計処理部２５０ｂの具体的な処理の説明は後述する。
【００２８】
次に、図３の記憶部２４０に記憶された入力キー管理テーブル２４０ａ、トライ木データ２４０ｂ、出力結果データ２４０ｃのデータ構造の一例について順に説明する。図４は、入力キー管理テーブルのデータ構造の一例を示す図である。図４に示すように、この入力キー管理テーブル２４０ａは、入力キーと値とを対応付けて記憶する。例えば、入力キー管理テーブル２４０ａの１段目では、入力キー「Mie/Tsu/1chome」と、値「２０」とが対応付けられている。また、各入力キーに含まれる「/」は、区切文字である。例えば、入力キー「Mie/Tsu/1chome」は第一、二階層の区切文字が含まれている。このため、入力キー「Mie/Tsu/1chome」は区切文字により、「Mie」、「Mie/Tsu」、「Mie/Tsu/1chome」に区切られる。
【００２９】
ここで、文字列に含まれる区切文字の内、先頭側から順に数えてＮ番目の区切文字を、第Ｎ階層の区切文字と定義する。Ｎは自然数である。例えば、文字列「Mie/Tsu/1chome」において、文字列「Mie」と「Tsu」に挟まれる区切文字「/」は、先頭側から順に数えて１番目の区切文字となるため、かかる区切文字は、第一階層の区切文字となる。
【００３０】
図５は、トライ木データのデータ構造の一例を示す図である。図５に示すトライ木データ２４０ｂは、図４に示した入力キー管理テーブル２４０ａに基づいて、トライ木生成部２５０ａが生成するデータである。このトライ木データ２４０ｂは、ノード１〜９を有する。各ノードは、所定の文字に対応付けられると共に、一致数およびタグキー、値が登録されている。ここで、タグキーは、ノードに割当てられた文字列のうち、一部の文字列を示す。
【００３１】
一致数は、基準ノードに割り当てられた文字列の内、子ノードに割当てられた文字列と一致する文字数から、基準ノードの階層数を除いた数となる。ここで、基準ノードの階層数とは、ルートノードから基準ノードに至るまでのノードの数に対応する。
【００３２】
例えば、基準ノードをノード２とし、ノード２の一致数について説明する。ノード２に割当てられた文字列を「Mie/Inabe/4chome」とし、子ノードに対応するノード３に割当てられた文字列が「Mie/Tsu/1chome」とする。この場合、ノード２の文字列とノード３の文字列は先頭の「Mie/」が一致しているため、一致する文字数は「４」となる。そして、ノード２の階層数が１であるため、一致する文字数「４」から「１」を減算した値「３」がノード２の一致数となる。
【００３３】
トライ木データ２４０ｂに含まれるノード２〜９は、自身に対応付けられた文字と、自身に登録された一致数・タグキーとで、自身に割当てられた文字列を表現する。具体的に、ノードに割当てられた文字列は、自身に割り当てられた文字と、一致数により特定される文字列と、タグキーとを組合せた文字列となる。
【００３４】
ここで、一致数により特定される文字列とは、子ノードに割当てられた文字列のうち、先頭文字から基準ノードの階層の数分進めた文字から一致数分の文字までの間の文字列となる。例えば、基準ノード２の階層を「１」、一致数を「３」とし、子ノードに割当てられた文字列を「Mie/Tsu/1chome」となる場合の、一致数により特定される文字列を説明する。子ノードに割当てられた文字列のうち、先頭文字「M」から階層の数「１」分進めた文字は「i」となる。そして、かかる文字「i」を含む一致数分「３」の文字「/」までの文字列は「ie/」となる。このため、基準ノード２の一致数「３」により特定される文字列は「ie/」となる。
【００３５】
具体的に、ノード２に割当てられた文字列について説明する。ノード２に対応付けられた文字は「M」である。ノード２の一致数「３」により特定される文字列は「ie/」である。ノード２のタグキーは、「Inabe/4chome」である。このため、ノード２に割当てられた文字列は、「M」と、「ie/」と、「Inabe/4chome」とを組合せた文字列「Mie/Inabe/4chome」となる。
【００３６】
次に、トライ木データ２４０ｂに含まれるノード１〜９のより詳細なデータ構造の一例について説明する。図６は、トライ木データに含まれるノードのデータ構造の一例を示す図である。図６に示すノード構造体２１〜２９は、図５に示したノード１〜９に対応する。ノード構造体２１〜２９は、「ノード識別情報」、「キー、遷移先」、「一致数」、「タグキー」、「値」を有する。
【００３７】
このうち、「ノード識別情報」は、ノード構造体を一意に識別するデータである。ノード構造体２１〜２９のノード識別情報は、「node１〜node９」となる。「キー、遷移先」は、遷移先のノード構造体に対応付けられた文字と、遷移先のノード構造体のノード識別情報とを対応付けたデータである。例えば、ノード構造体２１はノード１に対応し、ノード１は文字「M」が対応付けられたノード２に接続されている。そして、ノード２はノード識別情報「node２」のノード構造体２２に対応する。このため、ノード構造体２１の「キー、遷移先」は、「M、node２」となる。
【００３８】
「タグキー」、「一致数」、「値」は、上記のタグキー、一致数、値の説明と同様である。ただし、タグキーに対応する文字列は、ノードに割当てられた文字列の内、所定の文字を指すポインタを用いることで表現される。例えば、ノード構造体２２に割当てられた文字列が「Mie/Inabe/4chome」であり、タグキーが「Inabe/4chome」の場合について説明する。この場合、ノード構造体２２のタグキーには、テキストデータ「Mie/Inabe/4chome」に含まれる文字列のうち、「I」を指すポインタが格納され、ポインタに指された文字以降の文字列がタグキーに対応する文字列となる。
【００３９】
図７は、出力結果データのデータ構造の一例を示す図である。この出力結果データ２４０ｃは、区切文字により分類された所定の文字列と、この所定の文字列に対応する値の集計値とを対応付ける。
【００４０】
例えば、文字列「Mie」に対応する値の集計値は、文字列の先頭が「Mie/」となる全ての文字列に割当てられた値の集計値となる。すなわち、文字列「Mie」の集計値は、文字列「Mie/Inabe/4chome」、「Mie/inabe」、「Mie/Tsu/1chome]、「Mie/Tsu/2chome」、「Mie/Tsu/3chome」、「Mie/Tsu/4chome」、「Mie/Tsu」、「Mie/Yokkaichi/6chome」、「Mie/Yokkaichi」の各値を集計したものとなる。
【００４１】
次に、トライ木生成部２５０ａがトライ木データ２４０ｂを生成する処理について具体的に説明する。なお、トライ木生成部２５０ａがトライ木データ２４０ｂを生成する場合に、各文字列の優先度を判定し、優先度が小さい文字列ほどルートノードに近いノードに割当てる。
【００４２】
トライ木生成部２５０ａは、優先度を判定する場合に、異なる文字が検出されるまで比較対象となる各文字列の文字を先頭から順に抽出する。そして、トライ木生成部２５０ａは、抽出した文字において、アルファベット順で、ａに近い文字ほど優先度が小さいと判定し、ｚに近い文字ほど優先度が大きいと判定する。すなわち、優先度は、「a＜b＜c＜d＜e＜f＜g＜h＜i＜j＜k＜l＜m＜n＜o＜p＜q＜r＜s＜t＜u＜v＜w＜x＜y＜z」となる。なお、優先度が同じ文字列は、等しい文字列である。
【００４３】
例えば、文字列「black」と「blue」との優先度の大小関係について説明する。トライ木生成部２５０ａが、「black」と「blue」とを比較すると、３文字目で異なる文字を抽出する。具体的には、トライ木生成部２５０ａが「black」から「a」を抽出し、「blue」から「u」を抽出する。「a」は「u」よりも優先度が小さいので、トライ木生成部２５０ａは、「black」を「blue」よりもルートノード側のノードに割当てる。
【００４４】
続いて、文字列「green」と「greenyellow」との優先度の大小関係について説明する。トライ木生成部２５０ａが、「green」と「greenyellow」とを比較すると、６文字目で異なる文字が抽出する。具体的には、トライ木生成部２５０ａが「green」から「空」を抽出し、「greenyellow」から「y」を抽出する。このような場合、トライ木生成部２５０ａは、「空」が抽出されなかったキー「greenyellow」の方が「green」よりも優先度が大きいと判定する。したがって、トライ木生成部２５０ａは、優先度の小さい「green」を「greenyellow」よりもルートノード側のノードに割り当てる。
【００４５】
トライ木生成部２５０ａは、トライ木データ２４０ｂに含まれるノードを、入力キーの先頭からの文字に応じて順に辿り、優先度の低い文字列ほど、ルートノード側のノードに登録されるように、トライ木データ２４０ｂを生成する。以下において、トライ木生成部２５０ａが、トライ木データ２４０ｂを生成する具体的な処理手順について説明する。
【００４６】
図８〜図１４は、本実施例２にかかるトライ木データを生成する処理を説明するための図である。ここでは説明の便宜上、入力キー管理テーブル２４０ａに、下記に示す入力キーと値とが組み合わされたデータが登録されているものとする。具体的に、入力キー「http://aaa.aaa/e/」、値「１」と、入力キー「http://aaa.aaa/e/c/」、値「２」と、入力キー「http://aaa.aaa/d/」、値「３」と、入力キー「http://aaa.aaa/e/」、値「４」とが登録されているものとする。トライ木生成部２５０ａは、入力キー管理テーブル２４０ａに登録された入力キーと値との組を順に取り出して、トライ木データ２４０ｂを生成する。
【００４７】
まず、トライ木生成部２５０ａが、トライ木データ２４０ｂにノードが存在しない状態で、入力キー「http://aaa.aaa/e/」、値「１」をトライ木データ２４０ｂに追加する場合について説明する。なお、世代数の初期値を０とする。この世代数は、入力キーが何文字目までタグキーと同じであるかを示す数値である。
【００４８】
図８に示すように、トライ木生成部２５０ａは、ルートノード１を生成し（ステップＳ１０）、入力キー「http://aaa.aaa/e/」を用意する（ステップＳ１１）。トライ木生成部２５０ａは、入力キー「http://aaa.aaa/e/」の先頭文字「h」をキーとする子ノードが存在しないので、ルートノード１のタグキーと入力キーの優先度とを比較する。ここで、トライ木生成部２５０ａは、比較対象となるタグキーがルートノードに存在しないので、タグキーを「空」とし、入力キーの優先度とタグキーの優先度とを比較する。タグキーは「空」なので、トライ木生成部２５０ａは、ルートノードのタグキーの優先度よりも、入力キー「http://aaa.aaa/e/」の優先度が大きいと判定する。
【００４９】
このため、トライ木生成部２５０ａは、ルートノードの配下に「h」に対応するノード２を生成し、入力キー「http://aaa.aaa/e/」からトライ部分「h」を取り除いた残りの文字列をタグキーとして、ノード２に登録する。また、トライ木生成部２５０ａは、ノード２の配下にノードが存在しないので一致数「０」をノード２に登録すると共に、入力キー「http://aaa.aaa/e/」に対応する値「１」をノード２に登録する（ステップＳ１２）。ここで、トライ部分とは、ルートノードから該当ノードに至るまでに通過する各ノードに対応する文字を順に並べた文字列となる。例えば、ノード２のトライ部分は、「h」となる。
【００５０】
続いて、図９に移行し、トライ木生成部２５０ａが、ステップＳ１２で生成したトライ木データに、入力キー「http://aaa.aaa/e/c/」、値「２」を追加する場合について説明する。トライ木生成部２５０ａは、入力キー「http://aaa.aaa/e/c/」の先頭文字「h」でルートノード１〜ノード２に遷移する。そして、トライ木生成部２５０ａは、入力キー「http://aaa.aaa/e/c/」のポインタを１つ進め、２文字目の「t」に設定する（ステップＳ１３）。
【００５１】
トライ木生成部２５０ａは、ノード２において、ポインタの指す「t」に対応する子ノードが存在しないので、ノード２のタグキー「http://aaa.aaa/e/」の優先度と、トライ部分の「h」を取り除いた入力キー「ttp://aaa.aaa/e/c/」の優先度とを比較する。トライ木生成部２５０ａは、ノード２の一致数が「０」であるため、入力キーの先頭から順に比較を行う。
【００５２】
すると、入力キーの１７文字目が「ｃ」であり、タグキーの１７文字目が「空」であるため、トライ木生成部２５０ａは、入力キーの優先度が、タグキーの優先度よりも大きいと判定する。また、トライ木生成部２５０ａは、入力キーとタグキーとを比較し、１６文字「ttp://aaa.aaa/e/」が一致していると判定する（ステップＳ１４）。
【００５３】
続いて、図１０の説明に移行する。トライ木生成部２５０ａは、ノード２に一致数「１６」を登録し、ノード２のタグキー「ttp://aaa.aaa/e/」のポインタを１６文字進める。その結果、ノード２に接続されるタグキーは「空」となる。また、トライ木生成部２５０ａは、入力キー「http://aaa.aaa/e/c/」の２文字目の「t」に対応するノード３を生成する（ステップＳ１５）。
【００５４】
トライ木生成部２５０ａは、入力キーのポインタを３文字目の「t」に進める。トライ木生成部２５０ａは、現在のノードをノード３に遷移し、入力キー「http://aaa.aaa/e/c/」からトライ部分の「ht」を取り除いた残りの文字列「tp://aaa.aaa/e/c/」を、ノード３のタグキーとして登録する。トライ木生成部２５０ａは、入力キー「http://aaa.aaa/e/c/」に対応する値「２」をノード３に登録する。また、トライ木生成部２５０ａは、ノード３の配下にノードが存在しないので、ノード３に一致数「０」を登録する（ステップＳ１６）。
【００５５】
続いて、図１１に移行し、トライ木生成部２５０ａが、ステップＳ１６で生成したトライ木データに、入力キー「http://aaa.aaa/d/」、値「３」を追加する場合について説明する。トライ木生成部２５０ａは、入力キー「http://aaa.aaa/d/」を先頭文字から１文字ずつ読み出して、入力キーの１，２文字目の「h」、「t」に対応するノード２，３の順に遷移する。そして、トライ木生成部２５０ａは、遷移したノードの数に応じて、入力キー「http://aaa.aaa/d/」のポインタを２つ進め、３文字目の「t」にポインタを設定する。
【００５６】
トライ木生成部２５０ａは、ノード３において、「t」に対応する子ノードが存在しないので、ノード３のタグキー「tp://aaa.aaa/e/c」の優先度と、トライ部分の「ht」を取り除いた入力キー「tp://aaa.aaa/d/」の優先度とを比較する。すると、タグキーの１４文字目が「e」であり、入力キーの１４文字目が「d」であるため、トライ木生成部２５０ａは、タグキーの優先度が入力キーの優先度よりも大きいと判定する（ステップＳ１７）。
【００５７】
トライ木生成部２５０ａは、トライ部分「ht」を取り除いた入力キー「tp://aaa.aaa/d/」とタグキー「tp://aaa.aaa/e/c」とを比較して、一致する文字列の数を求めることで世代数を判定する。「ht」を取り除いた入力キー「tp://aaa.aaa/d/」と「tp://aaa.aaa/e/c」とを比較すると、先頭から１３文字「tp://aaa.aaa/」が一致しているので、トライ木生成部２５０ａは、世代数が「１３」とする。
【００５８】
トライ木生成部２５０ａは、入力キー「http://aaa.aaa/d/」のポインタを現在の３文字目の「t」から１３文字進めて、「d」に設定する。そして、トライ木生成部２５０ａは、ノード３の親ノードとなるノード２に遷移し、世代数に１を加算して、世代数を「１４」とする（ステップＳ１８）。ここで、世代数が１４となる理由は、親ノードとなるノード２に遷移することで、比較対象となる入力キーの文字が１文字増えるが、かかる増加分の文字は、親ノードに割当てられた文字と一致しているためである。
【００５９】
続いて、図１２の説明に移行する。トライ木生成部２５０ａは、ノード２のタグキー「空」の優先度と、入力キー「http://aaa.aaa/d/」の優先度をとを比較する前に、ノード２に登録された一致数と、入力キーの世代数とを比較する。ノード２の一致数は「１６」であり、入力キーの世代数は「１４」であるため、一致数の方が世代数よりも大きい。
【００６０】
一致数が世代数よりも大きい場合には、トライ木生成部２５０ａは、ノード２のタグキー「空」の優先度と、入力キー「http://aaa.aaa/d/」の優先度を直接比較しなくても、ノード２のタグキーの優先度が入力キーの優先度よりも大きいと判定できる。
【００６１】
例えば、世代数１４の入力キーは、先頭文字から１３文字目までは、ノード２の子ノードとなるノード３のタグキーと同じであることを示し、１４文字目において、入力キーの優先度がノード３の優先度よりも小さい。そして、ノード２の一致数が入力キーの世代数より大きいということは、ノード３のタグキーの優先度が入力キーの優先度よりも大きいという決め手になった文字まで、ノード２のタグキーは少なくとも同じである。したがって、トライ木生成部２５０ａは、ノード２のタグキーの優先度と、入力キー「http://aaa.aaa/d/」の優先度を直接比較しなくても、ノード２のタグキーの優先度の方が大きいと判定できる。
【００６２】
ノード２の親ノードがルートノード１であるため、トライ木生成部２５０ａは、ノード２の「一致数、タグキー、タグキーに対応する値」と、「世代数、入力キー、入力キーに対応する値」とを交換する。具体的に、トライ木生成部２５０ａは、入力キーの世代数「１４」を一致数としてノード２に登録し、入力キーの値「３」をノード２に登録する。また、トライ木生成部２５０ａは、入力キー「http://aaa.aaa/d/」のポインタ以降の文字列「d/」をノード２のタグキーに登録する。
【００６３】
そして、トライ木生成部２５０ａは、ノード２に割当てられていた文字列「http://aaa.aaa/e/」、ノード２に登録されていた値「１」、一致数「１６」をそれぞれ、現在の入力キー、値、世代数に設定する。また、トライ木生成部２５０ａは、入力キーのポインタを先頭文字から世代数の数「１６」分だけ移行した「/」に設定する。トライ木生成部２５０ａは、ノード２の子ノードとなるノード３に移行し、入力キーのポインタを１文字移動した「空」に設定する（ステップＳ１９）。
【００６４】
トライ木生成部２５０ａは、ノード３に遷移した場合に、世代数「１６」から１を減算することで、世代数を「１５」に設定する。そして、トライ木生成部２５０ａは、ノード３の「一致数、タグキー、タグキーに対応する値」と、「世代数、入力キー、入力キーに対応する値」を交換する。具体的に、トライ木生成部２５０ａは、入力キーの世代数「１５」を一致数としてノード３に登録し、入力キーの値「１」をノード３に登録する。また、トライ木生成部２５０ａは、入力キー「http://aaa.aaa/e/」のポインタ移行の文字「空」をノード３のタグキーに登録する。
【００６５】
そして、トライ木生成部２５０ａは、ノード３に割当てられていた文字列「http://aaa.aaa/e/c/」、ノードに登録されていた値「２」、一致数「０」をそれぞれ、現在の入力キー、値、世代数に設定する。また、トライ木生成部２５０ａは、入力キー「http://aaa.aaa/e/c/」のポインタを、先頭から、ルートノード１〜ノード３までの移動数「２」分だけ進めることで、３文字目の「t」に設定する（ステップＳ２０）。
【００６６】
続いて、図１３の説明に移行する。トライ木生成部２５０ａは、入力キー「http://aaa.aaa/e/c/」のポインタに指される３文字目の「t」に対応するノードが、ノード３の配下に存在しない。このため、トライ木生成部２５０ａは、ノード３の配下に「t」に対応するノード４を生成する。そして、トライ木生成部２５０ａは、ノード４に遷移し、入力キーのポインタを４文字目の「p」に設定する（ステップＳ２１）。
【００６７】
トライ木生成部２５０ａは、入力キー「http://aaa.aaa/e/c/」からトライ部分「htt」を取り除いた残りの文字列「p://aaa.aaa/e/c/」をタグキーとしてノード４に登録する。また、トライ木生成部２５０ａは、入力キー「http://aaa.aaa/e/c/」の値「２」をノード４に登録する。なお、ノード４の配下にノードが存在しないので、トライ木生成部２５０ａは、ノード４の一致数を「０」に設定する（ステップＳ２２）。
【００６８】
続いて、図１４の説明に移行し、トライ木生成部２５０ａが、ステップＳ２２で生成したトライ木データに、入力キー「http://aaa.aaa/e/」、値「４」を追加する場合について説明する。トライ木生成部２５０ａは、入力キー「http://aaa.aaa/e/」の先頭文字から文字「htt」を順次読み出し、各文字に対応するノード２，３，４の順に遷移する。そして、トライ木生成部２５０ａは、入力キー「http://aaa.aaa/e/」のポインタを先頭文字から３文字移動させ、４文字目の「p」にポインタを設定する（ステップＳ２３）。
【００６９】
トライ木生成部２５０ａは、ノード４において、「p」に対応する子ノードが存在しないので、ノード４のタグキー「p://aaa.aaa/e/c/」の優先度と、トライ部分「htt」を取り除いた入力キー「p://aaa.aaa/e/」の優先度とを比較する。トライ木生成部２５０ａは、ノード３の一致数が「０」であるため、入力キーの先頭文字およびタグキーの先頭文字から順に比較を行う。
【００７０】
すると、トライ木生成部２５０ａは、入力キーのトライ部分「htt」を除いた１５文字目が「空」であり、タグキーの１５文字目が「c」であるため、入力キーの優先度がタグキーの優先度よりも小さいと判定する。また、トライ木生成部２５０ａは、トライ部分「htt」を除いた入力キー「p://aaa.aaa/e/」とタグキー「p://aaa.aaa/e/c/」とを比較して先頭からの一致する文字数を判定する。文字列「p://aaa.aaa/e/」が一致しているので、トライ木生成部２５０ａは、一致する文字数を「１４」文字と判定する。このため、トライ木生成部２５０ａは、世代数を１４に設定する。
【００７１】
トライ木生成部２５０ａは、入力キー「http://aaa.aaa/e/」のポインタを４文字目の「p」から１４文字進め、ポインタを「空」に設定する。また、トライ木生成部２５０ａは、ノード４の親ノードとなるノード３に移行し、世代数「１４」に１を加算して世代数を「１５」に設定する（ステップＳ２４）。
【００７２】
トライ木生成部２５０ａは、ノード３の一致数と、世代数とを比較すると双方とも「１５」で一致し、入力キーの優先度と、タグキーの優先度が等しくなるため、ノード３に入力キーに対応する値「４」を登録する（ステップＳ２５）。なお、ノード３には既に値「１」が登録されている。トライ木生成部２５０ａは、値「１」と「４」とを別々にノード３に登録しても良いし、値「１」と「４」とを加算した値「５」をノード３に登録しても良い。
【００７３】
トライ木生成部２５０ａは、上記ステップＳ１０〜Ｓ２５の処理を実行することで、入力キー管理テーブル２４０ａに格納された入力キーと値との組から、トライ木データ２４０ｂを生成する。
【００７４】
次に、図３に示した集計処理部２５０ｂの処理を具体的に説明する。この集計処理部２５０ｂは、トライ木データ２４０ｂに登録された文字列を区切文字に基づいて、所定の文字列毎に分類する処理を実行し、分類した文字列毎に各ノードに登録された値の集計を行う。まず、集計処理部２５０ｂが、区切文字に基づいて、トライ木データ２４０ｂに登録された各文字列を所定の文字列に分類する処理の概要について説明する。
【００７５】
集計処理部２５０ｂは、ノードのタグキーに区切文字「/」が含まれている場合には、かかるノードに割当てられた文字列と、子ノードに割当てられた文字列とは異なる組に属する文字列であると判定する。これに対して、集計処理部２５０ｂは、ノードのタグキーに区切文字「/」が含まれていない場合には、かかるノードに割当てられた文字列と、子ノードに割当てられた文字列とが同一の組に属する文字列であると判定する。
【００７６】
図１５は、集計処理部が区切文字に基づいて文字列を分類する処理の概要を説明するための図である。図１５に示すように、このトライ木データは、ノード１〜ノード４を含む。図１５では、トライ部分、一致数、タグキーを利用して、各ノードに割当てられる文字列を表現している。ここで、ノード２は、文字「福」に対応付けられ、一致数「０」、タグキー「岡県/飯塚市」を登録しているので、ノード２には、文字列「福岡県/飯塚市」が割当てられていることに等しい。ノード３は、文字「島」に対応付けられ、一致数「２」、タグキー「いわき市」を登録しているので、ノード３には、文字列「福島県/いわき市」が割当てられていることに等しい。ノード４は、文字「県」に対応付けられ、一致数「０」、タグキー「/福島市」を登録しているので、ノード４には、文字列「福島県/福島市」が割当てられていることに等しい。
【００７７】
図１５において、ノード２のタグキー「岡県/飯塚市」には、区切文字が含まれている。このため、集計処理部２５０ｂは、ノード２に割当てられた文字列「福岡県/飯塚市」と、ノード３に割当てられた文字列「福島県/いわき市」とが異なる組の文字列であると判定する。これに対して、ノード３のタグキー「いわき市」には、区切文字が含まれていない。このため、集計処理部２５０ｂは、ノード３に割当てられた文字列「福島県/いわき市」と、ノード４に割当てられた文字列「福島県/福島市」とが同じ組の文字列であると判定する。
【００７８】
続いて、集計処理部２５０ｂが図５に示したトライ木データ２４０ｂから図７に示した出力結果データ２４０ｃを生成する処理を具体的に説明する。図１６〜図２１は、集計処理部の処理を具体的に説明するための図である。なお、集計処理部２５０ｂは、処理を実行する段階で、記憶部２４０の記憶領域に、ノード識別領域、タグキー領域、文字列領域、集計データ領域（ａ）、（ｂ）、出力領域を設ける。
【００７９】
ここで、ノード識別領域は、トライ木データ２４０ｂの各ノードのうち現在のノードを識別する情報を格納する。タグキー領域は、現在のノードに登録されたタグキーの文字列を格納する。文字列領域は、現在のノードに割当てられた文字列を格納する。集計データ領域（ａ）、（ｂ）は、値の集計値を格納する。出力領域は、文字列の組と文字列の組に対応する集計値とを格納する。
【００８０】
本実施例２では一例として、トライ木データ２４０ｂに登録された文字列は、最大区切文字を２つ含み、最大で３階層の文字列からなるものとする。そして、集計処理部２５０ｂは、第一階層までの文字列「○○○」に分類される文字列の値を集計するために集計データ領域（ａ）を利用する。「○」は区切文字以外の文字に対応する。
【００８１】
また、集計処理部２５０ｂは、第一階層から第二階層までの文字列「○○○/○○○」の値を集計するために集計データ領域（ｂ）を利用する。なお、図１６〜２１の下段には、トライ木データ２４０ｂのデータ構造を示す。
【００８２】
まず、図１６の説明を行う。集計処理部２５０ｂは、出力領域、ノード識別領域、タグキー領域、文字列領域、集計データ領域（ａ）、（ｂ）を「空」に設定する。そして、集計処理２５０ｂは、ノード識別領域に、ルートノード１を識別する「node１」を格納する（ステップＳ３０）。
【００８３】
集計処理部２５０ｂは、ルートノード１に子ノードとなるノード２が存在するので、ノード２に遷移する。ノード２には、タグキー「Inabe/4chome」、値「５」が登録されている。このため、集計処理部２５０ｂは、タグキー領域に文字列「Inabe/4chome」、集計データ領域（ａ）、（ｂ）に値「５」を格納する。また、ノード２のトライ部分の文字は「M」、一致数「３」に対応する文字列は「ie/」、タグキーの文字列は「Inabe/4chome」であるため、集計処理部２５０ｂは、ノード２に割当てられた文字列を「Mie/Inabe/4chome」と判定する。集計処理部２５０ｂは、文字列領域に文字列「Mie/Inabe/4chome」を格納する。そして、集計処理部２５０ｂは、文字列領域に格納された文字列「Mie/Inabe/4chome」とノード２の値「５」との組を、出力領域に格納する。集計処理部２５０ｂは、出力領域に格納された文字列「Mie/Inabe/4chome」と値「５」とをそれぞれ、出力結果データ２４０ｃの文字列と集計値に登録する（ステップＳ３１）。
【００８４】
集計処理部２５０ｂは、ノード２のタグキーに第二階層の区切文字が存在するので、ノード２に割当てられた文字列のうち、第二階層までの文字列「Mie/Inabe」と、同じ組に属する文字列が、ノード２の配下の文字列に存在しないと判定する。このため、集計処理部２５０ｂは、文字列「Mie/Inabe」と集計データ領域（ｂ）の値「５」との組を、出力領域に格納する。また、集計処理部２５０ｂは、集計データ領域（ｂ）の値を０にリセットする。集計処理部２５０ｂは、出力領域に格納された文字列「Mie/Inabe」と値「５」をそれぞれ、出力結果データ２４０ｃの文字列と集計値に登録する（ステップＳ３２）。なお、集計処理部２５０ｂは、タグキー領域の文字列と、文字列領域の文字列を比較することで、何階層の区切文字がタグキー領域に含まれているのかを判定する。タグキー「Inabe/4chome」と、文字列「Mie/Inabe/4chome」と比較すると、タグキーの区切文字は、文字列に含まれる区切文字の内、先頭側から２番目に現れる区切文字となる。このため、集計処理部２５０ｂは、ノード２のタグキーを第二階層の区切文字と判定する。
【００８５】
集計処理部２５０ｂは、ノード２に子ノードとなるノード３が存在するので、ノード３に遷移する。ノード３には、タグキー「1chome」、値「２５」が登録されている。このため、集計処理部２５０ｂは、タグキー領域に文字列「1chome」を格納し、集計データ領域（ａ）、（ｂ）の値にそれぞれ２５を加算する。このため、集計データ領域（ａ）は３０を格納し、集計データ領域（ｂ）は２５を格納する。また、ノード３のトライ部分の文字は「Mi」、一致数「６」に対応する文字列は「e/Tsu/」、タグキーの文字列は「1chome」であるため、集計処理部２５０ｂは、ノード３に割当てられた文字列を「Mie/Tsu/1chome」と判定する。集計処理部２５０ｂは、文字列領域に文字列「Mie/Tsu/1chome」を格納する。そして、集計処理部２５０ｂは、文字列領域に格納された文字列「Mie/Tsu/1chome」とノード３の値「２５」との組を、出力領域に格納する。集計処理部２５０ｂは、出力領域に格納された文字列「Mie/Tsu/1chome」と値「２５」とをそれぞれ、出力結果データ２４０ｃの文字列と集計値に登録する（ステップＳ３３）。
【００８６】
続いて、図１７の説明に移行する。集計処理部２５０ｂは、ノード３のタグキーに区切文字が存在しないので、ノード３の長男ノードとなるノード４に遷移する。ノード４には、タグキー「2chome」、値「１５」が登録されている。このため、集計処理部２５０ｂは、タグキー領域に文字列「2chome」を格納し、集計データ領域（ａ）、（ｂ）の値にそれぞれ１５を加算する。このため、集計データ領域（ａ）は４５を格納し、集計データ領域（ｂ）は４０を格納する。また、ノード４のトライ部分の文字は「Mie」、一致数「５」に対応する文字列は「/Tsu/」、タグキーの文字列は「2chome」であるため、集計処理部２５０ｂは、ノード４に割当てられた文字列を「Mie/Tsu/2chome」と判定する。集計処理部２５０ｂは、文字列「Mie/Tsu/2chome」を文字列領域に格納する。そして、集計処理部２５０ｂは、文字列領域に格納された文字列「Mie/Tsu/2chome」とノード４の値「１５」との組を、出力領域に格納する。集計処理部２５０ｂは、出力領域に格納された文字列「Mie/Tsu/2chome」と値「１５」とをそれぞれ、出力結果データ２４０ｃの文字列と集計値に登録する（ステップＳ３４）。
【００８７】
集計処理部２５０ｂは、ノード４のタグキーに区切文字が存在しないので、ノード４の子ノードとなるノード５に遷移する。ノード５には、タグキー「3chome」、値「８」が登録されている。このため、集計処理部２５０ｂは、タグキー領域に文字列「3chome」を格納し、集計データ領域（ａ）、（ｂ）にそれぞれ８を加算する。このため、集計データ領域（ａ）は５３を格納し、集計データ領域（ｂ）は４８を格納する。また、ノード５のトライ部分の文字は「Mie/」、一致数「４」に対応する文字列は「Tsu/」、タグキーの文字列は「3chome」であるため、集計処理部２５０ｂは、ノード５に割当てられた文字列を「Mie/Tsu/3chome」と判定する。集計処理部２５０ｂは、文字列「Mie/Tsu/3chome」を文字列領域に格納する。集計処理部２５０ｂは、文字列領域に格納された文字列「Mie/Tsu/3chome」とノード５の値「８」との組を、出力領域に格納する。集計処理部２５０ｂは、出力領域に格納された文字列「Mie/Tsu/3chome」と値「８」とをそれぞれ、出力結果データ２４０ｃの文字列と集計値に登録する（ステップＳ３５）。
【００８８】
集計処理部２５０ｂは、ノード５のタグキーに区切文字が存在しないので、ノード５の子ノードとなるノード６に遷移する。ノード６には、タグキー「su/4chome」、値「７」が登録されている。このため、集計処理部２５０ｂは、タグキー領域に文字列「su/4chome」を格納し、集計データ領域（ａ）、（ｂ）にそれぞれ７を加算する。このため、集計データ領域（ａ）は６０を格納し、集計データ領域（ｂ）は５５を格納する。また、ノード６のトライ部分の文字は「Mie/T」、一致数「０」に対応する文字列は無し、タグキーの文字列は「su/4chome」であるため、集計処理部２５０ｂは、ノード６に割当てられた文字列を「Mie/Tsu/4chome」と判定する。集計処理部２５０ｂは、文字列「Mie/Tsu/4chome」を文字列領域に格納する。集計処理部２５０ｂは、文字列領域に格納された文字列「Mie/Tsu/4chome」とノード６の値「７」との組を、出力領域に格納する。集計処理部２５０ｂは、出力領域に格納された文字列「Mie/Tsu/4chome」と値「７」とをそれぞれ、出力結果データ２４０ｃの文字列と集計値に登録する（ステップＳ３６）。
【００８９】
続いて、図１８の説明に移行する。集計処理部２５０ｂは、ノード６のタグキーに第二階層の区切文字が存在するので、ノード６に割当てられた文字列のうち、第二階層までの文字列「Mie/Tsu」と同じ組に属する文字列が、ノード６の配下の文字列に存在しないと判定する。このため、集計処理部２５０ｂは、文字列「Mie/Tsu」と集計データ領域（ｂ）の値「５５」との組を、出力領域に格納する。また、集計処理部２５０ｂは、集計データ領域（ｂ）の値を０にリセットする。集計処理部２５０ｂは、出力領域に格納された文字列「Mie/Tsu」と値「５５」をそれぞれ、出力結果データ２４０ｃの文字列と集計値に登録する（ステップＳ３７）。
【００９０】
集計処理部２５０ｂは、ノード６の弟ノードとなるノード７に遷移する。ノード７には、タグキー「okkaichi/6chome」、値「３５」が登録されている。このため、集計処理部２５０ｂは、タグキー領域に文字列「okkaichi/6chome」を格納し、集計データ領域（ａ）、（ｂ）にそれぞれ３５を加算する。このため、集計データ領域（ａ）は９５を格納し、集計データ領域（ｂ）は３５を格納する。また、ノード７のトライ部分は「Mie/Y」、一致数「０」に対応する文字列は無し、タグキー「okkaichi/6chome」であるため、集計処理部２５０ｂは、ノード７に割当てられた文字列を「Mie/Yokkaichi/6chome」と判定する。集計処理部２５０ｂは、文字列「Mie/Yokkaichi/6chome」を文字列領域に格納する。集計処理部２５０ｂは、文字列領域に格納された文字列「Mie/Yokkaichi/6chome」とノード７の値「３５」との組を、出力領域に格納する。集計処理部２５０ｂは、出力領域に格納された文字列「Mie/Yokkaichi/6chome」と値「３５」とをそれぞれ、出力結果データ２４０ｃの文字列と集計値に登録する（ステップＳ３８）。
【００９１】
集計処理部２５０ｂは、ノード７のタグキーに第二階層の区切文字が存在するので、ノード７に割当てられた文字列のうち、第二階層までの文字列「Mie/Yokkaichi」と同じ組に属する文字列が、ノード７の配下の文字列に存在しないと判定する。このため、集計処理部２５０ｂは、文字列「Mie/Yokkaichi」と集計データ領域（ｂ）の値「３５」との組を、出力領域に格納する。また、集計処理部２５０ｂは、集計データ領域（ｂ）の値を０にリセットする。集計処理部２５０ｂは、出力領域に格納された文字列「Mie/Yokkaichi」と値「３５」とをそれぞれ、出力結果データ２４０ｃの文字列と集計値に登録する（ステップＳ３９）。
【００９２】
続いて、図１９の説明に移行する。集計処理部２５０ｂは、ノード７に子ノードが存在せず、かつ、弟ノードが存在しないので、親ノードとなるノード５に遷移する。集計処理部２５０ｂは、ノード５に割当てられたタグキーが「3chome」であるため、タグキー領域に文字列「3chome」を格納する。また、上記ステップＳ３５と同様に、ノード５に割当てられた文字列は「Mie/Tsu/3chome」であるため、集計処理部２５０ｂは、文字列「Mie/Tsu/3chome」を文字列領域に格納する（ステップＳ４０）。
【００９３】
集計処理部２５０ｂは、ノード５に対応する文字が区切文字であるか否かを判定する。ノード５に対応する文字は区切文字「/」であり、かかる区切文字は、第一階層の区切文字であるため、集計処理部２５０ｂは、ノード５に割当てられた文字列のうち、第一階層までの文字列「Mie」と集計データ領域（ａ）の値「９５」との組を、出力領域に格納する。また、集計処理部２５０ｂは、集計データ領域（ａ）の値を０にリセットする。集計処理部２５０ｂは、出力領域に格納された文字列「Mie」と値「９５」とをそれぞれ、出力結果データ２４０ｃの文字列と集計値に登録する（ステップＳ４１）。
【００９４】
ここで、集計処理部２５０ｂが、ノードに対応する区切文字が何階層の区切文字であるかを判定する処理の一例について説明する。集計処理部２５０ｂは、ルートノード１からノード５に至るまでの各ノード１〜５に対応する文字「M、i、e、/」を順に検出する。そして、集計処理部２５０ｂは、抽出した文字に含まれる区切文字のうち、ノード５に対応する区切文字は、先頭側から何番目の区切文字であるかを判定する。ノード５に対応する区切文字は、１つ目の区切文字である。このため、集計処理部２５０ｂは、ノード５に対応する区切文字を第一階層の区切文字であると判定する。
【００９５】
集計処理部２５０ｂは、ノード５に弟ノードが存在しないので、親ノードとなるノード４に遷移する。集計処理部２５０ｂは、ノード４に割当てられたタグキーが「2chome」であるため、タグキー領域に文字列「2chome」を格納する。また、上記ステップＳ３４と同様に、ノード４に割当てられた文字列は「Mie/Tsu/2chome」であるため、集計処理部２５０ｂは、文字列「Mie/Tsu/2chome」を文字列領域に格納する（ステップＳ４２）。
【００９６】
続いて、図２０の説明に移行する。集計処理部２５０ｂは、ノード４に対応する文字が区切文字であるか否かを判定する。ノード４に対応する文字は区切文字ではなく、ノード４に弟ノードが存在するため、ノード８に遷移する。ノード８には、タグキー「endai/1chome」、値「５」が登録されている。このため、集計処理部２５０ｂは、タグキー領域に文字列「endai/1chome」を格納し、集計データ領域（ａ）、（ｂ）にそれぞれ４０を加算する。このため、集計データ領域（ａ）は４０を格納し、集計データ領域（ｂ）は４０を格納する。また、ノード８のトライ部分は「Miy」、一致数「５」に対応する文字列は「agi/S」、タグキーの文字列は「endai/1chome」であるため、集計処理部２５０ｂは、ノード８に割当てられた文字列を「Miyagi/Sendai/1chome」と判定する。集計処理部２５０ｂは、文字列「Miyagi/Sendai/1chome」を文字列領域に格納する。集計処理部２５０ｂは、文字列領域に格納された文字列「Miyagi/Sendai/1chome」とノード８の値「４０」との組を、出力領域に格納する。集計処理部２５０ｂは、出力領域に格納された文字列「Miyagi/Sendai/1chome」と値「４０」とをそれぞれ、出力結果データ２４０ｃの文字列と集計値に登録する（ステップＳ４３）。
【００９７】
集計処理部２５０ｂは、ノード８のタグキーに第二階層の区切文字が存在するので、ノード８に割当てられた文字列のうち、第二階層までの文字列「Miyagi/Sendai」と同じ組に属する文字列が、ノード８の配下の文字列に存在しないと判定する。このため、集計処理部２５０ｂは、文字列「Miyagi/Sendai」と集計データ領域（ｂ）の値「３５」との組を、出力領域に格納する。また、集計処理部２５０ｂは、集計データ領域（ｂ）の値を０にリセットする。集計処理部２５０ｂは、出力領域に格納された文字列「Miyagi/Sendai」と値「４０」とをそれぞれ、出力結果データ２４０ｃの文字列と集計値に登録する（ステップＳ４４）。
【００９８】
集計処理部２５０ｂは、ノード８の子ノードとなるノード９に遷移する。ノード９には、タグキー「gi/Shiroishi/3chome」、値「４」が登録されている。このため、集計処理部２５０ｂは、タグキー領域に文字列「gi/Shiroishi/3chome」を格納し、集計データ領域（ａ）、（ｂ）にそれぞれ４を加算する。このため、集計データ領域（ａ）は４４を格納し、集計データ領域（ｂ）は４を格納する。また、ノード９のトライ部分は「Miya」、一致数「０」に対応する文字列は無し、タグキーの文字列は「gi/Shiroishi/3chome」であるため、集計処理部２５０ｂは、ノード９に割当てられた文字列を「Miyagi/Shiroishi/3chome」と判定する。集計処理部２５０ｂは、文字列「Miyagi/Shiroishi/3chome」を文字列領域に格納する。集計処理部２５０ｂは、文字列領域に格納された文字列「Miyagi/Shiroishi/3chome」とノード９の値「４」との組を出力領域に格納する。集計処理部２５０ｂは、出力領域に格納された文字列「Miyagi/Shiroishi/3chome」と値「４」とをそれぞれ、出力結果データ２４０ｃの文字列と集計値に登録する（ステップＳ４５）。
【００９９】
続いて、図２１の説明に移行する。ノード９のタグキーには、第一階層の区切文字と第二階層の区切文字が存在する。集計処理部２５０ｂは、まず、ノード９に割当てられた文字列のうち、第二階層までの文字列「Miyagi/Shiroishi」と同じ組に属する文字列が、ノード９の配下の文字列に存在しないと判定する。このため、集計処理部２５０ｂは、文字列「Miyagi/Shiroishi」と集計データ領域（ｂ）の値「４」との組を、出力領域に格納する。また、集計処理部２５０ｂは、集計データ領域（ｂ）の値を０にリセットする。集計処理部２５０ｂは、出力領域に格納された文字列「Miyagi/Shiroishi」と値「４」とをそれぞれ、出力結果データ２４０ｃの文字列と集計値に登録する（ステップＳ４６）。
【０１００】
続いて、集計処理部２５０ｂは、ノード９に割当てられた文字列のうち、第一階層までの文字列「Miyagi」と同じ組に属する文字列が、ノード９の配下の文字列に存在しないと判定する。このため、集計処理部２５０ｂは、文字列「Miyagi」と集計データ領域（ａ）の値「４４」との組を、出力領域に格納する。また、集計処理部２５０ｂは、集計データ領域（ａ）の値を０にリセットする。集計処理部２５０ｂは、出力領域に格納された文字列「Miyagi」と値「４４」とをそれぞれ、出力結果データ２４０ｃの文字列と集計値に登録する（ステップＳ４７）。
【０１０１】
上記のように、集計処理部２５０ｂが、ステップＳ３０〜Ｓ４７の処理を実行することで、トライ木データ２４０ｂに含まれる文字列を分類し、分類した文字列毎の値を集計することで出力結果データ２４０ｃを生成する。
【０１０２】
次に、図３に示したトライ木生成部２５０ａの処理手順の一例について説明する。図２２は、トライ木生成処理部の処理手順を示すフローチャートである。図２２に示すように、トライ木生成部２５０ａは、ルートノードを生成し（ステップＳ１０１）、次の入力キーが入力キー管理テーブル２４０ａに存在するか否かを判定する（ステップＳ１０２）。
【０１０３】
トライ木生成部２５０ａは、次の入力キーが存在しない場合には（ステップＳ１０３，Ｎｏ）、処理を終了する。一方、トライ木生成部２５０ａは、次の入力キーが存在する場合には（ステップＳ１０３，Ｙｅｓ）、入力キーと値とを読み出す（ステップＳ１０４）。そして、トライ木生成部２５０ａは、データ追加処理を行い（ステップＳ１０５）、ステップＳ１０２に移行する。
【０１０４】
続いて、図２２のステップＳ１０５に示したデータ追加処理の具体的な処理手順について説明する。図２３〜図２４は、データ追加処理の処理手順を示すフローチャートである。図２３に示すように、トライ木生成部２５０ａは、現在のノードをルートノードに設定し（ステップＳ２０１）、入力キーのポインタを先頭のキーに設定する（ステップＳ２０２）。
【０１０５】
トライ木生成部２５０ａは、入力キーのポインタの指すキーが「空」の場合に（ステップＳ２０３，Ｙｅｓ）、世代数を０に設定する（ステップＳ２０４）。そして、トライ木生成部２５０ａは、図２４のステップＳ２０９に移行する。
【０１０６】
一方、トライ木生成部２５０ａは、入力キーのポインタの指すキーが「空」ではない場合に（ステップＳ２０３，Ｎｏ）、ポインタの指すキーで子ノードを参照し、子ノードが存在するか否かを判定する（ステップＳ２０５）。
【０１０７】
トライ木生成部２５０ａは、子ノードが存在する場合に（ステップＳ２０６，Ｙｅｓ）、ポインタの指すキーで子ノードに遷移し、入力キーのポインタを１つ進める（ステップＳ２０７）。そして、トライ木生成部２５０ａは、ステップＳ２０３に移行する。
【０１０８】
一方、トライ木生成部２５０ａは、子ノードが存在しない場合に（ステップＳ２０６，Ｎｏ）、現在のノードのタグキーの優先度が入力キーの優先度よりも小さいか否かを判定する（ステップＳ２０８）。トライ木生成部２５０ａは、タグキーの優先度が入力キーの優先度よりも小さくない場合に（ステップＳ２０８，Ｎｏ）、ステップＳ２０４に移行する。一方、トライ木生成部２５０ａは、タグキーの優先度が入力キーの優先度よりも小さい場合に（ステップＳ２０８，Ｙｅｓ）、図２５のステップＳ２２１に移行する。
【０１０９】
続いて、図２４の説明に移行する。トライ木生成部２５０ａは、ノードの情報を参照する（ステップＳ２０９）。ここで、ノードの情報は、ノードに設定された一致数、タグキーを含む。トライ木生成部２５０ａは、一致数と世代数が等しいか否かを判定する（ステップＳ２１０）。トライ木生成部２５０ａは、一致数と世代数が等しい場合に（ステップＳ２１０，Ｙｅｓ）、タグキーと入力キーの優先度が等しいか否かを判定する（ステップＳ２１１）。
【０１１０】
トライ木生成部２５０ａは、タグキーと入力キーの優先度が異なる場合に（ステップＳ２１１，Ｎｏ）、タグキーの優先度が入力キーの優先度よりも大きいか否かを判定する（ステップＳ２１２）。トライ木生成部２５０ａは、タグキーの優先度が入力キーの優先度よりも大きい場合に（ステップＳ２１２，Ｙｅｓ）、前方一致した文字数を世代数に追加する（ステップＳ２１３）。ここで、前方一致した文字数とは、タグキーの文字列と入力キー文字列とを比較し、各文字列が先頭文字から何文字目まで一致しているかを示す数である。
【０１１１】
トライ木生成部２５０ａは、前方一致した文字数分だけ、入力キーのポインタを進め（ステップＳ２１４）、兄ノードが存在する、または、親ノードがルートノードであるか否かを判定する（ステップＳ２１５）。トライ木生成部２５０ａは、兄ノードが存在する、または、親ノードがルートノードの場合には（ステップＳ２１５，Ｙｅｓ）、図２５のステップＳ２２６に移行する。一方、トライ木生成部２５０ａは、兄ノードが存在せず、かつ、親ノードがルートノードでない場合に（ステップＳ２１５，Ｎｏ）、世代数に１を加算し、親ノードへ遷移する（ステップＳ２１６）。そして、トライ木生成部２５０ａは、ステップＳ２０９に移行する。
【０１１２】
ステップＳ２１０において、トライ木生成部２５０ａは、一致数と世代数とが異なる場合に（ステップＳ２１０，Ｎｏ）、一致数が世代数よりも大きいか否かを判定する（ステップＳ２１７）。トライ木生成部２５０ａは、一致数が世代数よりも大きい場合に（ステップＳ２１７，Ｙｅｓ）、ステップＳ２１５に移行する。一方、トライ木生成部２５０ａは、一致数が世代数よりも小さい場合に（ステップＳ２１７，Ｎｏ）、図２５のステップＳ２１９に移行する。
【０１１３】
ステップＳ２１１において、トライ木生成部２５０ａは、タグキーと入力キーの優先度が等しい場合に（ステップＳ２１１，Ｙｅｓ）、現在のノードに入力キーの値を追加し（ステップＳ２１８）、処理を終了する。
【０１１４】
ステップＳ２１２において、トライ木生成部２５０ａは、タグキーの優先度が入力キーの優先度よりも小さい場合に（ステップＳ２１２，Ｎｏ）、図２５のステップＳ２２５に移行する。
【０１１５】
続いて、図２５の説明に移行する。トライ木生成部２５０ａは、現在のノードのノード情報において、一致数に前方一致した文字数を加えると共に、タグキーのポインタを前方一致した文字数分だけ進める（ステップＳ２１９）。
【０１１６】
トライ木生成部２５０ａは、世代数が０の場合には（ステップＳ２２０，Ｙｅｓ）、新しいノードを生成し、入力キーの先頭文字をキーとして現在のノードから新しいノードに接続する（ステップＳ２２１）。トライ木生成部２５０ａは、入力キーのポインタを１文字進め（ステップＳ２２２）、入力キーをタグキーとして新しいノードに追加する（ステップＳ２２３）。そして、トライ木生成部２５０ａは、現在のノードに入力キーの値を追加し（ステップＳ２２４）、処理を終了する。
【０１１７】
ステップＳ２２０において、トライ木生成部２５０ａは、世代数が０ではない場合に（ステップＳ２２０，Ｎｏ）、世代数から１を減算し、長男ノードに遷移する（ステップＳ２２５）。そして、トライ木生成部２５０ａは、「現在のノードの一致数、タグキー、ノードの値」と、「世代数、入力キー、入力キーの値」とを交換する（ステップＳ２２６）。トライ木生成部２５０ａは、世代数が０ではない場合に（ステップＳ２２７，Ｎｏ）、ステップＳ２２５に移行する。一方、トライ木生成部２５０ａは、世代数が０の場合に（ステップＳ２２７，Ｙｅｓ）、入力キーの先頭文字で子ノードに遷移し（ステップＳ２２８）、ステップＳ２２１に移行する。
【０１１８】
次に、図３の集計処理部２５０ｂの処理手順の一例について説明する。図２６は、集計処理部の処理手順を示すフローチャートである。図２６に示すように、集計処理部２５０ｂは、現在のノードをルートノードに設定し（ステップＳ３０１）、子ノードが存在する場合に（ステップＳ３０２，Ｙｅｓ）、長男ノードへ遷移する（ステップＳ３０３）。
【０１１９】
集計処理部２５０ｂは、一致数と階層数を加算した値を算出し、算出した値だけタグキーのポインタを戻した位置を特定する（ステップＳ３０４）。集計処理部２５０ｂは、特定した位置からタグキーの最後の文字までの文字列を取得し（ステップＳ３０５）、文字列および値を出力する（ステップＳ３０６）。
【０１２０】
集計処理部２５０ｂは、ノード値と集計データ領域（ａ）の値とを加算した値を集計データ領域（ａ）に格納し、ノードの値と集計データ領域（ｂ）の値とを加算した値を集計データ（ｂ）に格納する（ステップＳ３０７）。
【０１２１】
集計処理部２５０ｂは、タグキーを読み出し（ステップＳ３０８）、区切文字が存在しない場合に（ステップＳ３０９，Ｎｏ）、ステップＳ３０２に移行する。一方、集計処理部２５０ｂは、区切文字が存在する場合に（ステップＳ３０９，Ｙｅｓ）、グループキーとグループキーに対応する集計データ領域の値を出力する（ステップＳ３１０）。そして、集計処理部２５０ｂは、グループキーに対応する集計データ領域の値をリセットし（ステップＳ３１１）、ステップＳ３０２に移行する。ここで、グループキーは、ノードに割当てられた文字列のうち、区切文字の階層に対応する文字列までの文字列に対応する。
【０１２２】
ところで、集計処理部２５０ｂは、子ノードが存在しない場合に（ステップＳ３０２，Ｎｏ）、親ノードから現在のノードへのキーを読み出す（ステップＳ３１２）。集計処理部２５０ｂは、読み出したキーが区切文字ではない場合に（ステップＳ３１３，Ｎｏ）、ステップＳ３１６に移行する。一方、集計処理部２５０ｂは、読み出したキーが区切文字の場合に（ステップＳ３１３，Ｙｅｓ）、グループキーとグループキーに対応する集計データ領域の値を出力する（ステップＳ３１４）。
【０１２３】
集計処理部２５０ｂは、グループキーに対応する集計データ領域の値をリセットし（ステップＳ３１５）、弟ノードが存在するか否かを判定する（ステップＳ３１６）。集計処理部２５０ｂは、弟ノードが存在する場合に（ステップＳ３１６，Ｙｅｓ）、次の弟ノードへ遷移し（ステップＳ３１７）、ステップＳ３０７に移行する。
【０１２４】
一方、集計処理部２５０ｂは、弟ノードが存在しない場合に（ステップＳ３１６，Ｎｏ）、親ノードがルートノードであるか否かを判定する（ステップＳ３１８）。集計処理部２５０ｂは、親ノードがルートノードではない場合に（ステップＳ３１８，Ｎｏ）、親ノードへ遷移し（ステップＳ３１９）、ステップＳ３１２に移行する。一方、集計処理部２５０ｂは、親ノードがルートノードの場合に（ステップＳ３１８，Ｙｅｓ）、処理を終了する。
【０１２５】
上述してきたように、本実施例２にかかるデータ処理装置２００は、ノードに対応付けられたタグキーに区切文字が含まれるか否かを利用して、トライ木データ２４０ｂに登録された区切文字を含む文字列を分類する。このため、データ処理装置２００には、従来技術のように、ノードのタグキーに含まれる各文字をトライ木に展開することがない。したがって、本実施例２にかかるデータ処理装置２００は、メモリ使用量を削減しつつ、トライ木データ２４０ｂに登録された区切文字を含む文字列を効率的に分類することができる。
【０１２６】
また、データ処理装置２００は、タグキーに区切文字を含むノードを検出した場合に、検出したノードにより表現される文字列と、該ノードの子ノードにより表現される文字列とを異なる組に分ける。このため、データ処理装置２００は、トライ木データ２４０ｂの区切文字毎に、正確に文字列を分類することができる。
【０１２７】
また、データ処理装置２００は、タグキーに区切文字を含むノードを検出した場合に、検出したノードにより表現される文字列のうち、各区切文字よりも前に存在する文字列をそれぞれ特定する。そして、データ処理装置２００は、特定した各区切文字を異なる組に分けることで、トライ木データ２４０ｂに含まれる各文字列を分類する。このため、データ処理装置２００は、トライ木データ２４０ｂに登録された文字列が複数の階層の区切文字を含む場合でも、区切文字毎に、正確に文字列を分類することができる。
【０１２８】
また、データ処理装置２００は、トライ木データ２４０ｂに登録された文字列を区切文字に基づいて分類し、分類した文字列毎の値を集計する。データ処理装置２００は、ノードのタグキーに含まれる各文字をトライ木に展開することが無いので、辿るべきノードの数が少なくなり、その結果、各文字列に対応する集計値を効率よく算出することができる。
【０１２９】
なお、上記の実施例では一例として、子ノードの文字列と一致する文字数を含むタグキーを親ノードに登録していた。しかし、本願発明は、これに限定されるものではない。例えば、親ノードの文字列と一致する文字数を含むタグキーを子ノードに登録しても、同様に処理することが可能である。
【０１３０】
ところで、図２に示した入出力制御部２３０、制御部２５０は、例えば、ＡＳＩＣ（Application  Specific  Integrated  Circuit）や、ＦＰＧＡ（Field  Programmable  Gate  Array）などの集積装置に対応する。または、入出力制御部２３０、制御部２５０は、ＣＰＵ（Central  Processing  Unit）やＭＰＵ（Micro  Processing  Unit）等の電子回路に対応する。また、図２に示した記憶部２４０は、例えば、ＲＡＭ（Random  Access  Memory）、ＲＯＭ（Read  Only  Memory）、フラッシュメモリ（Flash  Memory）などの半導体メモリ素子、またはハードディスク、光ディスクなどの記憶装置に対応する。
【０１３１】
ところで、図２に示したデータ処理装置２００の各構成要素は、機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、データ処理装置２００の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。例えば、トライ木生成部２５０ａの機能を拡張カードなどの外部装置に搭載し、拡張カードを該当するサーバに接続してもよい。
【０１３２】
なお、データ処理装置２００は、既知のパーソナルコンピュータ、ワークステーション、携帯電話、ＰＨＳ端末、移動体通信端末またはＰＤＡなどの情報処理装置に、データ処理装置２００の各機能を搭載することによって実現することもできる。
【０１３３】
図２７は、本実施例にかかるデータ処理装置を構成するコンピュータのハードウェア構成を示す図である。図２７に示すように、このコンピュータ３００は、各種演算処理を実行するＣＰＵ（Central  Processing  Unit）３１０と、ユーザからのデータの入力を受け付ける入力装置３２０と、モニタ３３０を有する。また、コンピュータ３００は、記憶媒体からプログラム等を読取る媒体読み取り装置３４０と、ネットワークを介して他のコンピュータとの間でデータの授受を行うネットワークインターフェース装置３５０を有する。また、コンピュータ３００は、各種情報を一時記憶するＲＡＭ（Random  Access  Memory）３６０と、ハードディスク装置３７０を有する。各装置３１０〜３７０は、バス３８０に接続される。
【０１３４】
そして、ハードディスク装置３７０には、図２に示したトライ木生成部２５０ａと同様の機能を有するトライ木生成プログラム３７０ａを記憶する。また、ハードディスク装置３７０は、図２に示した集計処理部２５０ｂと同様の機能を有する集計処理プログラム３７０ｂを記憶する。
【０１３５】
ＣＰＵ３１０がトライ木生成プログラム３７０ａをハードディスク装置３７０から読み出してＲＡＭ３６０に展開することで、トライ木生成プログラム３７０ａは、トライ木生成プロセス３６０ａとして機能する。また、ＣＰＵ３１０が集計処理プログラム３７０ｂをハードディスク装置３７０から読み出してＲＡＭ３６０に展開することで、集計処理プログラム３７０ｂは、集計処理プロセス３６０ｂとして機能する。そして、トライ木生成プロセス３６０ａは、トライ木データを生成する。集計処理プロセス３６０ｂは、トライ木データの文字列を区切文字に基づいて分類し、分類した文字列毎に集計値を算出する。
【０１３６】
なお、上記トライ木生成プログラム３７０ａおよび集計処理プログラム３７０ｂは、必ずしもハードディスク装置３７０に格納されている必要はない。例えば、ＣＤ−ＲＯＭ等の記憶媒体に記憶されたプログラムを、コンピュータ３００が読み出して実行するようにしてもよい。また、公衆回線、インターネット、ＬＡＮ（Local  Area  Network）、ＷＡＮ（Wide  Area  Network）等にこのプログラムを記憶させておき、コンピュータ３００がこれらからプログラムを読み出して実行するようにしてもよい。
【０１３７】
以上の各実施例を含む実施形態に関し、さらに以下の付記を開示する。
【０１３８】
（付記１）コンピュータに、
区切文字または所定の文字に対応する複数のノードが木構造にて接続され、単一のノードに対して区切文字を含む単一の文字列または区切文字を含まない単一の文字列を含むタグキーと、所定のノードにより表現される文字列と該所定のノードの子ノード又は親ノードにより表現される文字列との間で一致する文字の数を示す一致数とが対応付けられ、根ノードから所定のノードに至るまでに辿るノードに対応する各文字と、前記所定のノードに登録されたタグキーの文字列と、前記一致数に対応する文字列とを組合せることで当該ノードの文字列を表現するトライ木データを記憶装置から取得するトライ木取得手順と、
前記トライ木データに含まれる各ノードのうち、タグキーに区切文字を含まないノードを検出し、検出したノードにより表現される文字列と該ノードの子ノード又は親ノードにより表現される文字列とを同一の組にまとめることで、前記トライ木データに含まれる各文字列を分類する分類手順と
を実行させることを特徴とするトライ木分類プログラム。
【０１３９】
（付記２）前記分類手順は、前記タグキーに区切文字を含むノードを検出した場合に、検出したノードにより表現される文字列と、前記ノードの子ノード又は親ノードにより表現される文字列とを異なる組に分けることで、前記トライ木データに含まれる各文字列を分類することを特徴とする付記１に記載のトライ木分類プログラム。
【０１４０】
（付記３）前記分類手順は、前記タグキーに複数の区切文字を含むノードを検出した場合に、検出したノードにより表現される文字列のうち、各区切文字よりも前に存在する文字列をそれぞれ特定し、特定した各文字列を異なる組に分けることで、前記トライ木データに含まれる各文字列を分類することを特徴とする付記２に記載のトライ木分類プログラム。
【０１４１】
（付記４）前記トライ木データに含まれる複数のノードは所定の数値を保持し、前記分類手順によって分類された文字列の組毎にノードが保持する値を集計する集計手順を更にコンピュータに実行させることを特徴とする付記１、２または３に記載のトライ木分類プログラム。
【０１４２】
（付記５）トライ木分類装置が、
区切文字または所定の文字に対応する複数のノードが木構造にて接続され、単一のノードに対して区切文字を含む単一の文字列または区切文字を含まない単一の文字列を含むタグキーと、所定のノードにより表現される文字列と該所定のノードの子ノード又は親ノードにより表現される文字列との間で一致する文字の数を示す一致数とが対応付けられ、根ノードから所定のノードに至るまでに辿るノードに対応する各文字と、前記所定のノードに登録されたタグキーの文字列と、前記一致数に対応する文字列とを組合せることで当該ノードの文字列を表現するトライ木データを記憶装置から取得するトライ木取得ステップと、
前記トライ木データに含まれる各ノードのうち、タグキーに区切文字を含まないノードを検出し、検出したノードにより表現される文字列と該ノードの子ノード又は親ノードにより表現される文字列とを同一の組にまとめることで、前記トライ木データに含まれる各文字列を分類する分類ステップと
を含んだことを特徴とするトライ木分類方法。
【０１４３】
（付記６）前記分類ステップは、前記タグキーに区切文字を含むノードを検出した場合に、検出したノードにより表現される文字列と、前記ノードの子ノード又は親ノードにより表現される文字列とを異なる組に分けることで、前記トライ木データに含まれる各文字列を分類することを特徴とする付記５に記載のトライ木分類方法。
【０１４４】
（付記７）前記分類ステップは、前記タグキーに複数の区切文字を含むノードを検出した場合に、検出したノードにより表現される文字列のうち、各区切文字よりも前に存在する文字列をそれぞれ特定し、特定した各文字列を異なる組に分けることで、前記トライ木データに含まれる各文字列を分類することを特徴とする付記６に記載のトライ木分類方法。
【０１４５】
（付記８）前記トライ木データに含まれる複数のノードは所定の数値を保持し、前記分類ステップによって分類された文字列の組毎にノードが保持する値を集計する集計ステップを更に含むことを特徴とする付記５、６または７に記載のトライ木分類方法。
【０１４６】
（付記９）区切文字または所定の文字に対応する複数のノードが木構造にて接続され、単一のノードに対して区切文字を含む単一の文字列または区切文字を含まない単一の文字列を含むタグキーと、所定のノードにより表現される文字列と該所定のノードの子ノード又は親ノードにより表現される文字列との間で一致する文字の数を示す一致数とが対応付けられ、根ノードから所定のノードに至るまでに辿るノードに対応する各文字と、前記所定のノードに登録されたタグキーの文字列と、前記一致数に対応する文字列とを組合せることで当該ノードの文字列を表現するトライ木データを記憶するトライ木記憶部と、
前記トライ木記憶部に記憶された前記トライ木データに含まれる各ノードのうち、タグキーに区切文字を含まないノードを検出し、検出したノードにより表現される文字列と該ノードの子ノード又は親ノードにより表現される文字列とを同一の組にまとめることで、前記トライ木データに含まれる各文字列を分類する分類部と
を有することを特徴とするトライ木分類装置。
【０１４７】
（付記１０）前記分類部は、前記タグキーに区切文字を含むノードを検出した場合に、検出したノードにより表現される文字列と、前記ノードの子ノード又は親ノードにより表現される文字列とを異なる組に分けることで、前記トライ木データに含まれる各文字列を分類することを特徴とする付記９に記載のトライ木分類装置。
【符号の説明】
【０１４８】
１００    トライ木分類装置
１１０    記憶部
１１０ａ  トライ木データ
１２０    分類部
【図１】
0005387371.tif 000002
【図２】
0005387371.tif 000003
【図３】
0005387371.tif 000004
【図４】
0005387371.tif 000005
【図５】
0005387371.tif 000006
【図６】
0005387371.tif 000007
【図７】
0005387371.tif 000008
【図８】
0005387371.tif 000009
【図９】
0005387371.tif 000010
【図１０】
0005387371.tif 000011
【図１１】
0005387371.tif 000012
【図１２】
0005387371.tif 000013
【図１３】
0005387371.tif 000014
【図１４】
0005387371.tif 000015
【図１５】
0005387371.tif 000016
【図１６】
0005387371.tif 000017
【図１７】
0005387371.tif 000018
【図１８】
0005387371.tif 000019
【図１９】
0005387371.tif 000020
【図２０】
0005387371.tif 000021
【図２１】
0005387371.tif 000022
【図２２】
0005387371.tif 000023
【図２３】
0005387371.tif 000024
【図２４】
0005387371.tif 000025
【図２５】
0005387371.tif 000026
【図２６】
0005387371.tif 000027
【図２７】
0005387371.tif 000028
【図２８】
0005387371.tif 000029