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") |
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 |
Free forum by Nabble | Edit this page |