Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rdf 使用SPARQL比较两个字符串_Rdf_Sparql - Fatal编程技术网

Rdf 使用SPARQL比较两个字符串

Rdf 使用SPARQL比较两个字符串,rdf,sparql,Rdf,Sparql,我将regex函数用于SPARQL。 是否有一个函数可以查找与另一个字符串的距离最小的字符串? 我的意思是,我需要一个函数,它能给出与另一个词最相似的词。 实际上,我传递了两个变量(这些变量的值来自两个不同的数据集)并进行比较,只考虑这些不区分大小写的变量。所以我需要一个可以比较两个变量的函数。anybosy知道什么吗?标准SPARQL中没有这样的函数。但是,SPARQL是可扩展的,因此如果需要,您可以添加自己的函数(当然,代价是失去查询的可移植性)。例如,请参见此 我还设想,一些扩展支持全文搜

我将regex函数用于SPARQL。 是否有一个函数可以查找与另一个字符串的距离最小的字符串? 我的意思是,我需要一个函数,它能给出与另一个词最相似的词。
实际上,我传递了两个变量(这些变量的值来自两个不同的数据集)并进行比较,只考虑这些不区分大小写的变量。所以我需要一个可以比较两个变量的函数。anybosy知道什么吗?

标准SPARQL中没有这样的函数。但是,SPARQL是可扩展的,因此如果需要,您可以添加自己的函数(当然,代价是失去查询的可移植性)。例如,请参见此

我还设想,一些扩展支持全文搜索的TripleStore(如OWLIM或Virtuoso)可能对这类东西有一些内置支持,但我不确定这一点

编辑

假设您想要像Levenshtein distance这样的东西,您可以有一个函数
ex:ldistance(?string1,string2)
,给定两个字符串输出距离。因此,
ex:ldistance(“room”、“root”)将返回1,
ex:ldistance(“room”、“door”)将返回2,依此类推。然后,您可以使用它查询给定的距离,例如,获取距离“房间”小于2的所有字符串:


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

标准SPARQL中没有这样的函数。但是,SPARQL是可扩展的,因此如果需要,您可以添加自己的函数(当然,代价是失去查询的可移植性)。例如,请参见此

我还设想,一些扩展支持全文搜索的TripleStore(如OWLIM或Virtuoso)可能对这类东西有一些内置支持,但我不确定这一点

编辑

假设您想要像Levenshtein distance这样的东西,您可以有一个函数
ex:ldistance(?string1,string2)
,给定两个字符串输出距离。因此,
ex:ldistance(“room”、“root”)将返回1,
ex:ldistance(“room”、“door”)将返回2,依此类推。然后,您可以使用它查询给定的距离,例如,获取距离“房间”小于2的所有字符串:


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

你能稍微澄清一下你的用例吗?我不太清楚你想做什么。“查找与另一个字符串之间距离最小的字符串的函数”听起来像是一个接受单个参数并从固定集合返回某个单词的函数。但是“我传递两个变量(…来自两个不同的数据集)并进行比较,只考虑到这些不区分大小写的变量……我需要一个可以比较两个变量的函数。”这听起来像是您希望类似于
sim(?w1,?w2)
的东西返回一个数字,这样您就可以执行,例如,
按sim(?w1,?w2)排序
。请将评论作为评论而不是答案发布。你写道:“我没有说我在OWLIM存储库中使用SPARQL。我想要一个函数,它接收两个变量,如果这些变量足够接近,它会说。当我说close时,我的意思是一个单词需要最少数量的更改才能成为第二个单词,所以两个单词必须尽可能相似。就像使用正则表达式(例如正则表达式(?x,?y,,“I”))但是用一个不同的比较,你说的“最少的变化”是什么意思?类似于sim(“root”、“book”)
的东西只需要更改两个字母。但是你不能说“两个”是最不重要的,除非你有别的东西可以比较。我的理解正确吗?您希望能够执行类似于
select?y where{…}order by sim(?x,y)limit 1
的操作,以获得编辑距离最小的
?x
?y
您能稍微澄清一下您的用例吗?我不太清楚你想做什么。“查找与另一个字符串之间距离最小的字符串的函数”听起来像是一个接受单个参数并从固定集合返回某个单词的函数。但是“我传递两个变量(…来自两个不同的数据集)并进行比较,只考虑到这些不区分大小写的变量……我需要一个可以比较两个变量的函数。”这听起来像是您希望类似于
sim(?w1,?w2)
的东西返回一个数字,这样您就可以执行,例如,
按sim(?w1,?w2)排序
。请将评论作为评论而不是答案发布。你写道:“我没有说我在OWLIM存储库中使用SPARQL。我想要一个函数,它接收两个变量,如果这些变量足够接近,它会说。当我说close时,我的意思是一个单词需要最少数量的更改才能成为第二个单词,所以两个单词必须尽可能相似。就像使用正则表达式(例如正则表达式(?x,?y,,“I”))但是用一个不同的比较,你说的“最少的变化”是什么意思?类似于sim(“root”、“book”)
的东西只需要更改两个字母。但是你不能说“两个”是最不重要的,除非你有别的东西可以比较。我的理解正确吗?您希望能够执行类似于
select?y where{…}order by sim(?x,y)limit 1
的操作,以获得
?x
?y
,它们的编辑距离在所有
?x
?y
中都是最小的。我没有说我正在OWLIM存储库中使用SPARQL。我想要一个函数,它接收两个变量,如果它们足够接近,它会说。当我说close时,我的意思是一个单词需要最少的变化才能成为第二个单词,所以两个单词必须尽可能地相似。就像使用正则表达式(例如正则表达式(?x,?y,“i”))但使用不同的比较。是的。我明白这一点。公共关系
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