Как получить терминологию, связанную с дисциплиной на разных уровнях в DBpedia / Wikidata - PullRequest
0 голосов
/ 10 июля 2019

Учитывая слова, связанные с "информатикой", я хочу разделить (классифицировать) термины на 3 уровня как;

  • Уровень 1: Более общие термины (например, в основном категории)
  • Уровень 2: средние термины (в основном подкатегории категорий уровня 1)
  • Уровень 3: подробные термины (например, в основном алгоритмы, методы, модели)

Например, рассмотрим приведенные ниже классификации вышеупомянутых 3 уровней.

enter image description here

Таким образом, мои данные представляют собой список терминов по информатике, как указано ниже, с их DBpedia uri (если доступно category uri и resource uri).

myconcepts = [["artificial intelligence", "http://dbpedia.org/page/Category:Artificial_intelligence", "http://dbpedia.org/page/Artificial_intelligence"], ["machine learning", "http://dbpedia.org/page/Category:Machine_learning", "http://dbpedia.org/page/Machine_learning"], ["supervised learning", "http://dbpedia.org/page/Supervised_learning"], ["neural networks", "http://dbpedia.org/page/Category:Artificial_neural_networks", "http://dbpedia.org/page/Artificial_neural_network"], ["support vector machines", "http://dbpedia.org/page/Category:Support_vector_machines", "http://dbpedia.org/page/Support_vector_machine"], ["genetic algorithms", "http://dbpedia.org/page/Category:Genetic_algorithms", "http://dbpedia.org/page/Genetic_algorithm"]]

Вывод должен быть примерно таким;

Level 1: artificial intelligence, machine learning
Level 2: supervised learning, neural networks
Level 3: support vector machine, genetic algorithm

Я некоторое время пытался найти решение этой проблемы, но безуспешно. Я попытался выяснить, могу ли я использовать dct:subject на страницах ресурсов и skos:broader на страницах категорий следующим образом.

sparql.setQuery("""
        SELECT * WHERE {<"""
             +url+
            """>skos:broader|dct:subject ?resource 
            }
    """)
sparql.setReturnFormat(JSON)
results = sparql.query().convert()
for result in results["results"]["bindings"]:
print('resource ---- ', result['resource']['value'])

Однако, поскольку dct:subject или skos:broader возвращает несколько записей, я просто не уверен, как объединить эти знания для использования для уровней.

ПРИМЕЧАНИЕ. Я не ожидаю, что вывод будет работать на 100% точно, и мне достаточно решения, которое отлично работает в большинстве случаев.

Я не ограничен dct:subject или skos:broader и с удовольствием использую другие свойства DBpedia

Я также рад получить решения, используя wikidata / wikipedia

Я с удовольствием предоставлю более подробную информацию, если это необходимо.

...