DBPedia:以字面开头的字段上的SPARQL查询

问题描述 投票:0回答:1

我正在尝试获取相应的DBPedia条目以获取公司列表。我无法弄清楚如何进行近似匹配。例如:“Audi”在DBPedia中被称为“Audi AG”,而“Novartis”被称为“Novartis International AG”(foaf:name)。如何使用rdf:type = dbo搜索条目:公司和名称最接近我提供的内容?

我正在使用SPARQL作为查询语言。 (但如果有优势,我愿意改变。)

select ?company
where {
  ?company foaf:name "Novartis"@en.
  ?company a dbo:Company.
}
LIMIT 100

我没有受到打击,但应该找到http://dbpedia.org/page/Novartis。匹配名称的开头可能足以得到这个。

sparql dbpedia
1个回答
1
投票

对于DBpedia,最好的选择可能是使用bif:contains全文搜索伪属性:

SELECT ?company {
  ?company a dbo:Company.
  ?company foaf:name ?name.
  ?name bif:contains "Novartis"@en.
}

此功能特定于为DBpedia SPARQL端点提供支持的Virtuoso数据库。

如果您想坚持使用标准SPARQL,则仅在名称的开头匹配:

SELECT ?company {
  ?company a dbo:Company.
  ?company foaf:name ?name.
  FILTER strStarts(?name, "Novartis")
}

与全文功能不同,此版本无法使用文本索引,因此速度较慢。

如果您想要更灵活的匹配:

SELECT ?company {
  ?company a dbo:Company.
  ?company foaf:name ?name.
  FILTER contains(lCase(?name), lCase("Novartis"))
}

这将在名称中的任何位置找到不区分大小写的匹配项。

© www.soinside.com 2019 - 2024. All rights reserved.