gpt4 book ai didi

sparql - 如何通过维基数据的部分搜索获取所有体育项目,检索第一个图像和语言

转载 作者:行者123 更新时间:2023-12-02 07:13:59 27 4
gpt4 key购买 nike

我已经用 SPARQL 和 Wikidata 尝试了 2 天,并浏览了所有示例。我需要帮助来解决一个复杂的查询,但我还没有找到接近我的需求的示例。

这个想法是搜索运动,获取第一张图像(如果找到)。并检索所有语言的标签。下面我实现了一小部分,但这里是问题。

  1. 通过这个查询,我可以获得篮球,但不能获得足球,我不知道如何使用子类进行搜索,因为足球是运动类型的子类,我以为我可以正常工作,但它不返回足球。

  2. 当我添加获取图像(尝试使用可选)时,它在 2 行中返回“健美”,因为有 2 个用于拳击的图像,有没有办法仅使用第一个图像获取第一个行。我尝试过不同的方法,但效果不佳。

  3. 在本例中,我正在使用英语进行搜索,但希望获取所有语言的标签。

完美的结果是 10 行,每行都是 1 个以“bo”开头的运动,第一个图像和所有语言的标签,我知道这可能是一个很高的要求,所以也许语言必须是在另一个查询中请求,如果是,如何?

#NOT WORKING AS EXPECTED/Need Help 
SELECT DISTINCT ?item ?label WHERE {
?item wdt:P31/wdt:P279* wd:Q31629.
?item rdfs:label ?label.
FILTER((LANG(?label)) = "en")
FILTER(STRSTARTS(lcase(?label), lcase("bo")))
}
LIMIT 10

最佳答案

您可以使用SAMPLE获取每项运动的单张照片。如果您需要所有标签,但不想单独定义每种语言,并且要求每项运动只有一行,则可以使用 GROUP_CONCAT 连接标签。要将多个值绑定(bind)到一个变量,您可以使用 VALUES

SELECT DISTINCT ?item (SAMPLE(?img) AS ?image) (GROUP_CONCAT(DISTINCT ?lbl; separator=', ') AS ?label) WHERE {
# Bind variable ?type to the types you want
VALUES ?type { wd:Q31629 wd:Q7128792 }
?item wdt:P31 ?type .
# Search only English labels
?item rdfs:label ?search_label .
FILTER(LANG(?search_label) = "en")
FILTER(STRSTARTS(lcase(?search_label), lcase("bo")))
# Get all labels
?item rdfs:label ?l .
# Produces strings like "bodybuilding (en)"
BIND(CONCAT(STR(?l), ' (', LANG(?l), ')') AS ?lbl)
# Get the images
OPTIONAL {
?item wdt:P18 ?img .
}
}
GROUP BY ?item
LIMIT 10

Link to the above query in the Wikidata Query Service

关于sparql - 如何通过维基数据的部分搜索获取所有体育项目,检索第一个图像和语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42379675/

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