(57)【要約】      （修正有）【課題】複数のデータセットに共通する主語、述語及び目的語を含むトリプルを、記憶領域の使用量を抑えつつ高速で検出する。【解決手段】本検出方法は、トリプルを含む第１のデータセット及び第２のデータセットの何れにも含まれる複数の共通主語及び複数の共通述語を抽出し、複数の共通主語の何れかを含み且つ複数の共通述語の何れかを含むトリプルを、第１のデータセット及び第２のデータセットの各々から抽出し、複数の共通主語の各々に対して複数の共通述語の各々が対応付けられ且つ当該複数の共通述語の各々に対して目的語の集合が対応付けられたデータを、第１のデータセットから抽出したトリプルについて生成し且つ第２のデータセットから抽出したトリプルについて生成し、第１のデータセットについて生成したデータ及び第２のデータセットについて生成したデータのそれぞれについて、目的語の集合の各々から符号を生成する処理を実行する処理を含む。【選択図】図１
2018136640.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに、
主語、述語および目的語を含むトリプルを複数含む第１のデータセットおよび第２のデータセットから、前記第１のデータセットおよび前記第２のデータセットのいずれにも含まれる複数の共通主語および複数の共通述語を抽出し、
前記複数の共通主語のいずれかを含み且つ前記複数の共通述語のいずれかを含むトリプルを、前記第１のデータセット及び前記第２のデータセットのそれぞれから抽出し、
前記複数の共通主語の各々に対して前記複数の共通述語の各々が対応付けられ且つ当該複数の共通述語の各々に対して目的語の集合が対応付けられた第１のデータを、前記第１のデータセットから抽出したトリプルから生成し、
前記複数の共通主語の各々に対して前記複数の共通述語の各々が対応付けられ且つ当該複数の共通述語の各々に対して目的語の集合が対応付けられた第２のデータを、前記第２のデータセットから抽出したトリプルから生成し、
前記第１のデータおよび前記第２のデータのそれぞれについて、目的語の集合の各々から符号を生成する処理を実行する、
処理を実行させる検出プログラム。
【請求項２】
前記コンピュータに、
前記第１のデータに含まれる目的語の集合の各々から生成した符号と、前記第２のデータに含まれる目的語の集合の各々から生成した符号との比較に基づき、前記第１のデータセットと前記第２のデータセットとのいずれにも含まれるトリプルを抽出する、
処理をさらに実行させる請求項１記載の検出プログラム。
【請求項３】
前記第１のデータセットと前記第２のデータセットとのいずれにも含まれるトリプルを抽出する処理において、
第１のデータに含まれる目的語の第１の集合から生成した符号と、前記第２のデータに含まれる目的語の第２の集合から生成した符号とが同一である場合、前記第１の集合又は前記第２の集合に含まれる各目的語と、当該目的語に対応する共通主語および共通述語とを含むトリプルを抽出し、
前記第１のデータに含まれる目的語の第３の集合から生成した符号と、前記第２のデータに含まれる目的語の第４の集合から生成した符号とが同一ではない場合、前記第３の集合に含まれる各目的語と、前記第４の集合に含まれる各目的語との比較に基づき、前記第１のデータセットと前記第２のデータセットとのいずれにも含まれるトリプルを抽出する、
請求項２記載の検出プログラム。
【請求項４】
前記複数の共通主語および前記複数の共通述語を抽出する処理において、
前記第１のデータセットに含まれる複数の述語のうち前記第２のデータセットに含まれる述語である前記複数の共通述語を抽出し、
前記第２のデータセットに含まれるトリプルのうち、抽出された前記複数の共通述語のいずれかと同じ述語を含み且つ前記第１のデータセットに含まれる主語と同じ主語を含むトリプルを特定し、特定した当該トリプルに含まれる主語である前記複数の共通主語を抽出する、
請求項１乃至３のいずれか１つ記載の検出プログラム。
【請求項５】
コンピュータが、
主語、述語および目的語を含むトリプルを複数含む第１のデータセットおよび第２のデータセットから、前記第１のデータセットおよび前記第２のデータセットのいずれにも含まれる複数の共通主語および複数の共通述語を抽出し、
前記複数の共通主語のいずれかを含み且つ前記複数の共通述語のいずれかを含むトリプルを、前記第１のデータセット及び前記第２のデータセットのそれぞれから抽出し、
前記複数の共通主語の各々に対して前記複数の共通述語の各々が対応付けられ且つ当該複数の共通述語の各々に対して目的語の集合が対応付けられた第１のデータを、前記第１のデータセットから抽出したトリプルから生成し、
前記複数の共通主語の各々に対して前記複数の共通述語の各々が対応付けられ且つ当該複数の共通述語の各々に対して目的語の集合が対応付けられた第２のデータを、前記第２のデータセットから抽出したトリプルから生成し、
前記第１のデータおよび前記第２のデータのそれぞれについて、目的語の集合の各々から符号を生成する処理を実行する、
処理を実行する検出方法。
【請求項６】
主語、述語および目的語を含むトリプルを複数含む第１のデータセットおよび第２のデータセットから、前記第１のデータセットおよび前記第２のデータセットのいずれにも含まれる複数の共通主語および複数の共通述語を抽出する抽出部と、
前記複数の共通主語のいずれかを含み且つ前記複数の共通述語のいずれかを含むトリプルを、前記第１のデータセット及び前記第２のデータセットのそれぞれから抽出し、前記複数の共通主語の各々に対して前記複数の共通述語の各々が対応付けられ且つ当該複数の共通述語の各々に対して目的語の集合が対応付けられた第１のデータを、前記第１のデータセットから抽出したトリプルから生成し、前記複数の共通主語の各々に対して前記複数の共通述語の各々が対応付けられ且つ当該複数の共通述語の各々に対して目的語の集合が対応付けられた第２のデータを、前記第２のデータセットから抽出したトリプルから生成し、前記第１のデータおよび前記第２のデータのそれぞれについて、目的語の集合の各々から符号を生成する処理を実行する生成部と、
を有する検出装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データセット間で共通する値の検出技術に関する。
【背景技術】
【０００２】
ＬＯＤ（Linked Open Data）とは、コンピュータの処理に適したデータをウェブ上で公開および共有することであり、ＬＯＤを実現するための技術としてＲＤＦ（Resource Description Framework）が知られている。ＲＤＦのデータモデルにおいては、主語、述語及び目的語を含むトリプルの形でウェブ上の資源（resource）に関する情報が記述される。
【０００３】
ウェブ上に公開されたＲＤＦのデータセットは更新されることがあり、更新前のデータセットと更新後のデータセットとの間で共通するトリプル（或いは差分のトリプル）を検出する作業が発生することがある。
【０００４】
２つのデータセット間で共通するトリプルの検出には、ＲＤＢ（Relational DataBase）のハッシュ結合（hash join）等において結合キーを見つける技術を使用することができる。但し、ハッシュ結合においてはメモリ使用量が膨大になるので、ハッシュ結合を使用することが適切ではない場合がある。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１６−１８４４００号公報
【特許文献２】国際公開第２０１３／１１１２８７号
【特許文献３】特開２０１３−２４６８２８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
本発明の目的は、１つの側面では、複数のデータセットに共通するトリプルを、記憶領域の使用量を抑えつつ高速で検出するための技術を提供することである。
【課題を解決するための手段】
【０００７】
一態様に係る検出方法は、主語、述語および目的語を含むトリプルを複数含む第１のデータセットおよび第２のデータセットから、第１のデータセットおよび第２のデータセットのいずれにも含まれる複数の共通主語および複数の共通述語を抽出し、複数の共通主語のいずれかを含み且つ複数の共通述語のいずれかを含むトリプルを、第１のデータセット及び第２のデータセットのそれぞれから抽出し、複数の共通主語の各々に対して複数の共通述語の各々が対応付けられ且つ当該複数の共通述語の各々に対して目的語の集合が対応付けられた第１のデータを、第１のデータセットから抽出したトリプルから生成し、複数の共通主語の各々に対して複数の共通述語の各々が対応付けられ且つ当該複数の共通述語の各々に対して目的語の集合が対応付けられた第２のデータを、第２のデータセットから抽出したトリプルから生成し、第１のデータおよび第２のデータのそれぞれについて、目的語の集合の各々から符号を生成する処理を実行する処理を含む。
【発明の効果】
【０００８】
１つの側面では、複数のデータセットに共通するトリプルを、記憶領域の使用量を抑えつつ高速で検出できるようになる。
【図面の簡単な説明】
【０００９】
【図１】図１は、検出装置の機能ブロック図である。
【図２】図２は、データセットＤＡの一例を示す図である。
【図３】図３は、データセットＤＢの一例を示す図である。
【図４】図４は、メインの処理フローを示す図である。
【図５】図５は、第１抽出処理の処理フローを示す図である。
【図６】図６は、ハッシュテーブルｈ１に登録される述語の一例を示す図である。
【図７】図７は、ハッシュテーブルｈ２に登録される述語の一例を示す図である。
【図８】図８は、第２抽出処理の処理フローを示す図である。
【図９】図９は、ハッシュテーブルｈ３に登録される主語の一例を示す図である。
【図１０】図１０は、ハッシュテーブルｈ４に登録される主語の一例を示す図である。
【図１１】図１１は、生成処理の処理フローを示す図である。
【図１２】図１２は、テーブルｔの一例を示す図である。
【図１３】図１３は、ハッシュテーブルｈｐの一例を示す図である。
【図１４】図１４は、処理対象のトリプルを示す図である。
【図１５】図１５は、生成処理の処理フローを示す図である。
【図１６】図１６は、テーブルｔの一例を示す図である。
【図１７】図１７は、テーブルｔａの一例を示す図である。
【図１８】図１８は、テーブルｔｂの一例を示す図である。
【図１９】図１９は、比較処理の処理フローを示す図である。
【図２０】図２０は、共通するトリプルの一例を示す図である。
【図２１】図２１は、共通するトリプルの一例を示す図である。
【図２２】図２２は、共通するトリプルの一例を示す図である。
【図２３】図２３は、ハッシュ結合について説明するための図である。
【図２４】図２４は、ソートマージ結合について説明するための図である。
【図２５】図２５は、ネステッドループ結合について説明するための図である。
【図２６】図２６は、コンピュータの機能ブロック図である。
【発明を実施するための形態】
【００１０】
図１に、本実施の形態の検出装置１の機能ブロック図を示す。例えばパーソナルコンピュータ或いはサーバ等である検出装置１は、第１抽出部１０１と、第２抽出部１０３と、生成部１０５と、比較部１０７と、データセット格納部１１１と、共通述語格納部１１３と、共通主語格納部１１５と、テーブル格納部１１７と、共通トリプル格納部１１９とを含む。
【００１１】
第１抽出部１０１、第２抽出部１０３、生成部１０５および比較部１０７は、図２６におけるメモリ２５０１にロードされたプログラムが図２６におけるＣＰＵ（Central Processing Unit）により実行されることで実現される。データセット格納部１１１、共通述語格納部１１３、共通主語格納部１１５、テーブル格納部１１７および共通トリプル格納部１１９は、メモリ２５０１又は図２６におけるＨＤＤ（Hard Disk Drive）２５０５に設けられる。
【００１２】
第１抽出部１０１は、データセット格納部１１１に格納されているデータセットに基づき処理を実行し、処理結果を共通述語格納部１１３に格納する。第２抽出部１０３は、データセット格納部１１１に格納されているデータセット及び共通述語格納部１１３に格納されているデータに基づき処理を実行し、処理結果を共通主語格納部１１５に格納する。生成部１０５は、データセット格納部１１１に格納されているデータセット、共通述語格納部１１３に格納されているデータ及び共通主語格納部１１５に格納されているデータに基づき処理を実行し、処理結果をテーブル格納部１１７に格納する。比較部１０７は、テーブル格納部１１７に格納されているデータに基づき処理を実行し、処理結果を共通トリプル格納部１１９に格納する。
【００１３】
以下で説明する本実施の形態によれば、複数のデータセット（例えば、バージョンが異なる複数のデータセット）について、より少ない時間計算量で共通トリプルを見つけることができる。ここでは、データセットが以下のような特徴を有することが仮定される。
（１）トリプルの種類数が非常に多い（例えば数十億）
（２）述語の種類数が少ない（多くても１００）
（３）主語の種類数および目的語の種類数の桁数は、トリプルの種類数の桁数と比較して数桁少ない
【００１４】
以上の（１）乃至（３）の特徴は、一般的なＲＤＦのデータが有する特徴であり、特に特徴的なデータセットであることが仮定されているわけではない。
【００１５】
また、データセットのバージョン変更においては、以下のような変更を行うことが仮定される。
（４）いくつかの主語が追加または削除される（主語の数が２倍程度以上に増えることはない）
（５）いくつかの述語が追加または削除されることがある（述語の数が２倍程度以上に増えることはない）
（６）いくつかの目的語が追加または削除される（バージョン間の相違であるため、全体の一部の目的語が変更される）
【００１６】
以上の（４）乃至（６）の特徴は、ＲＤＦのデータのバージョン変更の特徴として一般的であり、特に特徴的な変更を行うことが仮定されているわけではない。
【００１７】
説明を簡単にするため、以下では、図２に示したデータセット（データセットＤＡと呼ぶ）と図３に示したデータセット（データセットＤＢと呼ぶ）とを例として説明を行う。データセットＤＡとデータセットＤＢとを比較すると、５つのトリプル（（ｓ１，ｐ１，ｏ１）、（ｓ１，ｐ２，ｏ２）、（ｓ１，ｐ２，ｏ３）、（ｓ２，ｐ１，ｏ４）、（ｓ２，ｐ２，ｏ５））が共通している。
【００１８】
図４乃至図２１を用いて、検出装置１が実行する処理について説明する。
【００１９】
まず、第１抽出部１０１は、第１抽出処理を実行する（図４：ステップＳ１）。第１抽出処理については、図５乃至図７を用いて説明する。
【００２０】
まず、第１抽出部１０１は、メモリ２５０１におけるハッシュテーブルｈ１及びｈ２を初期化（例えば、値が登録されている場合にはクリア）する（図５：ステップＳ２１）。
【００２１】
第１抽出部１０１は、データセット格納部１１１に格納されているデータセットＤＡから未処理のトリプルを１つ特定する（ステップＳ２３）。
【００２２】
第１抽出部１０１は、ステップＳ２３において特定したトリプルに含まれる述語と同じ述語がハッシュテーブルｈ１に登録されていない場合、ステップＳ２３において特定したトリプルに含まれる述語をハッシュテーブルｈ１に登録する（ステップＳ２５）。ステップＳ２５の処理により、ハッシュテーブルｈ１に登録される述語のそれぞれがハッシュテーブルｈ１においてユニークになる。つまり、同じ種類の複数の述語がハッシュテーブルｈ１に登録されることはない。ハッシュテーブルｈ１には、図６に示すように述語が登録される。
【００２３】
第１抽出部１０１は、データセットＤＡに未処理のトリプルが有るか判定する（ステップＳ２７）。未処理のトリプルが有る場合（ステップＳ２７：Ｙｅｓルート）、処理はステップＳ２３に戻る。
【００２４】
一方、未処理のトリプルが無い場合（ステップＳ２７：Ｎｏルート）、第１抽出部１０１は、データセット格納部１１１に格納されているデータセットＤＢから未処理のトリプルを１つ特定する（ステップＳ２９）。
【００２５】
第１抽出部１０１は、ステップＳ２９において特定したトリプルに含まれる述語と同じ述語がハッシュテーブルｈ１に登録されており且つハッシュテーブルｈ２に登録されていない場合、ステップＳ２９において特定したトリプルに含まれる述語をハッシュテーブルｈ２に登録する（ステップＳ３１）。ステップＳ３１の処理により、ハッシュテーブルｈ２に登録される述語のそれぞれがハッシュテーブルｈ２においてユニークになる。ハッシュテーブルｈ２には、図７に示すように述語が登録される。
【００２６】
第１抽出部１０１は、データセットＤＢに未処理のトリプルが有るか判定する（ステップＳ３３）。未処理のトリプルが有る場合（ステップＳ３３：Ｙｅｓルート）、処理はステップＳ２９に戻る。一方、未処理のトリプルが無い場合（ステップＳ３３：Ｎｏルート）、第１抽出部１０１は、ハッシュテーブルｈ２をハッシュテーブルｈｐとして共通述語格納部１１３に格納する。そして処理は呼び出し元に戻る。
【００２７】
以上のような処理を実行すれば、データセットＤＡとデータセットＤＢに共通する述語（以下、共通述語と呼ぶ）を抽出することができるようになる。
【００２８】
図４の説明に戻り、第２抽出部１０３は、第２抽出処理を実行する（ステップＳ３）。第２抽出処理については、図８乃至図１０を用いて説明する。
【００２９】
まず、第２抽出部１０３は、メモリ２５０１におけるハッシュテーブルｈ３及びｈ４を初期化する（図８：ステップＳ４１）。
【００３０】
第２抽出部１０３は、データセットＤＡから未処理のトリプルを１つ特定する（ステップＳ４３）。
【００３１】
第２抽出部１０３は、ステップＳ４３において特定したトリプルに含まれる述語と同じ述語がハッシュテーブルｈｐに登録されており且つステップＳ４３において特定したトリプルに含まれる主語と同じ主語がハッシュテーブルｈ３に登録されていない場合、ステップＳ４３において特定したトリプルに含まれる主語をハッシュテーブルｈ３に登録する（ステップＳ４５）。ステップＳ４５の処理により、ハッシュテーブルｈ３に登録される主語のそれぞれがハッシュテーブルｈ３においてユニークになる。ハッシュテーブルｈ３には、図９に示すように主語が登録される。
【００３２】
第２抽出部１０３は、データセットＤＡに未処理のトリプルが有るか判定する（ステップＳ４７）。未処理のトリプルが有る場合（ステップＳ４７：Ｙｅｓルート）、処理はステップＳ４３に戻る。
【００３３】
一方、未処理のトリプルが無い場合（ステップＳ４７：Ｎｏルート）、第２抽出部１０３は、データセットＤＢから未処理のトリプルを１つ特定する（ステップＳ４９）。
【００３４】
第２抽出部１０３は、ステップＳ４９において特定したトリプルに含まれる述語と同じ述語がハッシュテーブルｈｐに登録されており、ステップＳ４９において特定したトリプルに含まれる主語と同じ主語がハッシュテーブルｈ３に登録されており且つステップＳ４９において特定したトリプルに含まれる主語と同じ主語がハッシュテーブルｈ４に登録されていない場合、ステップＳ４９において特定したトリプルに含まれる主語をハッシュテーブルｈ４に登録する（ステップＳ５１）。ステップＳ５１の処理により、ハッシュテーブルｈ４に登録される主語のそれぞれがハッシュテーブルｈ４においてユニークになる。ハッシュテーブルｈ４には、図１０に示すように主語が登録される。
【００３５】
第２抽出部１０３は、データセットＤＢに未処理のトリプルが有るか判定する（ステップＳ５３）。未処理のトリプルが有る場合（ステップＳ５３：Ｙｅｓルート）、処理はステップＳ４９に戻る。一方、未処理のトリプルが無い場合（ステップＳ５３：Ｎｏルート）、第２抽出部１０３は、ハッシュテーブルｈ４をハッシュテーブルｈｓとして共通主語格納部１１５に格納する。そして処理は呼び出し元に戻る。
【００３６】
以上のような処理を実行すれば、データセットＤＡとデータセットＤＢに共通する主語であって且つ共通述語を含むトリプルに含まれる主語（以下、共通主語と呼ぶ）を抽出することができるようになる。
【００３７】
図４の説明に戻り、生成部１０５は、データセットＤＡとデータセットＤＢとのうち未処理のデータセットを１つ特定する（ステップＳ５）。そして、生成部１０５は、ステップＳ５において特定したデータセットについて生成処理を実行する（ステップＳ７）。生成処理については、図１１乃至図１８を用いて説明する。
【００３８】
まず、生成部１０５は、共通主語格納部１１５に格納されたハッシュテーブルｈｓの要素数（すなわち、共通主語の数）を行数とし且つ共通述語格納部１１３に格納されたハッシュテーブルｈｐの要素数（すなわち、共通述語の数）の２倍に１を加えた数を列数とするテーブルｔをメモリ２５０１において初期化する（図１１：ステップＳ６１）。
【００３９】
生成部１０５は、ハッシュテーブルｈｓに登録された各共通主語を、テーブルｔの１列目に設定する（ステップＳ６３）。ここまでの処理によって、テーブルｔには、例えば図１２に示すようにデータが格納される。
【００４０】
生成部１０５は、０を開始とする連番ｎをハッシュテーブルｈｐの要素に対応付けて共通述語格納部１１３に格納する（ステップＳ６５）。ステップＳ６５の処理により、ハッシュテーブルｈｐの形式は、例えば図１３に示すようになる。
【００４１】
生成部１０５は、テーブルｔの１列目（すなわち共通主語）についてインデックス（例えばＢ−ｔｒｅｅ）を生成する（ステップＳ６７）。生成されたインデックスは、例えばステップＳ８９において使用される。
【００４２】
生成部１０５は、ステップＳ５において特定したデータセットから未処理のトリプルを１つ特定する（ステップＳ６９）。
【００４３】
生成部１０５は、ステップＳ６９において特定したトリプルに含まれる主語がハッシュテーブルｈｓに登録され且つステップＳ６９において特定したトリプルに含まれる述語がハッシュテーブルｈｐに登録されているか判定する（ステップＳ７１）。
【００４４】
ステップＳ６９において特定したトリプルに含まれる主語がハッシュテーブルｈｓに登録されていないか又はステップＳ６９において特定したトリプルに含まれる述語がハッシュテーブルｈｐに登録されていない場合（ステップＳ７１：Ｎｏルート）、処理はステップＳ７７に移行する。
【００４５】
共通主語および共通述語の両方を含むトリプル以外のトリプルは、ステップＳ７１の処理により、ステップＳ７３及びＳ７５の処理の対象から外される。例えばデータセットＤＡの場合、図１４に示すように、４行目のトリプルと８行目のトリプルとがステップＳ７３及びＳ７５の処理の対象から外される。
【００４６】
一方、ステップＳ６９において特定したトリプルに含まれる主語がハッシュテーブルｈｓに登録され且つステップＳ６９において特定したトリプルに含まれる述語がハッシュテーブルｈｐに登録されている場合（ステップＳ７１：Ｙｅｓルート）、生成部１０５は、以下の処理を実行する。具体的には、生成部１０５は、ステップＳ６９において特定したトリプルに含まれる述語に対応するｎを、ハッシュテーブルｈｐから取得する（ステップＳ７３）。
【００４７】
生成部１０５は、ステップＳ６９において特定したトリプルに含まれる主語が１列目に含まれる行の（ｎ＊２＋３）列目に、ステップＳ６９において特定したトリプルに含まれる目的語を登録する（ステップＳ７５）。
【００４８】
生成部１０５は、ステップＳ５において特定したデータセットに未処理のトリプルが有るか判定する（ステップＳ７７）。未処理のトリプルが有る場合（ステップＳ７７：Ｙｅｓルート）、処理はステップＳ６９に戻る。一方、未処理のトリプルが無い場合（ステップＳ７７：Ｎｏルート）、処理は端子Ａを介して図１５のステップＳ７９に移行する。
【００４９】
図１５の説明に移行し、生成部１０５は、テーブルｔから未処理の行を１つ特定する（図１５：ステップＳ７９）。
【００５０】
生成部１０５は、ｍの各値（ｍ＝０，１，２，．．．，Ｍ）について、ステップＳ７９において特定した行における（ｍ＊２＋３）列目に登録された目的語の種類の集合を特定する（ステップＳ８１）。Ｍは共通述語の数から１を引いた数に相当する。ステップＳ７７までの処理によると重複する目的語が登録される可能性があるので、目的語の種類の集合（すなわち、ユニークな目的語の集合）が特定される。
【００５１】
生成部１０５は、ｍの各値について、特定した集合内の目的語をソートしてチェックサムを生成する（ステップＳ８３）。なお、ステップＳ８３においてはチェックサム以外の符号を生成してもよい。
【００５２】
生成部１０５は、ｍの各値について、チェックサムを（ｍ＊２＋２）列目に登録する（ステップＳ８５）。ステップＳ８５までの処理によって、例えば図１６に示すようなテーブルｔが生成される。
【００５３】
生成部１０５は、テーブルｔに未処理の行が有るか判定する（ステップＳ８７）。テーブルｔに未処理の行が有る場合（ステップＳ８７：Ｙｅｓルート）、処理はステップＳ７９に戻る。
【００５４】
一方、テーブルｔに未処理の行が無い場合（ステップＳ８７：Ｎｏルート）、生成部１０５は、テーブルｔの１列目の値に基づき、テーブルｔの行をソートする（ステップＳ８９）。ステップＳ８９においては、例えば、１列目の共通主語が辞書順になるようにソートが行われる。そして処理は終了する。
【００５５】
なお、ステップＳ８９の処理が実行されると、図１６に示したテーブルｔは、図１７に示すテーブルｔに更新される。また、データセットＤＢについて生成処理を実行すると、例えば図１８に示すテーブルｔが生成される。以下では、データセットＤＡについて生成したテーブルｔをテーブルｔａとし、データセットＤＢについて生成したテーブルｔをテーブルｔｂとする。生成部１０５は、テーブルｔａ及びテーブルｔｂをテーブル格納部１１７に格納する。
【００５６】
なお、以下で説明する比較処理をソートマージ結合ではなくネステッドループ結合と同様の方法で実行する場合には、ステップＳ８９の処理を省略してもよい。
【００５７】
以上のように、共通主語および共通述語の両方を含むトリプルの集合を、共通主語ごとのデータに変換することで、後で実行する比較処理を高速に実行することができるようになる。
【００５８】
図４の説明に戻り、生成部１０５は、データセットＤＡとデータセットＤＢとのうち未処理のデータセットが有るか判定する（ステップＳ９）。データセットＤＡとデータセットＤＢとのうち未処理のデータセットが有る場合（ステップＳ９：Ｙｅｓルート）、処理はステップＳ５に戻る。
【００５９】
一方、データセットＤＡとデータセットＤＢとのうち未処理のデータセットが無い場合（ステップＳ９：Ｎｏルート）、比較部１０７は、比較処理を実行する（ステップＳ１１）。比較処理については、図１９乃至図２２を用いて説明する。
【００６０】
まず、比較部１０７は、テーブルｔａの行番号を表す変数αを０に設定し且つテーブルｔｂの行番号を表す変数βを０に設定する（図１９：ステップＳ９１）。
【００６１】
比較部１０７は、テーブルｔａをテーブル格納部１１７から読み出す。そして、比較部１０７は、αがテーブルｔａの行数より大きいか判定する（ステップＳ９３）。αがテーブルｔａの行数より大きい場合（ステップＳ９３：Ｙｅｓルート）、処理は呼び出し元に戻り終了する。
【００６２】
αがテーブルｔａの行数より大きくない場合（ステップＳ９３：Ｎｏルート）、比較部１０７は、テーブルｔｂをテーブル格納部１１７から読み出す。そして、比較部１０７は、βがテーブルｔｂの行数より大きいか判定する（ステップＳ９５）。βがテーブルｔｂの行数より大きい場合（ステップＳ９５：Ｙｅｓルート）、処理は呼び出し元に戻り終了する。
【００６３】
βがテーブルｔｂの行数より大きくない場合（ステップＳ９５：Ｎｏルート）、比較部１０７は、テーブルｔａのα行目の１列目とテーブルｔｂのβ行目の１列目とが同じであるか判定する（ステップＳ９７）。
【００６４】
テーブルｔａのα行目の１列目とテーブルｔｂのβ行目の１列目とが同じではない場合（ステップＳ９７：Ｎｏルート）、比較部１０７は、以下の処理を実行する。具体的には、比較部１０７は、テーブルｔａのα行目がテーブルｔｂのβ行目より辞書順で後である場合にはβを１インクリメントし、テーブルｔｂのβ行目がテーブルｔａのα行目より辞書順で後である場合にはαを１インクリメントする（ステップＳ９９）。そして処理はステップＳ９３に戻る。なお、ステップＳ９１乃至ステップＳ９９の処理は、ソートマージ結合に基づく。
【００６５】
一方、テーブルｔａのα行目の１列目とテーブルｔｂのβ行目の１列目とが同じである場合（ステップＳ９７：Ｙｅｓルート）、比較部１０７は、以下の処理を実行する。具体的には、比較部１０７は、ｍの各値（ｍ＝０，１，２，．．．，Ｍ）について、テーブルｔａのα行目の（ｍ＊２＋２）列目のチェックサムと、テーブルｔｂのβ行目の（ｍ＊２＋２）列目のチェックサムとを比較する（ステップＳ１０１）。
【００６６】
テーブルｔａのα行目の（ｍ＊２＋２）列目のチェックサムと、テーブルｔｂのβ行目の（ｍ＊２＋２）列目のチェックサムとが同じである場合（ステップＳ１０３：Ｙｅｓルート）、比較部１０７は、以下の処理を実行する。具体的には、比較部１０７は、テーブルｔａのα行目（またはテーブルｔｂのβ行目の）の（ｍ＊２＋３）列目における目的語の各々と、（ｍ＊２＋２）列目のチェックサムに対応する共通述語と、１列目における共通主語とを含むトリプルを、共通トリプル格納部１１９に格納する（ステップＳ１０５）。そして処理はステップＳ９３に戻る。
【００６７】
一方、テーブルｔａのα行目の（ｍ＊２＋２）列目のチェックサムと、テーブルｔｂのβ行目の（ｍ＊２＋２）列目のチェックサムとが同じではない場合（ステップＳ１０３：Ｎｏルート）、比較部１０７は、以下の処理を実行する。具体的には、比較部１０７は、テーブルｔａのα行目の（ｍ＊２＋３）列目における目的語の各々と、テーブルｔｂのβ行目の（ｍ＊２＋３）列目における目的語の各々とを比較する。そして、比較部１０７は、目的語が一致する場合には、一致した目的語と、（ｍ＊２＋２）列目のチェックサムに対応する共通述語と、１列目における共通主語とを含むトリプルを、共通トリプル格納部１１９に格納する（ステップＳ１０７）。そして処理はステップＳ９３に戻る。
【００６８】
例えば図１７に示したテーブルｔａと図１８に示したテーブルｔｂとを対象とする場合、ステップＳ１０３においては、主語がｓ１であり且つ述語がｐ１である場合と、主語がｓ１であり且つ述語がｐ２である場合と、主語がｓ２であり且つ述語がｐ１である場合とについて、チェックサムが一致すると判定される。従って、ステップＳ１０５においては、図２０に示すように、主語がｓ１であり、述語がｐ１であり且つ目的語がｏ１であるトリプルと、主語がｓ１であり、述語がｐ２であり且つ目的語がｏ２であるトリプルと、主語がｓ１であり、述語がｐ２であり且つ目的語がｏ３であるトリプルと、主語がｓ２であり、述語がｐ１であり且つ目的語がｏ４であるトリプルとが共通トリプル格納部１１９に格納される。また、ステップＳ１０３においては、主語がｓ２であり且つ述語がｐ２である場合についてはチェックサムが一致しないと判定されるが、ステップＳ１０７において目的語ｏ５が一致すると判定される。従って、図２１に示すように、主語がｓ２であり、述語がｐ２であり且つ目的語がｏ５であるトリプルが共通トリプル格納部１１９に格納される。よって、最終的には、図２２に示す５つのトリプルが共通トリプル格納部１１９に格納される。
【００６９】
共通トリプル格納部１１９に格納されたトリプルは、例えば、検出装置１の表示装置に表示され、ユーザにより確認される。
【００７０】
以上のように、本実施の形態においては、共通主語でデータセットをまとめあげ、さらにチェックサムの比較をすることで目的語同士の比較を行うことを可能な限り回避しているので、共通するトリプルを高速で検出することができる。また、テーブルｔの形式で中間データを保持することで、ハッシュ結合等を実行した場合と比較して記憶領域の使用量を少なくすることができるようになる。
【００７１】
なお、データセットのバージョン変更が（４）乃至（６）の特徴を有することは、データセット間の相違が軽微であることを意味しており、このような場合、変更前後のチェックサムは多くの場合同じである。従って、目的語同士の比較を回避できる可能性が高くなる。
【００７２】
ここで、本実施の形態の処理を実行した場合の処理時間と通常のソートマージ結合を実行した場合の処理時間との比較結果を示す。
【００７３】
前提として、対象のデータセットに含まれるトリプルの種類数が１，１５９，９７５，８２０であり、主語の種類数が５８，８４１，７７４であり、述語の種類数が６８，８９４であり、目的語の種類数が２３２，９１１，６０８であるとする。また、時間計算量が線形オーダーである処理および入力データ量が多い処理は実行時間に与える影響が大きいため、これらの処理のみを時間計測の対象とする。具体的には、本実施の形態の場合はデータセットの主語をソートする処理を対象とし、通常のソートマージ結合の場合はデータセットのトリプルをソートする処理を対象とする。
【００７４】
そして、トリプルの種類数と同数の行を有するデータセットおよび主語の種類数と同数の行を有するデータセットをそれぞれ作成し、作成したデータセットに対して利用可能なメモリ量を１ギガバイトとしてＧＮＵソートを実行した場合の処理時間が計測されるものとする。
【００７５】
このケースの場合、トリプルの種類数と同数の行を有するデータセットのソートに要する時間は２６分５７秒であるのに対して、主語の種類数と同数の行を有するデータセットのソートに要する時間は４９秒であった。従って、本実施の形態の処理を実行することで、ソートに要する時間を大幅に短縮可能であることが確認された。
【００７６】
以上本発明の一実施の形態を説明したが、本発明はこれに限定されるものではない。例えば、上で説明した検出装置１の機能ブロック構成は実際のプログラムモジュール構成に一致しない場合もある。
【００７７】
また、上で説明した各テーブルの構成は一例であって、上記のような構成でなければならないわけではない。さらに、処理フローにおいても、処理結果が変わらなければ処理の順番を入れ替えることも可能である。さらに、並列に実行させるようにしても良い。
【００７８】
また、比較処理を、ソートマージ結合ではなくネステッドループ結合と同様の方法で実行してもよい。
【００７９】
［付録］
本付録においては、ハッシュ結合、ソートマージ結合およびネステッドループ結合のそれぞれを用いて共通するレコードを特定する処理について説明する。
【００８０】
１．ハッシュ結合
図２３は、ハッシュ結合について説明するための図である。図２３に示した例においては、データセットＴ１とデータセットＴ２との間で共通するトリプルが抽出される。ハッシュテーブルには、データセットＴ１の比較対象列（この例では、列１、列２及び列３）の値からハッシュ関数により算出されたハッシュ値と、比較対象列の値とが登録される。そして、ハッシュテーブルを参照しながら、データセットＴ２の各レコードの比較対象列がデータセットＴ１のレコードと一致するか確認される。
【００８１】
２．ソートマージ結合
図２４は、ソートマージ結合について説明するための図である。ソートマージ結合においては、まず各データセットのレコードがソートされる。図２４に示した例においては、比較対象列は列１、列２及び列３であり、まずデータセットＴ１の最初のレコードの値とデータセットＴ２の最初のレコード値とが比較される。両者が等しければ、共通するレコードであるとして抽出される。データセットＴ１の最初のレコードの値がデータセットＴ２の最初のレコードの値より大きい場合（或いは、辞書順で後である場合）、データセットＴ２の次のレコードの値とデータセットＴ１の最初のレコードの値とが比較される。逆に、データセットＴ１の最初のレコードの値がデータセットＴ２の最初のレコードの値より小さい場合（或いは、辞書順で前である場合）、データセットＴ１の次のレコードの値とデータセットＴ２の最初のレコードの値とが比較される。以上のような処理が繰り返される。
【００８２】
３．ネステッドループ結合
図２５は、ネステッドループ結合について説明するための図である。図２５に示した例においては、データセットＴ１における最初のレコードの比較対象列（ここでは、列１、列２及び列３）の値と、データセットＴ２における各レコードの比較対象列の値とが比較される。この処理が、データセットＴ１における２番目のレコードから最後のレコードまで実行されることで、共通するレコードが抽出される。
【００８３】
以上で付録を終了する。
【００８４】
なお、上で述べた検出装置１は、コンピュータ装置であって、図２６に示すように、メモリ２５０１とＣＰＵ２５０３とＨＤＤ２５０５と表示装置２５０９に接続される表示制御部２５０７とリムーバブル・ディスク２５１１用のドライブ装置２５１３と入力装置２５１５とネットワークに接続するための通信制御部２５１７とがバス２５１９で接続されている。オペレーティング・システム（ＯＳ：Operating System）及び本実施例における処理を実施するためのアプリケーション・プログラムは、ＨＤＤ２５０５に格納されており、ＣＰＵ２５０３により実行される際にはＨＤＤ２５０５からメモリ２５０１に読み出される。ＣＰＵ２５０３は、アプリケーション・プログラムの処理内容に応じて表示制御部２５０７、通信制御部２５１７、ドライブ装置２５１３を制御して、所定の動作を行わせる。また、処理途中のデータについては、主としてメモリ２５０１に格納されるが、ＨＤＤ２５０５に格納されるようにしてもよい。本発明の実施例では、上で述べた処理を実施するためのアプリケーション・プログラムはコンピュータ読み取り可能なリムーバブル・ディスク２５１１に格納されて頒布され、ドライブ装置２５１３からＨＤＤ２５０５にインストールされる。インターネットなどのネットワーク及び通信制御部２５１７を経由して、ＨＤＤ２５０５にインストールされる場合もある。このようなコンピュータ装置は、上で述べたＣＰＵ２５０３、メモリ２５０１などのハードウエアとＯＳ及びアプリケーション・プログラムなどのプログラムとが有機的に協働することにより、上で述べたような各種機能を実現する。
【００８５】
以上述べた本発明の実施の形態をまとめると、以下のようになる。
【００８６】
本実施の形態の第１の態様に係る検出方法は、（Ａ）主語、述語および目的語を含むトリプルを複数含む第１のデータセットおよび第２のデータセットから、第１のデータセットおよび第２のデータセットのいずれにも含まれる複数の共通主語および複数の共通述語を抽出し、（Ｂ）複数の共通主語のいずれかを含み且つ複数の共通述語のいずれかを含むトリプルを、第１のデータセット及び第２のデータセットのそれぞれから抽出し、（Ｃ）複数の共通主語の各々に対して複数の共通述語の各々が対応付けられ且つ当該複数の共通述語の各々に対して目的語の集合が対応付けられた第１のデータを、第１のデータセットから抽出したトリプルから生成し、（Ｄ）複数の共通主語の各々に対して複数の共通述語の各々が対応付けられ且つ当該複数の共通述語の各々に対して目的語の集合が対応付けられた第２のデータを、第２のデータセットから抽出したトリプルから生成し、（Ｅ）第１のデータおよび第２のデータのそれぞれについて、目的語の集合の各々から符号を生成する処理を実行する処理を含む。
【００８７】
複数のデータセットに共通するトリプルを、記憶領域の使用量を抑えつつ高速で検出することができるようになる。
【００８８】
また、本検出方法は、（Ｆ）第１のデータに含まれる目的語の集合の各々から生成した符号と、第２のデータに含まれる目的語の集合の各々から生成した符号との比較に基づき、第１のデータセットと第２のデータセットとのいずれにも含まれるトリプルを抽出する処理をさらに含んでもよい。
【００８９】
目的語同士の比較をしなくてもよいので、たとえ目的語の数が多い場合であっても検出にかかる時間が長くならないようにすることができる。
【００９０】
また、第１のデータセットと第２のデータセットとのいずれにも含まれるトリプルを抽出する処理において、（ｆ１）第１のデータに含まれる目的語の第１の集合から生成した符号と、第２のデータに含まれる目的語の第２の集合から生成した符号とが同一である場合、第１の集合又は第２の集合に含まれる各目的語と、当該目的語に対応する共通主語および共通述語とを含むトリプルを抽出し、（ｆ２）第１のデータに含まれる目的語の第３の集合から生成した符号と、第２のデータに含まれる目的語の第４の集合から生成した符号とが同一ではない場合、第３の集合に含まれる各目的語と、第４の集合に含まれる各目的語との比較に基づき、第１のデータセットと第２のデータセットとのいずれにも含まれるトリプルを抽出してもよい。
【００９１】
目的語同士の比較が行われるのは符号が同一ではない場合に限られるので、検出にかかる時間が長くなることを抑制できるようになる。
【００９２】
また、複数の共通主語および複数の共通述語を抽出する処理において、（ａ１）第１のデータセットに含まれる複数の述語のうち第２のデータセットに含まれる述語である複数の共通述語を抽出し、（ａ２）第２のデータセットに含まれるトリプルのうち、抽出された複数の共通述語のいずれかと同じ述語を含み且つ第１のデータセットに含まれる主語と同じ主語を含むトリプルを特定し、特定した当該トリプルに含まれる主語である複数の共通主語を抽出してもよい。
【００９３】
また、目的語の集合から生成される符号はチェックサムであってもよい。
【００９４】
本実施の形態の第２の態様に係る検出装置は、（Ｇ）述語および目的語を含むトリプルを複数含む第１のデータセットおよび第２のデータセットから、第１のデータセットおよび第２のデータセットのいずれにも含まれる複数の共通主語および複数の共通述語を抽出する抽出部（例えば、第１抽出部１０１及び第２抽出部１０３）と、（Ｈ）複数の共通主語のいずれかを含み且つ複数の共通述語のいずれかを含むトリプルを、第１のデータセット及び第２のデータセットのそれぞれから抽出し、複数の共通主語の各々に対して複数の共通述語の各々が対応付けられ且つ当該複数の共通述語の各々に対して目的語の集合が対応付けられた第１のデータを、第１のデータセットから抽出したトリプルから生成し、複数の共通主語の各々に対して複数の共通述語の各々が対応付けられ且つ当該複数の共通述語の各々に対して目的語の集合が対応付けられた第２のデータを、第２のデータセットから抽出したトリプルから生成し、第１のデータおよび第２のデータのそれぞれについて、目的語の集合の各々から符号を生成する処理を実行する生成部（例えば生成部１０５）とを有する。
【００９５】
なお、上記方法による処理をコンピュータに実行させるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブルディスク、ＣＤ−ＲＯＭ、光磁気ディスク、半導体メモリ、ハードディスク等のコンピュータ読み取り可能な記憶媒体又は記憶装置に格納される。尚、中間的な処理結果はメインメモリ等の記憶装置に一時保管される。
【００９６】
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
【００９７】
（付記１）
コンピュータに、
主語、述語および目的語を含むトリプルを複数含む第１のデータセットおよび第２のデータセットから、前記第１のデータセットおよび前記第２のデータセットのいずれにも含まれる複数の共通主語および複数の共通述語を抽出し、
前記複数の共通主語のいずれかを含み且つ前記複数の共通述語のいずれかを含むトリプルを、前記第１のデータセット及び前記第２のデータセットのそれぞれから抽出し、
前記複数の共通主語の各々に対して前記複数の共通述語の各々が対応付けられ且つ当該複数の共通述語の各々に対して目的語の集合が対応付けられた第１のデータを、前記第１のデータセットから抽出したトリプルから生成し、
前記複数の共通主語の各々に対して前記複数の共通述語の各々が対応付けられ且つ当該複数の共通述語の各々に対して目的語の集合が対応付けられた第２のデータを、前記第２のデータセットから抽出したトリプルから生成し、
前記第１のデータおよび前記第２のデータのそれぞれについて、目的語の集合の各々から符号を生成する処理を実行する、
処理を実行させる検出プログラム。
【００９８】
（付記２）
前記コンピュータに、
前記第１のデータに含まれる目的語の集合の各々から生成した符号と、前記第２のデータに含まれる目的語の集合の各々から生成した符号との比較に基づき、前記第１のデータセットと前記第２のデータセットとのいずれにも含まれるトリプルを抽出する、
処理をさらに実行させる付記１記載の検出プログラム。
【００９９】
（付記３）
前記第１のデータセットと前記第２のデータセットとのいずれにも含まれるトリプルを抽出する処理において、
第１のデータに含まれる目的語の第１の集合から生成した符号と、前記第２のデータに含まれる目的語の第２の集合から生成した符号とが同一である場合、前記第１の集合又は前記第２の集合に含まれる各目的語と、当該目的語に対応する共通主語および共通述語とを含むトリプルを抽出し、
前記第１のデータに含まれる目的語の第３の集合から生成した符号と、前記第２のデータに含まれる目的語の第４の集合から生成した符号とが同一ではない場合、前記第３の集合に含まれる各目的語と、前記第４の集合に含まれる各目的語との比較に基づき、前記第１のデータセットと前記第２のデータセットとのいずれにも含まれるトリプルを抽出する、
付記２記載の検出プログラム。
【０１００】
（付記４）
前記複数の共通主語および前記複数の共通述語を抽出する処理において、
前記第１のデータセットに含まれる複数の述語のうち前記第２のデータセットに含まれる述語である前記複数の共通述語を抽出し、
前記第２のデータセットに含まれるトリプルのうち、抽出された前記複数の共通述語のいずれかと同じ述語を含み且つ前記第１のデータセットに含まれる主語と同じ主語を含むトリプルを特定し、特定した当該トリプルに含まれる主語である前記複数の共通主語を抽出する、
付記１乃至３のいずれか１つ記載の検出プログラム。
【０１０１】
（付記５）
目的語の集合から生成される符号はチェックサムである、
付記１乃至４のいずれか１つ記載の検出プログラム。
【０１０２】
（付記６）
コンピュータが、
主語、述語および目的語を含むトリプルを複数含む第１のデータセットおよび第２のデータセットから、前記第１のデータセットおよび前記第２のデータセットのいずれにも含まれる複数の共通主語および複数の共通述語を抽出し、
前記複数の共通主語のいずれかを含み且つ前記複数の共通述語のいずれかを含むトリプルを、前記第１のデータセット及び前記第２のデータセットのそれぞれから抽出し、
前記複数の共通主語の各々に対して前記複数の共通述語の各々が対応付けられ且つ当該複数の共通述語の各々に対して目的語の集合が対応付けられた第１のデータを、前記第１のデータセットから抽出したトリプルから生成し、
前記複数の共通主語の各々に対して前記複数の共通述語の各々が対応付けられ且つ当該複数の共通述語の各々に対して目的語の集合が対応付けられた第２のデータを、前記第２のデータセットから抽出したトリプルから生成し、
前記第１のデータおよび前記第２のデータのそれぞれについて、目的語の集合の各々から符号を生成する処理を実行する、
処理を実行する検出方法。
【０１０３】
（付記７）
主語、述語および目的語を含むトリプルを複数含む第１のデータセットおよび第２のデータセットから、前記第１のデータセットおよび前記第２のデータセットのいずれにも含まれる複数の共通主語および複数の共通述語を抽出する抽出部と、
前記複数の共通主語のいずれかを含み且つ前記複数の共通述語のいずれかを含むトリプルを、前記第１のデータセット及び前記第２のデータセットのそれぞれから抽出し、前記複数の共通主語の各々に対して前記複数の共通述語の各々が対応付けられ且つ当該複数の共通述語の各々に対して目的語の集合が対応付けられた第１のデータを、前記第１のデータセットから抽出したトリプルから生成し、前記複数の共通主語の各々に対して前記複数の共通述語の各々が対応付けられ且つ当該複数の共通述語の各々に対して目的語の集合が対応付けられた第２のデータを、前記第２のデータセットから抽出したトリプルから生成し、前記第１のデータおよび前記第２のデータのそれぞれについて、目的語の集合の各々から符号を生成する処理を実行する生成部と、
を有する検出装置。
【符号の説明】
【０１０４】
１  検出装置    １０１  第１抽出部
１０３  第２抽出部    １０５  生成部
１０７  比較部    １１１  データセット格納部
１１３  共通述語格納部    １１５  共通主語格納部
１１７  テーブル格納部    １１９  共通トリプル格納部
【図１】
2018136640.tif 000003
【図２】
2018136640.tif 000004
【図３】
2018136640.tif 000005
【図４】
2018136640.tif 000006
【図５】
2018136640.tif 000007
【図６】
2018136640.tif 000008
【図７】
2018136640.tif 000009
【図８】
2018136640.tif 000010
【図９】
2018136640.tif 000011
【図１０】
2018136640.tif 000012
【図１１】
2018136640.tif 000013
【図１２】
2018136640.tif 000014
【図１３】
2018136640.tif 000015
【図１４】
2018136640.tif 000016
【図１５】
2018136640.tif 000017
【図１６】
2018136640.tif 000018
【図１７】
2018136640.tif 000019
【図１８】
2018136640.tif 000020
【図１９】
2018136640.tif 000021
【図２０】
2018136640.tif 000022
【図２１】
2018136640.tif 000023
【図２２】
2018136640.tif 000024
【図２３】
2018136640.tif 000025
【図２４】
2018136640.tif 000026
【図２５】
2018136640.tif 000027
【図２６】
2018136640.tif 000028