(57)【特許請求の範囲】
【請求項１】
デジタルシーケンスの特徴量を求める方法であって、
前記デジタルシーケンスの分割可否を判断するレベルを設定するステップと、
前記デジタルシーケンスの一部分である部分シーケンスを第一の関数に入力するステップと、
前記第一の関数の出力値について、設定した前記レベルに基づき、前記部分シーケンスの位置での前記デジタルシーケンスの分割可否を判断し、分割可であれば分割点を求めるステップと、
求めた分割点の個数があらかじめ定めた数を超えるまで、前記レベルを設定するステップと、前記部分シーケンスを第一の関数に入力するステップと、前記分割点を求めるステップと、を繰り返すステップと、
前記分割点を求めるステップにおいて求めた各レベルにおける分割点で、前記デジタルシーケンスを分割するステップと、
前記分割するステップにより得られた複数の分割データそれぞれを第二の関数に入力し、出力値の集合を特徴量として出力するステップと、を備える
ことを特徴とするデジタルシーケンスの特徴量を求める方法。
【請求項２】
請求項１に記載のデジタルシーケンスの特徴量を求める方法において、
前記分割点を求める前記ステップは、
前記第一の関数の出力値から前記レベルによって定まる長さのビット列を抽出し、抽出した前記ビット列があらかじめ定めたビット列に一致していた場合、前記デジタルシーケンスは、前記部分シーケンスの位置で分割可と判断し、前記部分シーケンスの先頭を分割点とするステップを備える
ことを特徴とするデジタルシーケンスの特徴量を求める方法。
【請求項３】
請求項２に記載のデジタルシーケンスの特徴量を求める方法において、
前記分割点を求めるステップは、
前記分割点を求めるステップで求めた他の分割点との間隔があらかじめ定めた値よりも小さい場合は、前記部分シーケンスの先頭を分割点としないステップを備える
ことを特徴とするデジタルシーケンスの特徴量を求める方法。
【請求項４】
請求項１から３のいずれか一に記載のデジタルシーケンスの特徴量を求める方法において、
前記分割点を求める前記ステップは、
前記第一の関数の出力値に含まれる、前記レベルによって定まる個数のビット列があらかじめ定めたビット列に一致していない場合、前記デジタルシーケンスは、前記部分シーケンスの位置では分割できないと判断するステップを備える
ことを特徴とするデジタルシーケンスの特徴量を求める方法。
【請求項５】
請求項１に記載のデジタルシーケンスの特徴量を求める方法において、
前記第二の関数の出力値の集合を特徴量として出力する前記ステップは、
当該第二の関数の出力値の集合から、各々の前記レベルにおけるブルームフィルタを生成し、
生成した前記ブルームフィルタの集合を前記特徴量とするステップを備える
ことを特徴とするデジタルシーケンスの特徴量を求める方法。
【請求項６】
請求項２に記載のデジタルシーケンスの特徴量を求める方法において、
前記レベルによって定まる長さのビット列が、前記第一の関数の出力値の長さより長い場合、前記繰り返すステップは、前記部分シーケンスを第一の関数に入力せずに、当該レベルにおける分割点がない旨を出力するステップを備える
ことを特徴とするデジタルシーケンスの特徴量を求める方法。
【請求項７】
デジタルシーケンスの特徴量同士の距離を計算する方法において、
各々の前記特徴量は、木構造を持ち、
当該２つの特徴量のレベルの積集合のうち最下位にあるレベルを求めるステップと、
距離計算を開始するレベルを設定するステップと、
前記２つの特徴量のうち、あるレベルに属し、かつ一致するか否かが不明な要素を備える集合について、比較して一致部分を特定するステップと、
当該一致部分から、当該レベルよりも下位レベルに属する前記特徴量において一致部分を決定する比較対象外決定ステップと、
前記最下位レベルまでレベルを下げつつ前記一致部分を特定するステップおよび比較対象外決定ステップを繰り返すステップと、
前記２つの特徴量の不一致部分の要素数から距離を計算するステップと、を備える
ことを特徴とする、特徴量同士の距離を計算する方法。
【請求項８】
請求項７に記載の特徴量同士の距離を計算する方法において、
一致部分を特定する前記ステップは、
特徴量を構成する要素を文字とみなして文字列照合アルゴリズムを適用することで一致部分を特定するステップを備える
ことを特徴とする特徴量同士の距離を計算する方法。
【請求項９】
請求項７または８に記載の特徴量同士の距離を計算する方法において、
距離を計算する前記ステップは、
各特徴量について、前記最下位レベルでの特徴量の要素数と一致部分の要素数の差を距離として出力するステップを備える
ことを特徴とする特徴量同士の距離を計算する方法。
【請求項１０】
請求項７または８に記載の特徴量同士の距離を計算する方法において、
距離を計算する前記ステップは、
各特徴量について、前記距離計算を開始するレベルから前記最下位レベルまでの特徴量の全要素数と一致部分の要素数の差を距離として出力するステップを備える
ことを特徴とする特徴量同士の距離を計算する方法。
【請求項１１】
請求項７から１０のいずれか一に記載の特徴量同士の距離を計算する方法において、
距離計算を開始するレベルを設定する前記ステップは、
前記２つの特徴量のレベルの積集合のうち最上位にあるレベルを開始レベルに設定するステップを備える
ことを特徴とする特徴量同士の距離を計算する方法。
【請求項１２】
請求項１に記載のデジタルシーケンスの特徴量を求める方法において、
前記出力値の集合を特徴量として出力するステップは、
前記第二の関数を適用して得られた値とともに、当該第二の関数を適用した分割データの、前記デジタルシーケンスにおける所在に関する情報も出力するステップを備える
ことを特徴とするデジタルシーケンスの特徴量を求める方法。
【請求項１３】
請求項７に記載の特徴量同士の距離を計算する方法において、
各々の前記特徴量が、前記デジタルシーケンスにおける所在に関する情報を備えている場合、
距離を計算する前記ステップは、
一致部分に対応する前記所在に関する情報から一致部分の長さを計算し、前記デジタルシーケンスの長さと当該一致部分の長さから距離を求める
ことを特徴とする特徴量同士の距離を計算する方法。
【請求項１４】
ファイルを格納するファイル格納部と、
請求項１に記載の方法によりファイルの特徴量を算出する特徴量計算部と、
前記特徴量と、前記特徴量に対応するファイル名とを格納する特徴量格納部と、
請求項７に記載の方法により前記特徴量同士の距離を計算する距離計算部と、
計算された前記距離ならびに、前記距離に対応する特徴量およびファイル名を格納する距離格納部と、
前記ファイル格納部に格納されたファイルを前記特徴量計算部に送り、得られた特徴量を前記特徴量格納部に格納し、当該特徴量格納部に格納された特徴量を順次前記距離計算部に送り、得られた距離を前記距離格納部に格納する統制部と、
類似するファイルを検索するファイル検索部と、を備え、
前記ファイル検索部は、
検索対象ファイルを前記特徴量計算部に送るファイル読込部と、
得られた特徴量を前記距離格納部に送り、当該特徴量との距離が最も短いあらかじめ定めた個数の特徴量を特定し、当該特徴量の集合それぞれに対応するファイル名を求める距離索引部と、
当該ファイル名を検索結果として出力する類似ファイル出力部と、を備える
ことを特徴とするデジタルシーケンス特徴量算出装置。
【請求項１５】
ファイルを格納するファイル格納部と、
請求項１に記載の方法によりファイルの特徴量を算出する特徴量計算部と、
前記特徴量と、前記特徴量に対応するファイル名を格納する特徴量格納部と、
前記ファイル格納部に格納されたファイルを前記特徴量計算部に送り、得られた特徴量を前記特徴量格納部に格納する統制部と、
類似するファイルを検索するファイル検索部と、を備え、
前記ファイル検索部は、
検索対象ファイルを前記特徴量計算部に送るファイル読込部と、
得られた特徴量と前記特徴量格納部に格納されている特徴量との距離を請求項７の方法により計算し、当該得られた特徴量との距離が最も短いあらかじめ定めた個数の特徴量を特定し、当該特徴量の集合それぞれに対応するファイル名を求める距離計算部と、
当該ファイル名を検索結果として出力する類似ファイル出力部と、を備える
ことを特徴とするデジタルシーケンス特徴量算出装置。
【請求項１６】
ファイルを格納するファイル格納部と、
請求項１２に記載の方法によりファイルの特徴量を算出する特徴量計算部と、
前記特徴量と、前記特徴量に対応するファイル名と、請求項１２に記載の分割データの所在に関する情報と、を格納する特徴量格納部と、
前記ファイル格納部に格納されたファイルを前記特徴量計算部に送り、得られた特徴量を前記特徴量格納部に格納する統制部と、
類似するファイルを検索するファイル検索部と、を備え、
前記ファイル検索部は、
検索対象ファイルを前記特徴量計算部に送るファイル読込部と、
得られた特徴量と前記特徴量格納部に格納されている特徴量との距離を請求項１３の方法により計算し、当該得られた特徴量との距離が最も短いあらかじめ定めた個数の特徴量を特定し、当該特徴量の集合それぞれに対応するファイル名を求める距離計算部-と、
前記ファイル名と、前記ファイルと請求項１５に記載の前記検索対象ファイルの一致部分と、を検索結果として出力する類似ファイル出力部と、を備える
ことを特徴とするデジタルシーケンス特徴量算出装置。
【請求項１７】
デジタルシーケンスに対して、
あらかじめ設定したレベルにおいて、前記デジタルシーケンスの一部を第一の関数に入力するステップと、
前記第一の関数の出力値に基づき、前記設定したレベルにおける前記デジタルシーケンスの分割点を求めるステップと、
前記分割点を求めるステップにおいて設定したレベルにおいて求めた前記分割点にて前記デジタルシーケンスを分割するステップと、
前記分割するステップにより得られた前記設定したレベルの分割データそれぞれを第二の関数に入力し、出力値を出力するステップと、を備える
ことを特徴とするデジタルシーケンスの特徴量を求める方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、類似している電子ファイル等のデジタルシーケンス間で近い値をとるような、デジタルシーケンスの特徴量を算出する方法及び装置に関係する。
【背景技術】
【０００２】
ストレージにおける重複データの除外や、PCやサーバ内の類似ファイルの検索など、類似しているファイルを高速かつ高精度に見つけ出したいというニーズは高い。これらに用いられるべき電子ファイル等の特徴量を算出する方法として、「ファジィハッシュ」とよばれる技術が知られている（「類似ハッシュ」ともよばれる）。
【０００３】
ファジィハッシュは、(1)類似判定可能であること、および(2)生成サイズが小さく固定長であるという2つの特徴がある。すなわちファジィハッシュは、(1)ファイルの内容が1ビットでも変わるとハッシュ値が大きく変わる通常のハッシュ関数と異なり、ファイルの変更度合いに依存するように値が変化する。(2)また、その生成サイズは、一般的な検索エンジンなどで作成されるインデックス情報より小さく、固定長である。
【０００４】
ファジィハッシュに関する従来技術として、特許文献1と非特許文献1が知られている。これらに記載された方法はいずれも、電子ファイル等のデジタルシーケンスを分割し、分割データそれぞれについて通常のハッシュ関数を適用してハッシュ値を計算し、得られたハッシュ値を連結することでファジィハッシュを求める。このような方法でファジィハッシュを求めておけば、たとえファイルの一部が変更されたとしても、変更されていない他の分割データのハッシュ値は変化しないため、ファジィハッシュとしては大きく値が変わることはない。従って、類似しているファイル同士でファジィハッシュは近い値をとる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】米国特許第7,272,602号明細書
【非特許文献】
【０００６】
【非特許文献１】Jesse Kornblum: "Identifying almost identical files using context triggered piecewise hashing", Digital investigation 3S (2006) pp.91-97.
【発明の概要】
【発明が解決しようとする課題】
【０００７】
特許文献1、非特許文献1に記載された従来技術はいずれも以下のような方法でファジィハッシュを計算する。
【０００８】
(ステップ1)  デジタルシーケンスの先頭から1バイトずつ走査し、走査点近傍のデータ列に所定の演算を施すことで、走査点ごとに演算値を算出する。
【０００９】
(ステップ2)  ある走査点に対応する演算値があらかじめ定めたしきい値を超えた場合、当該走査点を、デジタルシーケンスを分割するための分割点と見なす。
【００１０】
(ステップ3)  シーケンスの末端まで走査したとき、求まった分割点で分割して得られる分割データの個数（以下区分数とよぶ）を数える。ファジィハッシュの長さを固定長にするため、当該区分数は事前に定めたある固定値（以下出力区分数とよぶ）に近くなければならない。当該区分数が出力区分数から離れている場合、しきい値を調整してステップ2に戻る。そうでない場合はステップ4に進む。
【００１１】
(ステップ4)  所望の区分数が得られたとき、求めた分割点に基づいてデジタルシーケンスを分割し、それぞれの分割データについてハッシュ値（以下、分割データのハッシュ値を、ファジィハッシュとの違いを明確にするため「区分ハッシュ」とよぶ）を計算する。得られた区分ハッシュを連結してファジィハッシュとする。
【００１２】
すなわち従来技術では、区分数が出力区分数となるようにしきい値を調整する必要がある。なお、単純にあらかじめ定めた固定長でファイルを等間隔に分割しなかったのは、編集や変更によりある分割データ内のデジタルシーケンスが1ビットでも伸張した場合、当該分割データ以降のシーケンスの分割点の位置がずれて変更前のシーケンスとの対応がとれなくなり、ファジィハッシュの値が大きく変わってしまうためである。
【００１３】
しかし、編集によりある程度伸縮したデジタルシーケンスに対して特許文献1、非特許文献1の方法に従ってファジィハッシュを計算すると、区分数を出力区分数にしようとしきい値を調整するため、編集前と異なるしきい値が得られる可能性が高い。しきい値が異なるとファイルの分割の態様が別物に変わってしまうため、もはやファジィハッシュは近い値をとることはない。
【００１４】
まとめると、従来技術には、ファイルの伸縮によりしきい値が変わってしまえば、もはやファジィハッシュを用いて正しく類似判定ができなくなってしまうという課題がある。
【課題を解決するための手段】
【００１５】
本明細書では、上記のようなしきい値の変動による従来技術の課題を解決するために、しきい値を変動させて区分数を調整するのではなく、さまざまなしきい値でデジタルシーケンスを分割して求めた区分ハッシュの集合を、出力区分数を超えない範囲でファジィハッシュとして出力する方法が開示される。当該ファジィハッシュにはさまざまなしきい値によって分割されたデータの区分ハッシュが含まれているので、仮にファイル変更によってしきい値が変わったとしても、これが変更前のしきい値の集合に含まれていれば、ファジィハッシュ同士が全く異なる値をとることはない。
【００１６】
具体的には、最も区分数が小さくなるようなしきい値（以下、しきい値を「レベル」という。定義は図3を用いて後で行なう）で分割点を求める。次に、区分数がより多くなるようにレベルを1つ下げて、分割点を求める。同様の操作を区分数が出力区分数を超えるまで繰り返し、求まった分割データについて区分ハッシュを計算して、計算した区分ハッシュを連結してファジィハッシュとして出力する方法が、第一の特徴として開示される。
【００１７】
特許文献1、非特許文献1に記載された従来技術では、ここでいう最下位のレベルに属する区分ハッシュの集合のみをファジィハッシュとして出力するため、ファイルが変更されて区分ハッシュの集合が異なるレベルのものとなると、従来技術ではファジィハッシュ同士の距離を正しく計算することができなかった。
【００１８】
この課題に対して、まずファジィハッシュのレベル同士を比較し、共通するレベルの最小値に属する区分ハッシュの集合で、距離を計算する。従来技術と異なり比較するレベルが一致するようになるので、ファジィハッシュ同士の距離を正しく計算することができるようになる。これが開示される第二の特徴である。
【００１９】
なお、各レベルについて共通する区分ハッシュを見いだす方法は、一般に計算量が多い処理である。そこで本明細書では、レベルが高いほど分割点が現れる確率が低いことに着目し、区分数が少ない上位のレベルから順番に一致部分を見つけ出し、比較しなければならない区分ハッシュの個数を極力少なくすることで計算量を削減するという第三の特徴も開示する。
【００２０】
また、従来技術では、ファイルサイズに関わらずファジィハッシュの出力サイズを固定するために、しきい値といった考え方を導入した。しかし、このファジィハッシュのサイズを固定長にするという要件は、そもそもファジィハッシュによってストレージ容量を圧迫しないための制約であり、格納するファイルの容量と比較してストレージ容量が十分ある場合など、この要件を除外してもよいケースが考えられる。この場合、ファイルサイズに比例して特徴量を増やすことができ、特徴量の情報量が多くなる分、類似判定精度が向上することが期待できる。
【００２１】
そこで、出力サイズがファイルサイズに依存するファジィハッシュの算出方法、類似ファイル検索方法、およびこれらの方法を実現する装置も、従来技術の課題を解決する第四の特徴として開示する。
【００２２】
上記特徴により、特許文献1、非特許文献1に記載された従来技術では類似と判定できなかったようなファイル同士であってもファジィハッシュが近い値をとり、正しく類似判定できる可能性が高まる。具体的には、従来技術よりも高精度にPCやサーバ内の類似ファイルを検索することができるようになる。また、ストレージに保存されているファイルの重複部分をより確実に見つけ出すことができるようになり、当該重複部分を削除して保存することで、ストレージの使用容量を従来技術よりも削減できる。
【発明の効果】
【００２３】
開示する内容により、従来技術では類似と判定できなかったようなファイル同士であっても、正しく類似判定できる可能性が高まる。
【図面の簡単な説明】
【００２４】
【図１】デジタルシーケンス特徴量算出装置のハードウェア構成を例示する図である。
【図２】ファジィハッシュ計算部の構成を例示する図である。
【図３】ファジィハッシュの計算方法の一例である。
【図４】デジタルシーケンス特徴量算出方法のフローチャートの一例である。
【図５】分割点算出方法のフローチャートの一例である。
【図６】ファジィハッシュ格納方法の一例である。
【図７】距離計算部の構成を例示する図である。
【図８】ファジィハッシュを用いた距離計算の一例である。
【図９】ファジィハッシュを用いた距離計算の一例である。
【図１０】ファジィハッシュ同士の距離計算方法のフローチャートの一例である。
【図１１】距離格納部の構成を例示する図である。
【図１２】ファイル検索部の構成を例示する図である。
【発明を実施するための形態】
【００２５】
図面を参照しつつ、本発明の実施例について説明する。
【実施例１】
【００２６】
図1は、デジタルシーケンス特徴量算出装置10のハードウェア構成を例示する図である。
【００２７】
デジタルシーケンス特徴量算出装置10は、電子ファイル、プログラム等のデジタルシーケンスを格納するストレージ100、さまざまな演算を司るCPU120、演算のためにデータを一時的に格納するメモリ140、キーボード、マウス、ディスプレイなどユーザとの対話装置たる入出力IF160とが、ハブなどの内部信号線180に連結する構成を備える。ストレージ100は、ハードディスク、フラッシュメモリ、RAIDなどといった記憶媒体を備える。
【００２８】
デジタルシーケンス特徴量算出装置10は、PCやサーバと同様、CPU120、メモリ140等を具備しており、PCやサーバ上で動作する一機能として実装することもできる。
【００２９】
ストレージ100は、ファイル格納部102、ファジィハッシュ格納部104、距離格納部106、統制部110、ファジィハッシュ計算部122、距離計算部124、ファイル検索部126などの処理部を具備する。
【００３０】
デジタルシーケンス特徴量算出装置10において、ファイル格納部102はユーザが操作できる電子ファイルを、ブロックIOなどで管理される低レベルのブロックで格納する。以下、ファイル格納部102に格納される電子ファイルのバイト列を、ブロックの概念をあわせて「デジタルシーケンス」とよぶ。また、特に断りのない限り、電子ファイルという文言はデジタルシーケンスの意味も内含するものとする。
【００３１】
ファジィハッシュ計算部122は、ファイル格納部102に格納された電子ファイルについてそのファジィハッシュを計算する。計算されたファジィハッシュはファジィハッシュ格納部104に格納される。距離計算部124は、ファジィハッシュ格納部104に格納されているファジィハッシュを用いてファイル間の類似度（距離）を計算し、距離格納部106に格納する。ファイル検索部126は、距離格納部106に格納された距離情報を用いて類似ファイルを検索する。
【００３２】
本実施例は、類似ファイルを高速に計算するためにあらかじめファジィハッシュ間の距離を計算しておき距離格納部106に格納しておく。統制部110は、ファイル格納部102に格納されたファイルを順次ファジィハッシュ計算部122に送り、さらにファジィハッシュ格納部104に格納されたファジィハッシュを順次距離計算部124に送る等して、すべてのファイルの組み合わせについて距離を計算し距離格納部106を更新する。
【００３３】
ストレージ100の各処理部110、122、124、126はCPU120がメモリ140に格納されたプログラムを実行することによって実現される。プログラムは、あらかじめ、メモリ140に格納されていても良いし、必要なときに、入出力IF160と、上記計算機が利用可能な媒体を介して、他の装置からメモリ140に導入されてもよい。媒体とは、たとえば、入出力IFに着脱可能な記憶媒体、または通信媒体（すなわち有線、無線、光などのネットワーク、または当該ネットワークを伝搬する搬送波やディジタル信号）を指す。
【００３４】
またこれらの処理部110、122、124、126を実現するプログラムは、書き換え可能なストレージ100ではなく、図示していない、読み出し専用のROMが具備してもよい。
【００３５】
以下、図2から図12を用いて、図1に記載の装置の詳細、およびこれらの装置が連携して実現するデジタルシーケンス特徴量算出方法について説明する。
【００３６】
図2は、ファジィハッシュ計算部122の機能構成を例示する図である。
【００３７】
ファジィハッシュ計算部122は、ファイル格納部102から電子ファイルを読み込む202と、読み込んだファイルからファジィハッシュの計算に不要な情報を削除する正規化部204と、正規化したファイルを分割するデータ分割部206と、分割データそれぞれについてハッシュ値を計算する区分ハッシュ計算部208と、得られた区分ハッシュの集合をファジィハッシュとして出力するファジィハッシュ出力部210を具備する。また、各処理部202、204、206、208、210に関するパラメータ等の設定を行う初期設定部200も具備する。
【００３８】
なお、ファジィハッシュの計算において、各処理部200、202、204、206、208、210はデータを一時的にメモリ140に格納し、当該データの照合や編集、削除等を行なう。
【００３９】
ファジィハッシュ計算部122によって求められたファジィハッシュは、ファジィハッシュ出力部210によってファジィハッシュ格納部104に格納される。もしくは、入出力IF160を介して、ディスプレイに表示する等の方法でユーザに提示されてもよい。
【００４０】
図4を用いて図2に記載の装置の具体的な動作について説明する前に、図3を用いて、開示するファジィハッシュの計算方法の概要について説明し、従来技術との違いを明らかにする。
【００４１】
本実施例及び従来技術では、電子ファイル等のデジタルシーケンス30のファジィハッシュを求めるために、先頭から1バイトずつ走査し、走査点300からKバイトの部分シーケンス302を取り出す。Kは小さい値で、例えば非特許文献1では7としている。本実施例でも同じ値をとって構わない。
【００４２】
次にデータ列302を攪拌関数32に入力し、攪拌値34を計算する。特許文献1および非特許文献1では、攪拌関数32として「ローリングハッシュ」とよばれる高速な攪拌関数を採用している。
【００４３】
攪拌関数32として、例えばデータ列302の各バイトを単純に足し合わせるような方法ではなくローリングハッシュを採用している理由は、単純な方法ではデジタルシーケンス30のバイトの並び方に大きく依存し、同じような攪拌値34が連続する可能性があるためである。後述するように、攪拌値34の値に応じて分割点を求めるため、同じような攪拌値が連続した場合、分割点の並びすなわち分割の態様に偏りが出る可能性がある。ファジィハッシュは各分割データについて区分ハッシュを求めて連結するものであるため、デジタルシーケンスのある部分を変更した場合でも、たまたまその部分に分割点が集中した場合は、ファジィハッシュに与える影響は大きくなってしまう。そこで、デジタルシーケンスをできるだけ等間隔に分割するために攪拌関数32を用いる。以下の文献に記載されているように、ローリングハッシュはデジタルシーケンスの値を高速に攪拌する関数として知られているため、特許文献1および非特許文献1ではこれを採用している。
【００４４】
Richard M. Karp and Michael O. Rabin: "Pattern-matching algorithms", IBM Journal of Research and Development, 31(2) pp. 249-260, 1987.
さて、従来技術では、走査点300ごとに攪拌値34を計算し、攪拌値から所定の区分数を導出できるようにしきい値を調整した。非特許文献1に記載の方法に基づき具体的に説明すると、t_maxビットの攪拌値34から下位tビット340を取り出して、これがすべて0だったときに分割点と見なす。ここでt_maxとは、攪拌値34が取り得る最大値を表現するため必要なビット数である。非特許文献1のローリングハッシュは32ビットの攪拌値34を出力するので、t_maxは32となる。
【００４５】
仮に攪拌関数32が攪拌値34の出現確率が一様になるようにデジタルシーケンス30を完全にランダム化できたとすると、攪拌値34の下位tビットがすべて0になる確率は2のt乗分の1であるから、tの値は以下の数式より求めることができる。
【００４６】
(デジタルシーケンス30の長さ)×1/2のt乗 = 出力区分数-1
実際には攪拌関数32によって元のデジタルシーケンス30をある程度ランダム化できるに過ぎないので、tの値は上式から算出される値とずれる場合が多い。そこで非特許文献1では、区分数が出力区分数にほぼ一致するまでtを変動させる。
【００４７】
特許文献1もほぼ同様の方法でデジタルシーケンス30を分割する。以下、このtのことを「レベル」とよぶことにする。
【００４８】
前述した通り、従来技術は出力区分数に適合するようにレベルを調整するため、ファイルの変更によってレベルが変化すると全く別物のファジィハッシュになり、類似判定に使えなくなるという問題点があった。この問題に対して、できるだけ多くのレベルについて区分ハッシュを出力しておくことが、本実施例の一つの特徴である。
【００４９】
具体的には、まずレベルをt_maxにして分割点を求める。すなわち、攪拌値34のすべてのビットが0となる点300が分割点となる。このような攪拌値が得られる可能性は低いので、分割点の個数も少なくなる。図3の例では、レベルt_maxで分割点が1つだけ得られている。
【００５０】
次に、レベルを1つ下げてt_max-1にして、同様に分割点を求める。ここで、レベルt_maxで分割点になった点300は、下位のレベルt_max-1でも分割点になっていることに注意する。これは下位tビットがすべて0のとき分割点と見なすというレベルの定義から明らかである。図3の例では、レベルt_max-1で4つの分割点が得られている。
【００５１】
同様の操作をすべてのレベルの区分数の総和が出力区分数になるまで繰り返し、求まった分割データ全てについて区分ハッシュを計算してファジィハッシュ36を出力するのが、本実施例の第一の特徴である。
【００５２】
当該ファジィハッシュはさまざまなレベルの分割データを含んでいるので、仮にファイル変更によってレベルが変わったとしても、これが変更前のレベルの集合に含まれていれば、ファジィハッシュ同士が全く異なる値をとることはない。従って本実施例は、レベルの変動でファジィハッシュが正しく機能しない可能性があった従来技術と比較して、類似判定の精度に優れているといえる。なお、ファジィハッシュ36の具体的な出力方法、格納方法については、図6を用いて後で説明する。
【００５３】
また、上位のレベルの分割点は必ず下位のレベルの分割点になっているという性質を用いれば、ファジィハッシュを使った類似判定を高速化することができる。この性質を利用した類似判定が本実施例の第二、第三の特徴である。これについても図7、図8、図9を用いて後で説明する。
【００５４】
本実施例と従来技術との違いが明らかになったところで、ファジィハッシュの計算フローについて、図2に記載の装置の動作と対応付けつつ図4を用いて説明する。
【００５５】
(ステップ400)  初期設定部200は、処理部202、204、206、208、210に関するパラメータ等の設定を行う。例えば出力区分数を設定する。また、後で図5を用いて説明するように、攪拌関数32で求めた分割点の間隔が短すぎる場合、ファイル変更がファジィハッシュに与える影響が大きくなりすぎるので、分割点として採用するための分割点候補間の間隔の最小値も初期設定部200で設定する。以下、この値を「最小区分間隔」とよぶ。
【００５６】
他に初期設定部200は、図3におけるKなど雑多なパラメータの設定、ファジィハッシュの出力方法の選択などを行なう。また、ファジィハッシュの計算対象とするファイルの種類、拡張子などを設定することもできる。
【００５７】
ユーザは、初期設定部200を介して以上の項目を設定することができる。逆に、以上の設定項目の一部を固定し、初期設定部200で設定できないようにすることもできる。
【００５８】
以下、初期設定部200で設定または固定された項目は、必要に応じて初期設定部200がメモリ140もしくはストレージ100を介して各処理部に通知するものとする。
【００５９】
(ステップ402)  ファイル読込部202は、ファイル格納部102に格納されているファイルを読み込む。読み込むタイミングとしては、ファイル格納部102自身を監視してファイル格納部102内にファイルが格納されたときや新規作成されたときに読み込んでもよいし、ファイル格納部102をクロールして格納されているファイル全てを順番に読み込んでもよいし、入出力IF160を介してユーザ指示があった場合に、ユーザが指示したファイル一式を読み込んでもよい。
【００６０】
いずれの方法にせよ、読み込まれたファイルから図4に記載のステップに従ってファジィハッシュが計算されると、最終的に他のファジィハッシュとの距離が計算されて距離格納部106が更新される。これらの一連の流れは統制部110によって制御される。
【００６１】
また、ファイル読込部202は、電子ファイルではなく、ブロックIOを介してより低レベルのブロックを読み込んでもよい。
【００６２】
ファイル読込部202は、読み込んだファイルもしくはブロックIOを介して読み込んだブロックをデジタルシーケンスとしてメモリ140に一時的に保存し、正規化部204を呼び出す。
【００６３】
なお、一時的にデジタルシーケンスを保存する先はストレージ100でもよい。以下、メモリ140が現れたとき、これはストレージ100も内含するものとする。
【００６４】
また、呼び出す操作としては、呼び出し先の処理部を起動して（当該装置がすでに起動している場合は何もしない）、メモリ140に保存したデジタルシーケンスの保存先を当該処理部に通知してもいいし、当該デジタルシーケンスそのものを呼び出し先の処理部に送信してもよい。以下、呼び出す操作は上記の意味を内含するものとする。
【００６５】
(ステップ404)  正規化部204は、メモリ140上にあるデジタルシーケンスから、ファジィハッシュの計算に不要な情報を削除する。具体的には、当該デジタルシーケンスからテキスト情報だけを抽出し、空白を取り除く、文字や単語の揺らぎを統一するといった整形などを行なう。このような正規化の詳細については、例えば国際公開第2006/122086 号パンフレットに記載されている。
【００６６】
なお、本実施例ではこの正規化部204およびステップ404は必須ではない。すなわち、本実施例に記載の方法及び装置によって、デジタルシーケンスからテキスト情報等を抽出、整形しなくとも、デジタルシーケンスそのものに対してファジィハッシュを計算することができる。
【００６７】
正規化部204は、正規化したデータをメモリ140に一時的に保存し、データ分割部206を呼び出す。ファジィハッシュ計算部122が正規化部204を具備しないときは、ファイル読込部202が読み込んだデータをメモリ140に一時的に保存した後、データ分割部206を呼び出す。以下、データ分割部206が読み込むことになるメモリ140上にあるデータをまとめて「正規化データ」とよぶことにする。
【００６８】
(ステップ406)  データ分割部206は、メモリ140上にある正規化データを分割するため、レベルtをt_maxに設定し、この値をメモリ140に一時的に保存する。ここでt_maxとは、図3を用いて前に説明した通り、攪拌値34が取り得る最大値を表現するため必要なビット数であり、攪拌関数32に依存する固定値である。レベルt_maxから順番に分割点を見つけ出すことが本実施例の特徴である。
【００６９】
(ステップ408)  データ分割部206は、メモリ140にある正規化データに対して、レベルtの条件で分割点を求める。すなわち、正規化データの各点について、それを先頭とするKバイトのデータを攪拌関数32に入力し、得られた攪拌値34の下位tビットがすべて0になる点を分割点とする。ここでKは図3で説明した攪拌値34を求めるためのバイト数である。分割点のより詳しい計算方法については後で図5を用いて説明する。データ分割部206は、求めた分割点の集合をメモリ140に一時的に保存する。
【００７０】
(ステップ410)  データ分割部206は、ステップ408で求めた分割点の集合から区分数を計算し、各レベルの区分数の合計が出力区分数を超えているかどうかを調べる。超えていなかったらステップ412に進み、レベルtを1下げてからステップ408以降の操作を繰り返す。区分数の合計が出力区分数を超えていたら、分割点を求める操作を終了してステップ414へ進む。
【００７１】
(ステップ414)  データ分割部206は、ステップ408からステップ412の処理により分割点が求まったら、当該分割点の集合に基づいて正規化データを分割し、分割データの集合をメモリ140に一時的に保存する。保存後、区分ハッシュ計算部208を呼び出す。
【００７２】
(ステップ416)  区分ハッシュ計算部208は、メモリ140上にある各分割データについて区分ハッシュを計算する。区分ハッシュの計算方法は、例えば以下の文献に記載のような通常よく用いられるハッシュ関数によるもので構わない。
【００７３】
R. Rivest: "The MD5 Message-Digest Algorithm", RFC 1321, April 1992.
区分ハッシュ計算部208は、各分割データについて計算した区分ハッシュの集合をメモリ140に一時的に保存し、ファジィハッシュ出力部210を呼び出す。
【００７４】
(ステップ418)  ファジィハッシュ出力部210は、メモリ140上にある区分ハッシュの集合からファジィハッシュを求める。ステップ414の段階で区分数の合計は初期設定部200で定めた出力区分数よりも大きい可能性があるため、このままファジィハッシュとして出力すると、ファジィハッシュの長さが所望のものよりも長くなる可能性がある。この場合、ファジィハッシュ出力部210は、超過した区分ハッシュの集合を切り捨てる、最下位のレベルの区分ハッシュの集合を全て切り捨てるといった方法で出力サイズを調整する。
【００７５】
なお、このような切り捨てる方法を採用する場合は、当該切り捨て処理をステップ414の段階でデータ分割部206が行ってもよい。この場合、区分ハッシュ計算部208でかかる計算量が削減されるという効果がある。
【００７６】
また、ファジィハッシュの長さが所望のものより長くなると言っても大幅に長くなるわけではないので、ファジィハッシュ出力部210は、超過した区分ハッシュの集合を切り捨てずに出力するように構成してもよい。
【００７７】
一方、より効果的な出力サイズの調整方法として、「ブルームフィルタ」を用いた方法が知られている。ブルームフィルタは空間効率の良い確率的データ構造であり、一般に要素が集合のメンバーであるかどうかのテストに使われる。集合に要素が追加されればされるほど、本来集合に含まれていない要素を集合に属していると誤判定する可能性が高くなるが、集合のサイズを小さくとることができる。  以下で、ブルームフィルタを用いた出力サイズの調整方法について具体的に説明する。
【００７８】
ブルームフィルタとはビット列のことである。その長さをNとする。ステップ418でファジィハッシュ出力部210は、ステップ416で計算された区分ハッシュの集合をレベルごとに分け、レベルごとに１つあるいは複数のブルームフィルタを以下に述べる方法で生成する。そして、すべてのレベルでブルームフィルタを生成した後、それらを連結したものをファジィハッシュとして出力する。
【００７９】
ブルームフィルタは以下のように生成される。まず、長さNのビット列（ブルームフィルタ）を用意し、各ビットの値をすべて0に設定しておく。さらに、任意長のデータを入力すると0からN-1までのいずれかの値を出力するハッシュ関数をk個用意する。各ハッシュ関数は同じデータに対してk個の異なるハッシュ値を出力するものとする。当該ハッシュ関数は、図3で説明した攪拌関数32（ローリングハッシュ）や、区分ハッシュとは目的が異なるものである。以下混同をさけるため、これを「ブルームハッシュ関数」とよぶことにする。なお、当該ブルームハッシュ関数は、k種類の異なるアルゴリズムを採用する、初期値を異なるものにするなどの方法で、k個用意することができる。
【００８０】
次に、ファジィハッシュ出力部210は、レベルをひとつ選択し、そのレベルに属する区分ハッシュを、ステップ416で求めた区分ハッシュの集合の中からひとつ選択する。そして、選択した区分ハッシュに上記k個のブルームハッシュ関数を適用し、k個の出力値(A_1, A_2, ・・・, A_k)を得る。ファジィハッシュ出力部210は、得られたk個の出力値に対して，上記ブルームフィルタの対応するビット（配列のアドレスが  Ａ＿１，  Ａ＿２，  ・・・.  A_kで表されるビット）の値を１に変更する。以下、区分ハッシュをもとにブルームフィルタのビット値を変更するこの操作を「区分ハッシュの登録」と呼ぶ。
【００８１】
次に、ファジィハッシュ出力部210は、選択したレベルに属する別の区分ハッシュを、ステップ414で求められた区分ハッシュの集合の中から選択し、区分ハッシュの登録を行う。ここで、ブルームフィルタのうち変更しようとするk個のビットのうちいくつかは既に値が1に変更されている可能性があるが、その場合は1のまま変更しない。
【００８２】
以降、ファジィハッシュ出力部210は、区分ハッシュの登録を418で求めた区分ハッシュの集合のうち、選択したレベルに属するすべての区分ハッシュに対して適用する。その結果、ビット配列のうちある部分が1に変更されたブルームフィルタが生成される。以上が選択したレベルに対応するブルームフィルタの生成方法である。
【００８３】
上記のブルームフィルタの生成方法により，ひとつのレベルに属する区分ハッシュの集合を表すのに必要なメモリのサイズをNビットにすることができる。
【００８４】
異なる区分ハッシュの集合から生成したブルームフィルタの共通部分を評価する（例えばビット値が一致するビット数を数える）ことで、登録した区分ハッシュの集合にどれだけ共通部分があるかを評価できる。なぜなら、同じ区分ハッシュを登録した場合は，ブルームフィルタの同じ位置のビット値が1になるからである。しかし、別の区分ハッシュを登録した場合でも、ブルームフィルタの同じ位置のビット値が1になる可能性はある。一般にこの誤った評価の可能性はひとつのブルームフィルタに登録する区分ハッシュの数が多くなるほど高くなる。可能性を低くするためには、ブルームフィルタのサイズNを大きくとるか、ひとつのレベルに複数のブルームフィルタを使用（登録した区分ハッシュの数がある上限値を超えた場合に新たなブルームフィルタを作成して登録）すればよい。
【００８５】
Nを小さくするほど最終的な出力であるファジィハッシュのサイズを小さくできるが、上で述べたようにブルームフィルタ間の類似を求める際の精度とブルームフィルタのサイズのコンパクト性はトレードオフの関係にある。よってブルームフィルタを用いる場合は，求められる精度や使用できる計算資源を考慮して、あらかじめステップ400でNの値を決めておく必要がある。
【００８６】
上記説明したブルームフィルタについては、以下の文献を参照のこと。
【００８７】
B. Bloom: "Space/Time Tradeoffs in Hash Coding with Allowable Errors", Communications of the ACM 13:7, pp.422-426, 1970.
ファジィハッシュ出力部210は、切り捨て、切り捨てずに出力、もしくはブルームフィルタによって得られたる、ファジィハッシュをファジィハッシュ格納部104または/および入出力IF160へ出力する。ただし、後で図8を用いて説明するように、ファジィハッシュ間では各レベルについて共通する区分ハッシュを見いだす必要があるため、区分ハッシュがどのレベルに属するか明らかになる態様で出力する。切り捨て、切り捨てずに出力、ブルームフィルタ等どの方法を採用するかについて、初期設定部200を介してユーザに選択させることも可能である。
【００８８】
以上でファジィハッシュ計算処理が完了する。
【００８９】
なお、ステップ406では、レベルtを攪拌関数32で定まる最上位レベルt_maxに設定したが、ステップ406でレベルtをt_maxより下位レベルに設定して、当該レベルから正規化データの分割を開始することも可能である。当該レベルの設定は初期設定部200がステップ400で行なう。
【００９０】
逆に、レベルtをt_maxより大きく設定することも可能である。このレベルでは正規化データが分割されることはないので、ファジィハッシュの最上位レベルに属する区分ハッシュは、必ず正規化データ自身の区分ハッシュとなる。この場合、ステップ408にてデータ分割部206は、レベルtがt_maxよりも大きい場合は分割点の算出を行なわず、レベルtでの区分数を1（すなわち、分割点が無い）として直ちにステップ410へ進んでもよい。これらの設定は初期設定部200がステップ400で行なう。
【００９１】
以下、レベルt_maxは、攪拌関数32で定まる最上位レベルに限らず、初期設定部200で設定される当該最上位レベルより下位のレベルもしくは上位のレベルをも意味するものとする。
【００９２】
続けて、図5を用いて、図4のステップ408の詳細の動作フローについて、図3を参照しつつ、図2に記載の装置の動作と対応付けて説明する。
【００９３】
(ステップ500)  データ分割部206は、メモリ140上にある正規化データから分割点を計算するために、正規化データを先頭からバイト単位で走査する。走査する位置pを0に設定し、この値をメモリ140に一時的に保存する。
【００９４】
(ステップ502)  データ分割部206は、正規化データのp番目からp+K-1番目を読み込む。ここでKは、図3で説明した攪拌値34を求めるためのバイト数で、初期設定部200によって図4のステップ400にて設定される。
【００９５】
(ステップ504)  データ分割部206は、上記読み込んだKバイトのデータを図3の攪拌関数32に入力し、攪拌値34を求める。求めた攪拌値34をメモリ140に一時的に保存する。
【００９６】
攪拌関数32の種類として、特許文献1や非特許文献1に記載のローリングハッシュでもいいし、別の関数を採用してもよい。また、どの関数を用いるか、初期設定部200を介してユーザが設定することも可能である。
【００９７】
(ステップ506)  データ分割部206は、当該攪拌値34の下位tビットを参照し、すべて0になっているか調べる。すべて0となる場合、分割点の候補と見なしてメモリ140にpの値を一時的に保存し、ステップ508へ進む。そうでない場合、ステップ512へ飛ぶ。
【００９８】
なお、下位tビットがすべて0となる場合に限定する必要はなく、要はあらかじめ定めたルールに従ってt個のビットを取り出し、これがあらかじめ定めたビット列に一致していればよい。例えば、上位tビットが0101・・・のとき分割点とすると定めれば、そのルールに従って分割点となるか否かを判断する。このようなルールは初期設定部200で設定される。
【００９９】
(ステップ508)  データ分割部206は、ステップ506で求めた分割点の候補pと、後のステップ510で直近にメモリ140に分割点として保存された点p0とを比較し、間隔p-p0を計算する。なおp0が存在しない場合は、メモリ140上にある正規化データの先頭（p0=0）とする。
【０１００】
この間隔があらかじめ初期設定部200で定めた最小区分間隔以上となるとき、pを分割点と見なしてステップ510へ進む。そうでない場合、pは分割点と見なせないと判断して、ステップ512へ飛ぶ。
【０１０１】
(ステップ510)  データ分割部206は、pを分割点の集合に追加する。当該分割点の集合をメモリ140上に一時的に保存する。
【０１０２】
(ステップ512)  データ分割部206は、もしp+K-1が正規化データの終端に位置するときは、正規化データを全て走査したと見なして処理を終了する。そうでない場合は、ステップ514に進み、pを1増やしてからステップ502以降の処理を繰り返す。
【０１０３】
なお、もしステップ508でpを分割点と判断した場合は、次に来る分割点の場所はpに最小区分間隔dを加えたものより先になるため、ステップ514ではpを1ではなくd増やしても構わない。この場合、ステップ512ではp+k-1ではなくp+K+d-1が正規化データの終端に位置するか調べることになる。
【０１０４】
以上でステップ408の処理が完了する。
【０１０５】
こうして求められたファジィハッシュの具体的な出力方法、格納方法について、図1、図2、図3を援用しつつ図6を用いて説明する。
【０１０６】
図3で説明したように、上位のレベルの分割点は必ず下位のレベルの分割点になり、上位のレベルの各分割データは下位レベルで複数に細分化されるため、図6に示すように、本明細書が開示するファジィハッシュ60は木構造をもつ特徴量といえる。例えば図3では、レベルt_maxの区分ハッシュH(1)に対応する分割データはレベルt_max-1で2つに分割されているので、それぞれの区分ハッシュをH(1,1)、H(1,2)とすると、図6のように、H(1)は子ノードH(1,1)、H(1,2)をもつとみなすことができる。同様にレベルt_maxの区分ハッシュH(2)は子ノードH(2,1)、H(2,2)、H(2,3)をもつ。
【０１０７】
図2のファジィハッシュ出力部210は、ファジィハッシュ60をこのような木構造のまま出力してもいいし、一列に表示してもよい。木構造のまま出力する方法として、XMLのような木構造を表現できる言語を用いる方法がある。また、木構造を一列に表現する方法として、例えば、各レベルの区分ハッシュの要素全体を括弧でくくり、その先頭にどのレベルの区分ハッシュかを明示しておき、さらに各括弧内で親が異なる区分ハッシュ間をセミコロンなどでしきって区別する方法や、先頭にレベルや各レベルの区分数に関する情報を付加しておく方法などがあげられる。図6の600はファジィハッシュ60一列に表現した一例である。
【０１０８】
図1のファジィハッシュ格納部104は、ファジィハッシュ計算部122で計算されたファジィハッシュを、ファジィハッシュ管理テーブル62の形式で格納する。ファジィハッシュ管理テーブル62は、ファイル名とそれに対応するファジィハッシュの一覧をIDをつけて管理する。図6より、例えばファイル「C:\aaa.txt」のファジィハッシュは「t_max:(231d,3412), t_max-1:(14f3,90aa;56b2,9563,744c), …」であることが読み取れる。
【０１０９】
さらに、ファジィハッシュ管理テーブル62は、ファジィハッシュを構成する区分ハッシュに対応する分割データそれぞれについての、デジタルシーケンスにおける所在、長さ等に関する情報も保持してよい。これらの情報を用いれば、後で図8を用いて説明するように、ファジィハッシュの一致部分からファイルの一致する長さを計算することが可能になり、ファイル内における一致部分の特定や距離のより正確な計算が可能になる。また、図12を用いて説明するファイル検索部126が、検索対象ファイルと類似するファイルを出力するだけではなく、どの部分が一致したのかということも明示することも可能になる。
【０１１０】
なお、一般に、ファイルシステムにおいてファイルの属性は、当該ファイルを格納するフォルダで管理される。ファジィハッシュ格納部104は、ファジィハッシュ管理テーブル62をファイル属性と一緒に各フォルダで管理してもよい。また、ファジィハッシュを計算したファイル64が属するファイルシステム上に外部データを追記できる拡張領域640がある場合は、当該領域640にファジィハッシュ650を書き込んでもよい。これらの方法を採用した場合、いずれもファジィハッシュ管理テーブル62は不要となる。
【０１１１】
本実施例では、類似ファイルを高速に求めるためにあらかじめファジィハッシュ間の距離を距離計算部124で計算して距離格納部106に格納しておく。この目的を達成するために、統制部110は、あるファイルについてファジィハッシュが計算され、ファジィハッシュ格納部104に格納されたとき、当該ファジィハッシュと、既にファジィハッシュ格納部104に格納されている他のファジィハッシュとを順次距離計算部124に送信する。
【０１１２】
まず、図7を用いて距離計算部124の構成について説明する。
【０１１３】
計算距離部124は、ファジィハッシュ格納部104から2つのファジィハッシュを読み込むファジィハッシュ読込部702と、読み込んだファジィハッシュ間から共通する区分ハッシュを特定する区分ハッシュ一致判定部704と、比較対象外となる区分ハッシュを判断する比較対象外判断部706と、求めた区分ハッシュの一致部分からファジィハッシュ間の距離を計算し出力する距離出力部708とを具備する。また、処理部702、704、706、708に関するパラメータ等の設定を行う初期設定部700も具備する。
【０１１４】
なお、ファジィハッシュ間の距離の計算において、各処理部700、702、704、706、708はデータを一時的にメモリ140に格納し、当該データの照合や編集、削除等を行なう。
【０１１５】
距離計算部124によって求められたファジィハッシュ間の距離は、距離出力部708によって距離格納部106に格納される。もしくは、入出力IF160を介して、ディスプレイに表示する等の方法でユーザに提示してもよい。
【０１１６】
図10を用いて図7に記載の各処理部の具体的な動作について説明する前に、図8、図9を用いて、ファジィハッシュ間の距離の計算方法について説明する。
【０１１７】
図8は、ファイル80とファイル82のファジィハッシュ間の距離の計算方法を説明するための一例である。H(n), G(n), H(m, n), G(m, n)は、それぞれレベルt_max、t_max-1の各分割データにおける区分ハッシュである。
【０１１８】
区分ハッシュ一致判定部704は、まず最上位のレベルt_maxで区分ハッシュを比較する。図8の例では、区分ハッシュH(1)、H(2)はそれぞれG(1)、G(2)のいずれとも一致しなかったとする。
【０１１９】
区分ハッシュ一致判定部704は、次にレベルt_max-1で、区分ハッシュH(1,1)、H(1,2)、H(2,1)、H(2,2)、H(2,3)のそれぞれについて、G(1,1)、G(1,2)、G(1,3)、G(2,1)、G(2,2)、G(2,3)のいずれかと一致するか比較する。図8では、H(2,1)がG(2,1)と、H(2,2)がG(2,2)とそれぞれ一致したとする。このとき比較対象外判断部706は、区分ハッシュH(2,1)、H(2,2)の集合800と、区分ハッシュG(2,1)、G(2,2)の集合820とを、t_max-1以下のレベルでは一致するものと見なして以降の比較対象から除外する。
【０１２０】
当該除外を受けて、区分ハッシュ一致判定部704は、次のレベルt_max-2では、区分ハッシュの集合800と820に属さない区分ハッシュについて比較を行なう。
【０１２１】
このように、上位のレベルで一致する区分ハッシュが見つかれば以下のレベルで比較対象から除外されるため、距離計算が高速化される。
【０１２２】
最後に距離出力部708は、最下位レベルt_max-2での区分ハッシュの総数と、上記比較により一致した区分ハッシュの個数から距離を計算する。ここで距離は不一致となる区分ハッシュの個数として定義される。
図8の例では、レベルt_max-2におけるファイル80の区分ハッシュの総数は12個、ファイル82の区分ハッシュの総数は11個となった。ちなみに出力区分数はともに19である。また、ファイル80の区分ハッシュ802はファイル82の区分ハッシュ822と、区分ハッシュ804は824とそれぞれ一致した。レベルt_max-1の段階で等しいものと見なされた区分ハッシュの集合800、820は4個の区分ハッシュを備えることから、共通する区分ハッシュの個数は計6個となる。従って、ファイル80から見てファイル82と異なる区分ハッシュの個数は6個、ファイル82から見てファイル80と異なる区分ハッシュの個数は5個となる。距離出力部708は、ファイル80からファイル82への距離を6、ファイル82からファイル80への距離を5として出力して、処理が完了する。この例のように、一般に距離は非対称となることに注意する。
【０１２３】
各レベルについて共通する区分ハッシュを見いだす方法は、一般には計算量が多い処理である。例えばファイルを編集して文章等の順番を入れ替えたとき、区分ハッシュの順序も変わる可能性があるため、正しく一致部分を抽出するには、各区分ハッシュに対して一致する区分ハッシュがあるか一つずつ照合する必要がある。
【０１２４】
区分ハッシュが入れ替わることを考慮して効率的に一致部分を見つけ出し距離を計算する方法として、例えば以下の文献に示すようなエディットグラフを用いる方法が知られている。エディットグラフは元々文字列照合のために提案された方法であるが、区分ハッシュを文字と見なせば、エディットグラフの方法を適用して距離を計算することができる。
【０１２５】
E. W. Myers: "An O(ND) difference algorithm and its variations", Algorithmixa, 1, pp.251-266 986.
図6のファジィハッシュ管理テーブル62を使って具体的に説明すると、例えばファイル「C:\aaa.txt」のファジィハッシュ「t_max:(231d,3412), t_max-1:(14f3,90aa;56b2,9563,744c)」とファイル「C:\bbb.doc」のファジィハッシュt_max:(d794,590c), t_max-1:(3245,e0f9;ff29;c908,eeab)」をレベルt_max-1でエディットグラフを用いて距離を計算する場合、区分ハッシュ「14f3」「90aa」「56b2」「9563」「744c」を5文字からなる文字列、および区分ハッシュ「3245」「e0f9」「ff29」「c908」「eeab」を5文字からなる文字列と見なして、これらの文字列をエディットグラフの方法で照合して、距離を求めるのである。
【０１２６】
また、ファジィハッシュ出力部210が前述のブルームフィルタを用いてファジィハッシュを出力する場合は、ブルームフィルタ同士を照合して距離を計算することになる。具体的には、異なる区分ハッシュの集合から生成したブルームフィルタの共通部分を評価する（例えばビット値が一致するビット数を数える）ことで、登録した区分ハッシュの集合にどれだけ共通部分があるかを評価できる。詳細は以下の文献に記載されている。
【０１２７】
Brin S., Davis J., Garcia-Molina H.: "Copy detection mechanisms for digital documents", Proceedings of the ACM SIGMOD annualconference, San Francisco, CA, May 1995.
エディットグラフ、ブルームフィルタのような方法を用いて距離を計算したとしても、区分ハッシュの個数に依存して計算量が増大する。そこで本実施例では、レベルが高いほど分割点が現れる確率が低いことに着目し、区分数が少ない上位のレベルから順番に一致部分を見つけ出し、低レベルでの比較しなければならない区分ハッシュの個数を極力少なくすることで計算量を削減するという方法を開示される。これが本実施例の第二の特徴である。
【０１２８】
なお、上記の手法で距離を計算した場合、最下位のレベルの区分ハッシュの個数が一致するとは限らないため、後に図11で説明する距離格納部106に格納されるファジィハッシュ間の距離テーブル1100が、図8に例示するように非対称行列となる可能性がある。後で図11を用いて説明するように、高速に類似ファイルを検索するためには、当該距離テーブルは対称行列であることが好ましい。
【０１２９】
距離テーブルを対称行列にする方法として、最下位レベルだけから距離を計算するのではなく、最上位レベルt_maxから最下位レベルで異なる部分の総数をとる方法が可能である。なぜなら、出力区分数は2つのファジィハッシュで同じなので、全てのレベルで共通と見なされた区分ハッシュの個数を引いて得られる異なる区分ハッシュの個数も等しくなるからである。
【０１３０】
また、上記の手法は区分ハッシュの個数をもとに距離を計算したが、前に図6を用いて説明したファジィハッシュ管理テーブル62が、区分ハッシュに対応する分割データのデジタルシーケンスにおける所在、長さ等に関する情報も保持している場合は、区分ハッシュの一致部分からファイルの一致する長さが計算でき、ファイル内における一致部分の特定や距離をより正確に求めることも可能である。
【０１３１】
ファジィハッシュ間の距離の計算方法について、さらに図9を用いて説明する。
【０１３２】
図9は、ファイル90に文章等が追加されて、ファイル90よりも長いファイル92が生成された例である。出力区分数を8で固定してファジィハッシュを計算すると、ファイル90ではレベルt_max-2まで到達したのに対し、ファイル92ではレベルがt_max-1にとどまった。なお、ファイル90のレベルt_max-1における分割データ900は、ファイル92の同レベルにおける分割データ920と一致している。分割データ900は、レベルt_max-2においてさらに分割データ910、912、914に細分される。
【０１３３】
特許文献1、非特許文献1に記載の従来技術では、最下位のレベルの区分ハッシュの集合のみをファジィハッシュとして出力するため、図9のように編集によりファイルの長さが変化すると、ファジィハッシュとして出力した区分ハッシュの集合が異なるレベルのものとなる可能性が高い。例えばこれら従来技術によりファイル90のレベルがt_max-2、ファイル92のレベルがt_max-1となった場合、分割データ910、912、914等と、分割データ920が一致しているかどうかを照合することになる。実際には、分割データ910、912、914を連結したデータが分割データ920と一致しているので、それぞれの区分ハッシュが一致することはない。よってこの場合、従来技術ではファジィハッシュ同士の距離を正しく計算することができない。
【０１３４】
それに対して本実施例では、まずファジィハッシュのレベル同士を比較し、共通するレベルの最小値を、距離を計算する上での最下位レベルと見なす（以下当該レベルを「共通最下位レベル」とよぶ）。図9の例では、ファイル90ではレベルt_max-2まで計算されているにも関わらず、レベルt_max-1が共通最下位レベルとなる。レベルt_max-1で比較すると、分割データ900と920の区分ハッシュが一致していることを判定でき、ファジィハッシュ同士の距離を正しく計算することができるようになる。これが本実施例の第三の特徴である。
【０１３５】
図8、図9を用いて上述した内容をもとに、ファジィハッシュ同士の距離計算方法のフローについて、図7に記載の装置の動作と対応付けて、図10を用いて説明する。
【０１３６】
(ステップ1000)  初期設定部700は、処理部702、704、706、708に関する設定を行う。例えば、距離出力部708におけるエディットグラフ、ブルームフィルタ等の距離計算方法を選択できるようにする。
【０１３７】
ユーザは、初期設定部700を介して上記項目を設定することができる。逆に、上記設定項目の一部を固定し、初期設定部700で設定できないようにすることもできる。以下、初期設定部700で設定または固定された項目は、必要に応じて初期設定部700がメモリ140もしくはストレージ100を介して各処理部に通知するものとする。
【０１３８】
(ステップ1002)  ファジィハッシュ読込部702は、ファジィハッシュ格納部104から2つのファジィハッシュを読み込んで一時的にメモリ140に格納する。読み込むファジィハッシュは統制部110が指定し、必要に応じて統制部110はファジィハッシュ読込部702の起動も行なう。それ以外に、入出力IF160を介してユーザ指示があった場合に、ユーザが指示したファジィハッシュを読み込んでもよい。
ファジィハッシュ読込部702がファジィハッシュを2つ読み込みメモリ140に格納したとき、ステップ1004へ進む。
【０１３９】
なお、一時的にファジィハッシュを保存する先はストレージ100でもよい。以下、メモリ140が現れたとき、これはストレージ100も内含するものとする。
【０１４０】
(ステップ1004)  ファジィハッシュ読込部702は、メモリ140上にある2つのファジィハッシュそれぞれについて何種類のレベルがあるかを算出し、2つのレベルの集合の一致部分（積集合）で最下位となる共通最下位レベルt_minを求める。ファジィハッシュ読込部702は共通最下位レベルt_minをメモリ140上に一時的に保存し、区分ハッシュ一致判定部704を呼び出す。
【０１４１】
以下、呼び出す操作としては、呼び出し先の処理部を起動して（当該処理部がすでに起動している場合はなにもしない）、メモリ140に保存したデータの保存先を当該処理部に通知してもいいし、当該データそのものを呼び出し先の処理部に送信してもよい。以下呼び出す操作は上記の意味を内含するものとする。
【０１４２】
(ステップ1006)  区分ハッシュ一致判定部704は、ファジィハッシュから共通する区分ハッシュを特定するため、レベルtをt_maxに設定し、この値をメモリ140上に一時的に保存する。
【０１４３】
(ステップ1008)  区分ハッシュ一致判定部704は、レベルtにおける区分ハッシュの集合から、図8を用いて説明したエディットグラフ等の方法で一致部分を特定する。ここで、後のステップ1010にて比較対象外判断部706が比較対象から除外する旨を記録した区分ハッシュの集合については、本ステップにおいて一致部分と見なして比較の対象外とすることで計算量を削減する。
【０１４４】
区分ハッシュ一致判定部704は、どの区分ハッシュが一致していたかといった情報をメモリ140上に一時的に記録して、比較対象外判断部706を呼び出す。
【０１４５】
(ステップ1010)  比較対象外判断部706は、ステップ1008において新たに一致部分と判断された区分ハッシュに対応する下位レベルの集合に対して、比較対象から除外する旨を記録する。当該記録はメモリ140上に一時的に保存される。
【０１４６】
(ステップ1012)  比較対象外判断部706は、レベルtがメモリ140上に保存されている共通最下位レベルt_minよりも大きいかどうか判定する。大きい場合はステップ1014に進み、tを1減らしてからステップ1008以降の処理を繰り返す。そうでない場合は、比較対象外判断部706は距離出力部708を呼び出し、ステップ1016へ飛ぶ。
【０１４７】
(ステップ1016)  距離出力部708は、メモリ上にある共通する区分ハッシュの個数から、図8、図9で説明した方法によって距離を計算する。距離出力部708は、求めた距離を距離格納部106または/および入出力IF160へ出力する。どちらの方法を採用するかについて、初期設定部700を介してユーザに選択させることは可能である。
【０１４８】
なお、上記のフローでは、区分数が少ない最上位のレベルt_maxから順番に一致部分を見つけ出し、低レベルでの比較対象を極力少なくすることで計算量を削減するという方法をとったが、CPU120の演算能力が十分などの理由でエディットグラフやブルームフィルタ等一致部分を特定するアルゴリズムが高速に動作するのであれば、tの初期値をt_maxより小さくとることも可能である。このときステップ1000にて、初期設定部700が当該初期値t0_maxを設定し、ステップ1006は
t = max(t0_max, t_min)
に置き換わる。もし共通最下位レベルt_minがt0_maxより大きければ、直接レベルt_minにおいて一致する区分ハッシュを見つけ出すことになる。
【０１４９】
さらに、常に共通最下位レベルのみで比較照合する方法を採用することも可能である。この場合、初期設定部700はしきい値を保持する必要はない。また、距離計算部124は比較対象外判断部706を具備しなくてもよい。
【０１５０】
以上、図1から図10を用いてファジィハッシュの計算方法、およびファジィハッシュ間の距離の計算方法及び装置について説明した。本実施例では、類似ファイルを高速に計算するため、あらかじめすべてファジィハッシュの組み合わせについて距離を計算して、距離格納部106に格納しておく。そのため、統制部110は、ファイル格納部102に格納されたファイルを順次ファジィハッシュ計算部122に送り、ファジィハッシュ格納部104に格納されたファジィハッシュを順次距離計算部124に送る等して、すべてのファイルの組み合わせについて距離を計算し距離格納部106を更新していく。図11は、こうして求められた距離格納部106の構成を例示する図である。
【０１５１】
距離格納部106は、ファジィハッシュ間の距離を管理する距離テーブル1100と、ファジィハッシュとファイルの関係を管理するファジィハッシュ管理テーブル1120とを具備する。図11の例では、ファジィハッシュ管理テーブル1120はファイルとファジィハッシュの組み合わせをID1122で識別し、距離テーブル1100はファジィハッシュそのものの代わりにこのID1122を用いて距離の一覧を表現している。ファジィハッシュ管理テーブル1120は、さらにファジィハッシュを構成する各区分ハッシュについて、対応する分割データの所在等の情報を保持してもよい。
【０１５２】
距離テーブル1100およびファジィハッシュ管理テーブル1120を準備しておくことで、未知のファジィハッシュに対して、それに近いファジィハッシュを高速に検索することができる。具体的には、未知のファジィハッシュが与えられたとき、まずファジィハッシュ管理テーブル1120に格納されているファジィハッシュからいくつか選出して、それらとの距離を計算する。次に、得られた距離の値の分布と類似した分布を距離テーブル1100から見つけ出す。見つけ出した分布に関係するファジィハッシュが距離テーブル1100から特定できるので、それらが未知のファジィハッシュに近いかどうかを厳密に評価する、という方法である。すべてのファジィハッシュについて比較するのではなく代表のみの比較ですむので、高速に近いファジィハッシュを見つけ出すことができる。詳細については、例えば以下の文献がある。
【０１５３】
Edgar Chavez, Gonzalo Navarro, Ricardo Baeza-Yates and Jose L. Marroquin: "Searching in metric spaces", ACM Computing Surveys 33, 3, pp. 273-321, 2001.
一般に、上記検索を高速に行うためには、距離テーブル1100は対称行列であることが好ましいことが知られている。前に図8を用いて説明したとおり、距離テーブル1100を対称行列にする方法として、共通最下位レベルだけから距離を計算するのではなく、最上位レベルから共通最下位レベルで異なる部分の総数を求める方法を採ってもよい。
【０１５４】
また、図11の例では距離テーブル1100は行列の形で表現されているが、これではファジィハッシュの個数の自乗でサイズが増大するため、必要となるストレージの容量が膨大になりやすい。距離テーブル1100の容量を削減するため、以下のような木構造で距離テーブル1100を構築する方法も提案されている。
【０１５５】
Peter N. Yianilos: "Data structures and algorithms for nearest neighbor search in general metric spaces", ACM-SIAM Symposium on Discrete Algorithms (A Conference on Theoretical and Experimental Analysis of Discrete Algorithms), pp. 311-321, 1993.
なお、ファジィハッシュ管理テーブル1120は図6で説明したテーブル62と同様であり、ファイル名とファジィハッシュの一覧を管理する。従って、距離格納部106は、ファジィハッシュ管理テーブル1120の代わりにファジィハッシュ格納部104にあるテーブル62を参照してもよい。ただし、テーブル62をファイル属性と一緒に各フォルダで管理した場合、または、ファジィハッシュを計算したファイル64の拡張領域640にファジィハッシュを書き込んだ場合は、ファジィハッシュ管理テーブル62は存在しないため、距離格納部106はファジィハッシュ管理テーブル1120を具備する必要がある。
【０１５６】
図12は、この距離格納部106に格納された距離に関する情報を用いて類似ファイルを検索する、ファイル検索部126の構成を例示する図である。
【０１５７】
ファイル検索部126は、ファイル120に類似したファイル一式を検索結果1212として出力する。ファイル検索部126は、入出力IF160を介してファイル1210を読み込み、ファジィハッシュ計算部122と連携してファジィハッシュを求めるファイル読込部1200と、距離格納部106に格納されている情報を用いて当該ファジィハッシュに近いファジィハッシュを求める距離索引部1202と、求められたファジィハッシュに対応するファイルなどの情報を検索結果1212として入出力IF160を介して出力する類似ファイル出力部1204を具備する。
【０１５８】
距離索引部1202の具体的な検索アルゴリズムについては、上記文献参考のこと。本実施例では当該アルゴリズムについての詳細の説明を割愛する。
【０１５９】
ファイル検索部126により、ファイル1210に類似したファイルが検索結果1212として出力される。検索結果1212として出力する類似ファイルの個数は、図示していないファイル検索部126の初期設定部で設定できる。また、もし距離格納部のファジィハッシュ管理テーブル1120が、ファジィハッシュを構成する各区分ハッシュに対応する分割データの所在等の情報も保持している場合は、この情報を用いて、類似ファイルのどの部分がファイル1210と一致していたのかといったことを検索結果1212として出力することも可能である。
【０１６０】
また、あらかじめ距離テーブル1100を作成しておかなくても、類似ファイルを検索することは可能である。その場合のファイル検索部の構成を図12の検索部126-2に与える。
【０１６１】
ファイル検索部126-2は、前述のファイル読込部1200と、類似ファイル出力部1204を具備し、距離索引部1202の代わりにファジィハッシュ格納部104に格納されている情報を用いて近いファジィハッシュを求める距離計算部124-2を備える。
【０１６２】
距離計算部124-2は図7に記載の距離計算部124とほぼ同じ構成であるが、距離計算部124が備えるファジィハッシュ読込部702に相当する処理部は、ファジィハッシュ格納部104にあるファジィハッシュを1つずつすべて読込み、ファイル1210のファジィハッシュとの距離を処理部704、706、708に計算させる。また、距離計算部124の距離出力部708に相当する処理部は、計算した距離が短いファジィハッシュを類似ファイル出力部1204に通知する。
【０１６３】
この方法では、デジタルシーケンス特徴量算出装置10は距離格納部106を具備する必要はない。本方法は、ファイル検索部126の検索方法と比較して検索速度は劣るが、距離格納部106が不要となる分、ストレージ100の容量を削減できるという利点がある。
【０１６４】
図1から図12に記載の方法、装置により、特許文献1、非特許文献1に記載された従来技術では類似と判定できなかったようなファイル同士であってもファジィハッシュが近い値をとり、正しく類似判定できる可能性が向上する。本実施例により、PCやサーバ内の類似ファイルをより高精度に検索することができるようになる。また、従来技術よりも高精度にストレージに保存されているファイルの重複部分を見つけ出すことができるようになり、ストレージの使用容量をより削減できる。
【実施例２】
【０１６５】
ファジィハッシュは、(1)類似判定可能であること、および(2)生成サイズが小さく固定長であるという2つの特徴がある。(2)の性質を満たすべく、特許文献1、非特許文献1などの従来技術では、出力サイズを一定にするためにレベルを調整した。しかしこのような調整を行なうと、ファイルの長さが変化した場合などにファジィハッシュ同士の距離を正しく計算することができないことが多い。そこで実施例1では、あらかじめ出力区分数を固定しておき、さまざまなレベルで分割して得られた区分ハッシュ全てを、出力区分数を超えない範囲で出力するという方法を提供した。
【０１６６】
いずれの方法も、上記(2)を満たすために何らかの方法を導入している。しかし、そもそも(2)の要件はファジィハッシュによりストレージ容量を圧迫しないための制約であり、格納するファイルの容量と比較してストレージ容量が十分ある場合など、(2)の要件を除外してもよいケースが考えられる。この場合、ファイルサイズに比例して特徴量のサイズを大きくとることが可能であり、(2)の制約に従い出力サイズが固定長になるように情報を切り捨てていた従来技術及び実施例1と比較して、情報量が多い分、類似判定精度が向上することが期待できる。
【０１６７】
そこで本実施例では、(2)の要件を除外したデジタルシーケンスの特徴量について、その算出方法、類似ファイル検索方法、およびこれらの方法を実現する装置を提供する。
【０１６８】
以下、(2)の要件を除外した特徴量を「可変ファジィハッシュ」とよぶ。「可変」であるのは、(2)の要件を満たさない以上、ファイルの長さなどに応じて生成サイズが伸張し得るためである。
【０１６９】
以下、図1から図12を適宜読み替えつつ可変ファジィハッシュについて説明し、可変ファジィハッシュが、出力サイズの制約がなくなった分、実施例1のファジィハッシュよりも類似判定精度に優れていることを明らかにする。
【０１７０】
図1は、デジタルシーケンス特徴量算出装置10のハードウェア構成を例示する図である。デジタルシーケンス特徴量算出装置10が具備する処理部は実施例1と同様である。ファジィハッシュ計算部122は、実施例1のファジィハッシュの代わりに可変ファジィハッシュを計算し、ファジィハッシュ格納部104は、ファジィハッシュの代わりに可変ファジィハッシュを格納し、距離計算部124は、ファジィハッシュの代わりに可変ファジィハッシュを用いて距離を計算する。
【０１７１】
図2は、ファジィハッシュ計算部122の構成を例示する図である。ファジィハッシュ計算部122が具備する処理部は実施例1と同様である。データ分割部206は、ファジィハッシュの代わりに可変ファジィハッシュを生成できるよう、実施例1と異なる分割方法をとる。
【０１７２】
この分割方法について詳細を説明するため、図4を読み替えて引用しつつ、可変ファジィハッシュ算出方法のフローチャートの一例を与える。
【０１７３】
(ステップ400)  実施例1のステップ400とほぼ同様である。ただし、初期設定部200は、出力区分数を設定せず、代わりに、可変ファジィハッシュの生成およびこれを用いた距離の計算などにおいて用いられる固定値として「出力レベル」を設定する。実施例1では出力サイズを固定するために出力区分数を設定したが、本実施例では、出力区分数の代わりに出力レベルを導入する。
【０１７４】
(ステップ402)  実施例1のステップ402と同様。
【０１７５】
(ステップ404)  実施例1のステップ404と同様。
【０１７６】
(ステップ406)  データ分割部206は、メモリ140上にある正規化データを分割するため、レベルtを出力レベルt0に設定し、この値をメモリ140に一時的に保存する。実施例1では最上位のレベルt_maxから順番に分割点を見つけ出していったが、本実施例では、この出力レベルt0でのみ分割点を求める。
【０１７７】
(ステップ408)  実施例1のステップ408と同様。
【０１７８】
(ステップ410)  本実施例には出力区分数は存在しない。区分数の比較をせず、ただちにステップ414へ進む。
【０１７９】
(ステップ414)  実施例1のステップ414と同様。
【０１８０】
(ステップ416)  実施例1のステップ414と同様。
【０１８１】
(ステップ418)  ファジィハッシュ出力部210は、メモリ140上にある区分ハッシュの集合をそのまま可変ファジィハッシュとして出力する。
【０１８２】
なお、本実施例でもブルームフィルタ等を用いて出力サイズを調整することは可能である。
【０１８３】
以上で可変ファジィハッシュ計算処理が完了する。
【０１８４】
図5は、分割点算出方法のフローチャートの一例である。実施例1と同様である。
【０１８５】
図6は、ファジィハッシュ格納方法の一例である。実施例1とほぼ同様であるが、可変ファジィハッシュの長さは可変であるため、可変ファジィハッシュが長すぎる場合、フォルダやファイルに直接埋め込むことができない場合がある。本実施例では、ファジィハッシュ管理テーブル62を導入することが好ましいといえる。
【０１８６】
図7は、距離計算部の構成を例示する図である。距離計算部124は、出力レベルt0等を設定する初期設定部700と、ファジィハッシュの代わりに可変ファジィハッシュを読込むファジィハッシュ読込部702と、可変ファジィハッシュ間の一致部分を判定する区分ハッシュ一致判定部704と、当該一致部分の情報等から距離を計算し出力する距離出力部708とを具備する。
実施例1と異なり、可変ファジィハッシュは単一のレベル(出力レベル)で構成されるため、距離計算部124は比較対象外判断部706を具備する必要がない。
【０１８７】
可変ファジィハッシュ間の距離の計算方法について詳細を説明するため、図10を読み替えて引用して、フローチャートの一例を与える。
【０１８８】
(ステップ1000)  実施例1のステップ1000とほぼ同様である。ただし、初期設定部700は比較対象外判断部706に対する設定を行なわない。
【０１８９】
(ステップ1002)  実施例1のステップ1002と同様。
【０１９０】
(ステップ1004)  ファジィハッシュ読込部702は、本ステップでは何もせず区分ハッシュ一致判定部704を呼び出す。ステップ1008へ飛ぶ。
【０１９１】
(ステップ1006)  本実施例では存在しない。
【０１９２】
(ステップ1008)  区分ハッシュ一致判定部704は、可変ファジィハッシュを構成する区分ハッシュの集合同士の一致部分を特定する。どの区分ハッシュが一致していたかといった情報をメモリ140上に一時的に記録して、距離出力部708を呼び出す。ステップ1016へ飛ぶ。
【０１９３】
(ステップ1010)から(ステップ1014)  本実施例では存在しない。
【０１９４】
(ステップ1016)  実施例1のステップ1016と同様。
【０１９５】
以上のように、可変ファジィハッシュ同士の距離の計算においては、レベルが単一である以上、レベルが異なるもの同士で比較する可能性はない。よって本実施例は、ファイルの変更等で伸張することによってレベルが変わり正しく類似判定ができなくなる場合がある従来技術や、複数のレベルの区分ハッシュの集合を備えることでこの現象が起こる可能性を低減した実施例1と比較して、より正確に距離を計算できる可能性が高いといえる。ただし、ファイルサイズに応じて可変ファジィハッシュの長さは伸張するため、ストレージを圧迫する可能性はある。
【０１９６】
図11は、距離格納部106の構成を例示する図である。実施例1と同様である。
【０１９７】
図12は、ファイル検索部126の構成を例示する図である。実施例1と同様である。
【０１９８】
図1から図12に記載の方法、装置により、従来技術や実施例1では類似と判定できなかったようなファイル同士であっても、可変ファジィハッシュが近い値をとり、正しく類似判定できる可能性が高まる。また、本実施例により、従来技術よりも高精度にPCやサーバ内の類似ファイルを検索することができるようになる。また、ストレージに保存されているファイルの重複部分をより高精度に見つけ出すことができるようになる。
【符号の説明】
【０１９９】
10・・・デジタルシーケンス特徴量算出装置、100・・・ストレージ、102・・・ファイル格納部、104・・・ファジィハッシュ格納部、106・・・距離格納部、110・・・統制部、120・・・CPU、122・・・ファジィハッシュ計算部、124・・・距離計算部、126・・・ファイル検索部、140・・・メモリ、160・・・入出力IF、180・・・ハブ、200・・・初期設定部、202・・・ファイル読込部、204・・・正規化部、206・・・データ分割部、208・・・区分ハッシュ計算部、210・・・ファジィハッシュ出力部、30・・・デジタルシーケンス、32・・・攪拌関数、34・・・攪拌値、36・・・ファジィハッシュ、300・・・分割点になるか判断する点、302・・・攪拌関数32に渡すデジタルシーケンス、340・・・攪拌値の下位tビット、60・・・ファジィハッシュの構造、62・・・ファジィハッシュ管理テーブル、64・・・ファイル、600・・・ファジィハッシュの一表現、640・・・拡張領域、650・・・ファジィハッシュ、700・・・初期設定部、702・・・ファジィハッシュ読込部、704・・・区分ハッシュ一致判定部、706・・・比較対象外判断部、708・・・距離出力部、800、820・・・比較対象外の区分ハッシュ、802、822・・・一致する区分ハッシュ、804、824・・・一致する区分ハッシュ、900、910、912、914、920・・・分割データ、1100・・・距離テーブル、1120・・・ファジィハッシュ管理テーブル、1122・・・ID、124-2・・・距離計算部、126-2・・・ファイル検索部、1200・・・ファイル読込部、1202・・・距離索引部、1204・・・類似ファイル出力部、1210・・・ファイル、1212・・・検索結果。
【図１】
0005372853.tif 000002
【図２】
0005372853.tif 000003
【図３】
0005372853.tif 000004
【図４】
0005372853.tif 000005
【図５】
0005372853.tif 000006
【図６】
0005372853.tif 000007
【図７】
0005372853.tif 000008
【図８】
0005372853.tif 000009
【図９】
0005372853.tif 000010
【図１０】
0005372853.tif 000011
【図１１】
0005372853.tif 000012
【図１２】
0005372853.tif 000013