#python #sparql #semantic-web #dbpedia #sparqlwrapper
#python #sparql #semantic-web #dbpedia #sparqlwrapper
Вопрос:
Я собираюсь построить дерево иерархии тем, используя запрос SPARQL, извлеченный из DBpedia. Как я могу отфильтровать понятия определения из моего запроса sparql?
Мой текущий код приведен ниже:
from SPARQLWrapper import SPARQLWrapper, N3
from rdflib.extras.external_graph_libs import rdflib_to_networkx_graph
from pprint import pprint
from rdflib import Graph
import networkx as nx
import copy
# Main concept
concept = '<http://dbpedia.org/resource/Category:Machine_learning>'
sparql = SPARQLWrapper("http://dbpedia.org/sparql")
sparql.setQuery(f"""
CONSTRUCT {{ ?child skos:broader {concept} .}}
WHERE {{ ?child skos:broader {concept} .}}
""")
sparql.setReturnFormat(N3)
results = sparql.query().convert()
g_child = Graph()
g_child.parse(data=results, format="n3")
sparql.setQuery(f"""
CONSTRUCT {{ ?child skos:broader {concept} .
?grandchild skos:broader ?child .}}
WHERE {{ ?child skos:broader {concept} .
?grandchild skos:broader ?child .}}
""")
sparql.setReturnFormat(N3)
results = sparql.query().convert()
g_grandchild = Graph()
g_grandchild.parse(data=results, format="n3")
Раньше я пытался:
sparql.setQuery(f"""
CONSTRUCT {{ ?child skos:broader {concept} .}}
WHERE {{ ?child skos:broader {concept} .
FILTER(LANG(?definition) = 'en')}}
""")
sparql.setReturnFormat(N3)
results = sparql.query().convert()
g_child = Graph()
g_child.parse(data=results, format="n3")
и
sparql.setQuery(f"""
CONSTRUCT {{ ?child skos:broader {concept} .
?grandchild skos:broader ?child .}}
WHERE {{ ?child skos:broader {concept} .
?grandchild skos:broader ?child .
FILTER(LANG(?definition) = 'en') }}
""")
sparql.setReturnFormat(N3)
results = sparql.query().convert()
g_grandchild = Graph()
g_grandchild.parse(data=results, format="n3")
Однако график становится пустым.
Заранее благодарю вас!
Комментарии:
1. Я не понимаю, что вы здесь делаете. Переменная
?definition
ни к чему не привязана, так что должен делать фильтр? поэтому, конечно, он пуст, поскольку фильтр всегда оцениваетfalse
2. и тогда, что такое «концепция без определения» ?
3. @UninformedUser Спасибо за ваш комментарий! Мой фильтр может пойти не так, но я не могу определить правильный. «Концепция без определения» означает, что концепция имеет определение в DBpedia. Например, для понятия «Англия» его страницы в DBpedia имеют свое определение: link . Однако для концепции «Electronic_waste_in_Europe»: ссылка . Оба они существовали в сущности concept link , link
4. все еще не уверен, о чем вы спрашиваете. Некоторые из них являются категориями DBpedia, другие — ресурсами DBpedia. Теперь вы хотите отфильтровать что?
5. @UninformedUser Спасибо за ваш ответ. Я хочу отфильтровать те понятия, которые не имеют определения в DBpedia, как ссылка . Это всего лишь пример, который не является результатом приведенного выше запроса sparql.