Учитывая слова, связанные с "информатикой", я хочу разделить (классифицировать) термины на 3 уровня как;
- Уровень 1: Более общие термины (например, в основном категории)
- Уровень 2: средние термины (в основном подкатегории категорий уровня 1)
- Уровень 3: подробные термины (например, в основном алгоритмы, методы, модели)
Например, рассмотрим приведенные ниже классификации вышеупомянутых 3 уровней.
Таким образом, мои данные представляют собой список терминов по информатике, как указано ниже, с их 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
Я с удовольствием предоставлю более подробную информацию, если это необходимо.