SPARQL Извлечение сущностей из dbpedia в Python - PullRequest
0 голосов
/ 15 февраля 2019

Я пытаюсь извлечь Сущности / Понятия для слова Рыба Используя приведенный ниже код, но я получаю как

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

Я ожидаю как РЫБА, ЗОЛОТАЯ РЫБА, ЗЕЛЕНАЯ РЫБА, РЫБАЛКА .как мне это сделать?

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 голосов
/ 16 февраля 2019

Ваш запрос запрашивает все 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
...