使用SPARQL比较两个字符串

时间:2013-11-04 17:11:33

标签: rdf sparql

我正在使用SPARQL的正则表达式函数。 是否有一个函数可以找到与另一个字符串距离最小的字符串? 我的意思是,我需要一个函数,它给出了与另一个相比最相似的单词。 实际上我传递了两个变量(这些变量从两个不同的数据集中获取值),并且只是考虑这些不区分大小写的比较。所以我需要一个可以比较两个变量的函数。 anybosy知道什么吗?

1 个答案:

答案 0 :(得分:5)

标准SPARQL中没有此类功能。但是,SPARQL是可扩展的,因此您可以根据需要添加自己的功能(当然,代价是丢失查询的可移植性)。例如,请参阅此tutorial on how to do this in Sesame's SPARQL engine

我还想象一些扩展支持全文搜索的三重商店(如OWLIM或者Virtuoso)可能会对这类内容有一些内置的支持,但我肯定不知道。

修改

假设你想要像Levenshtein这样的距离,你可以得到一个函数ex:ldistance(?string1, ?string2),它给出两个字符串输出距离。因此ex:ldistance("room", "root")将返回1,ex:ldistance("room", "door")将返回2,依此类推。然后,您可以使用它来查询给定距离,例如将所有比2更接近的字符串变为“房间”:

SELECT ?x ?string1 
WHERE {
       ?x rdfsl:abel ?string1 
       FILTER(ex:ldistance("room", ?string1) < 2)
}

或返回按距离排序的所有匹配字符串:

SELECT ?x ?string1 ?ldistance
WHERE {
       ?x rdfsl:abel ?string1 
       BIND ( ex:ldistance("room", ?string1) as ?ldistance)
}
ORDER BY ?ldistance

但是,如上所述,函数ex:ldistance实际上并不存在于SPARQL中,因此您需要自己创建它作为扩展。