如何使用 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")) 
}

两个选项:

  1. Virtuoso 有一些全文搜索支持:

    SELECT DISTINCT ?label WHERE { 
      ?concept rdfs:label ?label .
      ?label bif:contains "Medicare"
      FILTER(langMatches(lang(?label),"en"))
    }
    
  2. 由于 public DBpedia 端点是共享端点,解决方案是将 DBpedia 数据集加载到您自己的三元组存储中,例如演奏家。在那里你可以调整最大值。估计执行超时参数。