2017-05-23 13 views
1

주어진 유사성 측정 항목에 대해 오브젝트 모음을 쌍으로 비교하고 싶습니다. 측정 항목은 명시 적으로 일부 속성이 정확히 일치하고 다른 속성이 서로 매우 다를 수 있도록 (즉, 부동 소수점을 비교하는 경우에만 50 % SMAPE 사이에 있음) 명시 적으로 정의됩니다.SPARQL과 쌍으로 비교

어떻게 이러한 쿼리를 구성 할 수 있습니까? 출력은 이상적으로 Nx2 테이블 일 것이고, 각 행은 비교 대상에 대한 두 개의 IRI를 포함합니다. 중복 (즉, 1 == 2는 일치 및 2 == 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을 참조하십시오.