(57)【特許請求の範囲】
【請求項１】
複数階層のメモリを有するコンピュータ・システムによりテキストデータストリームに含まれるアイテムの中から出現頻度の高いアイテムを特定する方法であって、
前記コンピュータ・システムは、
前記複数階層のメモリのうち上位階層のメモリに、アイテムを識別する識別情報、及び該アイテムのカウント数を記憶し、
前記複数階層のメモリのうち前記上位階層のメモリよりも下位階層のメモリに、前記識別情報のみを記憶し、
前記方法は、
テキストデータストリームの入力を受け付けるステップと、
入力を受け付けたテキストデータストリームを分割したバケットに含まれるアイテムの識別情報が前記上位階層のメモリに記憶されていることに応答して、該アイテムのカウント数をインクリメントし、前記下位階層のメモリに記憶されていることに応答して、該アイテムの識別情報を初期カウント数とともに前記上位階層のメモリへ移動させ、どちらにも記憶されていないことに応答して、該アイテムの識別情報を初期カウント数とともに新たに前記上位階層のメモリに記憶するステップと
を含む方法。
【請求項２】
前記上位階層のメモリに、前記識別情報に対応付けてカウント数の誤差を記憶し、
前記上位階層のメモリに記憶されたカウント数及び誤差に基づいて、前記上位階層のメモリに記憶されている識別情報に対応するアイテムごとの単位バケット当たりのカウント数を算出するステップと、
算出した単位バケット当たりのカウント数が第一の閾値より小さいことに応答して、該アイテムの識別情報を前記下位階層のメモリへ移動させるステップとをさらに含む請求項１に記載の方法。
【請求項３】
前記第一の閾値は、前記アイテムの出現頻度を現在カウントしているバケット番号である請求項２に記載の方法。
【請求項４】
前記アイテムのカウント数が第二の閾値より小さいことに応答して、該アイテムの識別情報を、前記上位階層のメモリ及び前記下位階層のメモリから削除するステップを含む請求項１乃至３のいずれか一項に記載の方法。
【請求項５】
前記上位階層のメモリは、前記複数階層のメモリのうち最上位階層のメモリである請求項１乃至４のいずれか一項に記載の方法。
【請求項６】
テキストデータストリームに含まれるアイテムの中から出現頻度の高いアイテムを特定する装置であって、
複数階層のメモリを備え、
該複数階層のメモリのうち上位階層のメモリに、アイテムを識別する識別情報、及び該アイテムのカウント数を記憶し、
前記複数階層のメモリのうち前記上位階層のメモリよりも下位階層のメモリに、前記識別情報のみを記憶するデータ構造を有し、
テキストデータストリームの入力を受け付ける入力受付手段と、
入力を受け付けたテキストデータストリームを分割したバケットに含まれるアイテムの識別情報が前記上位階層のメモリに記憶されていることに応答して、該アイテムのカウント数をインクリメントし、前記下位階層のメモリに記憶されていることに応答して、該アイテムの識別情報を初期カウント数とともに前記上位階層のメモリへ移動させ、どちらにも記憶されていないことに応答して、該アイテムの識別情報を初期カウント数とともに新たに前記上位階層のメモリに記憶する記憶メモリ制御手段と
を備える装置。
【請求項７】
前記上位階層のメモリに、前記識別情報に対応付けてカウント数の誤差を記憶しておき、
前記上位階層のメモリに記憶されたカウント数及び誤差に基づいて、前記上位階層のメモリに記憶されている識別情報に対応するアイテムごとの単位バケット当たりのカウント数を算出する算出手段と、
算出した単位バケット当たりのカウント数が第一の閾値より小さいことに応答して、該アイテムの識別情報を前記下位階層のメモリへ移動させるメモリ間移動手段と
を備える請求項６に記載の装置。
【請求項８】
前記第一の閾値は、前記アイテムの出現頻度を現在カウントしているバケット番号である請求項７に記載の装置。
【請求項９】
前記アイテムのカウント数が第二の閾値より小さいことに応答して、該アイテムの識別情報を、前記上位階層のメモリ及び前記下位階層のメモリから削除する削除手段を備える請求項６乃至８のいずれか一項に記載の装置。
【請求項１０】
前記上位階層のメモリは、前記複数階層のメモリのうち最上位階層のメモリである請求項６乃至９のいずれか一項に記載の装置。
【請求項１１】
テキストデータストリームに含まれるアイテムの中から出現頻度の高いアイテムを特定する装置で実行することが可能なコンピュータプログラムであって、
前記装置は、複数階層のメモリを備え、
該複数階層のメモリのうち上位階層のメモリに、アイテムを識別する識別情報、及び該アイテムのカウント数を記憶し、
前記複数階層のメモリのうち前記上位階層のメモリよりも下位階層のメモリに、前記識別情報のみを記憶するデータ構造を有し、
前記装置を、
テキストデータストリームの入力を受け付ける入力受付手段、及び
入力を受け付けたテキストデータストリームを分割したバケットに含まれるアイテムの識別情報が前記上位階層のメモリに記憶されていることに応答して、該アイテムのカウント数をインクリメントし、前記下位階層のメモリに記憶されていることに応答して、該アイテムの識別情報を初期カウント数とともに前記上位階層のメモリへ移動させ、どちらにも記憶されていないことに応答して、該アイテムの識別情報を初期カウント数とともに新たに前記上位階層のメモリに記憶する記憶メモリ制御手段
として機能させるコンピュータプログラム。
【請求項１２】
前記上位階層のメモリに、前記識別情報に対応付けてカウント数の誤差を記憶しておき、
前記装置を、
前記上位階層のメモリに記憶されたカウント数及び誤差に基づいて、前記上位階層のメモリに記憶されている識別情報に対応するアイテムごとの単位バケット当たりのカウント数を算出する算出手段、及び
算出した単位バケット当たりのカウント数が第一の閾値より小さいことに応答して、該アイテムの識別情報を前記下位階層のメモリへ移動させるメモリ間移動手段
として機能させる請求項１１に記載のコンピュータプログラム。
【請求項１３】
前記第一の閾値は、前記アイテムの出現頻度を現在カウントしているバケット番号である請求項１２に記載のコンピュータプログラム。
【請求項１４】
前記装置を、
前記アイテムのカウント数が第二の閾値より小さいことに応答して、該アイテムの識別情報を、前記上位階層のメモリ及び前記下位階層のメモリから削除する手段
として機能させる請求項１１乃至１３のいずれか一項に記載のコンピュータプログラム。
【請求項１５】
前記上位階層のメモリは、前記複数階層のメモリのうち最上位階層のメモリである請求項１１乃至１４のいずれか一項に記載のコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、大量のテキストデータストリームに含まれる多数のアイテムの中から出現頻度の高いアイテムを効率良く特定する方法、装置及びコンピュータプログラムに関する。
【背景技術】
【０００２】
アイテムが継続的に入力されるデータストリームに含まれるアイテムの出現頻度を近似的に特定する場合、通常はアイテムごとに出現した数をカウントして記憶する必要が生じるため、必要となるメモリ容量が膨大となる。そこで、メモリ効率を高めるアルゴリズムとして、例えば出現頻度が高いアイテムとそれ以外のアイテムとでメモリを２段に分ける近似計算手法であるロッシーカウンティング（Ｌｏｓｓｙ  Ｃｏｕｎｔｉｎｇ：以下、ＬＣ）が良く知られている（非特許文献１乃至３参照）。
【０００３】
一方、特許文献１乃至３では、ＬＣを応用して、データストリームに含まれるアイテムの出現頻度に応じてメモリを２段階に分け、一定の出現頻度以下のアイテムをカウント対象から除外することによりメモリ使用量を削減する例が開示されている。メモリ構造を多段とすることにより、出現頻度の高いアイテムを特定する場合にメモリを効率的に使用することができる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００４−２４０９８５号公報
【特許文献２】特開２００８−１５９０４７号公報
【特許文献３】特開２００４−１６４６１１号公報
【非特許文献】
【０００５】
【非特許文献１】ジー・エス・マンク（Ｇ．Ｓ．Ｍａｎｋｕ）、ラジーブ  モツワニ（Ｒａｊｅｅｖ  Ｍｏｔｗａｎｉ）、「データストリーム中の近似頻度カウント（Ａｐｐｒｏｘｉｍａｔｅ  Ｆｒｅｑｕｅｎｃｙ  Ｃｏｕｎｔｓ  ｏｖｅｒ  Ｄａｔａ  Ｓｔｒｅａｍｓ）」、ＶＬＤＢ  ２００２
【非特許文献２】ロング他（Ｒｏｎｇ  ｅｔ  ａｌ．）、「記憶ロッシーカウンティング：効果的かつ正確な、頻度の高いアイテムの同定アルゴリズム（Ｍｎｅｍｏｎｉｃ  Ｌｏｓｓｙ  Ｃｏｕｎｔｉｎｇ：Ａｎ  ｅｆｆｉｃｉｅｎｔ  ａｎｄ  ａｃｃｕｒａｔｅ  ｈｅａｖｙ−ｈｉｔｔｅｒｓ  ｉｄｅｎｔｉｆｉｃａｔｉｏｎ  ａｌｇｏｒｉｔｈｍｓ）」、ＩＰＣＣＣ２０１０
【非特許文献３】ディミトロプーロス他(Ｄｉｍｉｔｒｏｐｏｕｌｏｓ  ｅｔ  ａｌ．）、「ロッシーカウンティングの可能性：頻度の高いアイテムを発見する効果的なアルゴリズム（Ｐｒｏｂａｂｉｌｉｓｔｉｃ  Ｌｏｓｓｙ  Ｃｏｕｎｔｉｎｇ：Ａｎ  ｅｆｆｉｃｉｅｎｔ  ａｌｇｏｒｉｔｈｍ  ｆｏｒ  ｆｉｎｄｉｎｇ  ｈｅａｖｙ  ｈｉｔｔｅｒｓ）」、ＡＣＭ  ＳＩＧＣＯＭＭ  ２００８
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかし、データストリームのデータ量が膨大であり、出現頻度が高いアイテムの個数も膨大である場合、メモリ使用量がアイテムのデータ長に対して対数的に増加するＬＣの手法を用いる場合には、メモリ容量が不足する等、高い精度で出現頻度の高いアイテムを特定することができないおそれがあるという問題点があった。また、メモリ容量及びアクセス時間の相違する多段キャッシュメモリ等を用いることも考えられるが、ＬＣの手法を用いる場合、１度の計算で２段階にしか分割することができない。したがって、多段キャッシュメモリを用いた場合であっても、それほど出現頻度の計数効率が高くなるわけではなく、多段キャッシュメモリの性能を１００％発揮することができない。
【０００７】
本発明は斯かる事情に鑑みてなされたものであり、大量のテキストデータストリームに含まれるアイテムの中から出現頻度の高いアイテムを効率的に特定することができる方法、装置及びコンピュータプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００８】
上記目的を達成するために第１発明に係る方法は、複数階層のメモリを有するコンピュータ・システムによりテキストデータストリームに含まれるアイテムの中から出現頻度の高いアイテムを特定する方法であって、前記コンピュータ・システムは、前記複数階層のメモリのうち上位階層のメモリに、アイテムを識別する識別情報、及び該アイテムのカウント数を記憶し、前記複数階層のメモリのうち前記上位階層のメモリよりも下位階層のメモリに、前記識別情報のみを記憶し、前記方法は、テキストデータストリームの入力を受け付けるステップと、入力を受け付けたテキストデータストリームを分割したバケットに含まれるアイテムの識別情報が前記上位階層のメモリに記憶されていることに応答して、該アイテムのカウント数をインクリメントし、前記下位階層のメモリに記憶されていることに応答して、該アイテムの識別情報を初期カウント数とともに前記上位階層のメモリへ移動させ、どちらにも記憶されていないことに応答して、該アイテムの識別情報を初期カウント数とともに新たに前記上位階層のメモリに記憶するステップとを含む。
【０００９】
また、第２発明に係る方法は、第１発明において、前記上位階層のメモリに、前記識別情報に対応付けてカウント数の誤差を記憶し、前記上位階層のメモリに記憶されたカウント数及び誤差に基づいて、前記上位階層のメモリに記憶されている識別情報に対応するアイテムごとの単位バケット当たりのカウント数を算出するステップと、算出した単位バケット当たりのカウント数が第一の閾値より小さいことに応答して、該アイテムの識別情報を前記下位階層のメモリへ移動させるステップとをさらに含む。
【００１０】
また、第３発明に係る方法は、第２発明において、前記第一の閾値は、前記アイテムの出現頻度を現在カウントしているバケット番号である。
【００１１】
また、第４発明に係る方法は、第１乃至第３発明のいずれか１つにおいて、前記アイテムのカウント数が第二の閾値より小さいことに応答して、該アイテムの識別情報を、前記上位階層のメモリ及び前記下位階層のメモリから削除するステップを含む。
【００１２】
また、第５発明に係る方法は、第１乃至第４発明のいずれか１つにおいて、前記上位階層のメモリは、前記複数階層のメモリのうち最上位階層のメモリである。
【００１３】
次に、上記目的を達成するために第６発明に係る装置は、テキストデータストリームに含まれるアイテムの中から出現頻度の高いアイテムを特定する装置であって、複数階層のメモリを備え、該複数階層のメモリのうち上位階層のメモリに、アイテムを識別する識別情報、及び該アイテムのカウント数を記憶し、前記複数階層のメモリのうち前記上位階層のメモリよりも下位階層のメモリに、前記識別情報のみを記憶するデータ構造を有し、テキストデータストリームの入力を受け付ける入力受付手段と、入力を受け付けたテキストデータストリームを分割したバケットに含まれるアイテムの識別情報が前記上位階層のメモリに記憶されていることに応答して、該アイテムのカウント数をインクリメントし、前記下位階層のメモリに記憶されていることに応答して、該アイテムの識別情報を初期カウント数とともに前記上位階層のメモリへ移動させ、どちらにも記憶されていないことに応答して、該アイテムの識別情報を初期カウント数とともに新たに前記上位階層のメモリに記憶する記憶メモリ制御手段とを備える。
【００１４】
また、第７発明に係る装置は、第６発明において、前記上位階層のメモリに、前記識別情報に対応付けてカウント数の誤差を記憶しておき、前記上位階層のメモリに記憶されたカウント数及び誤差に基づいて、前記上位階層のメモリに記憶されている識別情報に対応するアイテムごとの単位バケット当たりのカウント数を算出する算出手段と、算出した単位バケット当たりのカウント数が第一の閾値より小さいことに応答して、該アイテムの識別情報を前記下位階層のメモリへ移動させるメモリ間移動手段とを備える。
【００１５】
また、第８発明に係る装置は、第７発明において、前記第一の閾値は、前記アイテムの出現頻度を現在カウントしているバケット番号である。
【００１６】
また、第９発明に係る装置は、第６乃至第８発明のいずれか１つにおいて、前記アイテムのカウント数が第二の閾値より小さいことに応答して、該アイテムの識別情報を、前記上位階層のメモリ及び前記下位階層のメモリから削除する削除手段を備える。
【００１７】
また、第１０発明に係る装置は、第６乃至第９発明のいずれか１つにおいて、前記上位階層のメモリは、前記複数階層のメモリのうち最上位階層のメモリである。
【００１８】
次に、上記目的を達成するために第１１発明に係るコンピュータプログラムは、テキストデータストリームに含まれるアイテムの中から出現頻度の高いアイテムを特定する装置で実行することが可能なコンピュータプログラムであって、前記装置は、複数階層のメモリを備え、該複数階層のメモリのうち上位階層のメモリに、アイテムを識別する識別情報、及び該アイテムのカウント数を記憶し、前記複数階層のメモリのうち前記上位階層のメモリよりも下位階層のメモリに、前記識別情報のみを記憶するデータ構造を有し、前記装置を、テキストデータストリームの入力を受け付ける入力受付手段、及び入力を受け付けたテキストデータストリームを分割したバケットに含まれるアイテムの識別情報が前記上位階層のメモリに記憶されていることに応答して、該アイテムのカウント数をインクリメントし、前記下位階層のメモリに記憶されていることに応答して、該アイテムの識別情報を初期カウント数とともに前記上位階層のメモリへ移動させ、どちらにも記憶されていないことに応答して、該アイテムの識別情報を初期カウント数とともに新たに前記上位階層のメモリに記憶する記憶メモリ制御手段として機能させる。
【００１９】
また、第１２発明に係るコンピュータプログラムは、第１１発明において、前記上位階層のメモリに、前記識別情報に対応付けてカウント数の誤差を記憶しておき、前記装置を、前記上位階層のメモリに記憶されたカウント数及び誤差に基づいて、前記上位階層のメモリに記憶されている識別情報に対応するアイテムごとの単位バケット当たりのカウント数を算出する算出手段、及び算出した単位バケット当たりのカウント数が第一の閾値より小さいことに応答して、該アイテムの識別情報を前記下位階層のメモリへ移動させるメモリ間移動手段として機能させる。
【００２０】
また、第１３発明に係るコンピュータプログラムは、第１２発明において、前記第一の閾値は、前記アイテムの出現頻度を現在カウントしているバケット番号である。
【００２１】
また、第１４発明に係るコンピュータプログラムは、第１１乃至第１３発明のいずれか１つにおいて、前記装置を、前記アイテムのカウント数が第二の閾値より小さいことに応答して、該アイテムの識別情報を、前記上位階層のメモリ及び前記下位階層のメモリから削除する手段として機能させる。
【００２２】
また、第１５発明に係るコンピュータプログラムは、第１１乃至第１４発明のいずれか１つにおいて、前記上位階層のメモリは、前記複数階層のメモリのうち最上位階層のメモリである。
【発明の効果】
【００２３】
本発明によれば、メモリに全てのデータを記憶することができない大量のテキストデータストリームを、所定のサイズのバケットに分割し、分割された各バケットに含まれるアイテムごとの出現回数を順次計数するとともに、出現頻度の低いアイテムについては識別情報のみを記憶するよう制御することで、出現頻度の高いアイテムを高い精度で特定することができ、全体としてメモリ使用量を大幅に削減することが可能となる。
【図面の簡単な説明】
【００２４】
【図１】本発明の実施の形態に係る出現アイテム計数装置の構成を模式的に示すブロック図である。
【図２】本発明の実施の形態に係る出現アイテム計数装置のメモリの構成を示すブロック図である。
【図３】本発明の実施の形態に係る出現アイテム計数装置の機能ブロック図である。
【図４】本発明の実施の形態に係る出現アイテム計数装置のＣＰＵのアイテムの記憶処理の手順を示すフローチャートである。
【図５】本発明の実施の形態に係る出現アイテム計数装置の記憶メモリ制御部の機能ブロック図である。
【図６】最上位階層のメモリから下位階層のメモリへアイテムを移動するか否かを判断する処理の例示図である。
【図７】本発明の実施の形態に係る出現アイテム計数装置の記憶メモリ制御部のメモリ間移動処理の手順を示すフローチャートである。
【発明を実施するための形態】
【００２５】
以下、本発明の実施の形態に係る、テキストデータストリームに含まれるアイテムの中から、出現頻度の高いアイテムを特定することができる出現アイテム計数装置について、図面に基づいて具体的に説明する。以下の実施の形態は、特許請求の範囲に記載された発明を限定するものではなく、実施の形態の中で説明されている特徴的事項の組み合わせの全てが解決手段の必須事項であるとは限らないことは言うまでもない。
【００２６】
また、本発明は多くの異なる態様にて実施することが可能であり、実施の形態の記載内容に限定して解釈されるべきものではない。実施の形態を通じて同じ要素には同一の符号を付している。
【００２７】
以下の実施の形態では、コンピュータ・システムにコンピュータプログラムを導入した装置について説明するが、当業者であれば明らかな通り、本発明はその一部をコンピュータで実行することが可能なコンピュータプログラムとして実施することができる。したがって、本発明は、テキストデータストリームに含まれるアイテムの中から、出現頻度の高いアイテムを特定することができる出現アイテム計数装置というハードウェアとしての実施の形態、ソフトウェアとしての実施の形態、又はソフトウェアとハードウェアとの組み合わせの実施の形態をとることができる。コンピュータプログラムは、ハードディスク、ＤＶＤ、ＣＤ、光記憶装置、磁気記憶装置等の任意のコンピュータで読み取ることが可能な記録媒体に記録することができる。
【００２８】
本発明の実施の形態によれば、メモリに全てのデータを記憶することができない大量のテキストデータストリームを、所定のサイズのバケットに分割し、分割された各バケットに含まれるアイテムごとの出現回数を順次計数するとともに、出現頻度の低いアイテムについては識別情報のみを記憶するよう制御することで、出現頻度の高いアイテムを高い精度で特定することができ、全体としてメモリ使用量を大幅に削減することが可能となる。
【００２９】
図１は、本発明の実施の形態に係る出現アイテム計数装置の構成を模式的に示すブロック図である。本発明の実施の形態に係る出現アイテム計数装置１は、少なくともＣＰＵ（中央演算装置）１１、メモリ１２、記憶装置１３、Ｉ／Ｏインタフェース１４、ビデオインタフェース１５、可搬型ディスクドライブ１６、通信インタフェース１７及び上述したハードウェアを接続する内部バス１８で構成されている。
【００３０】
ＣＰＵ１１は、内部バス１８を介して出現アイテム計数装置１の上述したようなハードウェア各部と接続されており、上述したハードウェア各部の動作を制御するとともに、記憶装置１３に記憶されたコンピュータプログラム１００に従って、種々のソフトウェア的機能を実行する。メモリ１２は、ＳＲＡＭ、ＳＤＲＡＭ等の揮発性メモリで構成され、コンピュータプログラム１００の実行時にロードモジュールが展開され、コンピュータプログラム１００の実行時に発生する一時的なデータ等を記憶する。
【００３１】
本実施の形態では、メモリ１２は多段メモリ構造を有しており、少なくとも２段のメモリ構造を有している。図２は、本発明の実施の形態に係る出現アイテム計数装置１のメモリ１２の構成を示すブロック図である。
【００３２】
図２に示すように、メモリ１２は、最上位階層のメモリＨと、複数の下位階層のメモリＭ１、Ｍ２、・・・、Ｍｂ（ｂは自然数）とで構成されている。最上位階層のメモリＨには、データストリームから読み出したアイテムを識別する識別情報ｈ、アイテムのカウント数（出現回数の累積値）ｆh 、及びカウント数の誤差Δh を記憶する。アイテムのカウント数ｆh 、及びカウント数の誤差Δh に基づいて、後述するようにアイテムを最上位階層のメモリＨに記憶するか、下位階層のメモリＭ１、Ｍ２、・・・のいずれかに記憶するかが制御される。
【００３３】
下位階層のメモリＭ１、Ｍ２、・・・には、アイテムを識別する識別情報ｈのみを記憶する。これにより、テキストデータストリームからアイテムを読み出して計数するメモリ使用量を大きく削減することができる。
【００３４】
下位階層のメモリＭ１、Ｍ２、・・・のどこに記憶するかは、そのアイテムのカウント数ｆh 及びカウント数の誤差Δhによる。すなわち下位階層のメモリＭ１、Ｍ２、・・・に移動させるアイテムの数を調整するパラメータθを用いて、（式１）により下位階層のメモリＭ１、Ｍ２、・・・のどこに記憶するかが決定される。
【００３５】
（ｂ−１）θ＜ｆh ＋Δh≦ｂθ  ・・・  （式１）
【００３６】
なお、（式１）において、ｆh は識別情報ｈのアイテムのカウント数、Δhはそのカウント数の誤差であり、出現頻度に応じてどのメモリに記憶するかを振り分ける。
【００３７】
図１に戻って、記憶装置１３は、内蔵される固定型記憶装置（ハードディスク）、ＲＯＭ等で構成されている。記憶装置１３に記憶されたコンピュータプログラム１００は、プログラム及びデータ等の情報を記録したＤＶＤ、ＣＤ−ＲＯＭ等の可搬型記録媒体９０から、可搬型ディスクドライブ１６によりダウンロードされ、実行時には記憶装置１３からメモリ１２へ展開して実行される。もちろん、通信インタフェース１７を介して接続されている外部コンピュータからダウンロードされたコンピュータプログラムであっても良い。
【００３８】
通信インタフェース１７は内部バス１８に接続されており、インターネット、ＬＡＮ、ＷＡＮ等の外部のネットワークに接続されることにより、外部コンピュータ等とデータ送受信を行うことが可能となっている。
【００３９】
Ｉ／Ｏインタフェース１４は、キーボード２１、マウス２２等の入力装置と接続され、データの入力を受け付ける。ビデオインタフェース１５は、ＣＲＴディスプレイ、液晶ディスプレイ等の表示装置２３と接続され、表示装置２３には、例えば出現頻度の高い順にアイテムを列挙して表示する。
【００４０】
図３は、本発明の実施の形態に係る出現アイテム計数装置１の機能ブロック図である。図３において、出現アイテム計数装置１のテキストデータストリーム入力受付部（入力受付手段）３０１は、大量のアイテムが含まれたテキストデータストリームの入力を受け付ける。効率的にアイテムごとの出現回数を計数するために、所定のサイズのバケットに分割して、各バケットに含まれるアイテムを読み出し、その出現回数を計数する。
【００４１】
すなわち、バケット読出部３０２は、入力を受け付けたテキストデータストリームを所定のサイズのバケットに分割して、各バケットに含まれるアイテムを読み出す。アイテム計数部３０３は、読み出されたアイテムごとの出現回数を計数する。
【００４２】
記憶メモリ制御部（記憶メモリ制御手段）３０４は、テキストデータストリームから読み出したアイテムの識別情報ｈが、現在最上位階層のメモリＨに記憶されているか、下位階層のメモリＭ１、Ｍ２、・・・のいずれかに記憶されているかに応じて、メモリへの記憶形態を制御する。すなわち、読み出したアイテムの識別情報ｈが最上位階層のメモリＨに既に記憶されている場合、該アイテムは出現頻度の高いアイテムである、又は直近で出現したアイテムであると既に認識されていると判断することができる。したがって、最上位階層のメモリＨに記憶されている該アイテムの識別情報ｈに対応付けられているカウント数ｆh を‘１’インクリメントするよう、最上位階層のメモリＨを更新する。
【００４３】
一方、読み出したアイテムの識別情報ｈが下位階層のメモリＭ１、Ｍ２、・・・のいずれかに記憶されている場合、該アイテムが下位階層のどのメモリに記憶されているかを特定して、特定された下位階層のメモリからアイテムの識別情報ｈを削除するとともに、初期カウント数を‘１’として、該アイテムの識別情報ｈを初期カウント数‘１’とともに最上位階層のメモリＨへ移動させる。
【００４４】
この場合、カウント数の誤差Δh は、下位階層のどのメモリに記憶されているかによって算出される。すなわち、読み出したアイテムの識別情報ｈがｂ番目の下位階層のメモリＭｂに記憶されている場合、カウント数の誤差Δh は（式２）のように算出される。
【００４５】
Δh ＝  （ｂ−１／２）θ  ・・・  （式２）
【００４６】
したがって、最上位階層のメモリＨには、（式３）のようなデータ構造でアイテムが記憶される。
【００４７】
Ｈ  ←（ｈ、１、（ｂ−１／２）θ）  ・・・  （式３）
【００４８】
また、最上位階層のメモリＨにも、下位階層のメモリＭ１、Ｍ２、・・・にも、読み出したアイテムの識別情報ｈが記憶されていない場合、すなわち初出のアイテムである場合には、該アイテムの識別情報ｈを初期カウント数‘１’及びカウント数の誤差‘０’とともに、新たに最上位階層のメモリＨに記憶する。
【００４９】
図４は、本発明の実施の形態に係る出現アイテム計数装置１のＣＰＵ１１のアイテムの記憶処理の手順を示すフローチャートである。図４において、出現アイテム計数装置１のＣＰＵ１１は、大量のアイテムが含まれているテキストデータストリームの入力を受け付ける（ステップＳ４０１）。ＣＰＵ１１は、効率的にアイテムごとの出現回数を計数するために、所定のサイズのバケットに分割して、各バケットに含まれるアイテムごとの出現回数を計数する（ステップＳ４０２）。
【００５０】
ＣＰＵ１１は、読み出したアイテム（正確には識別情報ｈであるが、以下、アイテムと略す）が最上位階層のメモリＨに記憶されているか否かを判断する（ステップＳ４０３）。ＣＰＵ１１が、最上位階層のメモリＨに記憶されていると判断した場合（ステップＳ４０３：ＹＥＳ）、ＣＰＵ１１は、最上位階層のメモリＨに記憶されている該アイテムに対応付けられているカウント数ｆh を‘１’インクリメントする（ステップＳ４０４）。
【００５１】
ＣＰＵ１１が、最上位階層のメモリＨに記憶されていないと判断した場合（ステップＳ４０３：ＮＯ）、ＣＰＵ１１は、読み出したアイテムが下位階層のメモリＭ１、Ｍ２、・・・のいずれかに記憶されているか否かを判断する（ステップＳ４０５）。ＣＰＵ１１が、下位階層のメモリＭ１、Ｍ２、・・・のいずれかに記憶されていると判断した場合（ステップＳ４０５：ＹＥＳ）、ＣＰＵ１１は、読み出したアイテムが下位階層のメモリＭ１、Ｍ２、・・・のどのメモリに記憶されているかを特定する（ステップＳ４０６）。
【００５２】
ＣＰＵ１１は、特定された下位階層のメモリに基づいて、カウント数の誤差Δh を算出し（ステップＳ４０７）、算出したカウント数の誤差Δh 、該アイテムの識別情報ｈ、及び初期カウント数‘１’を該アイテムに関する一組のデータとして最上位階層のメモリＨへ記憶する（ステップＳ４０８）。ＣＰＵ１１は、下位階層のメモリＭ１、Ｍ２、・・・から該アイテムを削除する（ステップＳ４０９）。
【００５３】
ＣＰＵ１１が、下位階層のメモリＭ１、Ｍ２、・・・のいずれにも記憶されていないと判断した場合（ステップＳ４０５：ＮＯ）、ＣＰＵ１１は、該アイテムを、新しいアイテムとして初期カウント数‘１’とともに、最上位階層のメモリＨに記憶する（ステップＳ４１０）。
【００５４】
このようにすることで、複数の階層を有するメモリに記憶されている場合であっても、テキストデータストリームに含まれるアイテムの出現回数を確実に計数することができる。特に下位階層のメモリＭ１、Ｍ２、・・・にはアイテムの識別情報ｈしか記憶されていないものの、どのメモリに記憶されているかに応じてカウント数ｆh が一定範囲内であると容易に推定することができる。
【００５５】
なお、上述した処理を繰り返した場合、最上位階層のメモリＨにアイテムが増加する。そこで、一定数のアイテムを処理した時点で、出現回数の小さいアイテムについては下位階層のメモリＭ１、Ｍ２、・・・へ移動させる移動処理が必要となる。図５は、本発明の実施の形態に係る出現アイテム計数装置１の記憶メモリ制御部３０４の機能ブロック図である。図５において、出現アイテム計数装置１の記憶メモリ制御部３０４は、単位バケット当たりカウント数算出部（算出手段）５０１、移動先メモリ特定部５０２、メモリ間移動部（メモリ間移動手段）５３２を備えている。
【００５６】
単位バケット当たりカウント数算出部５０１は、最上位階層のメモリＨに記憶されている一のアイテムの識別情報ｈを読み出し、対応付けて記憶されているカウント数ｆh及びカウント数の誤差Δhに基づいて、単位バケット当たりのカウント数を算出する。具体的には、一のアイテムについて、記憶されている一組のデータ（ｈ、ｆh 、Δh ）を読み出す。
【００５７】
次に、単位バケット当たりのカウント数ｂを（式４）により算出する。（式４）では、パラメータθにより、下位階層のメモリＭ１、Ｍ２、・・・に移動させるアイテムの数を調整することができる。
【００５８】
ｂ＝（ｆh ＋Δh ）／θ  ・・・  （式４）
【００５９】
移動先メモリ特定部５０２は、算出した単位バケット当たりのカウント数が第一の閾値より小さいか否かを判断し、小さい場合には該アイテムを移動させる下位階層のメモリを特定する。すなわち、算出した単位バケット当たりのカウント数ｂに基づいて、下位階層のメモリＭ１、Ｍ２、・・・のいずれかへ移動させる。下位階層のメモリＭ１、Ｍ２、・・・では、アイテムの識別情報ｈのみを記憶しているが、単位バケット当たりのカウント数ｂに応じてどこに記憶するかを特定することにより、どのメモリに記憶されているかに応じてアイテムの出現頻度を推定することができるようにしている。
【００６０】
下位階層のメモリＭｂに記憶するアイテムのカウント数ｆh は、（式１）に示すように（ｂ−１）θより大きくｂθ以下であれば良い。したがって、最上位階層のメモリＨに記憶されていたアイテムの単位バケット数当たりのカウント数ｂによって、移動先の下位階層のメモリを一義的に特定することができる。
【００６１】
メモリ間移動部５０３は、特定された下位階層のメモリに、アイテムの識別情報ｈを記憶し、最上位階層のメモリＨから該アイテムの識別情報ｈを削除する。これにより、下位階層のメモリにアイテムを移動させることができる。
【００６２】
図６は、最上位階層のメモリＨから下位階層のメモリＭ１、Ｍ２、・・・へアイテムを移動するか否かを判断する処理の例示図である。図６では、現在のバケット番号ｂcurrを‘５００’とし、各バケットの長さを‘１０００’、θを‘２０’とする。この場合、現在のバケットに含まれるアイテムを読み出して出現回数を計数するまでに、５０００００（＝５００×１０００）個のアイテムを処理していることになる。
【００６３】
まずは、最上位階層のメモリＨに記憶されているアイテムごとにカウント数ｆh と誤差Δh との和を算出する。図６（ａ）の場合、（ｆh ＋Δh ）を‘１０００’としているので、単位バケット当たりのカウント数ｂは、‘５０’（＝１０００／２０）となる。
【００６４】
ここで、例えば単位バケット当たりに、少なくとも現在のバケット番号ｂcurrと同数よりも多くアイテムが含まれる場合に出現頻度が高いと判断するよう設定した場合、単位バケット当たりのカウント数ｂが現在のバケット番号ｂcurrよりも小さいか否かで下位階層のメモリＭ１、Ｍ２、・・・へ移動するか否かを判断すれば良い。すなわち、単位バケット当たりのカウント数ｂが現在のバケット番号ｂcurr以上である場合には、出現頻度が高いと判断してアイテムの識別情報を最上位階層のメモリＨに記憶しておくが、単位バケット当たりのカウント数ｂが現在のバケット番号ｂcurrよりも小さい場合には、出現頻度が低いと判断してアイテムの識別情報を下位階層のメモリＭ１、Ｍ２、・・・へと移動する。
【００６５】
図６（ａ）の場合、算出した単位バケット当たりのカウント数ｂが‘５０’であり、現在のバケット番号ｂcurr（＝５００）よりも小さいので、出現頻度が低いと判断して、該アイテムの識別情報ｈを下位階層のメモリＭ１、Ｍ２、・・・へと移動する。図６（ｂ）の場合、（ｆh ＋Δh ）を‘１０００００’としているので、単位バケット当たりのカウント数ｂは、‘５０００’（＝１０００００／２０）であり、現在のバケット番号ｂcurr（＝５００）以上であることから出現頻度が高いと判断して、該アイテムの識別情報ｈは最上位階層のメモリＨに記憶したままにしておく。
【００６６】
図７は、本発明の実施の形態に係る出現アイテム計数装置１の記憶メモリ制御部３０４のメモリ間移動処理の手順を示すフローチャートである。図７において、出現アイテム計数装置１のＣＰＵ１１は、処理したアイテムの数を計数するカウンタを初期値である‘１’に設定し（ステップＳ７０１）、図４に示す処理を実行する（ステップＳ７０２）。ＣＰＵ１１は、カウンタが第一の閾値以上であるか否かを判断する（ステップＳ７０３）。第一の閾値の大きさによって、下位階層のメモリに記憶するべきアイテムの記憶容量が決まる。
【００６７】
ＣＰＵ１１が、カウンタが第一の閾値より小さいと判断した場合（ステップＳ７０３：ＮＯ）、ＣＰＵ１１は、カウンタを‘１’インクリメントし（ステップＳ７０４）、処理をステップＳ７０２へ戻して上述した処理を繰り返す。ＣＰＵ１１が、カウンタが第一の閾値以上であると判断した場合（ステップＳ７０３：ＹＥＳ）、ＣＰＵ１１は、最上位階層のメモリＨに記憶されている一のアイテムを読み出す（ステップＳ７０５）。具体的には、記憶されている一のアイテムの一組の記憶データ（ｈ、ｆh 、Δh ）を読み出す。
【００６８】
ＣＰＵ１１は、アイテム（正確には識別情報ｈであるが、図４と同様に、以下、アイテムと略す）に対応付けて記憶されているカウント数ｆh 、及びカウント数の誤差Δh に基づいて、単位バケット当たりのカウント数ｂを（式４）により算出する（ステップＳ７０６）。ＣＰＵ１１は、算出した単位バケット当たりのカウント数ｂが現在のバケット番号ｂcurrより小さいか否かを判断し（ステップＳ７０７）、ＣＰＵ１１が、算出した単位バケット当たりのカウント数ｂが現在のバケット番号ｂcurrより小さいと判断した場合（ステップＳ７０７：ＹＥＳ）、ＣＰＵ１１は、該アイテムを下位階層のメモリＭ１、Ｍ２、・・・のいずれかに記憶し（ステップＳ７０８）、最上位階層のメモリＨから該アイテムの一組の記憶データ（ｈ、ｆh 、Δh ）を削除する（ステップＳ７０９）。
【００６９】
ＣＰＵ１１が、算出した単位バケット当たりのカウント数ｂが現在のバケット番号ｂcurr以上であると判断した場合（ステップＳ７０７：ＮＯ）、ＣＰＵ１１は、ステップＳ７０８、ステップＳ７０９の処理をスキップし、最上位階層のメモリＨに記憶されているすべてのアイテムを読み出したか否かを判断する（ステップＳ７１０）。
【００７０】
ＣＰＵ１１が、まだ読み出していないアイテムが存在すると判断した場合（ステップＳ７１０：ＮＯ）、ＣＰＵ１１は、次のアイテムを最上位階層のメモリＨから読み出し（ステップＳ７１１）、処理をステップＳ７０６に戻して上述した処理を繰り返す。ＣＰＵ１１が、すべてのアイテムを読み出したと判断した場合（ステップＳ７１０：ＹＥＳ）、ＣＰＵ１１は、処理を終了する。
【００７１】
このように、処理したアイテムの数を計数しながら、一定間隔ごとに最上位階層のメモリＨに記憶されているアイテムを出現頻度に応じて下位階層のメモリＭ１、Ｍ２、・・・に移動させることにより、最上位階層のメモリＨに記憶するアイテムの数を一定数を超えないように制御することができ、メモリ使用量を大幅に削減することが可能となる。
【００７２】
また、出現回数が所定数よりも少ない場合、該アイテムは記憶しておく意味がないと考えることもできる。（ｆh +Δh）／θが第二の閾値、例えば現在のバケット番号ｂcurrの１／４より小さい場合には、該アイテムの識別情報ｈを最上位階層のメモリＨからも、下位階層のメモリＭ１、Ｍ２、・・・からも、削除するようにしても良い。これにより、不要なアイテムの識別情報を記憶する必要がなくなるので、よりメモリ容量に余裕ができる。
【００７３】
以上のように本実施の形態によれば、メモリに全てのデータを記憶することができない大量のテキストデータストリームを、所定のサイズのバケットに分割し、分割された各バケットに含まれるアイテムごとの出現回数を順次計数するとともに、出現頻度の低いアイテムについては識別情報のみを記憶するよう制御することで、出現頻度の高いアイテムを高い精度で特定することができ、全体としてメモリ使用量を大幅に削減することが可能となる。
【００７４】
なお、最上位階層のメモリＨと下位階層のメモリＭ１、Ｍ２、・・・との２段のメモリ構造に限定されるものではなく、さらに下位の階層のメモリを備えておき、出現回数が極端に少ないアイテムについては、削除するのではなく最下位階層のメモリに記憶するようにしても良い。最上位階層のメモリＨとしては比較的高速にアクセスすることが可能なハッシュマップ構造のメモリを、下位階層のメモリＭ１、Ｍ２、・・・としてはダブルアレイ構造のメモリを、それぞれ採用することが好ましい。これにより、全体としてのアクセス速度を高めることができるからである。また、最下位階層のメモリには、ＬＯＵＤＳのような木構造を有するメモリを採用しても良い。最下位階層のメモリであれば、アクセス速度が問題とはならないからである。
【００７５】
また、本発明は上記実施例に限定されるものではなく、本発明の趣旨の範囲内であれば多種の変更、改良等が可能である。例えば上述した実施例では、最上位階層のメモリにアイテムを識別する識別情報、及び該アイテムのカウント数を記憶しているが、上位階層と下位階層とが区別できる複数階層のメモリ構造であれば、最上位階層のメモリに限定されるものではない。
【符号の説明】
【００７６】
１  出現アイテム計数装置
１１  ＣＰＵ
１２  メモリ
１３  記憶装置
１４  Ｉ／Ｏインタフェース
１５  ビデオインタフェース
１６  可搬型ディスクドライブ
１７  通信インタフェース
１８  内部バス
９０  可搬型記録媒体
１００  コンピュータプログラム
【図１】
0005818740.tif 000002
【図２】
0005818740.tif 000003
【図３】
0005818740.tif 000004
【図４】
0005818740.tif 000005
【図５】
0005818740.tif 000006
【図６】
0005818740.tif 000007
【図７】
0005818740.tif 000008