2017-05-23 3 views
1

与えられた類似性メトリックに対してペアのオブジェクトのコレクションを比較したいと思います。メトリックは、いくつかのプロパティが正確に多く一致し、他のプロパティが互いに非常に異なる(すなわち、浮動小数点数を比較する:それらの間に50%以下のSMAPE)ように明示的に定義されます。SPARQLとのペア比較

このようなクエリを作成するにはどうすればよいですか?出力は理想的にはNx2テーブルで、各行には比較可能なオブジェクトの2つのIRIが含まれています。重複(つまり、1 == 2は一致、2 == 1)は許容されますが、回避することができれば偉大でもあります。

これをすべてのペアで1回のクエリで実行したいと思います。私はおそらく、特定のオブジェクトのためにそれを行う方法を把握することができるだろうが、すべてのオブジェクトを同時に照会するとき、この問題ははるかに困難になります。

誰でもこれを実行する方法に関する洞察はありますか?

+0

SMAPEは対称ではありません。 –

+0

@StanislavKralinごめんなさい。そうです。それは名前(そして定義)の中にあります。それは間違いなく対称的です。 – Lukas

+0

ええ、そうです、申し訳ありません! –

答えて

1

考えはこれです:

PREFIX ex: <http://example.org/ex#> 

SELECT DISTINCT ?subject1 ?subject2 
WHERE { 
    ?subject1 ex:belongs ex:commonCategory . 
    ?subject2 ex:belongs ex:commonCategory . 
    ?subject1 ex:exactProperty ?e . 
    ?subject2 ex:exactProperty ?e . 
    ?subject1 ex:approxProperty ?a1 . 
    ?subject2 ex:approxProperty ?a2 . 
    FILTER (?subject1 > ?subject2) . 
    FILTER ((abs(?a1-?a2)/(abs(?a1)+abs(?a2))) < 0.5) 
} 

DBpediaの上、例えば、:

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> 
PREFIX dbo: <http://dbpedia.org/ontology/> 
PREFIX umbel-rc: <http://umbel.org/umbel/rc/> 

SELECT DISTINCT ?subject1 ?subject2 
WHERE { 
    ?subject1 rdf:type  umbel-rc:Actor . 
    ?subject2 rdf:type  umbel-rc:Actor . 
    ?subject1 dbo:spouse  ?spouse1 . 
    ?subject2 dbo:spouse  ?spouse2 . 
    ?subject1 dbo:wikiPageID ?ID1 . 
    ?subject2 dbo:wikiPageID ?ID2 . 
    FILTER (?subject1 > ?subject2) . 
    FILTER (?spouse1 = ?spouse2) . 
    FILTER (abs(?ID1-?ID2)/xsd:float(?ID1+?ID2) < 0.05) 
} 

したがって、おそらく、Zsa Zsa GaborMagda Gaborは同一人物です。
どちらもGeorge Sandersの配偶者であり、そのwikiPageIDはお互いにあまり違いはありません。

いくつかの説明:

  • ?subject1 > ?subject2句は "順列重複" を削除します。
  • xsd:floatの使用については、this questionを参照してください。
関連する問題