如何使用 SPARQL 在 dbpedia 中搜索与给定术语部分匹配的 rdfs:labels?
How to search for rdfs:labels in dbpedia which are partial matches to a given term using SPARQL?
我正在使用此查询来搜索包含单词 "Medi"
的所有标签
select distinct ?label where
{
?concept rdfs:label ?label
filter contains(?label,"Medi")
filter(langMatches(lang(?label),"en"))
}
但是,一旦我将术语从 "Medi" 更改为 "Medicare",它就不起作用并且超时。我如何让它与像 Medicare 这样的较长单词一起工作,即提取其中包含 Medicare 一词的所有标签。
您的查询必须遍历 DBpedia 中的所有标签——这是一个相当大的数字——然后应用字符串包含检查。这确实很贵。
即使是计数查询也会导致 "estimated timeout error":
select count(?label) where
{
?concept rdfs:label ?label
filter(regex(str(?label),"Medi"))
filter(langMatches(lang(?label),"en"))
}
两个选项:
Virtuoso 有一些全文搜索支持:
SELECT DISTINCT ?label WHERE {
?concept rdfs:label ?label .
?label bif:contains "Medicare"
FILTER(langMatches(lang(?label),"en"))
}
- 由于 public DBpedia 端点是共享端点,解决方案是将 DBpedia 数据集加载到您自己的三元组存储中,例如演奏家。在那里你可以调整最大值。估计执行超时参数。
我正在使用此查询来搜索包含单词 "Medi"
的所有标签select distinct ?label where
{
?concept rdfs:label ?label
filter contains(?label,"Medi")
filter(langMatches(lang(?label),"en"))
}
但是,一旦我将术语从 "Medi" 更改为 "Medicare",它就不起作用并且超时。我如何让它与像 Medicare 这样的较长单词一起工作,即提取其中包含 Medicare 一词的所有标签。
您的查询必须遍历 DBpedia 中的所有标签——这是一个相当大的数字——然后应用字符串包含检查。这确实很贵。
即使是计数查询也会导致 "estimated timeout error":
select count(?label) where
{
?concept rdfs:label ?label
filter(regex(str(?label),"Medi"))
filter(langMatches(lang(?label),"en"))
}
两个选项:
Virtuoso 有一些全文搜索支持:
SELECT DISTINCT ?label WHERE { ?concept rdfs:label ?label . ?label bif:contains "Medicare" FILTER(langMatches(lang(?label),"en")) }
- 由于 public DBpedia 端点是共享端点,解决方案是将 DBpedia 数据集加载到您自己的三元组存储中,例如演奏家。在那里你可以调整最大值。估计执行超时参数。