• Aucun résultat trouvé

Conception et mise en œuvre de l’analyse de document Web

Chapitre 5 : Spécification et conception du système SARIPOD

2. Conception du système SARIPOD

2.3 Conception et mise en œuvre de l’analyse de document Web

La conception UML du module d’analyse de document Web est faite via un package Java composé de plusieurs sous-packages dont les classes coopèrent tout au long du processus d’analyse. Pour illustrer l’architecture de ce module, nous présentons le diagramme de classes général (voir figure 5.18). Le fonctionnement de ce module est illustré par le diagramme des séquences de la figure 5.23.

Figure 5.18 : Diagramme de classes général du module d’analyse de document Web

: In d e x : F il t re : D o c u m e n t P a r s e r : R e s u l t a t : A d ja c e n c e U R L , M o t s c l é s g e t L i n k s (U R L ) L i s t e d o c u m e n t s g e t R e s u l t a t ( ) L is t e l i e n s d a n s U R L g e t L i n k s (U R L i ) P a r s e (L IE N i ) P a r s e ( U R L ) d o c u m e n t v a l id e M e s u re M a t c h (m o t s c lé s , U R L i ) G e t M a t ri x (l i s t e d o c ) M a t ri c e A d j a c e n c e Structures + Bloc + Document + ListBlocs + ListStyles + Style Utilities + ContentAnalyser + Label + TagsAnalyser + TitleLabeller Modules + DocumentAnalyser + Segmenter + TitlesIdentifier + TreeCreator

2.3.1 Diagramme de classes du processus de segmentation

Dans une première itération, nous avons examiné la structure de l’arbre DOM. En se basant sur ce résultat, nous avons développé la classe "Segmenter" qui correspond au processus de

segmentation. La méthode "getSegments" de cette classe permet d’engendrer la liste des blocs

et la liste des styles du document dans un seul parcours de l’arbre DOM. Nous avons aussi créé les classes du sous-package "Structures" et la classe "TagsAnalyser" du sous-package

"Utilities" qui permettent d’analyser les balises et les attributs HTML.

Figure 5.19 : Digramme de classes du processus de segmentation

Lors de la segmentation, les méta-données et le contenu de la balise "title" sont extraits. Nous

avons analysé les résultats obtenus en effectuant des statistiques sur le contenu des balises "meta" et "title".

La figure 4.19 schématise le diagramme de classes de ce processus. La méthode "parse"

parcourt récursivement l’arbre DOM en identifiant le type de chaque bloc et son style (il s’agit de l’étape d’étiquetage présentée dans la spécification de ce processus). Pour ce faire, elle fait appel aux méthodes "getNodeStyle" et "getPoidsElement" de la classe "TagsAalyser".

La première permet de calculer le style d’un noeud et la deuxième identifie le poids du séparateur vertical engendré par une balise.

La classe "Document" est une structure de données qui contient la liste des blocs, la liste des

styles, les méta-données et le contenu de la balise "title" du document. Toutes ces

informations sont récupérées dans un seul parcours de l’arbre DOM.

2.3.2 Diagramme de classes du calcul des niveaux des styles

Nous nous sommes focalisés, dans la deuxième itération, sur le calcul des niveaux des styles puisqu’il s’agit d’un traitement essentiel pour l’identification des titres. L’idée de départ consistait à attribuer à chacun des attributs de style un poids et de calculer pour chaque style la somme pondérée des valeurs de ses attributs. Ayant testé plusieurs combinaisons de poids, nous avons découvert qu’il faut tenir compte de la régularité des titres et la fréquence des styles. Enfin, nous avons abouti à la solution présentée dans la spécification ci-dessus.

Structures (from SDA) ListBlocs blocs : Vector attribNiveaux() ListStyles styles : Vector sort() Modules (from SDA) Document baliseTitleContent : String lstMeta : Vector lstBlocs : Vector lstStyles : Vector Bloc text : String = "" label : String = "" niveau : int Segmenter Segmenter() getSegments() parse() (from Modules) Utilities (from SDA) Style taille : float bold : boolean italique : boolean align : int underlined : boolean font : String niveau : int Color : String weight() TagsAnalyser getPoidsElement() getNodeStyle() (from Utilities)

Dans cette itération, la méthode "sort" de la classe "ListStyles" permet d’attribuer des niveaux

aux styles. Nous avons aussi créé la classe "ContentsAnalyser" dont la méthode "canBeTitle"

permet d’attribuer l’étiquette "PeutEtreTitre" aux blocs en analysant leurs contenus. La figure

5.20 illustre le diagramme partiel de classes de cette itération.

Figure 5.20 : Diagramme de classes du calcul des niveaux des styles 2.3.3 Diagramme de classes de l’étiquetage sémantique des blocs

L’objectif de cette itération est d’identifier les titres des sections "non corps" et les légendes.

En effet, des étiquettes sont attribuées à ces blocs en se basant sur des expressions régulières. Pour chaque étiquette, nous avons défini une expression régulière apprise à partir des exemples de documents.

Ayant un bloc B et la liste des expressions régulières, nous calculons le taux de correspondance entre B et chaque étiquette. L’étiquette ayant le taux de correspondance le plus élevé sera sélectionnée. Nous attribuons cette étiquette à B si le taux de correspondance est supérieur à un seuil donné. Le taux de correspondance est calculé en identifiant la sous- chaîne du texte du bloc qui correspond à l’expression régulière. Le taux est égal au rapport entre la longueur de cette sous-chaîne et la longueur du texte du bloc.

L’étiquetage sémantique relève de la classe "TitleLabeller" du package "Utilities" qui définit

les différents labels et expressions régulières. Il implémente la méthode "mesure-Match"

permettant de comparer une chaîne de caractères à une expression régulière en se basant sur la classe "RegularExpression" appartenant à l’environnement de développement. Tel que

présenté par la figure 5.21, la classe "TitleLabeller" définit plusieurs instances de la classe

"Label" qui ont chacune un nom et une expression régulière associée.

Figure 5.21 : Diagramme de classes de l’étiquetage sémantique des blocs

ContentAnalyser canBeTitle() computeNBMotsBloc() (from Utilities) ListStyles styles : Vector sort() (from Structures) TitleLabeller

CAPTION_FIGURE : String = "(IMAGE|FIGURE) [0-99](\\.[0-99])?( |-|.|:)?"...

CAPTION_TABLE : String = "(TABLE|TABLEAU|TAB\\.) [0-99](\\.[0-99])?( |-|.|:)?"...

CAPTION_SEQUENCE : String = "(SEQUENCE|ANIMATION) [0-99](\\.[0-99])?( |-|.|:)?"...

mesureMatch() identifyLabel() TitlesIdentifier TitlesIdentifier() identifyTitles() (from Modules) Label name : String RegExpression : String 1..*

2.3.4 Diagramme de séquences du module d’analyse d’un document Web

Le diagramme de séquences que nous présentons dans la figure 5.22 illustre les grandes étapes du processus d’analyse d’un document Web. Il s’agit de mettre l’accent sur l’enchaînement des traitements et son partage entre les principaux modules sans présenter tous les messages échangés entre les classes.

Figure 5.22 : Diagramme de séquences du module d’analyse d’un document Web

2.4 Conception et mise en œuvre du tri de documents par pertinence