JP5387371B2 - トライ木分類プログラムおよびトライ木分類方法 - Google Patents

トライ木分類プログラムおよびトライ木分類方法 Download PDF

Info

Publication number
JP5387371B2
JP5387371B2 JP2009272826A JP2009272826A JP5387371B2 JP 5387371 B2 JP5387371 B2 JP 5387371B2 JP 2009272826 A JP2009272826 A JP 2009272826A JP 2009272826 A JP2009272826 A JP 2009272826A JP 5387371 B2 JP5387371 B2 JP 5387371B2
Authority
JP
Japan
Prior art keywords
node
character string
trie tree
character
key
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2009272826A
Other languages
English (en)
Other versions
JP2011118478A (ja
Inventor
真一郎 多湖
達哉 浅井
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2009272826A priority Critical patent/JP5387371B2/ja
Publication of JP2011118478A publication Critical patent/JP2011118478A/ja
Application granted granted Critical
Publication of JP5387371B2 publication Critical patent/JP5387371B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Description

本発明は、トライ木分類プログラムおよびトライ木分類方法等に関する。
従来、検索装置は、入力キーに対応する文書や値等を高速に検索するべく、トライ木を用いる。このトライ木は、複数のノードと各ノードの根となるルートノードとを含み、各ノードは木構造を成す。また、各ノードには1文字ずつキーが割当てられ、例えば、所定の文字列に含まれる各キーのうち、最後のキーに対応するノードには、所定の値が割当てられる。
図28は、従来のトライ木の一例を示す図である。図28に示すトライ木は、ルートノード1の配下にノード2〜20が接続されている。そして、ノード2〜20には、それぞれキー「b、l、a、c、k、u、e、g、r、e、y、e、n、y、e、l、l、o、w」が割当てられる。ここで、ルートノード1からノード2〜6の順にキーを辿ると、文字列「black」となり、ルートノード1からノード2,3,7,8の順にキーを辿ると、文字列「blue」となる。また、ルートノード1からノード9〜12の順にキーを辿ると、文字列「grey」となり、ルートノード1からノード9〜11、13,14の順にキーを辿ると、文字列「green」となる。また、ルートノード1からノード9〜11、13〜20の順にキーを辿ると、文字列「greenyellow」となる。
そして、文字列「black」の最後のキー「k」に対応するノード6に値「1,3」が割当てられ、文字列「blue」の最後のキー「e」に対応するノード8に値「4」が割当てられ、文字列「grey」の最後のキー「y」に対応するノード12に値「5,2」が割当てられる。また、文字列「green」の最後のキー「n」に対応するノード14に値「3」が割当てられ、文字列「greenyellow」の最後のキー「w」に対応するノード20に値「1」が割当てられる。図28に示すトライ木のように、各キー及び各値が各ノードに割当てられることで、文字列「black」に値「1,3」、文字列「blue」に値「4」が割当てられたことを意味する。同様に、文字列「grey」に値「5,2」、文字列「green」に値「3」、文字列「greenyellow」に値「1」が割当てられたことを意味する。
検索装置が入力キーを指定された場合には、入力キーを先頭から1文字ずつ取り出し、取り出したキーと同じキーのノードを辿ることで、入力キーに対応する値を検索する。例えば、検索装置が入力キー「blue」を指定された場合には、入力キーに含まれる各キー「b、l、u、e」に対応するノードは、ノード2,3,7,8となる。このため、検索装置は、トライ木のノードをノード2,3,7,8の順に辿ることで、文字列「blue」に割当てられた値「4」を検索し、検索結果「4」を出力する。
特開平9−245045号公報
しかしながら、上記従来技術では、トライ木を構築する文字列が長い場合には、ノードの数が増えてしまう。このため、従来技術では、辿るべきノードの数が増加し、文字列の検索に要する時間が増加するため、トライ木に登録された各文字列を効率的に分類することができないという問題があった。また、ノードの数の増加に伴って、メモリ使用量が増加してしまうという問題も発生する。
開示の技術は、上記に鑑みてなされたものであって、メモリ使用量を削減しつつ、文字列を効率よく分類することができるトライ木分類プログラムおよびトライ木分類方法を提供することを目的とする。
本願の開示するトライ木分類プログラムは、記憶装置からトライ木データを取得する。このトライ木データは、区切文字または所定の文字に対応する複数のノードが木構造にて接続されたデータである。トライ木データの各ノードは、単一のノードに対して区切文字を含む単一の文字列または区切文字を含まない単一の文字列を含むタグキーに対応付けられる。また、トライ木データの各ノードは、所定のノードにより表現される文字列と該所定のノードの子ノード又は親ノードにより表現される文字列との間で一致する文字の数を示す一致数に対応付けられる。トライ木データの各ノードは、根ノードから所定のノードに至るまでに辿るノードに対応する各文字と、所定のノードに登録されたタグキーの文字列と、一致数に対応する文字列とを組合せることでノードの文字列を表現する。トライ木分類プログラムは、トライ木データに含まれる各ノードのうち、タグキーに区切文字を含まないノードを検出する。そして、トライ木分類プログラムは、検出したノードにより表現される文字列と該ノードの子ノード又は親ノードにより表現される文字列とを同一の組にまとめることで、トライ木データに含まれる各文字列を分類する。
本願の開示するトライ木分類プログラムによれば、メモリ使用量を削減しつつ、文字列を効率よく分類することができるという効果を奏する。
図1は、本実施例1にかかるトライ木分類装置の構成を示す図である。 図2は、トライ木内の各ノードの名称を説明するための図である。 図3は、本実施例2にかかるデータ処理装置の構成を示す図である。 図4は、入力キー管理テーブルのデータ構造の一例を示す図である。 図5は、トライ木データのデータ構造の一例を示す図である。 図6は、トライ木データに含まれるノードのデータ構造の一例を示す図である。 図7は、出力結果データのデータ構造の一例を示す図である。 図8は、本実施例2にかかるトライ木データを生成する処理を説明するための図(1)である。 図9は、本実施例2にかかるトライ木データを生成する処理を説明するための図(2)である。 図10は、本実施例2にかかるトライ木データを生成する処理を説明するための図(3)である。 図11は、本実施例2にかかるトライ木データを生成する処理を説明するための図(4)である。 図12は、本実施例2にかかるトライ木データを生成する処理を説明するための図(5)である。 図13は、本実施例2にかかるトライ木データを生成する処理を説明するための図(6)である。 図14は、本実施例2にかかるトライ木データを生成する処理を説明するための図(7)である。 図15は、集計処理部が区切文字に基づいて文字列を分類する処理の概要を説明するための図である。 図16は、集計処理部の処理を具体的に説明するための図(1)である。 図17は、集計処理部の処理を具体的に説明するための図(2)である。 図18は、集計処理部の処理を具体的に説明するための図(3)である。 図19は、集計処理部の処理を具体的に説明するための図(4)である。 図20は、集計処理部の処理を具体的に説明するための図(5)である。 図21は、集計処理部の処理を具体的に説明するための図(6)である。 図22は、トライ木生成処理部の処理手順を示すフローチャートである。 図23は、データ追加処理の処理手順を示すフローチャート(1)である。 図24は、データ追加処理の処理手順を示すフローチャート(2)である。 図25は、データ追加処理の処理手順を示すフローチャート(3)である。 図26は、集計処理部の処理手順を示すフローチャートである。 図27は、本実施例にかかるデータ処理装置を構成するコンピュータのハードウェア構成を示す図である。 図28は、従来のトライ木の一例を示す図である。
以下に、本願の開示するトライ木分類プログラムおよびトライ木分類方法の実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
本実施例1にかかるトライ木分類装置の構成について説明する。図1は、本実施例1にかかるトライ木分類装置の構成を示す図である。図1に示すように、このトライ木分類装置100は、記憶部110と、分類部120とを有する。
このうち、記憶部110は、トライ木データ110aを記憶する記憶部である。トライ木データ110aは、区切文字または所定の文字に対応する複数のノードが木構造にて接続されたデータである。そして、トライ木データ110aの各ノードは、単一のノードに対して区切文字を含む単一の文字列または区切文字を含まない単一の文字列を含むタグキーに対応付けられる。また、トライ木データ110aの各ノードは、所定のノードにより表現される文字列と該所定のノードの子ノードにより表現される文字列との間で一致する文字の数を示す一致数に対応付けられる。そして、トライ木データ110aの各ノードは、根ノードから所定のノードに至るまでに辿るノードに対応する各文字と、前記所定のノードに登録されたタグキーの文字列と、一致数に対応する文字列とを組合せることで当該ノードの文字列を表現する。
分類部120は、トライ木データ110aに含まれる各ノードのうち、タグキーに区切文字を含まないノードを検出する。そして、分類部120は、検出したノードにより表現される文字列と該ノードの子ノードにより表現される文字列とを同一の組にまとめることで、トライ木データに含まれる各文字列を分類する。
従来のトライ木データは、各ノードに対応する文字が1文字であった。このため、従来のトライ木データに含まれる文字列を分類する場合には、ノードに対応する文字が区切文字であるか否かを利用して文字列の分類を行っていた。ここで、メモリ使用量を削減すべく、単一のノードに単一の文字列を割当てると、トライ木データは、ノードに所定の文字列の一部を対応付け、残りの部分をタグキーや一致数としてノードに対応付けることになる。この場合、従来技術では、タグキーに含まれる文字列や一致数に対応する文字列を、間接的にしか参照することができない。このため、単一のノードに単一の文字列を割当てたトライ木データの文字列を分類する場合には、各ノードに含まれるタグキーの文字列や一致数に対応する文字列をそれぞれ新たなノードに割当てることで、トライ木上に展開する必要があった。このように、タグキー・一致数に対応する文字列のノードをトライ木上に展開すると、せっかく削減したメモリ使用量が元の状態に戻るだけではなく、ノード数の増加により文字列を検索する時間が増加してしまう。したがって、従来技術では、トライ木データに含まれる文字列を効率的に分類することができなかった。
ここで、本実施例1にかかるトライ木分類装置100は、分類部120が、トライ木データ110aのノードのタグキーに区切文字が含まれるか否かを利用して、トライ木に登録された区切文字を含む文字列を分類する。このため、本実施例1にかかるトライ木分類装置100は、ノードのタグキーに含まれる各文字をトライ木に展開することなく、文字列を分類できるので、メモリ使用量を削減しつつ、効率的に文字列を分類することができる。
本実施例2にかかるデータ処理装置の説明を行う前に、トライ木について説明する。トライ木に含まれる各ノードは、トライ木内の位置や他のノードとの関係から各種の名称で定義される。図2は、一例として、図2に示すトライ木は、ノード1〜13を有しているものとする。また、ここでは説明の便宜上、ノード6を基準ノードとする。ノード1〜5,7〜13は、トライ木内の位置や基準ノードとの関係から、ルートノードまたは親ノード、先祖ノード、兄ノード、弟ノード、子ノード、子孫ノードと呼ばれる。
ルートノードは、トライ木を構成する各ノード1〜13のうち、最上層に位置するノードを示す。図2に示す例では、ノード1がルートノードに該当する。親ノードは、基準ノードのひとつ上の層に存在し、基準ノードに接続されたノードを示す。図2に示す例では、ノード3が親ノードに該当する。先祖ノードは、ルートノードから親ノードに至るまでのノードを示す。図2に示す例では、ノード1〜3が先祖ノードに該当する。
兄ノードは、基準ノードと同じ層に存在し、基準ノードと同じ親ノードに接続され、基準ノードの上側に存在するノードを示す。図2に示す例では、ノード4、5が兄ノードに該当する。また、ノード4,5のうち、ノード4は長男ノードと呼ばれる。弟ノードは、基準ノードと同じ層に存在し、基準ノードと同じ親に接続され、基準ノードの下側に存在するノードを示す。図2に示す例では、ノード7,8が弟ノードに該当する。
子ノードは、基準ノードのひとつ下の層に存在し、基準ノードに接続されたノードを示す。図2に示す例では、ノード9,10が子ノードに該当する。子孫ノードは、基準ノードの配下に存在するノードを示す。図2に示す例では、ノード9〜13が子孫ノードに該当する。
次に、本実施例2にかかるデータ処理装置の構成の一例について説明する。図3は、本実施例2にかかるデータ処理装置の構成を示す図である。図3に示すように、このデータ処理装置200は、入力部210、出力部220、入出力制御部230、記憶部240、制御部250を有する。
このうち、入力部210は、トライ木データに登録する入力キー等のデータを入力する入力装置である。例えば、入力部210は、キーボードやマウス等に該当する。出力部220は、トライ木データを用いた処理の結果などを出力する出力装置である。出力部220は、ディスプレイやモニタ、タッチパネルなどに対応する。入出力制御部230は、入力部210および出力部220、記憶部240、制御部250によるデータの入出力を制御する処理部である。
記憶部240は、制御部250による各種処理に必要なデータおよびプログラムを記憶する記憶部である。図3に示すように、この記憶部240は、入力キー管理テーブル240aおよびトライ木データ240b、出力結果データ240cを記憶する。
このうち、入力キー管理テーブル240aは、トライ木データ240bに登録する複数の文字列と文字列に対応する値とを対応付けて記憶するテーブルである。トライ木データ240bは、複数のノードが木構造状に接続されたデータである。このトライ木データ240bに含まれるノードは、区切文字を含む所定の文字列に対応付けられる。また、このトライ木データ240bのノードは、所定の値が設定される。出力結果データ240cは、トライ木データ240bの各ノードに設定された値を、所定の文字列毎に集計した値を含むデータである。
制御部250は、トライ木データ240bを生成する処理および出力結果データ240cを生成する処理を実行する処理部である。図3に示すように、この制御部250は、トライ木生成部250aおよび集計処理部250bを有する。
このうち、トライ木生成部250aは、入力キー管理テーブル240aに含まれる文字列と値とを利用して、トライ木データ240bを生成する処理部である。集計処理部250bは、トライ木データ240bに含まれる文字列を区切文字に基いて分類し、分類した文字列毎に値を集計することで、出力結果データ240cを生成する処理部である。トライ木生成部250aおよび集計処理部250bの具体的な処理の説明は後述する。
次に、図3の記憶部240に記憶された入力キー管理テーブル240a、トライ木データ240b、出力結果データ240cのデータ構造の一例について順に説明する。図4は、入力キー管理テーブルのデータ構造の一例を示す図である。図4に示すように、この入力キー管理テーブル240aは、入力キーと値とを対応付けて記憶する。例えば、入力キー管理テーブル240aの1段目では、入力キー「Mie/Tsu/1chome」と、値「20」とが対応付けられている。また、各入力キーに含まれる「/」は、区切文字である。例えば、入力キー「Mie/Tsu/1chome」は第一、二階層の区切文字が含まれている。このため、入力キー「Mie/Tsu/1chome」は区切文字により、「Mie」、「Mie/Tsu」、「Mie/Tsu/1chome」に区切られる。
ここで、文字列に含まれる区切文字の内、先頭側から順に数えてN番目の区切文字を、第N階層の区切文字と定義する。Nは自然数である。例えば、文字列「Mie/Tsu/1chome」において、文字列「Mie」と「Tsu」に挟まれる区切文字「/」は、先頭側から順に数えて1番目の区切文字となるため、かかる区切文字は、第一階層の区切文字となる。
図5は、トライ木データのデータ構造の一例を示す図である。図5に示すトライ木データ240bは、図4に示した入力キー管理テーブル240aに基づいて、トライ木生成部250aが生成するデータである。このトライ木データ240bは、ノード1〜9を有する。各ノードは、所定の文字に対応付けられると共に、一致数およびタグキー、値が登録されている。ここで、タグキーは、ノードに割当てられた文字列のうち、一部の文字列を示す。
一致数は、基準ノードに割り当てられた文字列の内、子ノードに割当てられた文字列と一致する文字数から、基準ノードの階層数を除いた数となる。ここで、基準ノードの階層数とは、ルートノードから基準ノードに至るまでのノードの数に対応する。
例えば、基準ノードをノード2とし、ノード2の一致数について説明する。ノード2に割当てられた文字列を「Mie/Inabe/4chome」とし、子ノードに対応するノード3に割当てられた文字列が「Mie/Tsu/1chome」とする。この場合、ノード2の文字列とノード3の文字列は先頭の「Mie/」が一致しているため、一致する文字数は「4」となる。そして、ノード2の階層数が1であるため、一致する文字数「4」から「1」を減算した値「3」がノード2の一致数となる。
トライ木データ240bに含まれるノード2〜9は、自身に対応付けられた文字と、自身に登録された一致数・タグキーとで、自身に割当てられた文字列を表現する。具体的に、ノードに割当てられた文字列は、自身に割り当てられた文字と、一致数により特定される文字列と、タグキーとを組合せた文字列となる。
ここで、一致数により特定される文字列とは、子ノードに割当てられた文字列のうち、先頭文字から基準ノードの階層の数分進めた文字から一致数分の文字までの間の文字列となる。例えば、基準ノード2の階層を「1」、一致数を「3」とし、子ノードに割当てられた文字列を「Mie/Tsu/1chome」となる場合の、一致数により特定される文字列を説明する。子ノードに割当てられた文字列のうち、先頭文字「M」から階層の数「1」分進めた文字は「i」となる。そして、かかる文字「i」を含む一致数分「3」の文字「/」までの文字列は「ie/」となる。このため、基準ノード2の一致数「3」により特定される文字列は「ie/」となる。
具体的に、ノード2に割当てられた文字列について説明する。ノード2に対応付けられた文字は「M」である。ノード2の一致数「3」により特定される文字列は「ie/」である。ノード2のタグキーは、「Inabe/4chome」である。このため、ノード2に割当てられた文字列は、「M」と、「ie/」と、「Inabe/4chome」とを組合せた文字列「Mie/Inabe/4chome」となる。
次に、トライ木データ240bに含まれるノード1〜9のより詳細なデータ構造の一例について説明する。図6は、トライ木データに含まれるノードのデータ構造の一例を示す図である。図6に示すノード構造体21〜29は、図5に示したノード1〜9に対応する。ノード構造体21〜29は、「ノード識別情報」、「キー、遷移先」、「一致数」、「タグキー」、「値」を有する。
このうち、「ノード識別情報」は、ノード構造体を一意に識別するデータである。ノード構造体21〜29のノード識別情報は、「node1〜node9」となる。「キー、遷移先」は、遷移先のノード構造体に対応付けられた文字と、遷移先のノード構造体のノード識別情報とを対応付けたデータである。例えば、ノード構造体21はノード1に対応し、ノード1は文字「M」が対応付けられたノード2に接続されている。そして、ノード2はノード識別情報「node2」のノード構造体22に対応する。このため、ノード構造体21の「キー、遷移先」は、「M、node2」となる。
「タグキー」、「一致数」、「値」は、上記のタグキー、一致数、値の説明と同様である。ただし、タグキーに対応する文字列は、ノードに割当てられた文字列の内、所定の文字を指すポインタを用いることで表現される。例えば、ノード構造体22に割当てられた文字列が「Mie/Inabe/4chome」であり、タグキーが「Inabe/4chome」の場合について説明する。この場合、ノード構造体22のタグキーには、テキストデータ「Mie/Inabe/4chome」に含まれる文字列のうち、「I」を指すポインタが格納され、ポインタに指された文字以降の文字列がタグキーに対応する文字列となる。
図7は、出力結果データのデータ構造の一例を示す図である。この出力結果データ240cは、区切文字により分類された所定の文字列と、この所定の文字列に対応する値の集計値とを対応付ける。
例えば、文字列「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」の各値を集計したものとなる。
次に、トライ木生成部250aがトライ木データ240bを生成する処理について具体的に説明する。なお、トライ木生成部250aがトライ木データ240bを生成する場合に、各文字列の優先度を判定し、優先度が小さい文字列ほどルートノードに近いノードに割当てる。
トライ木生成部250aは、優先度を判定する場合に、異なる文字が検出されるまで比較対象となる各文字列の文字を先頭から順に抽出する。そして、トライ木生成部250aは、抽出した文字において、アルファベット順で、aに近い文字ほど優先度が小さいと判定し、zに近い文字ほど優先度が大きいと判定する。すなわち、優先度は、「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」との優先度の大小関係について説明する。トライ木生成部250aが、「black」と「blue」とを比較すると、3文字目で異なる文字を抽出する。具体的には、トライ木生成部250aが「black」から「a」を抽出し、「blue」から「u」を抽出する。「a」は「u」よりも優先度が小さいので、トライ木生成部250aは、「black」を「blue」よりもルートノード側のノードに割当てる。
続いて、文字列「green」と「greenyellow」との優先度の大小関係について説明する。トライ木生成部250aが、「green」と「greenyellow」とを比較すると、6文字目で異なる文字が抽出する。具体的には、トライ木生成部250aが「green」から「空」を抽出し、「greenyellow」から「y」を抽出する。このような場合、トライ木生成部250aは、「空」が抽出されなかったキー「greenyellow」の方が「green」よりも優先度が大きいと判定する。したがって、トライ木生成部250aは、優先度の小さい「green」を「greenyellow」よりもルートノード側のノードに割り当てる。
トライ木生成部250aは、トライ木データ240bに含まれるノードを、入力キーの先頭からの文字に応じて順に辿り、優先度の低い文字列ほど、ルートノード側のノードに登録されるように、トライ木データ240bを生成する。以下において、トライ木生成部250aが、トライ木データ240bを生成する具体的な処理手順について説明する。
図8〜図14は、本実施例2にかかるトライ木データを生成する処理を説明するための図である。ここでは説明の便宜上、入力キー管理テーブル240aに、下記に示す入力キーと値とが組み合わされたデータが登録されているものとする。具体的に、入力キー「http://aaa.aaa/e/」、値「1」と、入力キー「http://aaa.aaa/e/c/」、値「2」と、入力キー「http://aaa.aaa/d/」、値「3」と、入力キー「http://aaa.aaa/e/」、値「4」とが登録されているものとする。トライ木生成部250aは、入力キー管理テーブル240aに登録された入力キーと値との組を順に取り出して、トライ木データ240bを生成する。
まず、トライ木生成部250aが、トライ木データ240bにノードが存在しない状態で、入力キー「http://aaa.aaa/e/」、値「1」をトライ木データ240bに追加する場合について説明する。なお、世代数の初期値を0とする。この世代数は、入力キーが何文字目までタグキーと同じであるかを示す数値である。
図8に示すように、トライ木生成部250aは、ルートノード1を生成し(ステップS10)、入力キー「http://aaa.aaa/e/」を用意する(ステップS11)。トライ木生成部250aは、入力キー「http://aaa.aaa/e/」の先頭文字「h」をキーとする子ノードが存在しないので、ルートノード1のタグキーと入力キーの優先度とを比較する。ここで、トライ木生成部250aは、比較対象となるタグキーがルートノードに存在しないので、タグキーを「空」とし、入力キーの優先度とタグキーの優先度とを比較する。タグキーは「空」なので、トライ木生成部250aは、ルートノードのタグキーの優先度よりも、入力キー「http://aaa.aaa/e/」の優先度が大きいと判定する。
このため、トライ木生成部250aは、ルートノードの配下に「h」に対応するノード2を生成し、入力キー「http://aaa.aaa/e/」からトライ部分「h」を取り除いた残りの文字列をタグキーとして、ノード2に登録する。また、トライ木生成部250aは、ノード2の配下にノードが存在しないので一致数「0」をノード2に登録すると共に、入力キー「http://aaa.aaa/e/」に対応する値「1」をノード2に登録する(ステップS12)。ここで、トライ部分とは、ルートノードから該当ノードに至るまでに通過する各ノードに対応する文字を順に並べた文字列となる。例えば、ノード2のトライ部分は、「h」となる。
続いて、図9に移行し、トライ木生成部250aが、ステップS12で生成したトライ木データに、入力キー「http://aaa.aaa/e/c/」、値「2」を追加する場合について説明する。トライ木生成部250aは、入力キー「http://aaa.aaa/e/c/」の先頭文字「h」でルートノード1〜ノード2に遷移する。そして、トライ木生成部250aは、入力キー「http://aaa.aaa/e/c/」のポインタを1つ進め、2文字目の「t」に設定する(ステップS13)。
トライ木生成部250aは、ノード2において、ポインタの指す「t」に対応する子ノードが存在しないので、ノード2のタグキー「http://aaa.aaa/e/」の優先度と、トライ部分の「h」を取り除いた入力キー「ttp://aaa.aaa/e/c/」の優先度とを比較する。トライ木生成部250aは、ノード2の一致数が「0」であるため、入力キーの先頭から順に比較を行う。
すると、入力キーの17文字目が「c」であり、タグキーの17文字目が「空」であるため、トライ木生成部250aは、入力キーの優先度が、タグキーの優先度よりも大きいと判定する。また、トライ木生成部250aは、入力キーとタグキーとを比較し、16文字「ttp://aaa.aaa/e/」が一致していると判定する(ステップS14)。
続いて、図10の説明に移行する。トライ木生成部250aは、ノード2に一致数「16」を登録し、ノード2のタグキー「ttp://aaa.aaa/e/」のポインタを16文字進める。その結果、ノード2に接続されるタグキーは「空」となる。また、トライ木生成部250aは、入力キー「http://aaa.aaa/e/c/」の2文字目の「t」に対応するノード3を生成する(ステップS15)。
トライ木生成部250aは、入力キーのポインタを3文字目の「t」に進める。トライ木生成部250aは、現在のノードをノード3に遷移し、入力キー「http://aaa.aaa/e/c/」からトライ部分の「ht」を取り除いた残りの文字列「tp://aaa.aaa/e/c/」を、ノード3のタグキーとして登録する。トライ木生成部250aは、入力キー「http://aaa.aaa/e/c/」に対応する値「2」をノード3に登録する。また、トライ木生成部250aは、ノード3の配下にノードが存在しないので、ノード3に一致数「0」を登録する(ステップS16)。
続いて、図11に移行し、トライ木生成部250aが、ステップS16で生成したトライ木データに、入力キー「http://aaa.aaa/d/」、値「3」を追加する場合について説明する。トライ木生成部250aは、入力キー「http://aaa.aaa/d/」を先頭文字から1文字ずつ読み出して、入力キーの1,2文字目の「h」、「t」に対応するノード2,3の順に遷移する。そして、トライ木生成部250aは、遷移したノードの数に応じて、入力キー「http://aaa.aaa/d/」のポインタを2つ進め、3文字目の「t」にポインタを設定する。
トライ木生成部250aは、ノード3において、「t」に対応する子ノードが存在しないので、ノード3のタグキー「tp://aaa.aaa/e/c」の優先度と、トライ部分の「ht」を取り除いた入力キー「tp://aaa.aaa/d/」の優先度とを比較する。すると、タグキーの14文字目が「e」であり、入力キーの14文字目が「d」であるため、トライ木生成部250aは、タグキーの優先度が入力キーの優先度よりも大きいと判定する(ステップS17)。
トライ木生成部250aは、トライ部分「ht」を取り除いた入力キー「tp://aaa.aaa/d/」とタグキー「tp://aaa.aaa/e/c」とを比較して、一致する文字列の数を求めることで世代数を判定する。「ht」を取り除いた入力キー「tp://aaa.aaa/d/」と「tp://aaa.aaa/e/c」とを比較すると、先頭から13文字「tp://aaa.aaa/」が一致しているので、トライ木生成部250aは、世代数が「13」とする。
トライ木生成部250aは、入力キー「http://aaa.aaa/d/」のポインタを現在の3文字目の「t」から13文字進めて、「d」に設定する。そして、トライ木生成部250aは、ノード3の親ノードとなるノード2に遷移し、世代数に1を加算して、世代数を「14」とする(ステップS18)。ここで、世代数が14となる理由は、親ノードとなるノード2に遷移することで、比較対象となる入力キーの文字が1文字増えるが、かかる増加分の文字は、親ノードに割当てられた文字と一致しているためである。
続いて、図12の説明に移行する。トライ木生成部250aは、ノード2のタグキー「空」の優先度と、入力キー「http://aaa.aaa/d/」の優先度をとを比較する前に、ノード2に登録された一致数と、入力キーの世代数とを比較する。ノード2の一致数は「16」であり、入力キーの世代数は「14」であるため、一致数の方が世代数よりも大きい。
一致数が世代数よりも大きい場合には、トライ木生成部250aは、ノード2のタグキー「空」の優先度と、入力キー「http://aaa.aaa/d/」の優先度を直接比較しなくても、ノード2のタグキーの優先度が入力キーの優先度よりも大きいと判定できる。
例えば、世代数14の入力キーは、先頭文字から13文字目までは、ノード2の子ノードとなるノード3のタグキーと同じであることを示し、14文字目において、入力キーの優先度がノード3の優先度よりも小さい。そして、ノード2の一致数が入力キーの世代数より大きいということは、ノード3のタグキーの優先度が入力キーの優先度よりも大きいという決め手になった文字まで、ノード2のタグキーは少なくとも同じである。したがって、トライ木生成部250aは、ノード2のタグキーの優先度と、入力キー「http://aaa.aaa/d/」の優先度を直接比較しなくても、ノード2のタグキーの優先度の方が大きいと判定できる。
ノード2の親ノードがルートノード1であるため、トライ木生成部250aは、ノード2の「一致数、タグキー、タグキーに対応する値」と、「世代数、入力キー、入力キーに対応する値」とを交換する。具体的に、トライ木生成部250aは、入力キーの世代数「14」を一致数としてノード2に登録し、入力キーの値「3」をノード2に登録する。また、トライ木生成部250aは、入力キー「http://aaa.aaa/d/」のポインタ以降の文字列「d/」をノード2のタグキーに登録する。
そして、トライ木生成部250aは、ノード2に割当てられていた文字列「http://aaa.aaa/e/」、ノード2に登録されていた値「1」、一致数「16」をそれぞれ、現在の入力キー、値、世代数に設定する。また、トライ木生成部250aは、入力キーのポインタを先頭文字から世代数の数「16」分だけ移行した「/」に設定する。トライ木生成部250aは、ノード2の子ノードとなるノード3に移行し、入力キーのポインタを1文字移動した「空」に設定する(ステップS19)。
トライ木生成部250aは、ノード3に遷移した場合に、世代数「16」から1を減算することで、世代数を「15」に設定する。そして、トライ木生成部250aは、ノード3の「一致数、タグキー、タグキーに対応する値」と、「世代数、入力キー、入力キーに対応する値」を交換する。具体的に、トライ木生成部250aは、入力キーの世代数「15」を一致数としてノード3に登録し、入力キーの値「1」をノード3に登録する。また、トライ木生成部250aは、入力キー「http://aaa.aaa/e/」のポインタ移行の文字「空」をノード3のタグキーに登録する。
そして、トライ木生成部250aは、ノード3に割当てられていた文字列「http://aaa.aaa/e/c/」、ノードに登録されていた値「2」、一致数「0」をそれぞれ、現在の入力キー、値、世代数に設定する。また、トライ木生成部250aは、入力キー「http://aaa.aaa/e/c/」のポインタを、先頭から、ルートノード1〜ノード3までの移動数「2」分だけ進めることで、3文字目の「t」に設定する(ステップS20)。
続いて、図13の説明に移行する。トライ木生成部250aは、入力キー「http://aaa.aaa/e/c/」のポインタに指される3文字目の「t」に対応するノードが、ノード3の配下に存在しない。このため、トライ木生成部250aは、ノード3の配下に「t」に対応するノード4を生成する。そして、トライ木生成部250aは、ノード4に遷移し、入力キーのポインタを4文字目の「p」に設定する(ステップS21)。
トライ木生成部250aは、入力キー「http://aaa.aaa/e/c/」からトライ部分「htt」を取り除いた残りの文字列「p://aaa.aaa/e/c/」をタグキーとしてノード4に登録する。また、トライ木生成部250aは、入力キー「http://aaa.aaa/e/c/」の値「2」をノード4に登録する。なお、ノード4の配下にノードが存在しないので、トライ木生成部250aは、ノード4の一致数を「0」に設定する(ステップS22)。
続いて、図14の説明に移行し、トライ木生成部250aが、ステップS22で生成したトライ木データに、入力キー「http://aaa.aaa/e/」、値「4」を追加する場合について説明する。トライ木生成部250aは、入力キー「http://aaa.aaa/e/」の先頭文字から文字「htt」を順次読み出し、各文字に対応するノード2,3,4の順に遷移する。そして、トライ木生成部250aは、入力キー「http://aaa.aaa/e/」のポインタを先頭文字から3文字移動させ、4文字目の「p」にポインタを設定する(ステップS23)。
トライ木生成部250aは、ノード4において、「p」に対応する子ノードが存在しないので、ノード4のタグキー「p://aaa.aaa/e/c/」の優先度と、トライ部分「htt」を取り除いた入力キー「p://aaa.aaa/e/」の優先度とを比較する。トライ木生成部250aは、ノード3の一致数が「0」であるため、入力キーの先頭文字およびタグキーの先頭文字から順に比較を行う。
すると、トライ木生成部250aは、入力キーのトライ部分「htt」を除いた15文字目が「空」であり、タグキーの15文字目が「c」であるため、入力キーの優先度がタグキーの優先度よりも小さいと判定する。また、トライ木生成部250aは、トライ部分「htt」を除いた入力キー「p://aaa.aaa/e/」とタグキー「p://aaa.aaa/e/c/」とを比較して先頭からの一致する文字数を判定する。文字列「p://aaa.aaa/e/」が一致しているので、トライ木生成部250aは、一致する文字数を「14」文字と判定する。このため、トライ木生成部250aは、世代数を14に設定する。
トライ木生成部250aは、入力キー「http://aaa.aaa/e/」のポインタを4文字目の「p」から14文字進め、ポインタを「空」に設定する。また、トライ木生成部250aは、ノード4の親ノードとなるノード3に移行し、世代数「14」に1を加算して世代数を「15」に設定する(ステップS24)。
トライ木生成部250aは、ノード3の一致数と、世代数とを比較すると双方とも「15」で一致し、入力キーの優先度と、タグキーの優先度が等しくなるため、ノード3に入力キーに対応する値「4」を登録する(ステップS25)。なお、ノード3には既に値「1」が登録されている。トライ木生成部250aは、値「1」と「4」とを別々にノード3に登録しても良いし、値「1」と「4」とを加算した値「5」をノード3に登録しても良い。
トライ木生成部250aは、上記ステップS10〜S25の処理を実行することで、入力キー管理テーブル240aに格納された入力キーと値との組から、トライ木データ240bを生成する。
次に、図3に示した集計処理部250bの処理を具体的に説明する。この集計処理部250bは、トライ木データ240bに登録された文字列を区切文字に基づいて、所定の文字列毎に分類する処理を実行し、分類した文字列毎に各ノードに登録された値の集計を行う。まず、集計処理部250bが、区切文字に基づいて、トライ木データ240bに登録された各文字列を所定の文字列に分類する処理の概要について説明する。
集計処理部250bは、ノードのタグキーに区切文字「/」が含まれている場合には、かかるノードに割当てられた文字列と、子ノードに割当てられた文字列とは異なる組に属する文字列であると判定する。これに対して、集計処理部250bは、ノードのタグキーに区切文字「/」が含まれていない場合には、かかるノードに割当てられた文字列と、子ノードに割当てられた文字列とが同一の組に属する文字列であると判定する。
図15は、集計処理部が区切文字に基づいて文字列を分類する処理の概要を説明するための図である。図15に示すように、このトライ木データは、ノード1〜ノード4を含む。図15では、トライ部分、一致数、タグキーを利用して、各ノードに割当てられる文字列を表現している。ここで、ノード2は、文字「福」に対応付けられ、一致数「0」、タグキー「岡県/飯塚市」を登録しているので、ノード2には、文字列「福岡県/飯塚市」が割当てられていることに等しい。ノード3は、文字「島」に対応付けられ、一致数「2」、タグキー「いわき市」を登録しているので、ノード3には、文字列「福島県/いわき市」が割当てられていることに等しい。ノード4は、文字「県」に対応付けられ、一致数「0」、タグキー「/福島市」を登録しているので、ノード4には、文字列「福島県/福島市」が割当てられていることに等しい。
図15において、ノード2のタグキー「岡県/飯塚市」には、区切文字が含まれている。このため、集計処理部250bは、ノード2に割当てられた文字列「福岡県/飯塚市」と、ノード3に割当てられた文字列「福島県/いわき市」とが異なる組の文字列であると判定する。これに対して、ノード3のタグキー「いわき市」には、区切文字が含まれていない。このため、集計処理部250bは、ノード3に割当てられた文字列「福島県/いわき市」と、ノード4に割当てられた文字列「福島県/福島市」とが同じ組の文字列であると判定する。
続いて、集計処理部250bが図5に示したトライ木データ240bから図7に示した出力結果データ240cを生成する処理を具体的に説明する。図16〜図21は、集計処理部の処理を具体的に説明するための図である。なお、集計処理部250bは、処理を実行する段階で、記憶部240の記憶領域に、ノード識別領域、タグキー領域、文字列領域、集計データ領域(a)、(b)、出力領域を設ける。
ここで、ノード識別領域は、トライ木データ240bの各ノードのうち現在のノードを識別する情報を格納する。タグキー領域は、現在のノードに登録されたタグキーの文字列を格納する。文字列領域は、現在のノードに割当てられた文字列を格納する。集計データ領域(a)、(b)は、値の集計値を格納する。出力領域は、文字列の組と文字列の組に対応する集計値とを格納する。
本実施例2では一例として、トライ木データ240bに登録された文字列は、最大区切文字を2つ含み、最大で3階層の文字列からなるものとする。そして、集計処理部250bは、第一階層までの文字列「○○○」に分類される文字列の値を集計するために集計データ領域(a)を利用する。「○」は区切文字以外の文字に対応する。
また、集計処理部250bは、第一階層から第二階層までの文字列「○○○/○○○」の値を集計するために集計データ領域(b)を利用する。なお、図16〜21の下段には、トライ木データ240bのデータ構造を示す。
まず、図16の説明を行う。集計処理部250bは、出力領域、ノード識別領域、タグキー領域、文字列領域、集計データ領域(a)、(b)を「空」に設定する。そして、集計処理250bは、ノード識別領域に、ルートノード1を識別する「node1」を格納する(ステップS30)。
集計処理部250bは、ルートノード1に子ノードとなるノード2が存在するので、ノード2に遷移する。ノード2には、タグキー「Inabe/4chome」、値「5」が登録されている。このため、集計処理部250bは、タグキー領域に文字列「Inabe/4chome」、集計データ領域(a)、(b)に値「5」を格納する。また、ノード2のトライ部分の文字は「M」、一致数「3」に対応する文字列は「ie/」、タグキーの文字列は「Inabe/4chome」であるため、集計処理部250bは、ノード2に割当てられた文字列を「Mie/Inabe/4chome」と判定する。集計処理部250bは、文字列領域に文字列「Mie/Inabe/4chome」を格納する。そして、集計処理部250bは、文字列領域に格納された文字列「Mie/Inabe/4chome」とノード2の値「5」との組を、出力領域に格納する。集計処理部250bは、出力領域に格納された文字列「Mie/Inabe/4chome」と値「5」とをそれぞれ、出力結果データ240cの文字列と集計値に登録する(ステップS31)。
集計処理部250bは、ノード2のタグキーに第二階層の区切文字が存在するので、ノード2に割当てられた文字列のうち、第二階層までの文字列「Mie/Inabe」と、同じ組に属する文字列が、ノード2の配下の文字列に存在しないと判定する。このため、集計処理部250bは、文字列「Mie/Inabe」と集計データ領域(b)の値「5」との組を、出力領域に格納する。また、集計処理部250bは、集計データ領域(b)の値を0にリセットする。集計処理部250bは、出力領域に格納された文字列「Mie/Inabe」と値「5」をそれぞれ、出力結果データ240cの文字列と集計値に登録する(ステップS32)。なお、集計処理部250bは、タグキー領域の文字列と、文字列領域の文字列を比較することで、何階層の区切文字がタグキー領域に含まれているのかを判定する。タグキー「Inabe/4chome」と、文字列「Mie/Inabe/4chome」と比較すると、タグキーの区切文字は、文字列に含まれる区切文字の内、先頭側から2番目に現れる区切文字となる。このため、集計処理部250bは、ノード2のタグキーを第二階層の区切文字と判定する。
集計処理部250bは、ノード2に子ノードとなるノード3が存在するので、ノード3に遷移する。ノード3には、タグキー「1chome」、値「25」が登録されている。このため、集計処理部250bは、タグキー領域に文字列「1chome」を格納し、集計データ領域(a)、(b)の値にそれぞれ25を加算する。このため、集計データ領域(a)は30を格納し、集計データ領域(b)は25を格納する。また、ノード3のトライ部分の文字は「Mi」、一致数「6」に対応する文字列は「e/Tsu/」、タグキーの文字列は「1chome」であるため、集計処理部250bは、ノード3に割当てられた文字列を「Mie/Tsu/1chome」と判定する。集計処理部250bは、文字列領域に文字列「Mie/Tsu/1chome」を格納する。そして、集計処理部250bは、文字列領域に格納された文字列「Mie/Tsu/1chome」とノード3の値「25」との組を、出力領域に格納する。集計処理部250bは、出力領域に格納された文字列「Mie/Tsu/1chome」と値「25」とをそれぞれ、出力結果データ240cの文字列と集計値に登録する(ステップS33)。
続いて、図17の説明に移行する。集計処理部250bは、ノード3のタグキーに区切文字が存在しないので、ノード3の長男ノードとなるノード4に遷移する。ノード4には、タグキー「2chome」、値「15」が登録されている。このため、集計処理部250bは、タグキー領域に文字列「2chome」を格納し、集計データ領域(a)、(b)の値にそれぞれ15を加算する。このため、集計データ領域(a)は45を格納し、集計データ領域(b)は40を格納する。また、ノード4のトライ部分の文字は「Mie」、一致数「5」に対応する文字列は「/Tsu/」、タグキーの文字列は「2chome」であるため、集計処理部250bは、ノード4に割当てられた文字列を「Mie/Tsu/2chome」と判定する。集計処理部250bは、文字列「Mie/Tsu/2chome」を文字列領域に格納する。そして、集計処理部250bは、文字列領域に格納された文字列「Mie/Tsu/2chome」とノード4の値「15」との組を、出力領域に格納する。集計処理部250bは、出力領域に格納された文字列「Mie/Tsu/2chome」と値「15」とをそれぞれ、出力結果データ240cの文字列と集計値に登録する(ステップS34)。
集計処理部250bは、ノード4のタグキーに区切文字が存在しないので、ノード4の子ノードとなるノード5に遷移する。ノード5には、タグキー「3chome」、値「8」が登録されている。このため、集計処理部250bは、タグキー領域に文字列「3chome」を格納し、集計データ領域(a)、(b)にそれぞれ8を加算する。このため、集計データ領域(a)は53を格納し、集計データ領域(b)は48を格納する。また、ノード5のトライ部分の文字は「Mie/」、一致数「4」に対応する文字列は「Tsu/」、タグキーの文字列は「3chome」であるため、集計処理部250bは、ノード5に割当てられた文字列を「Mie/Tsu/3chome」と判定する。集計処理部250bは、文字列「Mie/Tsu/3chome」を文字列領域に格納する。集計処理部250bは、文字列領域に格納された文字列「Mie/Tsu/3chome」とノード5の値「8」との組を、出力領域に格納する。集計処理部250bは、出力領域に格納された文字列「Mie/Tsu/3chome」と値「8」とをそれぞれ、出力結果データ240cの文字列と集計値に登録する(ステップS35)。
集計処理部250bは、ノード5のタグキーに区切文字が存在しないので、ノード5の子ノードとなるノード6に遷移する。ノード6には、タグキー「su/4chome」、値「7」が登録されている。このため、集計処理部250bは、タグキー領域に文字列「su/4chome」を格納し、集計データ領域(a)、(b)にそれぞれ7を加算する。このため、集計データ領域(a)は60を格納し、集計データ領域(b)は55を格納する。また、ノード6のトライ部分の文字は「Mie/T」、一致数「0」に対応する文字列は無し、タグキーの文字列は「su/4chome」であるため、集計処理部250bは、ノード6に割当てられた文字列を「Mie/Tsu/4chome」と判定する。集計処理部250bは、文字列「Mie/Tsu/4chome」を文字列領域に格納する。集計処理部250bは、文字列領域に格納された文字列「Mie/Tsu/4chome」とノード6の値「7」との組を、出力領域に格納する。集計処理部250bは、出力領域に格納された文字列「Mie/Tsu/4chome」と値「7」とをそれぞれ、出力結果データ240cの文字列と集計値に登録する(ステップS36)。
続いて、図18の説明に移行する。集計処理部250bは、ノード6のタグキーに第二階層の区切文字が存在するので、ノード6に割当てられた文字列のうち、第二階層までの文字列「Mie/Tsu」と同じ組に属する文字列が、ノード6の配下の文字列に存在しないと判定する。このため、集計処理部250bは、文字列「Mie/Tsu」と集計データ領域(b)の値「55」との組を、出力領域に格納する。また、集計処理部250bは、集計データ領域(b)の値を0にリセットする。集計処理部250bは、出力領域に格納された文字列「Mie/Tsu」と値「55」をそれぞれ、出力結果データ240cの文字列と集計値に登録する(ステップS37)。
集計処理部250bは、ノード6の弟ノードとなるノード7に遷移する。ノード7には、タグキー「okkaichi/6chome」、値「35」が登録されている。このため、集計処理部250bは、タグキー領域に文字列「okkaichi/6chome」を格納し、集計データ領域(a)、(b)にそれぞれ35を加算する。このため、集計データ領域(a)は95を格納し、集計データ領域(b)は35を格納する。また、ノード7のトライ部分は「Mie/Y」、一致数「0」に対応する文字列は無し、タグキー「okkaichi/6chome」であるため、集計処理部250bは、ノード7に割当てられた文字列を「Mie/Yokkaichi/6chome」と判定する。集計処理部250bは、文字列「Mie/Yokkaichi/6chome」を文字列領域に格納する。集計処理部250bは、文字列領域に格納された文字列「Mie/Yokkaichi/6chome」とノード7の値「35」との組を、出力領域に格納する。集計処理部250bは、出力領域に格納された文字列「Mie/Yokkaichi/6chome」と値「35」とをそれぞれ、出力結果データ240cの文字列と集計値に登録する(ステップS38)。
集計処理部250bは、ノード7のタグキーに第二階層の区切文字が存在するので、ノード7に割当てられた文字列のうち、第二階層までの文字列「Mie/Yokkaichi」と同じ組に属する文字列が、ノード7の配下の文字列に存在しないと判定する。このため、集計処理部250bは、文字列「Mie/Yokkaichi」と集計データ領域(b)の値「35」との組を、出力領域に格納する。また、集計処理部250bは、集計データ領域(b)の値を0にリセットする。集計処理部250bは、出力領域に格納された文字列「Mie/Yokkaichi」と値「35」とをそれぞれ、出力結果データ240cの文字列と集計値に登録する(ステップS39)。
続いて、図19の説明に移行する。集計処理部250bは、ノード7に子ノードが存在せず、かつ、弟ノードが存在しないので、親ノードとなるノード5に遷移する。集計処理部250bは、ノード5に割当てられたタグキーが「3chome」であるため、タグキー領域に文字列「3chome」を格納する。また、上記ステップS35と同様に、ノード5に割当てられた文字列は「Mie/Tsu/3chome」であるため、集計処理部250bは、文字列「Mie/Tsu/3chome」を文字列領域に格納する(ステップS40)。
集計処理部250bは、ノード5に対応する文字が区切文字であるか否かを判定する。ノード5に対応する文字は区切文字「/」であり、かかる区切文字は、第一階層の区切文字であるため、集計処理部250bは、ノード5に割当てられた文字列のうち、第一階層までの文字列「Mie」と集計データ領域(a)の値「95」との組を、出力領域に格納する。また、集計処理部250bは、集計データ領域(a)の値を0にリセットする。集計処理部250bは、出力領域に格納された文字列「Mie」と値「95」とをそれぞれ、出力結果データ240cの文字列と集計値に登録する(ステップS41)。
ここで、集計処理部250bが、ノードに対応する区切文字が何階層の区切文字であるかを判定する処理の一例について説明する。集計処理部250bは、ルートノード1からノード5に至るまでの各ノード1〜5に対応する文字「M、i、e、/」を順に検出する。そして、集計処理部250bは、抽出した文字に含まれる区切文字のうち、ノード5に対応する区切文字は、先頭側から何番目の区切文字であるかを判定する。ノード5に対応する区切文字は、1つ目の区切文字である。このため、集計処理部250bは、ノード5に対応する区切文字を第一階層の区切文字であると判定する。
集計処理部250bは、ノード5に弟ノードが存在しないので、親ノードとなるノード4に遷移する。集計処理部250bは、ノード4に割当てられたタグキーが「2chome」であるため、タグキー領域に文字列「2chome」を格納する。また、上記ステップS34と同様に、ノード4に割当てられた文字列は「Mie/Tsu/2chome」であるため、集計処理部250bは、文字列「Mie/Tsu/2chome」を文字列領域に格納する(ステップS42)。
続いて、図20の説明に移行する。集計処理部250bは、ノード4に対応する文字が区切文字であるか否かを判定する。ノード4に対応する文字は区切文字ではなく、ノード4に弟ノードが存在するため、ノード8に遷移する。ノード8には、タグキー「endai/1chome」、値「5」が登録されている。このため、集計処理部250bは、タグキー領域に文字列「endai/1chome」を格納し、集計データ領域(a)、(b)にそれぞれ40を加算する。このため、集計データ領域(a)は40を格納し、集計データ領域(b)は40を格納する。また、ノード8のトライ部分は「Miy」、一致数「5」に対応する文字列は「agi/S」、タグキーの文字列は「endai/1chome」であるため、集計処理部250bは、ノード8に割当てられた文字列を「Miyagi/Sendai/1chome」と判定する。集計処理部250bは、文字列「Miyagi/Sendai/1chome」を文字列領域に格納する。集計処理部250bは、文字列領域に格納された文字列「Miyagi/Sendai/1chome」とノード8の値「40」との組を、出力領域に格納する。集計処理部250bは、出力領域に格納された文字列「Miyagi/Sendai/1chome」と値「40」とをそれぞれ、出力結果データ240cの文字列と集計値に登録する(ステップS43)。
集計処理部250bは、ノード8のタグキーに第二階層の区切文字が存在するので、ノード8に割当てられた文字列のうち、第二階層までの文字列「Miyagi/Sendai」と同じ組に属する文字列が、ノード8の配下の文字列に存在しないと判定する。このため、集計処理部250bは、文字列「Miyagi/Sendai」と集計データ領域(b)の値「35」との組を、出力領域に格納する。また、集計処理部250bは、集計データ領域(b)の値を0にリセットする。集計処理部250bは、出力領域に格納された文字列「Miyagi/Sendai」と値「40」とをそれぞれ、出力結果データ240cの文字列と集計値に登録する(ステップS44)。
集計処理部250bは、ノード8の子ノードとなるノード9に遷移する。ノード9には、タグキー「gi/Shiroishi/3chome」、値「4」が登録されている。このため、集計処理部250bは、タグキー領域に文字列「gi/Shiroishi/3chome」を格納し、集計データ領域(a)、(b)にそれぞれ4を加算する。このため、集計データ領域(a)は44を格納し、集計データ領域(b)は4を格納する。また、ノード9のトライ部分は「Miya」、一致数「0」に対応する文字列は無し、タグキーの文字列は「gi/Shiroishi/3chome」であるため、集計処理部250bは、ノード9に割当てられた文字列を「Miyagi/Shiroishi/3chome」と判定する。集計処理部250bは、文字列「Miyagi/Shiroishi/3chome」を文字列領域に格納する。集計処理部250bは、文字列領域に格納された文字列「Miyagi/Shiroishi/3chome」とノード9の値「4」との組を出力領域に格納する。集計処理部250bは、出力領域に格納された文字列「Miyagi/Shiroishi/3chome」と値「4」とをそれぞれ、出力結果データ240cの文字列と集計値に登録する(ステップS45)。
続いて、図21の説明に移行する。ノード9のタグキーには、第一階層の区切文字と第二階層の区切文字が存在する。集計処理部250bは、まず、ノード9に割当てられた文字列のうち、第二階層までの文字列「Miyagi/Shiroishi」と同じ組に属する文字列が、ノード9の配下の文字列に存在しないと判定する。このため、集計処理部250bは、文字列「Miyagi/Shiroishi」と集計データ領域(b)の値「4」との組を、出力領域に格納する。また、集計処理部250bは、集計データ領域(b)の値を0にリセットする。集計処理部250bは、出力領域に格納された文字列「Miyagi/Shiroishi」と値「4」とをそれぞれ、出力結果データ240cの文字列と集計値に登録する(ステップS46)。
続いて、集計処理部250bは、ノード9に割当てられた文字列のうち、第一階層までの文字列「Miyagi」と同じ組に属する文字列が、ノード9の配下の文字列に存在しないと判定する。このため、集計処理部250bは、文字列「Miyagi」と集計データ領域(a)の値「44」との組を、出力領域に格納する。また、集計処理部250bは、集計データ領域(a)の値を0にリセットする。集計処理部250bは、出力領域に格納された文字列「Miyagi」と値「44」とをそれぞれ、出力結果データ240cの文字列と集計値に登録する(ステップS47)。
上記のように、集計処理部250bが、ステップS30〜S47の処理を実行することで、トライ木データ240bに含まれる文字列を分類し、分類した文字列毎の値を集計することで出力結果データ240cを生成する。
次に、図3に示したトライ木生成部250aの処理手順の一例について説明する。図22は、トライ木生成処理部の処理手順を示すフローチャートである。図22に示すように、トライ木生成部250aは、ルートノードを生成し(ステップS101)、次の入力キーが入力キー管理テーブル240aに存在するか否かを判定する(ステップS102)。
トライ木生成部250aは、次の入力キーが存在しない場合には(ステップS103,No)、処理を終了する。一方、トライ木生成部250aは、次の入力キーが存在する場合には(ステップS103,Yes)、入力キーと値とを読み出す(ステップS104)。そして、トライ木生成部250aは、データ追加処理を行い(ステップS105)、ステップS102に移行する。
続いて、図22のステップS105に示したデータ追加処理の具体的な処理手順について説明する。図23〜図24は、データ追加処理の処理手順を示すフローチャートである。図23に示すように、トライ木生成部250aは、現在のノードをルートノードに設定し(ステップS201)、入力キーのポインタを先頭のキーに設定する(ステップS202)。
トライ木生成部250aは、入力キーのポインタの指すキーが「空」の場合に(ステップS203,Yes)、世代数を0に設定する(ステップS204)。そして、トライ木生成部250aは、図24のステップS209に移行する。
一方、トライ木生成部250aは、入力キーのポインタの指すキーが「空」ではない場合に(ステップS203,No)、ポインタの指すキーで子ノードを参照し、子ノードが存在するか否かを判定する(ステップS205)。
トライ木生成部250aは、子ノードが存在する場合に(ステップS206,Yes)、ポインタの指すキーで子ノードに遷移し、入力キーのポインタを1つ進める(ステップS207)。そして、トライ木生成部250aは、ステップS203に移行する。
一方、トライ木生成部250aは、子ノードが存在しない場合に(ステップS206,No)、現在のノードのタグキーの優先度が入力キーの優先度よりも小さいか否かを判定する(ステップS208)。トライ木生成部250aは、タグキーの優先度が入力キーの優先度よりも小さくない場合に(ステップS208,No)、ステップS204に移行する。一方、トライ木生成部250aは、タグキーの優先度が入力キーの優先度よりも小さい場合に(ステップS208,Yes)、図25のステップS221に移行する。
続いて、図24の説明に移行する。トライ木生成部250aは、ノードの情報を参照する(ステップS209)。ここで、ノードの情報は、ノードに設定された一致数、タグキーを含む。トライ木生成部250aは、一致数と世代数が等しいか否かを判定する(ステップS210)。トライ木生成部250aは、一致数と世代数が等しい場合に(ステップS210,Yes)、タグキーと入力キーの優先度が等しいか否かを判定する(ステップS211)。
トライ木生成部250aは、タグキーと入力キーの優先度が異なる場合に(ステップS211,No)、タグキーの優先度が入力キーの優先度よりも大きいか否かを判定する(ステップS212)。トライ木生成部250aは、タグキーの優先度が入力キーの優先度よりも大きい場合に(ステップS212,Yes)、前方一致した文字数を世代数に追加する(ステップS213)。ここで、前方一致した文字数とは、タグキーの文字列と入力キー文字列とを比較し、各文字列が先頭文字から何文字目まで一致しているかを示す数である。
トライ木生成部250aは、前方一致した文字数分だけ、入力キーのポインタを進め(ステップS214)、兄ノードが存在する、または、親ノードがルートノードであるか否かを判定する(ステップS215)。トライ木生成部250aは、兄ノードが存在する、または、親ノードがルートノードの場合には(ステップS215,Yes)、図25のステップS226に移行する。一方、トライ木生成部250aは、兄ノードが存在せず、かつ、親ノードがルートノードでない場合に(ステップS215,No)、世代数に1を加算し、親ノードへ遷移する(ステップS216)。そして、トライ木生成部250aは、ステップS209に移行する。
ステップS210において、トライ木生成部250aは、一致数と世代数とが異なる場合に(ステップS210,No)、一致数が世代数よりも大きいか否かを判定する(ステップS217)。トライ木生成部250aは、一致数が世代数よりも大きい場合に(ステップS217,Yes)、ステップS215に移行する。一方、トライ木生成部250aは、一致数が世代数よりも小さい場合に(ステップS217,No)、図25のステップS219に移行する。
ステップS211において、トライ木生成部250aは、タグキーと入力キーの優先度が等しい場合に(ステップS211,Yes)、現在のノードに入力キーの値を追加し(ステップS218)、処理を終了する。
ステップS212において、トライ木生成部250aは、タグキーの優先度が入力キーの優先度よりも小さい場合に(ステップS212,No)、図25のステップS225に移行する。
続いて、図25の説明に移行する。トライ木生成部250aは、現在のノードのノード情報において、一致数に前方一致した文字数を加えると共に、タグキーのポインタを前方一致した文字数分だけ進める(ステップS219)。
トライ木生成部250aは、世代数が0の場合には(ステップS220,Yes)、新しいノードを生成し、入力キーの先頭文字をキーとして現在のノードから新しいノードに接続する(ステップS221)。トライ木生成部250aは、入力キーのポインタを1文字進め(ステップS222)、入力キーをタグキーとして新しいノードに追加する(ステップS223)。そして、トライ木生成部250aは、現在のノードに入力キーの値を追加し(ステップS224)、処理を終了する。
ステップS220において、トライ木生成部250aは、世代数が0ではない場合に(ステップS220,No)、世代数から1を減算し、長男ノードに遷移する(ステップS225)。そして、トライ木生成部250aは、「現在のノードの一致数、タグキー、ノードの値」と、「世代数、入力キー、入力キーの値」とを交換する(ステップS226)。トライ木生成部250aは、世代数が0ではない場合に(ステップS227,No)、ステップS225に移行する。一方、トライ木生成部250aは、世代数が0の場合に(ステップS227,Yes)、入力キーの先頭文字で子ノードに遷移し(ステップS228)、ステップS221に移行する。
次に、図3の集計処理部250bの処理手順の一例について説明する。図26は、集計処理部の処理手順を示すフローチャートである。図26に示すように、集計処理部250bは、現在のノードをルートノードに設定し(ステップS301)、子ノードが存在する場合に(ステップS302,Yes)、長男ノードへ遷移する(ステップS303)。
集計処理部250bは、一致数と階層数を加算した値を算出し、算出した値だけタグキーのポインタを戻した位置を特定する(ステップS304)。集計処理部250bは、特定した位置からタグキーの最後の文字までの文字列を取得し(ステップS305)、文字列および値を出力する(ステップS306)。
集計処理部250bは、ノード値と集計データ領域(a)の値とを加算した値を集計データ領域(a)に格納し、ノードの値と集計データ領域(b)の値とを加算した値を集計データ(b)に格納する(ステップS307)。
集計処理部250bは、タグキーを読み出し(ステップS308)、区切文字が存在しない場合に(ステップS309,No)、ステップS302に移行する。一方、集計処理部250bは、区切文字が存在する場合に(ステップS309,Yes)、グループキーとグループキーに対応する集計データ領域の値を出力する(ステップS310)。そして、集計処理部250bは、グループキーに対応する集計データ領域の値をリセットし(ステップS311)、ステップS302に移行する。ここで、グループキーは、ノードに割当てられた文字列のうち、区切文字の階層に対応する文字列までの文字列に対応する。
ところで、集計処理部250bは、子ノードが存在しない場合に(ステップS302,No)、親ノードから現在のノードへのキーを読み出す(ステップS312)。集計処理部250bは、読み出したキーが区切文字ではない場合に(ステップS313,No)、ステップS316に移行する。一方、集計処理部250bは、読み出したキーが区切文字の場合に(ステップS313,Yes)、グループキーとグループキーに対応する集計データ領域の値を出力する(ステップS314)。
集計処理部250bは、グループキーに対応する集計データ領域の値をリセットし(ステップS315)、弟ノードが存在するか否かを判定する(ステップS316)。集計処理部250bは、弟ノードが存在する場合に(ステップS316,Yes)、次の弟ノードへ遷移し(ステップS317)、ステップS307に移行する。
一方、集計処理部250bは、弟ノードが存在しない場合に(ステップS316,No)、親ノードがルートノードであるか否かを判定する(ステップS318)。集計処理部250bは、親ノードがルートノードではない場合に(ステップS318,No)、親ノードへ遷移し(ステップS319)、ステップS312に移行する。一方、集計処理部250bは、親ノードがルートノードの場合に(ステップS318,Yes)、処理を終了する。
上述してきたように、本実施例2にかかるデータ処理装置200は、ノードに対応付けられたタグキーに区切文字が含まれるか否かを利用して、トライ木データ240bに登録された区切文字を含む文字列を分類する。このため、データ処理装置200には、従来技術のように、ノードのタグキーに含まれる各文字をトライ木に展開することがない。したがって、本実施例2にかかるデータ処理装置200は、メモリ使用量を削減しつつ、トライ木データ240bに登録された区切文字を含む文字列を効率的に分類することができる。
また、データ処理装置200は、タグキーに区切文字を含むノードを検出した場合に、検出したノードにより表現される文字列と、該ノードの子ノードにより表現される文字列とを異なる組に分ける。このため、データ処理装置200は、トライ木データ240bの区切文字毎に、正確に文字列を分類することができる。
また、データ処理装置200は、タグキーに区切文字を含むノードを検出した場合に、検出したノードにより表現される文字列のうち、各区切文字よりも前に存在する文字列をそれぞれ特定する。そして、データ処理装置200は、特定した各区切文字を異なる組に分けることで、トライ木データ240bに含まれる各文字列を分類する。このため、データ処理装置200は、トライ木データ240bに登録された文字列が複数の階層の区切文字を含む場合でも、区切文字毎に、正確に文字列を分類することができる。
また、データ処理装置200は、トライ木データ240bに登録された文字列を区切文字に基づいて分類し、分類した文字列毎の値を集計する。データ処理装置200は、ノードのタグキーに含まれる各文字をトライ木に展開することが無いので、辿るべきノードの数が少なくなり、その結果、各文字列に対応する集計値を効率よく算出することができる。
なお、上記の実施例では一例として、子ノードの文字列と一致する文字数を含むタグキーを親ノードに登録していた。しかし、本願発明は、これに限定されるものではない。例えば、親ノードの文字列と一致する文字数を含むタグキーを子ノードに登録しても、同様に処理することが可能である。
ところで、図2に示した入出力制御部230、制御部250は、例えば、ASIC(Application Specific Integrated Circuit)や、FPGA(Field Programmable Gate Array)などの集積装置に対応する。または、入出力制御部230、制御部250は、CPU(Central Processing Unit)やMPU(Micro Processing Unit)等の電子回路に対応する。また、図2に示した記憶部240は、例えば、RAM(Random Access Memory)、ROM(Read Only Memory)、フラッシュメモリ(Flash Memory)などの半導体メモリ素子、またはハードディスク、光ディスクなどの記憶装置に対応する。
ところで、図2に示したデータ処理装置200の各構成要素は、機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、データ処理装置200の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。例えば、トライ木生成部250aの機能を拡張カードなどの外部装置に搭載し、拡張カードを該当するサーバに接続してもよい。
なお、データ処理装置200は、既知のパーソナルコンピュータ、ワークステーション、携帯電話、PHS端末、移動体通信端末またはPDAなどの情報処理装置に、データ処理装置200の各機能を搭載することによって実現することもできる。
図27は、本実施例にかかるデータ処理装置を構成するコンピュータのハードウェア構成を示す図である。図27に示すように、このコンピュータ300は、各種演算処理を実行するCPU(Central Processing Unit)310と、ユーザからのデータの入力を受け付ける入力装置320と、モニタ330を有する。また、コンピュータ300は、記憶媒体からプログラム等を読取る媒体読み取り装置340と、ネットワークを介して他のコンピュータとの間でデータの授受を行うネットワークインターフェース装置350を有する。また、コンピュータ300は、各種情報を一時記憶するRAM(Random Access Memory)360と、ハードディスク装置370を有する。各装置310〜370は、バス380に接続される。
そして、ハードディスク装置370には、図2に示したトライ木生成部250aと同様の機能を有するトライ木生成プログラム370aを記憶する。また、ハードディスク装置370は、図2に示した集計処理部250bと同様の機能を有する集計処理プログラム370bを記憶する。
CPU310がトライ木生成プログラム370aをハードディスク装置370から読み出してRAM360に展開することで、トライ木生成プログラム370aは、トライ木生成プロセス360aとして機能する。また、CPU310が集計処理プログラム370bをハードディスク装置370から読み出してRAM360に展開することで、集計処理プログラム370bは、集計処理プロセス360bとして機能する。そして、トライ木生成プロセス360aは、トライ木データを生成する。集計処理プロセス360bは、トライ木データの文字列を区切文字に基づいて分類し、分類した文字列毎に集計値を算出する。
なお、上記トライ木生成プログラム370aおよび集計処理プログラム370bは、必ずしもハードディスク装置370に格納されている必要はない。例えば、CD−ROM等の記憶媒体に記憶されたプログラムを、コンピュータ300が読み出して実行するようにしてもよい。また、公衆回線、インターネット、LAN(Local Area Network)、WAN(Wide Area Network)等にこのプログラムを記憶させておき、コンピュータ300がこれらからプログラムを読み出して実行するようにしてもよい。
以上の各実施例を含む実施形態に関し、さらに以下の付記を開示する。
(付記1)コンピュータに、
区切文字または所定の文字に対応する複数のノードが木構造にて接続され、単一のノードに対して区切文字を含む単一の文字列または区切文字を含まない単一の文字列を含むタグキーと、所定のノードにより表現される文字列と該所定のノードの子ノード又は親ノードにより表現される文字列との間で一致する文字の数を示す一致数とが対応付けられ、根ノードから所定のノードに至るまでに辿るノードに対応する各文字と、前記所定のノードに登録されたタグキーの文字列と、前記一致数に対応する文字列とを組合せることで当該ノードの文字列を表現するトライ木データを記憶装置から取得するトライ木取得手順と、
前記トライ木データに含まれる各ノードのうち、タグキーに区切文字を含まないノードを検出し、検出したノードにより表現される文字列と該ノードの子ノード又は親ノードにより表現される文字列とを同一の組にまとめることで、前記トライ木データに含まれる各文字列を分類する分類手順と
を実行させることを特徴とするトライ木分類プログラム。
(付記2)前記分類手順は、前記タグキーに区切文字を含むノードを検出した場合に、検出したノードにより表現される文字列と、前記ノードの子ノード又は親ノードにより表現される文字列とを異なる組に分けることで、前記トライ木データに含まれる各文字列を分類することを特徴とする付記1に記載のトライ木分類プログラム。
(付記3)前記分類手順は、前記タグキーに複数の区切文字を含むノードを検出した場合に、検出したノードにより表現される文字列のうち、各区切文字よりも前に存在する文字列をそれぞれ特定し、特定した各文字列を異なる組に分けることで、前記トライ木データに含まれる各文字列を分類することを特徴とする付記2に記載のトライ木分類プログラム。
(付記4)前記トライ木データに含まれる複数のノードは所定の数値を保持し、前記分類手順によって分類された文字列の組毎にノードが保持する値を集計する集計手順を更にコンピュータに実行させることを特徴とする付記1、2または3に記載のトライ木分類プログラム。
(付記5)トライ木分類装置が、
区切文字または所定の文字に対応する複数のノードが木構造にて接続され、単一のノードに対して区切文字を含む単一の文字列または区切文字を含まない単一の文字列を含むタグキーと、所定のノードにより表現される文字列と該所定のノードの子ノード又は親ノードにより表現される文字列との間で一致する文字の数を示す一致数とが対応付けられ、根ノードから所定のノードに至るまでに辿るノードに対応する各文字と、前記所定のノードに登録されたタグキーの文字列と、前記一致数に対応する文字列とを組合せることで当該ノードの文字列を表現するトライ木データを記憶装置から取得するトライ木取得ステップと、
前記トライ木データに含まれる各ノードのうち、タグキーに区切文字を含まないノードを検出し、検出したノードにより表現される文字列と該ノードの子ノード又は親ノードにより表現される文字列とを同一の組にまとめることで、前記トライ木データに含まれる各文字列を分類する分類ステップと
を含んだことを特徴とするトライ木分類方法。
(付記6)前記分類ステップは、前記タグキーに区切文字を含むノードを検出した場合に、検出したノードにより表現される文字列と、前記ノードの子ノード又は親ノードにより表現される文字列とを異なる組に分けることで、前記トライ木データに含まれる各文字列を分類することを特徴とする付記5に記載のトライ木分類方法。
(付記7)前記分類ステップは、前記タグキーに複数の区切文字を含むノードを検出した場合に、検出したノードにより表現される文字列のうち、各区切文字よりも前に存在する文字列をそれぞれ特定し、特定した各文字列を異なる組に分けることで、前記トライ木データに含まれる各文字列を分類することを特徴とする付記6に記載のトライ木分類方法。
(付記8)前記トライ木データに含まれる複数のノードは所定の数値を保持し、前記分類ステップによって分類された文字列の組毎にノードが保持する値を集計する集計ステップを更に含むことを特徴とする付記5、6または7に記載のトライ木分類方法。
(付記9)区切文字または所定の文字に対応する複数のノードが木構造にて接続され、単一のノードに対して区切文字を含む単一の文字列または区切文字を含まない単一の文字列を含むタグキーと、所定のノードにより表現される文字列と該所定のノードの子ノード又は親ノードにより表現される文字列との間で一致する文字の数を示す一致数とが対応付けられ、根ノードから所定のノードに至るまでに辿るノードに対応する各文字と、前記所定のノードに登録されたタグキーの文字列と、前記一致数に対応する文字列とを組合せることで当該ノードの文字列を表現するトライ木データを記憶するトライ木記憶部と、
前記トライ木記憶部に記憶された前記トライ木データに含まれる各ノードのうち、タグキーに区切文字を含まないノードを検出し、検出したノードにより表現される文字列と該ノードの子ノード又は親ノードにより表現される文字列とを同一の組にまとめることで、前記トライ木データに含まれる各文字列を分類する分類部と
を有することを特徴とするトライ木分類装置。
(付記10)前記分類部は、前記タグキーに区切文字を含むノードを検出した場合に、検出したノードにより表現される文字列と、前記ノードの子ノード又は親ノードにより表現される文字列とを異なる組に分けることで、前記トライ木データに含まれる各文字列を分類することを特徴とする付記9に記載のトライ木分類装置。
100 トライ木分類装置
110 記憶部
110a トライ木データ
120 分類部

Claims (5)

  1. コンピュータに、
    区切文字または所定の文字に対応する複数のノードが木構造にて接続され、単一のノードに対して区切文字を含む単一の文字列または区切文字を含まない単一の文字列を含むタグキーと、所定のノードにより表現される文字列と該所定のノードの子ノード又は親ノードにより表現される文字列との間で一致する文字の数を示す一致数とが対応付けられ、根ノードから所定のノードに至るまでに辿るノードに対応する各文字と、前記所定のノードに登録されたタグキーの文字列と、前記一致数に対応する文字列とを組合せることで当該ノードの文字列を表現するトライ木データを記憶装置から取得するトライ木取得手順と、
    前記トライ木データに含まれる各ノードのうち、タグキーに区切文字を含まないノードを検出し、検出したノードにより表現される文字列と該ノードの子ノード又は親ノードにより表現される文字列とを同一の組にまとめることで、前記トライ木データに含まれる各文字列を分類する分類手順と
    を実行させることを特徴とするトライ木分類プログラム。
  2. 前記分類手順は、前記タグキーに区切文字を含むノードを検出した場合に、検出したノードにより表現される文字列と、前記ノードの子ノード又は親ノードにより表現される文字列とを異なる組に分けることで、前記トライ木データに含まれる各文字列を分類することを特徴とする請求項1に記載のトライ木分類プログラム。
  3. 前記分類手順は、前記タグキーに複数の区切文字を含むノードを検出した場合に、検出したノードにより表現される文字列のうち、各区切文字よりも前に存在する文字列をそれぞれ特定し、特定した各文字列を異なる組に分けることで、前記トライ木データに含まれる各文字列を分類することを特徴とする請求項2に記載のトライ木分類プログラム。
  4. 前記トライ木データに含まれる複数のノードは所定の数値を保持し、前記分類手順によって分類された文字列の組毎にノードが保持する値を集計する集計手順を更にコンピュータに実行させることを特徴とする請求項1、2または3に記載のトライ木分類プログラム。
  5. トライ木分類装置が、
    区切文字または所定の文字に対応する複数のノードが木構造にて接続され、単一のノードに対して区切文字を含む単一の文字列または区切文字を含まない単一の文字列を含むタグキーと、所定のノードにより表現される文字列と該所定のノードの子ノード又は親ノードにより表現される文字列との間で一致する文字の数を示す一致数とが対応付けられ、根ノードから所定のノードに至るまでに辿るノードに対応する各文字と、前記所定のノードに登録されたタグキーの文字列と、前記一致数に対応する文字列とを組合せることで当該ノードの文字列を表現するトライ木データを記憶装置から取得するトライ木取得ステップと、
    前記トライ木データに含まれる各ノードのうち、タグキーに区切文字を含まないノードを検出し、検出したノードにより表現される文字列と該ノードの子ノード又は親ノードにより表現される文字列とを同一の組にまとめることで、前記トライ木データに含まれる各文字列を分類する分類ステップと
    を含んだことを特徴とするトライ木分類方法。
JP2009272826A 2009-11-30 2009-11-30 トライ木分類プログラムおよびトライ木分類方法 Expired - Fee Related JP5387371B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2009272826A JP5387371B2 (ja) 2009-11-30 2009-11-30 トライ木分類プログラムおよびトライ木分類方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2009272826A JP5387371B2 (ja) 2009-11-30 2009-11-30 トライ木分類プログラムおよびトライ木分類方法

Publications (2)

Publication Number Publication Date
JP2011118478A JP2011118478A (ja) 2011-06-16
JP5387371B2 true JP5387371B2 (ja) 2014-01-15

Family

ID=44283765

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009272826A Expired - Fee Related JP5387371B2 (ja) 2009-11-30 2009-11-30 トライ木分類プログラムおよびトライ木分類方法

Country Status (1)

Country Link
JP (1) JP5387371B2 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6052059B2 (ja) * 2013-05-24 2016-12-27 沖電気工業株式会社 媒体集積装置及び媒体処理装置

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3152868B2 (ja) * 1994-11-16 2001-04-03 富士通株式会社 検索装置および辞書/テキスト検索方法
JPH09245045A (ja) * 1996-03-14 1997-09-19 Fuji Xerox Co Ltd 鍵検索方法および装置
US7693850B2 (en) * 2004-07-19 2010-04-06 Rightorder, Inc. Method and apparatus for adding supplemental information to PATRICIA tries
JP4479908B2 (ja) * 2005-06-30 2010-06-09 富士通株式会社 データソート処理プログラム、データソート処理方法およびデータソート処理装置
JP2008146323A (ja) * 2006-12-08 2008-06-26 Mitsubishi Electric Corp 辞書生成装置、テキスト解析装置及びテキスト解析方法

Also Published As

Publication number Publication date
JP2011118478A (ja) 2011-06-16

Similar Documents

Publication Publication Date Title
US8370808B2 (en) Apparatus and a method for generating a test case
JP5092165B2 (ja) データ構築方法とシステム
CN111651453B (zh) 用户历史行为查询方法、装置、电子设备及存储介质
US20040186835A1 (en) Time series pattern extraction apparatus and method
CN104142822A (zh) 使用信息检索进行源代码流分析
CN107102981A (zh) 词向量生成方法和装置
US20150007120A1 (en) Clustering using n-dimensional placement
CN112650923A (zh) 新闻事件的舆情处理方法及装置、存储介质、计算机设备
CN111753094B (zh) 事件知识图谱的构建方法、装置及事件确定方法、装置
WO2002005084A2 (en) Method and apparatus for ordering electronic data
CN111768096A (zh) 基于算法模型的评级方法、装置、电子设备及存储介质
JP5194818B2 (ja) データ分類方法およびデータ処理装置
CN113591881B (zh) 基于模型融合的意图识别方法、装置、电子设备及介质
CN113434542B (zh) 数据关系识别方法、装置、电子设备及存储介质
JP2021092925A (ja) データ生成装置およびデータ生成方法
CN112529743B (zh) 合同要素抽取方法、装置、电子设备及介质
Liu et al. Moving block sequence and organizational evolutionary algorithm for general floorplanning with arbitrarily shaped rectilinear blocks
CN113127641A (zh) 百科词条的展示方法、装置、设备、介质及程序产品
CN113515620A (zh) 电力设备技术标准文档排序方法、装置、电子设备和介质
US11526529B2 (en) Efficient discovery of a binary tree pattern from a large amount of binary tree data
JP2013196212A (ja) 文書分割装置、文書分割プログラムおよび文書分割方法
US8001122B2 (en) Relating similar terms for information retrieval
JP5387371B2 (ja) トライ木分類プログラムおよびトライ木分類方法
KR101035037B1 (ko) 동적 임계값이 적용된 유사문서 분류화 장치 및 방법
KR20100064297A (ko) 문서 간 유사도 산출 시스템 및 방법

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20120815

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20130830

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20130910

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20130923

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20131021

LAPS Cancellation because of no payment of annual fees