gpt4 book ai didi

sparql - 如何查询使用 Wikidata 和 SPARQL 的人?

转载 作者:行者123 更新时间:2023-12-04 22:29:11 25 4
gpt4 key购买 nike

我是 SPARQL 和 Wikidata 的新手。我试图让我的用户在维基数据中搜索 人,并且只搜索 我不希望任何结果是摩托车品牌或任何东西。

所以我在 here 上玩了以下查询:

SELECT ?person ?personLabel WHERE {
?person wdt:P31 wd:Q5.
SERVICE wikibase:label {
bd:serviceParam wikibase:language "en".
?person rdfs:label ?personLabel .
}
FILTER regex(?personLabel, "Albert", "i").
}
LIMIT 10

尽管这最终会返回结果,但它几乎没有我希望的那么快。请注意,如果您尝试使用更大的名称进行上述查询,它也会超时。

所有示例查询都适用,发现 here ,假设您已经有一个可以从中查询的实体。在我的情况下,您无事可做,因为我正在尝试查询具有特定名称的人。
我可能对我正在使用的数据库的内部工作做出了一些错误的假设,但我不确定它们是什么。

有任何想法吗?

最佳答案

使用 Wikidata 进行自由文本搜索的问题在于它 does not have a free text index (yet) 。没有索引的文本搜索需要为每个标签尝试匹配,这是效率不高的。我想不出一个搜索“阿尔伯特·爱因斯坦”并且没有超时的查询。当然,完全匹配 ( ?person rdfs:label "Albert Einstein"@en . ) 确实有效,但大概这不符合您的需求。如果您可以先以其他方式缩小人员选择范围,那将会有所帮助。

另一方面,DBpedia ( http://dbpedia.org/sparql ) 有 Virtuoso 的 bif:contains 可用,所以它在那里工作得非常快 ( http://yasgui.org/short/HJeZ4kjp ):

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT * WHERE {
?sub a foaf:Person .
?sub rdfs:label ?lbl .
?lbl bif:contains "Albert AND Einstein" .
filter(langMatches(lang(?lbl), "en"))
}
LIMIT 10

关于sparql - 如何查询使用 Wikidata 和 SPARQL 的人?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39773812/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com