SPARQL在Python中从dbpedia提取实体

时间:2019-02-15 20:56:10

标签: sparql dbpedia

我正在尝试使用以下代码为提取实体/概念,但我却很喜欢

Fish
سمك
Fische
Pisces
Poisson
Pesce
Vissen (dieren)
Ryby
Peixe
Рыбы
鱼

我希望能像 CAT FISH,GOLD FISH,GREEN FISH,FISHING 。我该怎么办?

from SPARQLWrapper import SPARQLWrapper, JSON

sparql = SPARQLWrapper("http://dbpedia.org/sparql")
sparql.setQuery("""
    PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
    SELECT *

    WHERE { <http://dbpedia.org/resource/Fish> rdfs:label ?name }
""")
sparql.setReturnFormat(JSON)
results = sparql.query().convert()

for result in results["results"]["bindings"]:
    print(result["name"]["value"])

1 个答案:

答案 0 :(得分:1)

您的查询正在请求实体rdfs:label的所有<http://dbpedia.org/resource/Fish>值。我认为您想要的是-

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>

SELECT ?label ?entity
WHERE
 { ?entity rdfs:label ?label 
   FILTER ( regex ( ?label, "fish", "i" ) ) 
 }
ORDER BY ?label

您可以添加LIMIT 10或类似的行以获得更快(不完整)的结果。

您也可以使用Virtuoso内置函数(bif:contains代替FILTER ( regex (...) ),以便从DBpedia或其他由Virtuoso支持的端点获得更快的结果,例如-

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>

SELECT ?label ?entity
WHERE
 { ?entity rdfs:label ?label .
   ?label bif:contains "fish"
 }
ORDER BY ?label