(58)【調査した分野】(Int.Cl.,DB名)
前記リンクは、前記対象データごとの前記第1リストの各要素が、当該要素に含まれるのと同一の前記属性の情報を含む最も近い後続の第1リストの要素を特定する情報を含むことにより、設定される、請求項1に記載のシステム。
前記対象データごとの前記第1リストは、最も古い第1リストを最後尾として作成された順に並び、新規に作成された第1リストを追加する場合は、第1リストの並びの先頭に配置され、かつ、新規に作成された当該第1リストの各要素に含まれる属性に関するリンクが更新される、請求項1に記載のシステム。
前記対象データごとの前記第1リストは、最も古い第1リストを最後尾として作成された順に並び、最も古い第1リストを削除する場合は、最後尾の第1リストが削除され、かつ、削除された当該第1リストの各要素に含まれる属性に関するリンクが更新される、請求項1に記載のシステム。
【発明を実施するための形態】
【0023】
以下、添付図面を参照して、本発明の実施形態について詳細に説明する。本実施形態による集計システムは、複数種類の属性を持つ対象データの集合中に出現する属性を、何らかの規則に基づいて所定の基準個数だけ求める集計処理を行う。以下では、対象データの一例として、検索等の何らかの手段で処理対象として絞り込まれた文書、属性の一例として、各文書に含まれる単語を用いた場合を例として説明する。また、この例において、集計の規則は、絞り込まれた文書全体における出現数の多いものから順に基準個数(k個)の単語を選択するものとする。
【0024】
<システム構成>
図1は、本実施形態による集計システムの構成を示す図である。
図1に示すように、本実施形態の集計システム100は、文書DB(データベース)200に接続されている。文書DB200は、処理対象となり得る文書を格納している。集計処理の対象となる文書は、例えば、文書DB200に格納されている文書のうちで、何らかの検索条件に基づく検索等により指定された(絞り込まれた)文書とすることができる。
【0025】
本実施形態では、集計システム100は、文書DB200に格納されている文書に関して、何らかの検索条件に基づく検索により集計処理の対象となる文書を指定する(絞り込む)。例えば、特定の単語を含む文書を検索し、得られた文書を集計処理の対象とする。そして、得られた文書に含まれる単語のうち、出現頻度の高いものから順に、予め定められた個数(k個)の単語を求める。
図1に示すように、本実施形態の集計システム100は、入力受け付け部110と、インデックス記憶部120と、集計処理部130と、判定部140と、インデックス更新部150とを備える。
【0026】
入力受け付け部110は、集計処理を行うための入力を受け付ける。具体的には、入力受け付け部110は、集計処理の対象となる文書を指定するための絞り込み条件(検索条件等)の入力を受け付ける。また、入力受け付け部110は、集計しようとする属性を指定する情報の入力を受け付ける。
【0027】
インデックス記憶部120は、集計処理に用いられるインデックスを記憶している。本実施形態では、文書の識別情報からその文書に含まれる単語のリストを指定するDtoKインデックスが用いられる。DtoKインデックスは、文書DB200に格納されている文書ごとに作成されている。また、本実施形態では、DtoKインデックスにおける文書ごとの単語のリストにおいて、各文書に出現する同一の単語間にリンクを設定している。言い換えれば、相異なる文書のDtoKインデックスに含まれる同一の単語どうしを関連付けている。これにより、例えば、ある単語をキーワードとして、この単語間のリンクを辿ることにより、キーワードを含む文書を特定することができる。このDtoKインデックスのデータ構造の詳細については後述する。
【0028】
集計処理部130は、文書DB200に格納されている文書のうち、集計処理の対象として指定された文書(以下、指定文書と呼ぶ)を対象として、指定文書全体における出現頻度の高い単語を特定し、集計する。具体的には、集計処理部130は、出現頻度が予め定められた上位k個に含まれる単語を集計する。本実施形態の集計処理部130は、次の何れかの手法を用いて集計処理を行う。
【0029】
すなわち、一つは、集計対象(集計される属性)の単語ごとに、その単語を含む文書の数を調べ、最も多くの文書に含まれる単語から降順にk個の単語を選択する処理である。以下、この手法を第1手法と呼ぶ。より一般的に言い換えれば、第1手法は、属性ごとに、その属性を有する対象データを調べ、対象データとの関係が所定の基準を満たす属性を集計する手法である。
【0030】
他の一つは、指定文書ごとに、その指定文書に含まれる単語を調べ、最も多くの指定文書に含まれる単語から降順にk個の単語を選択する処理である。以下、この手法を第2手法と呼ぶ。より一般的に言い換えれば、第2手法は、対象データごとに、その対象データが有する属性を調べ、対象データとの関係が所定の基準を満たす属性を集計する手法である。
【0031】
本実施形態において、第1手法の処理は、DtoKインデックスの単語間に設けられたリンクを辿ることによって行われる。集計処理部130の動作の詳細については後述する。
【0032】
また、集計処理部130は、出力候補保持部131を有している。出力候補保持部131には、集計処理部130による集計処理の過程で取得される、集計結果として出力する単語の候補が保持される。すなわち、集計処理部130は、第1手法または第2手法による処理において、集計対象となる個々の単語に対して、集計結果として出力する単語に該当するか否かを順次判断する。そして、集計結果として出力する単語に該当すると判断した単語を、出力候補保持部131に保持させる。言い換えれば、出力候補保持部131に保持される単語は、集計処理部130による集計処理の実行途中における、既に処理の済んだ単語である。集計処理が完了した後、集計処理部130は、出力候補保持部131に保持されている単語を、集計結果として出力する。
【0033】
判定部140は、集計処理部130による集計処理を第1手法と第2手法のどちらで行うかを判定する。上記の第1手法による処理は、集計対象である単語の種類が多い場合、多大な処理時間を要する。一方、第2手法による処理は、集計処理の対象である文書の数が多い場合、多大な処理時間を要する。そこで、判定部140は、集計処理部130による集計処理が効率良く実行されるように、第1手法と第2手法のどちらで集計処理を行うかを決定する。なお、具体的な決定方法は、特に限定しない。例えば、集計処理の対象である文書の数が予め設定された閾値よりも多い場合に第1手法により集計処理を実行すると決定し、文書の数が閾値以下である場合に第2手法により集計処理を実行すると決定しても良い。また、第1手法で集計処理を行う場合に要する処理時間と、第2手法で集計処理を行う場合に要する処理時間とを予想し、予想される処理時間の短い方の手法により集計処理を行うと決定しても良い。
【0034】
インデックス更新部150は、インデックス記憶部120に記憶されているインデックスを更新する。具体的には、インデックス更新部150は、文書DB200の更新(文書の追加または削除)に応じて、追加された文書に対応するDtoKインデックスを追加したり、削除したりする。また、インデックス更新部150は、DtoKインデックスの更新に伴い、DtoKインデックスを管理するためのDtoKリスト(後述)も更新する。また、インデックス更新部150は、新たにDtoKインデックスを追加する更新処理を繰り返すことにより、インデックス記憶部120に記憶されるDtoKインデックス群を作成する。インデックス更新部150による更新処理の詳細については後述する。
【0035】
<インデックスの構成>
図2は、本実施形態のインデックス記憶部120に記憶されるインデックスの構成例を示す図である。
図2に示すように、本実施形態では、単語リスト121と、文書DB200に格納されている文書ごとのDtoKインデックス122とが用意される。言い換えれば、このDtoKインデックス122は、文書(対象データ)ごとに作成された、文書に含まれる単語(対象データが有する属性)のリスト(第1リスト)である。なお、
図2に示す例では、n個の文書に対するDtoKインデックス122が存在し、最後に文書DB200に格納された文書(最も新しい文書)から順に、(1)〜(n)の枝番を付している。すなわち、符号122(n)は、n個の文書の中で最初に文書DB200に格納された文書(最も古い文書)に対するDtoKインデックス122であり、符号122(1)は、最後に文書DB200に格納された文書に対するDtoKインデックス122である。すなわち、DtoKインデックス122は、最初に作成されたDtoKインデックス122を最後尾として、作成された順に並ぶ。
【0036】
また、特に図示しないが、インデックス記憶部120は、DtoKインデックス122を
図2に示す枝番の順番で管理するためのDtoKリストを記憶している。このDtoKリストは、DtoKインデックス122の識別情報di(i:1≦i≦n)を添え字「i」の昇順に並べて登録している。したがって、DtoKリストにおいて、先頭のDtoKインデックス122の識別情報はd1であり、最後のDtoKインデックス122の識別情報はdnである。また、識別情報diの添え字「i」は、
図2に示したDtoKインデックス122の枝番(1)〜(n)に対応している。集計処理部130は、DtoKリストから各DtoKインデックス122(1)〜122(n)へランダム・アクセスが可能である。また、DtoKリストは、リストの先頭と終端に対して、エントリ(要素)の追加および削除が可能なリスト構造である。このようなリストは、例えば、Java(登録商標)のjava.util.LinkedListにより実現される。
【0037】
単語リスト121は、文書DB200に格納されている文書に含まれる全ての単語の識別情報のリスト(第2リスト)である。この単語リスト121には、各単語に関して、その単語の識別情報、その単語を含む文書の数(以下、出現文書数と呼ぶ)、その単語に関するリンク先の情報が登録される。リンク先の情報については後述する。また、単語リスト121は、各単語の識別情報に関してランダム・アクセスが可能であり、かつ、出現文書数に関してソート順を保持するマップ構造である。このようなリスト(マップ)は、例えば、Javaのjava.util.TreeMapにより実現される。
【0038】
図2に示す例では、単語リスト121には、m個(識別情報「1」〜「m」)の単語が収録されている。単語リスト121に収録された単語は、最も多くの文書に含まれる単語から降順に並べられている。言い換えれば、単語リスト121において、対象データの属性である各単語は、対象データである文書全体における個々の文書に出現する頻度の降順にソートされている。なお、文書DB200が更新されて文書が追加された場合、追加された文書にのみ含まれる単語が存在するならば、その単語に関するエントリが、単語リストの末尾に追加される。すなわち、
図2に示す単語リスト121においては、識別情報「m」のエントリの後に、識別情報「m+1」、「m+2」、……、というようにエントリが追加されていく。
【0039】
DtoKインデックス122は、文書DB200に格納されている文書ごとに作成された、個々の文書に含まれる単語の情報を参照するインデックスである。DtoKインデックス122には、対応する文書に含まれる各単語に関して、その単語の識別情報と、その単語に付与された点数と、その単語に関するリンク先の情報が登録される。リンク先の情報については後述する。単語に付与される点数は、任意に定義し、設定して良い。例えば、TF−IDF(Term Frequency − Inverse Document Frequency)による重みの値などを点数として用いることができる。本実施形態では、各文書における、その単語の出現数を点数とする。また、DtoKインデックス122に収録される単語は、この点数の値が最も大きい単語から降順に並べられている。
【0040】
本実施形態において、単語リスト121および各DtoKインデックス122(1)〜122(n)に登録されている各単語は、同一の単語どうしの間にリンクが張られている。本実施形態では、単語リスト121に登録されている識別情報を始点として、DtoKインデックス122の枝番の順(すなわち、新しい文書から古い文書へ向かう順)にしたがってリンクが張られる。言い換えれば、属性である単語の間のリンクは、対象データである文書ごとのDtoKインデックス122(1)〜122(n)の順序に基づく特定の順序で張られる。また、枝番で次のDtoKインデックス122に同一の単語が無い場合は、枝番がより後のDtoKインデックス122であって同一の単語を含むもののうち、直近のDtoKインデックス122に含まれる単語に対してリンクが張られる。
【0041】
具体的に、識別情報「1」の単語(以下、単語「1」と記す)について、
図2を参照して設定されるリンクを説明する。単語「1」のリンクは、まず、単語リスト121の単語「1」から、DtoKインデックス122(1)の単語「1」へ張られている。そして、DtoKインデックス122(1)の単語「1」から、DtoKインデックス122(2)の単語「1」へ張られている。以下、図示は省略するが、DtoKインデックス122の枝番の順にしたがって、単語「1」間のリンクが張られている。
【0042】
ただし、ある文書が単語「1」を含まない場合、その文書のDtoKインデックス122を飛ばして、より後方のDtoKインデックス122に対してリンクが設定される。例えば、図示しないDtoKインデックス122(3)に対応する文書に単語「1」が含まれていない場合を考える。この場合、DtoKインデックス122(2)の単語「1」からのリンクは、DtoKインデックス122(3)を飛ばして、DtoKインデックス122(4)の単語「1」へ張られる。同様に、DtoKインデックス122(4)に対応する文書にも単語「1」が含まれていない場合、DtoKインデックス122(2)の単語「1」からのリンクは、DtoKインデックス122(5)の単語「1」へ張られる。
【0043】
図2に示す例では、識別情報「2」の単語は、DtoKインデックス122(1)に対応する文書に含まれていない。したがって、識別情報「2」の単語(以下、単語「2」と記す)のリンクは、DtoKインデックス122(1)を飛ばして、単語リスト121の単語「2」からDtoKインデックス122(2)の単語「2」へ張られている。
【0044】
したがって、本実施形態によるインデックスの単語間のリンクにおいて、DtoKインデックス122(n)に含まれる各単語は、その単語に関するリンクの終端となる。そして、DtoKインデックス122(n)に含まれていない各単語に関しては、DtoKインデックス122(n)よりも前方のDtoKインデックス122(1)〜122(n−1)の何れかにリンクの終端が存在する。
【0045】
本実施形態によるインデックスの単語間のリンクは、既存の種々の手段により設定して良い。一例としては、単語リスト121および各DtoKインデックス122(1)〜122(n)における各単語のエントリに、リンク先のDtoKインデックス122およびエントリを指定する情報を記述することによって実現される。他の一例としては、単語リスト121および各DtoKインデックス122(1)〜122(n)における各単語のエントリに、他の文書のDtoKインデックス122に含まれている同一の単語のエントリへのポインタを記述することによって実現される。
【0046】
<集計処理部の動作>
集計処理部130は、集計処理の対象として指定された指定文書全体における出現頻度の高い単語を特定し集計する処理を、第1手法または第2手法の一方により行う。第1手法は、集計対象(集計される属性)の単語ごとに、その単語を含む指定文書の数を調べ、最も多くの指定文書に含まれる単語から降順にk個の単語を選択する処理である。また、第2手法は、指定文書ごとに、その文書に含まれる単語を調べ、最も多くの文書に含まれる単語から降順にk個の単語を選択する処理である。
【0047】
ここで、第2手法は、従来のDtoKインデックスを用いた既存の集計処理と同様である。本実施形態においても、
図2を参照して説明したDtoKインデックス122を用いて従来と同様の処理を行うことができる。すなわち、集計処理部130は、まず、指定文書のDtoKインデックス122に基づいて、各指定文書に含まれる単語のリストを作成する。そして、集計処理部130は、作成したリストに基づき、最も多くの文書に含まれる単語から降順にk個の単語を選択する。
【0048】
一方、第1手法は、従来技術におけるKtoDインデックスを用いた既存の集計処理と同様の考え方による処理である。ただし、本実施形態では、KtoDインデックスを用いず、
図2を参照して説明したDtoKインデックス122における単語間のリンクを利用して処理を行う。
【0049】
図3および
図4は、第1の手法により集計処理を行う場合の集計処理部130の動作を示すフローチャートである。集計処理部130は、単語リスト121に収録された単語に対する処理を、例えば、識別情報「1」の単語から順に処理対象として着目して行う。すなわち、集計処理部130は、まず、未処理の単語が残っているか否かを判断する(S301)。そして、未処理の単語がある場合は(S301でYes)、集計処理部130は、未処理の単語から処理対象の単語(以下、対象単語と呼ぶ)を選択する(S302)。ここで、対象単語として選択される単語は、例えば、未処理の単語のうちで識別情報の値が最も小さい単語である。単語リスト121に収録された単語は、最も多くの文書に含まれる単語から降順に並べられている。したがって、識別情報の値が最も小さい単語は、未処理の単語のうちで最も多くの文書に含まれる単語である。
【0050】
次に、集計処理部130は、出力候補保持部131に保持されている処理済みの単語(以下、処理済み単語と呼ぶ)の数が集計数のk個か否かを判断する(S303)。そして、処理済み単語の数がk個であれば(S303でYes)、集計処理部130は、対象単語の出現文書数「g」を取得する(S304)。この出現文書数「g」は、文書DB200に格納されている文書全体のうち、対象単語を含む文書の数である。
【0051】
次に、集計処理部130は、対象単語の出現文書数「g」と、出力候補保持部131に保持されている各処理済み単語の出現文書数「h1」とを比較する(S305)。ここで、処理済み単語の出現文書数「h1」は、その処理済み単語を含む指定文書の数である。すなわち、処理済み単語の出現文書数「h1」は、文書DB200に格納されている文書全体のうち、その処理済み単語を含み、かつ、集計処理の対象として指定された文書の数である。後述するように、処理済み単語の出現文書数は、出力候補保持部131に保持されている。対象単語の出現文書数「g」が何れかの処理済み単語の出現文書数「h1」よりも大きい場合(S306でYes)、集計処理部130は、この対象単語に関して、DtoKインデックス122のリンクを辿って、この対象単語を含む文書のリストを取得する(S307)。
【0052】
次に、集計処理部130は、取得したリストに含まれる文書のうち、絞り込み条件を満足する文書(指定文書)の数を算出する(S308)。そして、集計処理部130は、算出された指定文書の数「h2」と、各処理済み単語の出現文書数「h1」とを比較する(S309)。指定文書数「h2」が何れかの処理済み単語の出現文書数「h1」よりも大きい場合(S310でYes)、集計処理部130は、対象単語および処理済み単語のうち、出現文書数の多い方からk個を選択する。そして、集計処理部130は、選択した各単語と、その単語の出現文書数とを対応付けて、出力候補保持部131に記憶させる。これにより、集計結果として出力する単語の候補である処理済み単語が更新される(S311)。なお、処理済み単語の数の上限はk個なので、今回の処理の対象単語が処理済み単語に追加されたことに伴い、更新前の処理済み単語のうち、最も出現文書数の少ない単語の情報が出力候補保持部131から消去される。この後、集計処理部130の処理は、S301に戻る。そして、未処理の単語が残っていれば(S301でYes)、S302以降の処理が行われる。
【0053】
全ての処理済み単語の出現文書数「h1」が指定文書数「h2」以上であった場合(S310でNo)、今回の処理の対象単語は、処理済み単語に追加されない。したがって、出力候補保持部131に記憶された処理済み単語は更新されることなく、集計処理部130の処理は、S301に戻る。そして、未処理の単語が残っていれば(S301でYes)、S302以降の処理が行われる。
【0054】
ここで、S303において、処理済み単語の数が集計数k個に達していない場合を考える(S303でNo)。この場合、今回の処理の対象単語は、必ず、集計結果として出力する単語の候補となる。したがって、集計処理部130は、この対象単語に関して、DtoKインデックス122のリンクを辿って、この対象単語を含む文書のリストを取得する(S313)。そして、集計処理部130は、取得したリストに含まれる文書のうち、絞り込み条件を満足する文書(指定文書)の数を算出する(S314)。この後、集計処理部130は、対象単語と算出した指定文書の数とを対応付けて、出力候補保持部131に記憶させる。これにより、集計結果として出力する単語の候補である処理済み単語が更新される(S311)。なお、この場合は、更新後の処理済み単語の数はk個以下なので、何れの処理済み単語も、出力候補保持部131から消去されない。この後、集計処理部130の処理は、S301に戻る。そして、未処理の単語が残っていれば(S301でYes)、S302以降の処理が行われる。
【0055】
一方、S301において、未処理の単語が残っていなければ(S301でNo)、全ての単語に対して上記の処理が済んだので、集計処理部130は、出力候補保持部131に記憶されているk個の処理済み単語を、集計結果として出力し(S312)、処理を終了する。
【0056】
また、S306において、全ての処理済み単語の出現文書数「h1」が対象単語の出現文書数「g」以上であった場合を考える(S306でNo)。この場合、単語リスト121に収録された単語は、最も多くの文書に含まれる単語から降順に並べられているため、今回よりも後の処理において対象単語となる単語の出現文書数が何れかの処理済み単語の出現文書数「h1」よりも大きくなることはない。すなわち、今回よりも後の処理において処理済み単語が更新されることはない。したがって、集計処理部130は、出力候補保持部131に記憶されているk個の処理済み単語を、集計結果として出力し(S312)、処理を終了する。
【0057】
このように、S305、S306に示す処理によれば、単語リスト121に収録された全ての単語に対して処理を行っていない段階でも、処理済み単語が更新される可能性が無くなった場合に、集計処理を終了する。これにより、S301〜S311の処理の繰り返し回数を、単語リスト121に収録された単語の数よりも少なく抑えることができる。
【0058】
以上のように、本実施形態は、収録した単語間にリンクを設定したDtoKインデックス122を用いて、第1手法による処理および第2手法による処理のどちらも実行できる。したがって、第1手法による処理を行うためにKtoDインデックスを用意する場合と比較して、インデックスを保持するために必要なメモリ領域(記憶容量)を小さく抑えることができる。
【0059】
なお、単にインデックスを保持するために必要なメモリ領域(記憶容量)を削減するのであれば、適当な圧縮方式によりインデックスをデータ圧縮してデータサイズを小さくすることが可能である。しかし、文書DB200の更新(文書の追加または削除)に応じてデータ圧縮されたインデックスを更新することは困難である。そのため、文書DB200が更新された場合は、インデックス自体を作成し直し、改めてデータ圧縮することが必要となる。これに対し、本実施形態では、限定的ではあるが、後述のように、文書DB200の更新に応じてDtoKインデックス122を更新可能としながら、上記のようにインデックスを保持するために必要なメモリ領域(記憶容量)の削減を実現している。
【0060】
<DtoKインデックスの作成および更新>
本実施形態において、文書DB200が更新されると、これに伴って、インデックス記憶部120に記憶された単語リスト121およびDtoKインデックス122も更新される。単語リスト121に関しては、文書の追加または削除により、収録している各単語を含む文書の数が変わる。そこで、本実施形態の集計システム100のインデックス更新部150は、例えば、文書DB200が更新される度に、単語リスト121に収録している単語をソートし直す。また、本実施形態のインデックス更新部150は、追加された文書にのみ含まれる単語が存在するならば、その単語の識別情報を、単語リストの末尾に追加することにより、単語リスト121を更新する。
【0061】
次に、DtoKインデックス122の作成および更新について説明する。DtoKインデックス122の作成は、一つの文書に対応する新たなDtoKインデックス122を追加する更新処理を、文書DB200に格納されたn個の文書に対して実行することにより行われる。
【0062】
図5は、DtoKインデックス122の作成処理の手順を示すフローチャートである。
図5に示すように、インデックス更新部150は、まず、文書DB200に格納されている文書のうち、未処理の(DtoKインデックス122の作成が行われていない)文書があるか否かを調べる(S401)。未処理の文書があれば(S401でYes)、インデックス更新部150は、未処理の文書の一つを取得する(S402)。そして、インデックス更新部150は、取得した文書を処理対象として、新規文書追加処理を行う(S403)。以上の処理を文書DB200に格納されている各文書に対して行い、未処理の文書が無くなったならば(S401でNo)、インデックス更新部150は、処理を終了する。
【0063】
図6は、新規文書追加処理の手順を示すフローチャートである。
図6に示すように、インデックス更新部150は、まず、処理対象として取得した一つの文書に対応するDtoKインデックス122を作成する(S501)。以下、作成されたDtoKインデックス122を、DtoKリストに登録される各DtoKインデックス122の識別情報diを用いてインデックスdiと記載する(
図6のS501でもインデックスdiと記載)。また、インデックスdiに対応する文書を文書diと記載する。インデックス更新部150は、作成したインデックスdiをDtoKリストの先頭に追加する(S502)。
【0064】
次に、インデックス更新部150は、インデックスdiに登録されている単語(文書diに含まれる単語)のうち、未処理の(リンクの設定が更新されていない)単語が有るか否かを調べる(S503)。未処理の単語が有る場合(S503でYes)、インデックス更新部150は、未処理の単語の一つを選択し(S504)、選択した単語が単語リスト121に登録されているか否かを調べる(S505)。そして、選択した単語が登録されているならば(S505でYes)、インデックス更新部150は、単語リスト121におけるその単語のエントリに登録されているリンク先の情報を、処理中のインデックスdiにおけるその単語のエントリを指すように更新する(S507)。
【0065】
一方、選択した単語が単語リスト121に登録されていない場合(S505でNo)、インデックス更新部150は、選択した単語のエントリを単語リスト121に追加する(S506)。そして、インデックス更新部150は、単語リスト121において作成したエントリのリンク先の情報を、処理中のインデックスdiにおけるその単語のエントリを指すように更新する(S507)。
【0066】
次に、インデックス更新部150は、インデックスdiにおけるその単語のエントリに登録されているリンク先の情報を、DtoKリストにおいて後方かつ直近の他のDtoKインデックス122におけるその単語のエントリを指すように更新する(S508)。
【0067】
インデックス更新部150は、以上のS503〜S508の処理を、インデックスdiに含まれる各単語に対して行い、未処理の単語が無くなったならば(S503でNo)、インデックス更新部150は、処理を終了する。
【0068】
以上、DtoKインデックス122を追加する処理について説明した。次に、インデックス記憶部120に記憶されているDtoKインデックス122を削除する処理について説明する。
図2を参照して説明した本実施形態のDtoKインデックス122は、単語間にリンクが設定されている。そのため、DtoKインデックス122を削除する場合は、削除対象のDtoKインデックス122における単語のリンクを設定し直す必要がある。したがって、任意のDtoKインデックス122を削除することは容易ではない。しかし、DtoKリストの終端に対応する(すなわち、最も古い)DtoKインデックス122(識別情報dn)については、削除することが容易である。これは、DtoKインデックス122の全ての単語が、その単語に関するリンクの終端だからである。この場合、インデックス記憶部120から識別情報dnのDtoKインデックス122(
図2に示す例では、DtoKインデックス122(n))を削除し、DtoKリストから終端のエントリを削除すれば良い。
【0069】
<インデックスの実装例>
図7および
図8は、Javaプログラミング言語を用いた、本実施形態によるDtoKインデックス122の実装例を示す図である。
図7は、コードの例を示す図であり、
図7(a)はDtoKインデックス122のエントリを設定するコード、
図7(b)はDtoKリストを生成するコード、
図7(c)は新しいDtoKインデックス122を追加するコード、
図7(d)はDtoKインデックス122を削除するコードである。
図8は、
図7に示すコードにより設定されたリンクの様子を示す図である。
【0070】
図7に示すように実装した場合、DtoKインデックス122の単語(エントリ)間のリンクは、リンク先のDtoKインデックス122およびエントリの位置を数値で指定することにより実現される。
図7(a)に示す例では、リンク先のDtoKインデックス122は、「nextDocId」の値で指定される。ここで、DocIdとは、後述の文書IDである。また、リンク先のエントリの位置は、「nextEntryIndex」の値で指定される。また、「keywordId」は、各単語の識別情報である。そして、「score」は、各単語に付与された点数である。また、
図7(b)に示すように、Javaの標準ライブラリに存在するクラスである「java.util.TreeMap」により、DtoKリスト「DLList」が生成される。このDtoKリスト「DLList」は、DtoKインデックス122(
図7ではDL[i]と記載)の全体を識別情報diの昇順(DL[1]〜DL[n])に格納する。
【0071】
また、
図7(c)に示す例では、DtoKインデックス122が追加される場合に、追加されるDtoKインデックス122に対応する文書の識別情報(文書ID)が設定される。この文書IDは、DtoKリスト「DLList」に登録されるDtoKインデックス122の識別情報diとは別に設定される。例えば、それまでに使用した文書IDの最大値を記憶しておき、その最大値よりも1大きい値を新たに設定する文書IDの値とする。このようにすれば、
図7(d)に示すように、文書IDが最小値であるDtoKインデックス122を削除することにより、DtoKリスト「DLList」の終端のエントリに対応するDtoKインデックス122が削除される。
【0072】
図8に示す例では、識別情報「200」の単語に関して、DtoKインデックス122(3)からDtoKインデックス122(5)へ設定されたリンクが示されている。図示の例において、DtoKインデックス122(3)の文書IDは「10」であり、DtoKインデックス122(5)の文書IDは「6」である。また、DtoKインデックス122(3)において、識別情報「200」の単語は、2番目のエントリ「Entry[1]」に登録されている。DtoKインデックス122(3)のエントリ「Entry[1]」を参照すると、識別情報「200」の単語の点数は「1.5」である。また、リンク先は、文書ID「6」のDtoKインデックス122のエントリ「Entry[2]」となっている。したがって、リンク先である、DtoKインデックス122(5)の3番目のエントリ「Entry[2]」には、識別情報「200」の単語が登録されている。
【0073】
図8に示す例において、文書ID「6」の文書が削除された場合を考える。DtoKリスト「DLList」およびDtoKインデックス122が更新されると、文書ID「6」のDtoKインデックス122(5)が削除される。これにより、DtoKリスト「DLList」に文書ID「6」のDtoKインデックス122(5)が存在しなくなる。そのため、DtoKインデックス122(3)のエントリ「Entry[1]」からDtoKインデックス122(5)のエントリ「Entry[2]」へのリンクを辿れなくなる。そして、識別情報「200」の単語に関するリンクは、DtoKインデックス122(3)のエントリ「Entry[1]」が終端となる。
【0074】
<インデックスの他の構成および実装例>
以上の実施形態において、単語リスト121および各DtoKインデックス122(1)〜122(n)に登録されている単語間のリンクは、単語リスト121に登録されている識別情報を始点として、識別情報diの順にしたがって設定した。これに対し、DtoKインデックス122の実装によっては、識別情報diの降順(すなわち、古い文書から新しい文書へ向かう順)にリンクを設定することが望ましい場合がある。
【0075】
図9および
図10は、Javaプログラミング言語を用いた、本実施形態によるDtoKインデックス122の他の実装例を示す図である。
図9は、DtoKインデックス122のエントリを設定するコードの例を示す図である。
図10は、
図9に示すコードにより設定されたリンクの様子を示す図である。なお、DtoKリストを生成するコード、新しいDtoKインデックス122を追加するコード、DtoKインデックス122を削除するコードは、
図7(b)〜(d)に示したコードと同様とする。
【0076】
図9に示すように実装した場合、DtoKインデックス122の単語(エントリ)間のリンクは、リンク先のエントリをポインタにより直接指し示すことにより実現される。
図9に示す例では、リンク先のDtoKインデックス122のエントリが、JavaやC/C++等のプログラミング言語でサポートされているポインタ(または同等の機能)で指定される。図示の例では、「Entry next」にポインタが記録される。このように、ポインタを用いてリンクが設定される場合、
図7および
図8に示した実装例とは反対の向きにリンクを設定する。すなわち、ある単語に関するリンクは、その単語が出現する最も古い(識別情報diの値が最も大きい)DtoKインデックス122のエントリを始点とし、単語リスト121におけるその単語のエントリを終端とする。
【0077】
また、この実装例では、単語リスト121のエントリから、各単語が出現する最も古いDtoKインデックス122のエントリへ向かうリンク(以下、逆向きリンクと呼ぶ)も設定される。この逆向きリンクは、集計処理部130が第1手法による集計処理を行う場合に、単語のリンクを辿るために用いられる。すなわち、集計処理部130は、逆向きリンクにより、通常のリンクの始点を見つける。
【0078】
図10に示す例では、識別情報「200」の単語に関して、DtoKインデックス122(5)からDtoKインデックス122(3)へ、
図8に示した例とは反対の向きに設定されたリンクが示されている。図示の例において、DtoKインデックス122(3)の文書IDは「10」であり、DtoKインデックス122(5)の文書IDは「6」である。また、DtoKインデックス122(5)において、識別情報「200」の単語は、3番目のエントリ「Entry[2]」に登録されている。DtoKインデックス122(5)のエントリ「Entry[2]」を参照すると、識別情報「200」の単語の点数は「1.5」である。そして、リンク先(DtoKインデックス122(3)のエントリ「Entry[1]」)へのポインタが設定されている。したがって、リンク先である、DtoKインデックス122(3)のエントリ「Entry[1]」には、識別情報「200」の単語が登録されている。
【0079】
図11は、
図9および
図10に示す実装例によるインデックスの構成を示す図である。
図11に示す構成例は、
図2に示した構成例と同様に、単語リスト121と、文書DB200に格納されている文書ごとのDtoKインデックス122とを含む。そして、n個の文書に対するDtoKインデックス122が存在し、最後に文書DB200に格納された文書(最も新しい文書)から順に、(1)〜(n)の枝番を付している。
【0080】
図11に示すインデックス構成では、単語ごとに、その単語が出現する最も古いDtoKインデックス122のエントリから単語リスト121におけるその単語のエントリへ至る通常のリンクと、逆向きリンクとが張られている。
図11においては、通常のリンクを実線で示し、逆向きリンクを破線で示している。
【0081】
具体的に、識別情報「1」の単語(単語「1」)について、
図11に示すリンクを説明する。単語「1」の通常のリンクは、まず、単語「1」が出現する最も古いDtoKインデックス122(n)のエントリから、DtoKインデックス122(n−1)のエントリへ張られている。以下、図示は省略するが、単語「1」間のリンクは、DtoKインデックス122の枝番の降順にしたがって張られ、DtoKインデックス122(2)のエントリに至っている。そして、単語「1」のリンクは、DtoKインデックス122(2)のエントリから、DtoKインデックス122(1)のエントリを経て、単語リスト121における単語「1」のエントリを終端としている。
【0082】
なお、単語「1」を含まない文書のDtoKインデックス122を飛ばしてリンクが張られることは、
図2に示した構成例と同様である。例えば、
図11において、単語「2」のリンクは、DtoKインデックス122(1)を飛ばして、DtoKインデックス122(2)のエントリから単語リスト121における単語「2」のエントリへ張られている。すなわち、単語「2」は、DtoKインデックス122(1)の文書には出現しない。また、単語「3」のリンクは、DtoKインデックス122(n)のエントリからDtoKインデックス122(2)のエントリへ張られている。すなわち、単語「3」は、図示しないDtoKインデックス122(3)からDtoKインデックス122(n−2)の文書には出現しない。
【0083】
また、
図11に示すインデックス構成において、ある単語に関する通常のリンクの始点は、その単語が出現する最も古いDtoKインデックス122であり、必ずしも全体で最も古いDtoKインデックス112(n)ではない。例えば、
図11の例において、単語「2」に関するリンクを考える。単語「2」のリンクの始点は、DtoKインデックス122(n)およびDtoKインデックス122(n−1)のどちらにも存在しない。したがって、単語「2」のリンクの始点は、DtoKインデックス122(n−1)よりも新しい何れかのDtoKインデックス122である。
【0084】
また、単語「1」の逆向きリンクは、単語リスト121における単語「1」のエントリから、単語「1」が出現する最も古いDtoKインデックス122(n)のエントリへ張られている。単語「3」の逆向きリンクも同様である。これに対し、単語「2」の逆向きリンクは、単語「2」が出現する最も古いDtoKインデックス122が図示されていないため、記載を省略している。すなわち、単語「2」が出現する最も古いDtoKインデックス122は、DtoKインデックス122(3)〜DtoKインデックス122(n−2)の何れかである。
【0085】
図9〜
図11を参照して説明した実装例において、新たなDtoKインデックス122を追加する更新については、リンクの方向が反対方向になることを除き、
図6に示した手順と同様の手順で実行することができる。リンクの設定に関しては、
図6のS505で、選択した単語が単語リスト121に登録されているならば、(S505でYes)、インデックス更新部150は、追加されたDtoKインデックス122におけるその単語のエントリのポインタを、単語リスト121におけるその単語のエントリを指すように更新する。また、インデックス更新部150は、単語リスト121におけるその単語のエントリから逆向きリンクおよび通常のリンクを辿り、現在、単語リスト121におけるその単語のエントリを指すポインタを有するDtoKインデックス122のエントリを検出する。そして、インデックス更新部150は、検出したDtoKインデックス122のエントリのポインタを、追加したDtoKインデックス122におけるその単語のエントリを指すように更新する。
【0086】
一方、
図6のS505で、選択した単語が単語リスト121に登録されていない場合は(S505でNo)、インデックス更新部150は、選択した単語のエントリを単語リスト121に追加する。そして、インデックス更新部150は、追加したDtoKインデックス122におけるその単語のエントリのポインタを、単語リスト121におけるその単語のエントリを指すように更新してリンクを設定する。また、インデックス更新部150は、単語リスト121におけるその単語のエントリのポインタを、追加したDtoKインデックス122におけるその単語のエントリを指すように更新して逆向きリンクを設定する。
【0087】
これに対し、DtoKインデックス122を削除する更新の場合、単にDtoKインデックス122を削除するだけでなく、削除対象のDtoKインデックス122に収録されている各単語に関して設定されたリンクを更新する。削除対象である最も古いDtoKインデックス122に収録されている各単語は、その単語に関する通常のリンクの始点であり、かつ、その単語に関する逆向きリンクのリンク先である。そのため、DtoKインデックス122を削除した後に、これらのリンクおよび逆向きリンクを正しく辿れるように、リンクを更新することが必要である。
【0088】
図12は、
図9〜
図11の実装例において、DtoKインデックス122を削除する処理の手順を示すフローチャートである。
図12に示すように、インデックス更新部150は、まず、削除対象のDtoKインデックス122(n)に登録されている単語のうち、未処理の(リンクの設定が更新されていない)単語があるか否かを調べる(S1101)。未処理の単語がある場合(S1101でYes)、インデックス更新部150は、未処理の単語の一つを選択し(S1102)、選択した単語に対して張られている逆向きリンクのリンク先を更新する(S1103)。
【0089】
具体的には、インデックス更新部150は、削除対象のDtoKインデックス122(n)における選択した単語のエントリに登録されている通常のリンクのリンク先へのポインタの情報を取得する。このポインタにより示されるリンク先のDtoKインデックス122は、削除対象のDtoKインデックス122(n)が削除された後に、選択した単語が出現する最も古いDtoKインデックス122となる。そして、インデックス更新部150は、単語リスト121における選択した単語に関する逆向きリンクのリンク先へのポインタを、取得したポインタの情報に基づいて更新する。
【0090】
インデックス更新部150は、以上のS1101〜S1103の処理を、削除対象のDtoKインデックス122(n)に登録されている各単語に対して行う。これにより、DtoKインデックス122(n)の各単語に対して設定されていた逆向きリンクが、DtoKインデックス122(n)の削除後に各単語が出現する最も古いDtoKインデックス122へ、それぞれ設定し直される。そして、未処理の単語が無くなったならば(S1101でNo)、インデックス更新部150は、削除対象のDtoKインデックス122(n)を削除して(S1104)、処理を終了する。
【0091】
図13は、
図11に示したインデックス構成において、DtoKインデックス122(n)を削除した様子を示す図である。
図13を参照すると、DtoKインデックス122(n)を削除したことにより、単語「1」に関する通常のリンクの始点(逆向きリンクのリンク先)は、DtoKインデックス122(n−1)における単語「1」のエントリとなっている。また、単語「2」に関する通常のリンクの始点(逆向きリンクのリンク先)は、DtoKインデックス122(2)における単語「2」のエントリとなっている。
【0092】
<ハードウェア構成例>
図14は、本実施形態の集計システム100を構成するのに好適なハードウェア構成例を示す図である。ここでは、コンピュータにより構成する場合について説明する。
図14に示すコンピュータは、演算手段であるCPU(Central Processing Unit)10aと、主記憶手段であるメモリ10cを備える。また、外部デバイスとして、磁気ディスク装置(HDD:Hard Disk Drive)10g、ネットワーク・インターフェイス10f、ディスプレイ装置を含む表示機構10d、キーボードやマウス等の入力デバイス10i等を備える。
【0093】
図14に示す構成例では、メモリ10cおよび表示機構10dは、システム・コントローラ10bを介してCPU10aに接続されている。また、ネットワーク・インターフェイス10f、磁気ディスク装置10gおよび入力デバイス10iは、I/Oコントローラ10eを介してシステム・コントローラ10bと接続されている。各構成要素は、システム・バスや入出力バス等の各種のバスによって接続される。
【0094】
図14において、磁気ディスク装置10gにはOSのプログラムやアプリケーション・プログラムが格納されている。そして、これらのプログラムがメモリ10cに読み込まれてCPU10aに実行されることにより、集計システム100における集計処理部130、判定部140およびインデックス更新部150の各機能が実現される。また、メモリ10cや磁気ディスク装置10gにより、インデックス記憶部120が実現される。また、入力デバイス10iおよびプログラム制御されたCPU10aにより、入力受け付け部110が実現される。さらにまた、本実施形態では、文書DB200を磁気ディスク装置10gにより実現しても良い。なお、
図14は、本実施形態の集計システム100を実現するのに好適なコンピュータのハードウェア構成を例示するに過ぎず、集計システム100の具体的構成は、
図14に示す構成に限定されない。
【0095】
以上、本実施形態について説明したが、本実施形態は、上記の具体的構成に限定されるものではない。本実施形態は、複数種類の属性を持つ対象データの集合中に出現する属性を、何らかの規則に基づいて各属性に付与された点数の高いものから順に所定個数求める集計処理に対して、広く適用できるものである。すなわち、本実施形態が適用される集計処理における対象データは、上記の処理対象として絞り込まれた文書には限定されない。また、本実施形態が適用される集計処理における属性は、各文書に含まれる単語に限定されない。その他、上記の実施形態に、種々の変更または改良を加えたものも、本発明の技術的範囲に含まれる。