Извлечение меток из онтологий совы, когда метка не входит в онтологию, но может быть найдена по URI - PullRequest
0 голосов
/ 29 мая 2020

Пожалуйста, подождите, я новичок в технологиях semanti c.

Я пытаюсь использовать пакет rdflib для извлечения меток из классов в онтологиях. Однако некоторые онтологии не содержат самих меток, но имеют URI классов из других онтологий. Как извлечь метки из URI внешних онтологий?

Интуиция, стоящая за моими попытками, сосредоточена на идентификации классов, которые не содержат меток локально (если это правильный способ выразить это), а затем "их URI к внешним онтологиям для извлечения меток. Однако способ, которым я это реализовал, не работает.

import rdflib

g = rdflib.Graph()

# I have no trouble extracting labels from this ontology:
# g.load("http://purl.obolibrary.org/obo/po.owl#")
# However, this ontology contains no labels locally:
g.load("http://www.bioassayontology.org/bao/bao_complete.owl#")


owlClass = rdflib.namespace.OWL.Class
rdfType = rdflib.namespace.RDF.type

for s in g.subjects(predicate=rdfType, object=owlClass):
    # Where label is present...
    if g.label(s) != '':
        # Do something with label...
        print(g.label(s))

    # This is what I have added to try to follow the URI to the external ontology.
    elif g.label(s) == '':
        g2 = rdflib.Graph()
        g2.parse(location=s)
        # Do something with label...
        print(g.label(s))


Я принимаю совершенно неправильный подход? Любая помощь приветствуется! Спасибо.

1 Ответ

1 голос
/ 30 мая 2020

Я думаю, вы можете быть намного эффективнее этого. Вы пытаетесь выполнить веб-запрос, удаленную загрузку онтологии и поиск каждый раз, когда вы встречаете URI, у которого нет метки, указанной в http://www.bioassayontology.org/bao/bao_complete.owl, а это большинство из них, и это очень большое число. Таким образом, ваш сценарий будет длиться вечно и будет обрабатывать sh веб-серверы, доставляющие эти удаленные онтологии.

Глядя на http://www.bioassayontology.org/bao/bao_complete.owl, я вижу, что большинство URI без меток взяты из OBO и, возможно, из пары других онтологий, но в основном из OBO.

Что вам следует сделать, так это загрузить OBO один раз и загрузите его с помощью RDFlib. Затем, если вы запустите свой сценарий выше на объединенном (объединенном) графе http://www.bioassayontology.org/bao/bao_complete.owl и OBO, у вас будет все содержимое OBO на кончиках ваших пальцев, так что g.label(s) найдет гораздо большую долю меток.

Возможно, есть пара других исходных онтологий, предоставляющих метки для http://www.bioassayontology.org/bao/bao_complete.owl, которые могут вам понадобиться, но при быстром просмотре я вижу только OBO.

...