(57)【要約】【課題】短時間で重複データを検出するためのデータ絞り込みを容易に行う重複データ検出プログラム、重複データ検出方法および重複データ検出装置を提供する。【解決手段】コンピュータ１は以下の機能を有する。構文木構築手段２が、データ毎に、文字列の隣接しない所定の文字位置の文字を複数個取り出した構文木を構築する。重複データ検出手段３が、構文木の葉ノード毎に、葉ノードに到達したデータが複数存在するか否かを判断し、同一の葉ノードに到達したデータを重複データ候補として検出する。【選択図】図１
2008033728.tif 000002
【特許請求の範囲】
【請求項１】
文字列を備える複数のデータから重複する前記データを検出する重複データ検出プログラムにおいて、
コンピュータを、
前記データ毎に、前記文字列の隣接しない所定の文字位置の文字を複数個取り出した構文木を構築する構文木構築手段、
前記構文木の葉ノード毎に、前記葉ノードに到達したデータが複数存在するか否かを判断し、同一の前記葉ノードに到達した前記データを重複データ候補として検出する重複データ検出手段、
として機能させることを特徴とする重複データ検出プログラム。
【請求項２】
前記構文木構築手段は、前記重複データ候補毎に、前記文字列の語頭側または語尾側から一文字ずつ前記文字を取り出した詳細構文木を構築し、
前記重複データ検出手段は、前記詳細構文木の前記葉ノード毎に、前記葉ノードに到達したデータが複数存在するか否かを判断し、同一の前記葉ノードに到達した前記データを重複データとして検出することを特徴とする請求項１記載の重複データ検出プログラム。
【請求項３】
前記構文木構築手段は、前記所定の文字位置の文字を予め定められた個数分取り出した前記構文木を構築することを特徴とする請求項１記載の重複データ検出プログラム。
【請求項４】
文字列を備える複数のデータから重複する前記データを検出する重複データ検出方法において、
前記データ毎に、前記文字列の隣接しない所定の文字位置の文字を複数個取り出した構文木を構築し、
前記構文木の葉ノード毎に、前記葉ノードに到達したデータが複数存在するか否かを判断し、
同一の前記葉ノードに到達した前記データを重複データ候補として検出する、
ことを特徴とする重複データ検出方法。
【請求項５】
文字列を備える複数のデータから重複する前記データを検出する重複データ検出装置において、
前記データ毎に、前記文字列の隣接しない所定の文字位置の文字を複数個取り出した構文木を構築する構文木構築手段と、
前記構文木の葉ノード毎に、前記葉ノードに到達したデータが複数存在するか否かを判断し、同一の前記葉ノードに到達した前記データを重複データ候補として検出する重複データ検出手段と、
を有することを特徴とする重複データ検出装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は重複データ検出プログラム、重複データ検出方法および重複データ検出装置に関し、特に、文字列を備える複数のデータから重複するデータを検出する重複データ検出プログラム、重複データ検出方法および重複データ検出装置に関する。
【背景技術】
【０００２】
企業の業務において、データベースシステムが多く利用される。データベースシステムには様々なデータが管理されている。このデータベースシステムには、複数のユーザが、アクセスを行い、データの追加、更新、削除等を行うため、例えば同じような内容のデータが違う名前で保存される等によりデータが重複されて登録されてしまうことも少なくない。
【０００３】
このような重複登録はデータベースの容量の肥大化を招き、データベースシステムの運用サーバの台数の増大による維持コストの増大や、検索時間の増大等の問題が生じる。
このため、特にテキストデータに関して入力データの部分文字列を抽出し（例えば、特許文献１参照）、抽出した文字列の重複を検出する方法が知られている（例えば、特許文献２参照）。
【０００４】
また、人間が日常的に使っている自然言語をコンピュータに処理させる自然言語処理や、コンピュータが過去のデータに基づいて未知のデータに対する予測を行う機械学習等を用いて文字列の重複を検出する方法が知られている。
【特許文献１】特開２００４−１６４１２０号公報
【特許文献２】特開２００４−１６４１３３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、自然言語処理や機械学習等ではテキストデータの容量がギガバイト（Gigabyte）やテラバイト（Terabyte）単位のような比較的大容量のデータから文字列の重複を検出するには計算時間が増大し、非常に手間がかかるという問題がある。
【０００６】
本発明はこのような点に鑑みてなされたものであり、短時間で重複データを検出するためのデータ絞り込みを容易に行うことができる重複データ検出プログラム、重複データ検出方法および重複データ検出装置を提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明では上記問題を解決するために、図１に示すような処理をコンピュータに実行させるための重複データ検出プログラムが提供される。
本発明に係る重複データ検出プログラムは、文字列を備える複数のデータから重複するデータを検出するプログラムである。
【０００８】
重複データ検出プログラムを実行するコンピュータ１は以下の機能を有する。
構文木構築手段２が、データ毎に、隣接しない所定の文字位置の文字を複数個取り出した構文木を構築する。
【０００９】
重複データ検出手段３が、構文木の葉ノード毎に、葉ノードに到達したデータが複数存在するか否かを判断し、同一の葉ノードに到達したデータを重複データ候補として検出する。
【００１０】
このような重複データ検出プログラムによれば、構文木構築手段２により、データ毎に文字列の隣接しない所定の文字位置の文字を複数個取り出した構文木が構築される。そして、重複データ検出手段３により、構文木の葉ノード毎に、葉ノードに到達したデータが複数存在するか否かが判断され、同一の葉ノードに到達したデータが重複データ候補として検出される。
【００１１】
また、上記課題を解決するために、文字列を備える複数のデータから重複する前記データを検出する重複データ検出方法において、前記データ毎に、前記文字列の隣接しない所定の文字位置の文字を複数個取り出した構文木を構築し、前記構文木の葉ノード毎に、前記葉ノードに到達したデータが複数存在するか否かを判断し、同一の前記葉ノードに到達した前記データを重複データ候補として検出する、ことを特徴とする重複データ検出方法が提供される。
【００１２】
このような重複データ検出方法によれば、データ毎に、文字列の隣接しない所定の文字位置の文字を複数個取り出した構文木が構築され、構文木の葉ノード毎に、葉ノードに到達したデータが複数存在するか否かが判断され、同一の葉ノードに到達したデータが重複データ候補として検出される。
【００１３】
また、上記課題を解決するために、文字列を備える複数のデータから重複する前記データを検出する重複データ検出装置において、前記データ毎に、前記文字列の隣接しない所定の文字位置の文字を複数個取り出した構文木を構築する構文木構築手段と、前記構文木の葉ノード毎に、前記葉ノードに到達したデータが複数存在するか否かを判断し、同一の前記葉ノードに到達した前記データを重複データ候補として検出する重複データ検出手段と、を有することを特徴とする重複データ検出装置が提供される。
【００１４】
このような重複データ検出装置によれば、上記重複データ検出プログラムを実行するコンピュータと同様の処理が実行される。
【発明の効果】
【００１５】
本発明によれば、重複データ候補を容易に検出することができる。これにより、容易に重複するデータを絞り込むことができる。
特に、その後により細かい構文木を作成して重複データを検出する場合、構文木の作成対象となるデータが絞り込まれているため、検出時間を短縮することができる。
【発明を実施するための最良の形態】
【００１６】
以下、本発明の実施の形態を、図面を参照して詳細に説明する。
まず、本発明の概要について説明し、その後、実施の形態を説明する。
図１は、本発明の概要を示す図である。
【００１７】
図１に示すコンピュータ１は、構文木構築手段２と重複データ検出手段３とを有している。
構文木構築手段２は、データ毎に、隣接しない所定の文字位置の文字を複数個取り出した構文木を構築する。
【００１８】
図１では、データＤ１、Ｄ２において、各データの文字列の語頭から４文字毎に４つの文字を取り出した構文木Ｔａを構築している。
重複データ検出手段３が、構文木Ｔａの葉ノード毎に、葉ノードに到達したデータが複数存在するか否かを判断し、同一の葉ノードに到達したデータを重複データ候補として検出する。図１では、データＤ１、Ｄ２が構文木Ｔａの同一の葉ノードに到達しているので、これらを重複データ候補として検出している。
【００１９】
このような重複データ検出プログラムによれば、構文木構築手段２により、データ毎に文字列の隣接しない所定の文字位置の文字を複数個取り出した構文木が構築される。そして、重複データ検出手段３により、構文木の葉ノード毎に、葉ノードに到達したデータが複数存在するか否かが判断され、同一の葉ノードに到達したデータが重複データ候補として検出される。
【００２０】
以下、本発明の実施の形態を説明する。
図２は、コンピュータのハードウェア構成例を示す図である。
コンピュータ３００は、ＣＰＵ（Central Processing Unit）１０１によって装置全体が制御されている。ＣＰＵ１０１には、バス１０７を介してＲＡＭ（Random Access Memory）１０２、ハードディスクドライブ（ＨＤＤ:Hard Disk Drive）１０３、グラフィック処理装置１０４、入力インタフェース１０５、および通信インタフェース１０６が接続されている。
【００２１】
ＲＡＭ１０２には、ＣＰＵ１０１に実行させるＯＳ（Operating System）のプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、ＲＡＭ１０２には、ＣＰＵ１０１による処理に必要な各種データが格納される。ＨＤＤ１０３には、ＯＳやアプリケーションプログラムが格納される。また、ＨＤＤ１０３内には、プログラムファイルが格納される。
【００２２】
グラフィック処理装置１０４には、モニタ１１が接続されている。グラフィック処理装置１０４は、ＣＰＵ１０１からの命令に従って、画像をモニタ１１の画面に表示させる。入力インタフェース１０５には、キーボード１２とマウス１３とが接続されている。入力インタフェース１０５は、キーボード１２やマウス１３から送られてくる信号を、バス１０７を介してＣＰＵ１０１に送信する。
【００２３】
通信インタフェース１０６は、ネットワーク１０に接続されている。通信インタフェース１０６は、ネットワーク１０を介して、他のコンピュータとの間でデータの送受信を行う。
【００２４】
以上のようなハードウェア構成によって、本実施の形態の処理機能を実現することができる。このようなハードウェア構成のシステムにおいて重複データの検出を行うために、コンピュータ３００内には、以下のような機能が設けられる。
【００２５】
図３は、コンピュータの機能を示すブロック図である。
コンピュータ３００は、データ検出部（重複データ検出装置）１００と、データ削除部２００とを有している。
【００２６】
データ検出部１００は、文書データ格納部１１０と、文書データ出力部１２０と、判定部１３０とを有している。
文書データ格納部１１０には、検出対象となる複数の文書データが格納されている。
【００２７】
文書データ出力部１２０は、文書データ格納部１１０に格納されている文書データのうち所定の文書データを取り出す文書データ取り出し指示があると、文書データ格納部１１０から取り出すべき文書データ（以下、「文書データ群」という）を取り出し判定部１３０に渡す。
【００２８】
なお、取り出し指示は、例えばユーザがキーボード１２やマウス１３等を操作することにより実行される。
また、文書データ出力部１２０は、文書データ群の各文書データに、これらを識別する識別子（ＩＤ番号）を付する。
【００２９】
判定部１３０は、重複データ検出部１３１と木構築部１３２とを有している。
重複データ検出部１３１は、文書データ群を受け取ると、木構築部１３２に構築条件（パラメータ）を与えて文書データ群の構文木（トライ）を構築させる。なお、構築条件については後述する。
【００３０】
木構築部１３２は、構築条件に従って構文木を構築する。
図４は、構文木の一例を示す図である。
構文木Ｔｂは、ノード４１〜４５と、各ノード間を接続するエッジ４１ａ、４２ａ、４３ａ、４４ａとを有している。ノード４１が根（root）ノードであり、他のノード４２〜４５はノード４１の下位構造となっている。各エッジには取り出した文字が関連づけられている。例えばエッジ４１ａには文字「Ｂ」が関連づけられている。
【００３１】
また、構築した構文木Ｔｂの各部分木の最後部の節点（以下、葉ノードとも言う）であるノード４５には文書データの識別子が関連づけられている。同一の文字列を有する文書データがあると、これらの識別子がそれぞれ同一の葉ノードに関連づけられる。
【００３２】
なお、図４では一例として文書データ「データ１」、「データ２」が同一の文字列を有している場合を示しており、これらの識別子「データ＃１」、「データ＃２」がノード４５に関連づけられている。
【００３３】
再び図３に戻って説明する。
また、重複データ検出部１３１は、構築した構文木に基づいて、文書データ群から同一の文字列を有する文書データ（重複データ）を検出する。重複データを検出すると、検出された重複データから１つの重複データを除いた残りの重複データのＩＤ番号をデータ削除部２００に出力する。
【００３４】
データ削除部２００は、重複データのＩＤ番号を受け取ると、そのＩＤ番号を持つ文書データを文書データ格納部１１０から削除する。すなわち、データ削除部２００は、文書データ格納部１１０に格納されている同一の文字列を有する文書データの名寄せを行う。
【００３５】
次に、判定部１３０の動作（判定動作）について詳しく説明する。
図５は、判定動作を示すフローチャートである。
まず、重複データ検出部１３１が文書データ群を受け取る（ステップＳ１）。そして、重複データ検出部１３１が、文書データ内における文字列の先頭から数えて予め指定された文字位置の文字を予め指定された文字個数分取り出すという構築条件（第１の構築条件）を与えて構文木Ｔを構築させる。この構築条件は、例えばＨＤＤ１０３に格納されている。
【００３６】
なお、第１の構築条件において取り出す文字位置は、隣接（連続）した位置（１文字目、２文字目、・・・）でなければ、特に限定されないが、例えば（Ａｎ＋１）文字目：（Ａ＝１、２、・・・）、（ｎ＝０、１、２、・・・）や、Ａ(n+1)文字目等が挙げられる。後者の場合、文字列の大部分が同じで最後の方だけ文字列が異なっている２つの文書データを迅速に区別することができる。また、例えば１文字目、４文字目等、取り出す位置の数字を具体的に決めておいてもよい。
【００３７】
また、第１の構築条件における取り出す文字数は、１文字以上であれば特に限定されないが、例えば１０文字等、整数で指定する。
次に、木構築部１３２が、第１の構築条件に従って構文木Ｔを構築する（ステップＳ２）。なお、第１の構築条件に従って構文木Ｔを構築する際、指定された文字数だけ文字を取り出している途中で文字列が終了した場合（文字数分の文字が取り出せない場合）は、それまで取り出した文字の構文木Ｔを構築する。
【００３８】
次に、重複データ検出部１３１が、構文木Ｔの葉ノード毎に、葉ノードに到達した文字列が複数存在するか否かを判断し、同一の葉ノードに到達した文書データを重複データ候補として検出する（ステップＳ３）。
【００３９】
次に、重複データ検出部１３１が、重複データ候補における文字列の先頭から順番に全ての文字を取り出すという構築条件（第２の構築条件）を与えて構文木Ｔ１を構築させる。
【００４０】
次に、木構築部１３２が、第２の構築条件に従って構文木Ｔ１を構築する（ステップＳ４）。
次に、重複データ検出部１３１が、構文木Ｔ１の葉ノード毎に、葉ノードに到達した文字列が複数存在するか否かを判断し、同一の葉ノードに到達した文書データを重複データとして検出する（ステップＳ５）。
【００４１】
次に、重複データ検出部１３１が、重複データのＩＤ番号をデータ削除部２００に出力する（ステップＳ６）。
以上で判定動作を終了する。
【００４２】
次に、木構築部１３２が、第１の構築条件に従って構文木Ｔを構築する動作（第１の木構築動作）について詳しく説明する。
図６は、第１の木構築動作を示すフローチャートである。
【００４３】
なお、以下では、説明を分かり易くするために以下の記号を用いる。
識別子：ｄ（ｄ=０、１、２、・・・）
現在の文字位置：ｉ
識別子ｄの文書データの文字数：Ｎ（ｄ）
取り出す文字位置：Ｐ１、・・・、Ｐｍ
まず、識別子ｄを初期化（ｄ＝０）する（ステップＳ１１）。
【００４４】
次に、識別子ｄをインクリメントする（ステップＳ１２）。
次に、識別子ｄに対応する文書データが存在するか否かを判断する（ステップＳ１３）。
【００４５】
識別子ｄに対応する文書データが存在しない場合（ステップＳ１３のＮｏ）、第１の木構築動作を終了する。
識別子ｄに対応する文書データが存在する場合（ステップＳ１３のＹｅｓ）、文字位置ｉを初期化（ｉ＝０）する（ステップＳ１４）。
【００４６】
次に、文字位置ｉをインクリメントする（ステップＳ１５）。
次に、文字位置ｉが文字数Ｎ（ｄ）以下か否かを判断する（ステップＳ１６）。
文字位置ｉが文字数Ｎ（ｄ）以下ではない場合（ステップＳ１６のＮｏ）、ステップＳ１２に移行し、継続して動作を行う。
【００４７】
文字位置ｉが文字数Ｎ（ｄ）以下の場合（ステップＳ１６のＹｅｓ）、文字位置ｉが取り出すべき文字位置Ｐ１、・・・、Ｐｍのいずれかに該当するか否かを判断する（ステップＳ１７）。
【００４８】
文字位置Ｐ１、・・・、Ｐｍのいずれにも該当しない場合（ステップＳ１７のＮｏ）、ステップＳ１５に移行し、継続して動作を行う。
文字位置Ｐ１、・・・、Ｐｍのいずれかに該当する場合（ステップＳ１７のＹｅｓ）、文字位置ｉの文字を構文木Ｔに格納する（ステップＳ１８）。
【００４９】
その後、文字位置ｉが、文字位置Ｐｍ（取り出すべき最後の文字位置）に等しいか否かを判断する（ステップＳ１９）。
文字位置ｉが、文字位置Ｐｍに等しくない場合（ステップＳ１９のＮｏ）、文字列が続くと見なしてステップＳ１５に移行し、継続して動作を行う。
【００５０】
文字位置ｉが、文字位置Ｐｍに等しい場合（ステップＳ１９のＹｅｓ）、ステップＳ１２に移行し、継続して動作を行う。
次に、木構築部１３２が、第２の構築条件に従って構文木Ｔ１を構築する動作（第２の木構築動作）について詳しく説明する。
【００５１】
図７は、第２の木構築動作を示すフローチャートである。
ステップＳ２１〜ステップＳ２６：それぞれ第１の木構築動作のステップＳ１１〜Ｓ１６と同様の動作を行う。
【００５２】
そして、文字位置ｉが文字数Ｎ（ｄ）以下の場合（ステップＳ２６のＹｅｓ）、文字位置ｉの文字を構文木Ｔ１に格納する（ステップＳ２７）。
ステップＳ２８：第１の木構築動作のステップＳ１９と同様の動作を行う。
【００５３】
次に、第１の木構築動作および第２の木構築動作を、具体例を用いて説明する。
本具体例では、第１の構築条件として、（４ｎ＋１）文字目の文字位置の文字を４文字取り出す条件が与えられている場合の例である。また、文書データ群は、文献１、文献２、文献３で構成されているものとする。
【００５４】
図８〜図１０は、第１の木構築動作の具体例を示す図である。
まず、木構築部１３２は、第１の構築条件に従って文献１の（４ｎ＋１）文字目の文字位置の文字を４文字分取り出し、ノード５１を根ノードとする構文木Ｔを構築する（図８参照）。具体的には文献１の１文字目の文字「Ｂ」、５文字目の「ｐ」、９文字目の「ｒ」、１３文字目の「ｅ」の４文字を取り出す。そして、葉ノード５２に文献１の識別子「文献＃１」を関連づける。
【００５５】
次に、第１の構築条件に従って文献２の（４ｎ＋１）文字目の文字位置の文字を４文字分取り出し、構文木Ｔに格納する（図９参照）。具体的には１文字目の文字「Ｉ」、５文字目の「ｄ」、９文字目の「ｏ」、１３文字目の「ｎ」の４文字を格納する。そして、葉ノード５３に文献２の識別子「文献＃２」を関連づける。
【００５６】
次に、第１の構築条件に従って文献３の（４ｎ＋１）文字目の文字位置の文字を４文字分取り出し、構文木Ｔに格納する（図１０参照）。（４ｎ＋１）文字目の文字位置の文字を４文字分取り出した場合、既に同じ構造の節点が存在するため新たな節点は作成されない。そして、葉ノード５２に文献３の識別子「文献＃３」を関連づける。
【００５７】
全ての文献の構文木Ｔへの文字の格納が終了したとき、識別子「文献＃１」および識別子「文献＃３」が同じ葉ノード５２に関連づけられているので、文献１および文献３を重複データ候補として検出する。
【００５８】
次に、第２の木構築動作の具体例について説明する。
図１１は、第２の木構築動作の具体例を示す図である。
木構築部１３２は、第２の構築条件に従って文献１および文献３をそれぞれ先頭文字から一文字ずつ取り出し、全ての文字を構文木Ｔ１に格納する。
【００５９】
図１１では、１文字目の文字「Ｂ」、２文字目の「ｙ」、３文字目の「ｒ」・・・のように全ての文字を構文木Ｔ１に格納する。そして、文献１および文献３のそれぞれの全ての文字を格納し終わったときに、識別子「文献＃１」および識別子「文献＃３」が同じ葉ノード５４に関連づけられている場合、文献１および文献３を重複データとして検出する。
【００６０】
以上述べたように、本実施の形態のコンピュータ３００によれば、データ検出部１００が、まず、構文木Ｔを構築して重複データ候補を検出し、その後重複データ候補に対し構文木Ｔ１を構築して重複データを検出するようにした。構文木Ｔを構築することにより、容易に重複データ候補（検出対象）を絞り込むことができる。検出対象を絞り込むことにより、例えば最初から文書データの全ての文字を構文木に格納する場合に比べて、構文木Ｔ１を小規模なものとすることができる。これにより、検索効率が向上し、短時間で重複データを検出することができる。
【００６１】
例えば論文に掲載する概要（Abstract）等は、予め文字数が決まっていることが多く、文字数等により同一の文書データか否かを判別する方法では、異なる文字列を有する複数のデータが文書データ候補として検出されてしまう場合がある。本実施の形態のデータ検出部１００によれば、このような方法に比べて精度の高い検出を行うことができる。
【００６２】
なお、本実施の形態では、重複データ検出部１３１が、検出された重複データから１つの重複データを除いた残りの重複データのＩＤ番号をデータ削除部２００に出力し、データ削除部２００が、そのＩＤ番号を持つ文書データを文書データ格納部１１０から削除するようにしたが、本発明はこれに限らず例えば、重複データ検出部１３１が、検出された全ての重複データのＩＤ番号をデータ削除部２００に出力し、データ削除部２００が、その中から１つの重複データを除いた残りの重複データのＩＤ番号を持つ文書データを文書データ格納部１１０から削除するようにしてもよい。なお、除く重複データの判断基準は特に限定されないが、例えば最もＩＤ番号の小さいものを除く等が挙げられる。
【００６３】
また、本実施の形態では、木構築部１３２が語頭側から文字を取り出して構文木Ｔおよび構文木Ｔ１を構築したが、本発明はこれに限らず、例えば語尾側から文字を取り出して構文木Ｔおよび構文木Ｔ１を構築してもよい。
【００６４】
また、本実施の形態では、複数の文書データの中から重複する文書データを検出したが、本発明ではこれに限らず１つの文書データの中にタグ等で区切られた複数の文字列が存在している場合に、これらの文字列から重複する文字列を検出する場合にも適用することができる。このような文書構造を有する文書データとしては例えばＸＭＬ（Extensible Markup Language）データ、ＨＴＭＬ（Hyper Text Markup Language）データ、ＣＳＶ（Comma Separated Values）データ等が挙げられる。
【００６５】
また、本実施の形態では、重複データ検出部１３１が検出した重複データのＩＤ番号を持つ文書データを、データ削除部２００が文書データ格納部１１０から削除する例について説明したが、重複データ検出部１３１が検出した重複データの処理方法は、これに限定されない。
【００６６】
また、本発明に用いる文書データの容量は特に限定されないが、例えばＸＭＬであれば１レコード１００〜１００００文字以上の比較的大規模なデータであるのが好ましい。このような文書データにおいては、重複データ候補として検出されたデータは、前述した第２の木構築動作により重複データとして検出される可能性が高く、実質的に高速な重複データの検出を行うことができる。本発明は、このような重複データを検出する場合に、より顕著な効果を発揮する。
【００６７】
以上、本発明の重複データ検出プログラム、重複データ検出方法および重複データ検出装置を、図示の実施の形態に基づいて説明したが、本発明はこれに限定されるものではなく、各部の構成は、同様の機能を有する任意の構成のものに置換することができる。また、本発明に、他の任意の構成物や工程が付加されていてもよい。
【００６８】
また、本発明は、前述した実施の形態のうちの、任意の２以上の構成（特徴）を組み合わせたものであってもよい。
本発明の用途は、特に限定されないが、例えばデータベースの名寄せ、スパム（spam）メールの除去、データ圧縮等に適用することができる。例えば本発明をメールサーバに適用した場合は、重複した電子メールのタイトルや本文を重複データとして検出することでスパムメールを除去することができる。また、例えば本発明をデータベースに適用した場合は、重複データのうちのいずれか１つを残し、他の重複データを削除し、重複データを使用している使用先には残した重複データにアクセスさせることでデータ圧縮を図ることができる。また、１つの文書データの中に複数の文字列が存在している場合には、重複する文字列のうちのいずれか１つを残し、他の文字列を圧縮し、圧縮した文字列を使用している使用先には残した文字列にアクセスさせることでデータ削減を図ることができる。
【００６９】
なお、上記の処理機能は、コンピュータによって（コンピュータに所定の重複データ検出プログラムを実行させることにより）実現することができる。その場合、データ検出部１００が有すべき機能の処理内容を記述したプログラムが提供される。そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、例えば、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリ等が挙げられる。磁気記録装置としては、例えば、ハードディスク装置（ＨＤＤ）、フレキシブルディスク（ＦＤ）、磁気テープ等が挙げられる。光ディスクとしては、例えば、ＤＶＤ（Digital Versatile Disc）、ＤＶＤ−ＲＡＭ（Random Access Memory）、ＣＤ−ＲＯＭ（Compact Disc Read Only Memory）、ＣＤ−Ｒ（Recordable）／ＲＷ（ReWritable）等が挙げられる。光磁気記録媒体としては、例えば、ＭＯ（Magneto-Optical disk）等が挙げられる。
【００７０】
プログラムを流通させる場合には、例えば、そのプログラムが記録されたＤＶＤ、ＣＤ−ＲＯＭ等の可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
【００７１】
重複データ検出プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムに従った処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することもできる。また、コンピュータは、サーバコンピュータからプログラムが転送される毎に、逐次、受け取ったプログラムに従った処理を実行することもできる。
【図面の簡単な説明】
【００７２】
【図１】本発明の概要を示す図である。
【図２】コンピュータのハードウェア構成例を示す図である。
【図３】コンピュータの機能を示すブロック図である。
【図４】構文木の一例を示す図である。
【図５】判定動作を示すフローチャートである。
【図６】第１の木構築動作を示すフローチャートである。
【図７】第２の木構築動作を示すフローチャートである。
【図８】第１の木構築動作の具体例を示す図である。
【図９】第１の木構築動作の具体例を示す図である。
【図１０】第１の木構築動作の具体例を示す図である。
【図１１】第２の木構築動作の具体例を示す図である。
【符号の説明】
【００７３】
１、３００  コンピュータ
２  構文木構築手段
３  重複データ検出手段
４１〜４５、５１  ノード
５２ 、５３、５４  葉ノード
１００  データ検出部
１１０  文書データ格納部
１２０  文書データ出力部
１３０  判定部
１３１  重複データ検出部
１３２  木構築部
２００  データ削除部
Ｔ、Ｔ１、Ｔａ、Ｔｂ  構文木
【図１】
2008033728.tif 000003
【図２】
2008033728.tif 000004
【図３】
2008033728.tif 000005
【図４】
2008033728.tif 000006
【図５】
2008033728.tif 000007
【図６】
2008033728.tif 000008
【図７】
2008033728.tif 000009
【図８】
2008033728.tif 000010
【図９】
2008033728.tif 000011
【図１０】
2008033728.tif 000012
【図１１】
2008033728.tif 000013