2017-05-23 94 views
1

我想爲給定的相似性度量標準比較兩個對象的集合。該度量將被明確地定義,使得一些屬性精確匹配,而另一些屬性只能彼此如此不同(即,比較浮動:它們之間不超過50%)。與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