Как я могу отфильтровать понятия определения из моего запроса sparql?

#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.