Correction de code sur l'alignement d'ontologies avec owl

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

Correction de code sur l'alignement d'ontologies avec owl

Anicet
Dans la boucle pour ajouter toutes les classes équivalentes et leurs instances, nous avons remplacé la méthode add_equivalent_individual par la méthode add qui ajoute une instance dans l'ontologie en tant qu'individu.

Dans la boucle pour ajouter toutes les classes équivalentes et leurs instances, nous avons corrigé la méthode pour ajouter toutes les instances d'une classe en utilisant la méthode instances().

Dans la boucle pour ajouter toutes les classes équivalentes et leurs instances, nous avons remplacé la méthode add_equivalent_individual par la méthode add qui ajoute une instance dans l'ontologie en tant qu'individu.

Dans la dernière ligne, nous avons remplacé la méthode add_equivalent_individual par la méthode add qui ajoute une instance dans l'ontologie en tant qu'individu et ses équivalents de classes.


Problème: ce code retrouve bien des classes équivalentes avec leurs instances mais n'enregistre pas toutes ces classes dans une même ontologie






from owlready2 import *

# Chargement de l'ontologie de base
onto_base = get_ontology("bacterie.owl").load()

# Chargement de l'ontologie cible
onto_target = get_ontology("maladie.owl").load()

instances_base = list(onto_base.individuals())
instances_target = list(onto_target.individuals())

for instance_base in instances_base:
    for instance_target in instances_target:
        # Recherche des instances correspondantes dans l'ontologie cible
        matching_instance = onto_target.search_one(name=instance_base.name)

        if matching_instance is not None:
            # Effectuer l'alignement en ajoutant des équivalences entre les classes
            equivalent_classes = [onto_base.classes()[cls] for cls in matching_instance.is_a]
            equivalent_classes.extend([onto_base.classes()[cls] for cls in matching_instance.equivalent_to])
            equivalent_classes = list(set(equivalent_classes))

            # Ajouter toutes les classes équivalentes ainsi que leurs instances dans l'ontologie créée
            for cls in equivalent_classes:
                onto_base.add_equivalent_class(cls)

                for inst in list(cls.instances()):
                    onto_base.add(inst)

            onto_base.add(instance_base, equivalent_classes)

onto_base.save("aligned_base8.owl", format="rdfxml")
Reply | Threaded
Open this post in threaded view
|

Re: Correction de code sur l'alignement d'ontologies avec owl

Jiba
Administrator
J'ai un peu du mal à comprendre ce code, en particulier les méthodes add(), add_equivalent_individual(), etc, ne font pas partie d'Owlready, donc je ne sais pas exactement ce qu'elles font.

Voici cependant quelques commentaires :

 * j'imagine que ces méthodes ajoutent des entités. Dans ce cas, il faudrait peut-être mettre leurs appels dans un bloc "with onto: ..." pour préciser dans quelle ontologie sont insérés les triplets RDF correspondants. (NB cela est peut-être fait dans la méthode elle même).

* la deuxième boucle sur la variable "instance_target" ne sert à rien (la variable n'est pas utilisée ensuite), on peut donc l'enlever.

Jiba