1

我正在使用带有 SPARQL 的正则表达式函数。是否有一个函数可以找到与另一个字符串距离最小的字符串?我的意思是,我需要一个函数,它给我的词与另一个词最相似。实际上我传递了两个变量(这些变量取值来自两个不同的数据集)并仅考虑这些不区分大小写的情况进行比较。所以我需要一个可以比较两个变量的函数。有人知道吗?

4

1 回答 1

5

标准 SPARQL 中没有这样的功能。但是,SPARQL 是可扩展的,因此您可以根据需要添加自己的函数(当然,代价是失去查询的可移植性)。例如,请参阅本教程,了解如何在 Sesame 的 SPARQL 引擎中执行此操作

我还想象一些对全文搜索提供扩展支持的三元存储库(如 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 中,因此您需要自己创建它,作为扩展。

于 2013-11-04T18:51:14.637 回答