从python中的wikidata获取实体名称/标签

2024-06-26 14:00:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一些SPARQL查询要在python中的wikidata上运行,我需要获取返回的实体的名称/标签,而不是URI。例如,给定下面的python代码段:

from qwikidata.sparql  import return_sparql_query_results

query_string = """
        select ?ent where { ?ent wdt:P31 wd:Q2637056 . ?ent wdt:P2244 ?obj } ORDER BY DESC(?obj)LIMIT 5 
        """

res = return_sparql_query_results(query_string)
for row in res["results"]["bindings"]:
   print(row["ent"]["value"])

原始表单中的查询返回URI,但我需要获取实体标签/名称。在python中如何实现这一点

查询的当前输出:

http://www.wikidata.org/entity/Q841796
http://www.wikidata.org/entity/Q780047

注意:我没有真正访问查询的权限,因此无法重写查询


Tags: 实体名称objstringreturnres标签uri
1条回答
网友
1楼 · 发布于 2024-06-26 14:00:10

我的评论太长了,所以我发布了一个答案。 您需要重写查询。请查看下面的示例,了解如何在不使用标签服务的情况下获取标签

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX wd: <http://www.wikidata.org/entity/>
PREFIX wdt: <http://www.wikidata.org/prop/direct/>
SELECT ?country ?countryLabel 
WHERE 
{
  # instance of country
  ?country wdt:P31 wd:Q3624078.
  OPTIONAL {
     ?country rdfs:label ?countryLabel filter (lang(?countryLabel) = "en").
   }
} 
ORDER BY ?countryLabel

try it!

适用于您的联盟-T示例:

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX wd: <http://www.wikidata.org/entity/>
PREFIX wdt: <http://www.wikidata.org/prop/direct/>
SELECT ?ent ?entLabel
WHERE 
{ 
  # instance of Soyuz-T https://www.wikidata.org/wiki/Q2637056
  ?ent wdt:P31 wd:Q2637056 . 
  # https://www.wikidata.org/wiki/Property:P2244 periapsis
  ?ent wdt:P2244 ?obj 
  OPTIONAL {
     ?ent rdfs:label ?entLabel filter (lang(?entLabel) = "en").
  }     
} ORDER BY DESC(?obj)LIMIT 5 

try it!

结果:

ent         entLabel
wd:Q841796  Soyuz T-15
wd:Q780047  Soyuz T-8

相关问题 更多 >