• Aucun résultat trouvé

2 Extraction des motifs de description pour l’examen de base RDF

Pour rappel, un motif de description est une sorte de graphe descriptif de synthèse défini pour notre méthode d’examen pour l’évolution d’une base RDF en chapitre 3. Un motif décrit les points communs dans les graphes descriptifs de plusieurs ressources RDF d’une base. Lorsque l’ontologie et les données sont cohérentes, les groupes de ressources qui partagent un motif commun coïncident avec les classes définies dans l’ontologie. Dans le chapitre 3 nous nous sommes intéressés au cas où ces groupes ne correspondent pas aux classes définies dans l’ontologie. Ce cas est important à identifier lors de l’examen

d’une base RDF par un expert pour qu’il puisse déterminer si ce conflit entre ontologie et données indique une évolution nécessaire de la base. Notre méthode est une aide à cet examen en extrayant les motifs suivis par les groupes de ressources en conflit avec l’ontologie.

Nous proposons une méthode d’extraction des motifs de description d’un groupe de ressources, détaillée dans l’algorithme5.3, et schématisée en figure5.1. Elle est inspirée du problème d’extraction de la plus longue sous-séquence commune de deux chaînes de carac-tère (voir [Bergroth et al., 2000]) en considérant les motifs possibles comme des caractères. Elle consiste à parcourir un ensemble de graphes descriptifs et d’ajouter progressivement tous les motifs maximaux qui peuvent être identifiés en eux à une liste qui sera retournée à l’expert.

Figure 5.1 – Schéma de fonctionnement de l’algorithme 5.3.

Figure 5.2 – Illustration personnelle de l’extraction de motifs telle que proposée dans [Colucci et al., 2014].

Notre méthode a un résultat similaire à la méthode de clustering utilisant des sortes de motifs de ressources RDF décrite dans [Colucci et al., 2014] et représentée selon notre interprétation en figure5.2. Cette autre méthode revient à comparer les graphes descriptifs des ressources deux à deux pour en extraire les motifs, puis à comparer les motifs entre eux jusqu’à obtenir les motifs communs à toutes les ressources. Elle a le défaut de nécessiter le calcul de tous les motifs de ressources deux à deux et de tous les motifs de motifs deux à deux jusqu’à obtention du motif final, sans pouvoir éviter le calcul de motifs vides.

La méthode de recherche des motifs d’un ensemble de ressources que nous proposons (i) peut donner le même motif final, (ii) peut être arrêtée à tout moment pour obtenir un résultat partiel et (iii) ne calcule jamais de motif vide.

Pour un ensemble de ressources RDF et pour chacun de leurs graphes descriptifs, notre méthode d’extraction de motifs extrait les motifs maximaux qui peuvent être identifiés dans les triplets du graphe descriptif et par comparaison avec les motifs précédemment extraits. Ces motifs sont ajoutés progressivement à la liste des motifs qui sera retournée par l’algorithme. Bien que cela n’apparaisse pas dans l’algorithme 5.3pour des raisons de lisibilité, le nombre de motifs extraits des graphes descriptifs peut être limité par un choix de valeurs minimum de taille ou de valeur de description (cf. définition 3.4). Pour une liste de ressources l’algorithme 5.3 ajoute la liste des motifs de chaque graphe descriptif ressource à la liste de motifs connus. Cet algorithme peut être interrompu à n’importe quelle itération de la boucle en ligne2pour obtenir un résultat partiel. Dans l’algorithme

5.3 on utilise la relation d’inclusion d’un motif dans un autre. Nous définissons l’inclusion de motif de la façon suivante : Un motif m1 est inclus dans un motif m2 si m1 peut être considéré comme un motif de m2. Nous utilisons également les opérateurs d’intersection et de soustraction, que nous définissons tels que :

2. EXTRACTION DES MOTIFS DE DESCRIPTION POUR L’EXAMEN DE BASE RDF95 • L’intersection m1∩ m2 de deux motifs m1 et m2 est leur motif maximal commun. • La soustraction d’un motif m2 à un motif m1 est le motif maximal extrait de m1 tel

que (m1\ m2) ∩ m2 = ∅.

Algorithme 5.3 Procédure d’ajout des motifs d’un graphe descriptif g à la liste des motifs connus.

Entrée: Liste<Ressource> liste

1: Liste<Motif> connus = {}

2: pour tout Ressource res de liste faire

3: GrapheDescriptif g = graphDesc(res)

4: Pile<Motif> cibles = {g.voisinage}

5: tant que cibles 6= ∅ faire

6: Motif courant = cibles.pop()

7: pour tout elem de connus faire

8: si courant ∩ elem 6= ∅ alors

9: si courant = elem ou elem ⊂ courant alors

10: elem.sources += courant.sources

11: fin si

12: si elem ⊂ courant alors

13: Motif nmotif = courant \ elem

14: nmotif.sources = courant.sources

15: cibles += nmotif

16: sinon si courant ⊂ elem alors

17: courant.sources += elem.sources

18: sinon

19: Motif nmotif = courant ∩ elem

20: nmotif.sources = elem.sources + courant.sources

21: cibles += nmotif

22: fin si

23: fin si

24: fin pour

25: si courant /∈ connus alors

26: connus += courant

27: fin si

28: fin tant que

29: fin pour Sortie: connus

Dans l’algorithme5.3, chaque motif contient ses triplets et garde trace de ses « sources » – i.e. ses centres descriptifs – afin de pouvoir calculer son occurrence. L’algorithme compare chaque graphe descriptif courant, aux motifs connus et tant qu’ils ont un élément en com-mun :

• Si le nouveau motif est déjà parmi les motifs connus ou contient un motif connu, alors on ajoute ses sources à la liste des sources du motif déjà présent dans la liste (lignes 7 et 8).

• Si le nouveau motif contient un motif connu, on crée un nouveau motif avec les chemins spécifiques au nouveau motif et on l’ajoute à la liste des motifs à ajouter (lignes 9 à 12).

• Si le nouveau motif est contenu dans un motif connu, on ajoute les sources du motif connus à celle du nouveau motif (lignes 13 et 14).

• Sinon un nouveau motif est créé, contenant les chemins communs avec un motif connu et les sources adéquates, il est ajouté à la liste des motifs à ajouter (lignes 15 à 18)

Enfin, si le nouveau motif n’apparaît pas dans la liste des éléments connus, il y est ajouté (lignes 22 et 23).