Rapport final du projet - DiUF - Universit© de Fribourg
Transcript of Rapport final du projet - DiUF - Universit© de Fribourg
UNIVERSITÉ DE FRIBOURG
MyLink Aide à la recherche d’informations personnelles
Pierre-Yves Donzallaz
26.08.2008
Projet réalisé sous la direction du Dr Denis Lalanne et de l’assistant Florian Evequoz.
MyLink est un outil d’aide à la recherche permettant de résumer un document et d’automatiser les processus de recherche et de recoupement de l’information à partir d’un document source.
Table des matières Table des références............................................................................................................................ 3
1 Introduction ....................................................................................................................................... 5
2 Objectifs ............................................................................................................................................. 5
2.1 Profil de recherche ...................................................................................................................... 6
2.2 Visionneuse de documents ......................................................................................................... 6
2.3 Résumé graphique ...................................................................................................................... 7
2.4 Automatisation de la recherche .................................................................................................. 8
3 État de l’art ........................................................................................................................................ 9
3.1 TileBars ....................................................................................................................................... 9
3.2 SeeSoft ....................................................................................................................................... 9
4 Fonctionnalités ................................................................................................................................. 11
4.1 Visionneuse de documents ....................................................................................................... 11
4.1.1 Champs de recherches ......................................................................................................... 13
4.2 Résumé global du document ..................................................................................................... 13
4.3 Résumé personnel du document ............................................................................................... 15
4.4 Gestion des thèmes favoris ....................................................................................................... 16
5 Implémentation ................................................................................................................................ 18
5.1 Architecture .............................................................................................................................. 18
5.2 GUIManager ............................................................................................................................. 19
5.3 ThemeDocumentManager ........................................................................................................ 20
5.4 Stemmer ................................................................................................................................... 20
5.5 DocumentManager ................................................................................................................... 22
5.6 ThemeManager......................................................................................................................... 26
5.6.1 Theme et ThemeList ............................................................................................................. 27
5.6.2 ThemeXMLManager ............................................................................................................. 29
5.6.3 ThemeTableManager ........................................................................................................... 30
5.6.4 ThemeDialogManager .......................................................................................................... 31
5.6.5 Word, Paragraph et Document ............................................................................................. 34
5.6.6 ThemeGlobalSummaryManager ........................................................................................... 35
5.6.7 ThemeDetailedSummaryManager ........................................................................................ 38
5.6.8 ThemeWDSManager ............................................................................................................ 41
5.7 WDSInterface ............................................................................................................................ 44
6 Évaluation et améliorations .............................................................................................................. 45
6.1 Visionneuse de documents ....................................................................................................... 45
6.2 Gestion des thèmes .................................................................................................................. 45
6.3 Résumé graphique .................................................................................................................... 46
6.4 Multithreading .......................................................................................................................... 46
6.5 Bugs connus .............................................................................................................................. 47
6.5.1 Ouverture de documents ..................................................................................................... 47
6.5.2 Saturation de l’interface Windows Desktop Search .............................................................. 47
7 Conclusion ........................................................................................................................................ 48
8 Annexe ............................................................................................................................................. 49
8.1 Configuration minimale ............................................................................................................. 49
8.2 Installation ................................................................................................................................ 49
Table des références Figure 1 : Extraction des documents de l'utilisateur à partir d'un document externe ............................... 5
Figure 2 : Shéma de TileBars .................................................................................................................... 9
Figure 3 : Shéma de SeeSoft .................................................................................................................. 10
Figure 4 : Fenêtre principale de MyLink ................................................................................................. 11
Figure 5 : Boîte de dialogue d'ouverture d'une URL ............................................................................... 12
Figure 6 : Boîte de dialogue d'ajout de thème ........................................................................................ 12
Figure 7 : Champ de recherche et mise en évidence d’un pattern .......................................................... 13
Figure 8 : Mot introuvable dans le document ........................................................................................ 13
Figure 9 : Résumé global du document .................................................................................................. 14
Figure 10 : Résumé personnel du document .......................................................................................... 15
Figure 11 : Boîte de dialogue de confirmation de suppression de thèmes .............................................. 16
Figure 12 : Gestion des thèmes favoris .................................................................................................. 17
Figure 13 : Architecture globale du programme ..................................................................................... 18
Figure 14 : Éditeur graphique de formulaires intégré à NetBeans........................................................... 19
Figure 15 : Diagramme de classe du ThemeDocumentManager ............................................................. 20
Figure 16 : Diagramme de classe du Stemmer ........................................................................................ 21
Figure 17 : Diagramme de classe du DocumentManager ........................................................................ 22
Figure 18 : Interface graphique du DocumentManager .......................................................................... 24
Figure 19 : Architecture globale du gestionnaire de thèmes ................................................................... 26
Figure 20 : Diagramme de classe de Theme et ThemeList ...................................................................... 28
Figure 21 : Diagramme de classe du ThemeXMLManager ...................................................................... 30
Figure 22 : Diagramme de classe du ThemeTableManager..................................................................... 30
Figure 23 : Interface graphique du ThemeDialogManager ...................................................................... 31
Figure 24 : Diagramme de classe du ThemeDialogManager ................................................................... 33
Figure 25 : Diagramme de classe de Word, Paragraph et Document ...................................................... 35
Figure 26 : Diagramme de classe du ThemeGlobalSummaryManager .................................................... 36
Figure 27 : Interface graphique du ThemeDetailedSummaryManager .................................................... 39
Figure 28 : Diagramme de classe du ThemeDetailedSummaryManager ................................................. 41
Figure 29 : Diagramme de classe du ThemeWDSManager...................................................................... 42
Figure 30 : Interface graphique du ThemeWDSManager ........................................................................ 43
Figure 31 : Diagramme de classe de WDSInterface ................................................................................ 44
Figure 32 : Page d'accueil de Last.fm ..................................................................................................... 46
Figure 33 : Saturation de l'interface Windows Desktop Search ............................................................... 47
Extrait de code 1 : Préparation de la visionneuse de documents lors de l’ouverture d’un fichier ............ 23
Extrait de code 2 : Méthode repaintHighlights ....................................................................................... 25
Extrait de code 3 : Extrait du fichier XML ............................................................................................... 29
Extrait de code 4 : Méthode saveXMLFile .............................................................................................. 29
Extrait de code 5 : Méthode setActiveMode .......................................................................................... 31
Extrait de code 6 : Méthode getWord .................................................................................................... 32
Extrait de code 7 : Méthode updateWordHighLight ............................................................................... 33
Extrait de code 8 : Méthode computeTFIDF ........................................................................................... 34
Extrait de code 9 : Méthode getScore .................................................................................................... 37
Extrait de code 10 : Calcul de la couleur du ParagraphButton ................................................................ 37
Extrait de code 11 : Normalisation des tailles de police .......................................................................... 38
Extrait de code 12 : Méthode paintVisibleRectangle .............................................................................. 39
Extrait de code 13 : Normalisation de la largeur des barres de thèmes .................................................. 40
Extrait de code 14 : Rotation du panneau pour l'écriture du label des thèmes ....................................... 40
Extrait de code 15 : Méthode googleSearch ........................................................................................... 43
Table 1 : Comparaison entre visionneuses de documents HTML .............................................................. 7
5 Introduction
1 Introduction Depuis la fin des années 90, avec l’explosion du marché de l’informatique grand publique et
l’abaissement notable du coût des périphériques de stockage, la quantité d’informations n’a cessé
d’augmenter sur nos ordinateurs personnels et stations de travail. En raison de ce bouleversement, la
recherche de documents personnels au sein de nos fichiers devient une tâche ardue. En effet, il est
souvent rébarbatif d’effectuer un grand nombre de recherches au sein d’un document afin d’en trouver
des fichiers annexes. De plus, il est généralement difficile d’obtenir un résumé global d’un document,
notamment sous forme graphique.
Le logiciel MyLink a été conçu dans l’optique d’aider l’utilisateur à pallier ces manquements. MyLink est
un outil d’aide à la recherche qui permet de résumer graphiquement un document, en mettant en
évidence ses thèmes principaux et ses parties les plus importantes. Après la création de son profil de
recherche basé sur une compilation de mots-clés, l’utilisateur peut facilement savoir si un document est
proche de ses intérêts et peut en un tour de main connaître la position exacte de ses thèmes préférés
dans le document visionné. Aussi, le programme permet de créer un lien entre les centres d’intérêt de
l’utilisateur et l’information personnelle de celui-ci disséminée sur son disque dur grâce à l’intégration
de Microsoft Windows Desktop Search. MyLink évite ainsi les fastidieuses recherches nécessaires au
recoupement d’informations et permet ainsi d’augmenter la productivité lors du visionnage de longs
documents.
2 Objectifs Le but principal de ce projet est de mettre en relation un document externe avec l’information
personnelle de l’utilisateur. Le programme MyLink permet ainsi d’ouvrir un document source, d’extraire
les thèmes du document en relation avec l’utilisateur et d’afficher les fichiers locaux ayant un rapport
avec ses intérêts. Leur recensement s’effectue manuellement. Une interaction forte doit alors exister
entre le document externe et l’usager. En effet, celui-ci doit être en mesure d’ajouter aisément un mot
du document à sa liste de mots-clés favoris. Ceci nécessite donc l’intégration d’une visionneuse de
documents évoluée. Aussi, les thèmes préférés doivent être stockés dans une base de données afin
qu’ils soient accessibles en tout temps.
Figure 1 : Extraction des documents de l'utilisateur à partir d'un document externe
Document
externe
Documents
utilisateurs
6 MyLink
De plus, un résumé global du document externe doit être généré afin de mettre en évidence ses thèmes
importants. Un sommaire détaillé, basé sur les mots-clés favoris de l’utilisateur, doit également être
affiché, afin de connaître leur position exacte dans la visionneuse de documents. Finalement, le
recoupement des différents thèmes doit être facilité par une interface dédiée permettant l’ajout et le
retrait rapide des mots-clés servant de requête à la recherche de documents annexes.
2.1 Profil de recherche Au fur et à mesure de l’utilisation du logiciel, l’utilisateur ajoute dans une base de données des mots-
clés qui caractérisent ses intérêts. Un document XML sert d’espace de sauvegarde : le XML est une
technologie particulièrement adaptée au stockage d’éléments structurés tels que des thèmes,
puisqu’elle permet la création de balises personnalisées adaptées aux besoins du programme. De plus,
l’API JDOM1 propose la navigation et la création rapide d’une arborescence XML. Ainsi, il n’a pas été jugé
nécessaire d’utiliser une base de donnée relationnelle telle que MySQL pour un projet de cette
envergure, car le type et la quantité de données stockés restent fortement limités.
2.2 Visionneuse de documents Une visionneuse de documents est nécessaire pour l’affichage des documents externes au sein du
programme. Lors de la sélection de la visionneuse, l’accent a été mis sur le support du HTML et
l’interactivité offerte. Pour se faire, une comparaison de nombreuses technologies concurrentes a été
réalisée.
Tout d’abord, deux navigateurs Web payants ont été analysés. Le premier, IceBrowser, utilise un moteur
propriétaire basé sur Java Swing pour afficher les éléments HTML. Malgré une licence au prix élevé, le
support des CSS et du JavaScript est encore embryonnaire. Son concurrent principal se nomme
WebRenderer. Le moteur de rendu de ce dernier s’appuie au choix sur celui d’Internet Explorer ou de
Firefox. La qualité du rendu HTML est donc parfaite et le support des CSS, du JavaScript, des cookies et
même des applets Java et du plug-in Flash est excellent. Malheureusement, ce navigateur n’offre
aucune méthode permettant de connaître la position exacte d’une chaîne de caractère dans le
document.
Les pendants libres et gratuits des deux précédents navigateurs sont Cobra ToolKit et JRex. Le premier
est doté d’un support approximatif des CSS ainsi que d’une interaction limitée, alors que le second offre
une bonne qualité de rendu puisque basé sur Firefox. Cependant, l’interaction proposée est très faible.
En effet, il est impossible de connaître la position exacte de la barre de défilement ainsi celle d’un mot
spécifique.
Grâce aux interfaces COM de Windows, Eclipse SWT et DJ Project permettent l’utilisation du moteur
d’Internet Explorer dans une application Java. Cependant, l’interaction est à nouveau fortement limitée,
voire totalement inexistante.
1 JDOM : Java Document Object Model. JDOM est une implémentation du modèle DOM pour Java. L’arborescence
du document est stockée en mémoire vive, ce qui permet un accès rapide aux différents éléments du document. Projet JDOM : http://www.jdom.org
7 Objectifs
Il subsiste deux visionneuses développées par Sun. La première est un éditeur de texte standard fournie
par Java Swing, le JEditorPane. Il s’agit d’une zone de texte prenant en compte l’affichage de fichiers
HTML, RTF et plain text. Malheureusement, le support du HTML est anecdotique puisque les feuilles de
styles CSS et le JavaScript ne sont pas pris en charge. Bien que le rendu ne soit pas fidèle sur des pages
Web au design complexe, le JEditorPane offre néanmoins de nombreuses méthodes permettant de
connaître le statut du document, tel que sa longueur totale ou la position en pixel de chaque caractère
composant la page HTML. La seconde visionneuse, le JWebPane, est développée au sein du projet
JavaFX, un concurrent d’Adobe Flex permettant de créer des applications internet riches. Cependant, ce
projet-là a été retardé à de nombreuses reprises et cette nouvelle visionneuse basée sur WebKit, le
moteur utilisé par le navigateur Apple Safari, n’est pas attendue avant l’automne 2008. Néanmoins, si le
JWebPane fournit des méthodes similaires au JEditorPane, alors la qualité de l’interaction pourrait être
au rendez-vous, d’autant plus que WebKit promet un excellent support du HTML et des feuilles de style.
Moteur
de rendu Support
HTML, CSS, JS Détection ScrollBar
Scroll to position
Position mot
Interaction Note
IceBrowser Java faible Oui Non Non Mauvais Mauvais WebRenderer Mozilla Excellent Oui Oui Non Bon Bon Cobra ToolKit Java moyen Oui Oui Non Bon Moyen
JRex Mozilla Bon Non ? Non Faible Mauvais Eclipse SWT
Browser Internet Explorer
Bon Oui Non Non Faible Moyen
DJ Project Internet Explorer
Bon Non Oui Non Faible Bon
Java Swing JEditorPane
Java (Swing)
faible Oui Oui Oui Excellente Bon
Java JavaFX JWebPane
WebKit (Safari)
Bon Oui Oui Oui ? Excellent ? Excellent ?
Table 1 : Comparaison entre visionneuses de documents HTML
Finalement, la visionneuse sélectionnée est le JEditorPane, qui malgré son faible support pour les pages
HTML évoluées, fournit un grand nombre d’informations indispensables à la création d’un résumé
graphique détaillé, indiquant la position exacte des thèmes dans le document. Toutefois, si le JWebPane
tient toutes ses promesses en matière de rendu et d’interactivité, son intégration deviendra alors
incontournable dans toute application Java nécessitant une visionneuse de documents Web, tel que
MyLink.
2.3 Résumé graphique Deux résumés graphiques sont générés. Le premier est un récapitulatif global du document qui indique
les principaux thèmes rencontrés ainsi que les paragraphes importants. Le second affiche précisément
quels mots-clés de l’utilisateur sont présents dans le document tout en y indiquant leur position exacte.
Dans les deux cas, la technologie utilisée est Java2D, une API standard de Java permettant entre autres
de dessiner des formes géométriques à l’intérieure de composants Swing.
8 MyLink
2.4 Automatisation de la recherche Afin de récupérer les fichiers ayant un rapport avec le document visionné, un système de recherche doit
être intégré au programme. Plusieurs produits permettant de rechercher des fichiers sur les espaces de
stockages locaux, les deux principaux étant Microsoft Windows Desktop Search1 et Google Desktop
Search2. Tous deux indexent le contenu des disques durs de l’utilisateur ou certains dossiers en
particulier. Lors de requêtes de l’utilisateur, le programme consulte son index et retourne les différents
fichiers correspondant aux critères de l’utilisateur.
Après comparatif, il est apparu que Windows Desktop Search offrait de résultats de meilleure qualité,
dans la mesure où le programme se comporte de façon déterministe et offre un plus grand nombre de
paramètres relatifs à la sélection des fichiers. De plus, grâce à un pont JAVA-COM tel que JACOB3, qui
autorise la communication entre une application JAVA et les objets Windows COM et les librairies
Win32, l’intégration de Windows Desktop Search dans un programme Java est relativement aisée. Enfin,
la syntaxe utilisée pour les requêtes est SQL, ce qui facilite grandement la découverte et l’utilisation de
ce module.
1 Microsoft Windows Desktop Search: http://www.microsoft.com/windows/products/winfamily/desktopsearch
2 Google Desktop Search : http://desktop.google.com 3 Projet JACOB : http://sourceforge.net/projects/jacob-project
9 État de l’art
3 État de l’art
3.1 TileBars TileBars est un projet mené par Marti A. Hearst à l’éminent centre de recherche Xerox de Palo Alto aux
États-Unis, dans le cadre de recherches en rapport avec la visualisation d’informations au sein de
documents. Il s’agit d’un outil graphique permettant d’indiquer la fréquence et la distribution de termes
spécifiques dans un document ainsi que sa longueur.
Une TileBar se présente sous la forme d’un parallélépipède représentant un document. Ce rectangle est
lui-même découpé en une multitude de barres verticales correspondant aux diverses parties
thématiques d’un document. Le découpage est obtenu grâce à un algorithme de TextTiling. Une section
peut accueillir plusieurs mots-clés représentés sous la forme de carrés. Chaque carré est coloré suivant
la fréquence d’apparition du mot-clé dans la section correspondante. Plus une section regorge des mots-
clés spécifiés par l’utilisateur lorsqu’une recherche, plus ceux-ci apparaissent dans une couleur sombre.
Figure 2 : Shéma de TileBars
Ce système permet donc d’afficher un résumé graphique du document en fonction des mots-clés
spécifiés lors de la requête initiale. Grâce aux différents niveaux de gris correspondant aux fréquences et
à la densité des mots-clés apparaissant dans les sections du document, l’on peut rapidement connaître
le degré d’intérêt du document et de ses parties les plus importantes.
3.2 SeeSoft SeeSoft est un outil de suivi et de maintenance de code source développé au début des années 90 par
S.G. Eick, J.L. Steffen et E.E. Sumner Jr. L’application analyse les différents fichiers d’un projet
informatique et consigne au fil du temps les modifications qui y sont effectuées.Chaque fichier est
10 MyLink
représenté par une colonne dans laquelle des barres colorées symbolisant les lignes du code source sont
dessinées. Les barres possédant une couleur chaude sont celles ayant été éditées à de nombreuses
reprises. Grâce à cet outil, il devient aisé de repérer les lignes de codes ayant bénéficié d’une attention
particulière de la part des programmeurs. Une indication de la longueur relative des documents sources
est également présente.
Figure 3 : Shéma de SeeSoft
Un grand nombre de variantes ont vu le jour depuis la publication originelle de 1992. Par exemple, au
lieu de mettre en évidence le nombre de modifications qu’a subies une ligne, la coloration peut être
basée sur le nom du programmeur ayant édité un bloc de code. Ainsi, une couleur prédéfinie est dédiée
à chaque programmeur et il devient facile de découvrir l’impact de chaque employé sur le code source
d’un programme. De la même façon, en attribuant une couleur à chaque personnage d’un livre, l’on
peut connaître les chapitres dans lesquels ils apparaissent.
11 Fonctionnalités
4 Fonctionnalités La fenêtre principale du programme est divisée verticalement en deux parties. Celle de gauche contient
la visionneuse de document et celle de droite,les résumés et le gestionnaire de thèmes. Elles peuvent
être redimensionnées rapidement en effectuant un cliquer-déplacer de la barre de séparation ou
totalement masquée en cliquant sur les triangles dédiés. En outre, une barre d’outils contenant les
boutons les plus fréquemment utilisés se trouve dans la partie supérieure gauche de la fenêtre. De plus,
le menu « View » permet de naviguer entre les trois onglets principaux du gestionnaire de thèmes.
Figure 4 : Fenêtre principale de MyLink
4.1 Visionneuse de documents La visionneuse de documents accepte 3 types de fichiers : les pages HTML, les documents RTF et le texte
brut sans formatage spécifique. Grâce à la barre de menu ou à la barre d’outils, il est possible de créer
un nouveau document vierge, d’ouvrir un fichier situé sur le disque dur ou encore d’ouvrir une page
Web. Si une chaîne de caractère se trouve dans le presse-papiers de Windows lors de l’ouverture de la
boîte de dialogue d’ouverture d’une page Web, alors le contenu de celui est placé automatiquement en
surbrillance dans le champ de texte.
12 MyLink
Figure 5 : Boîte de dialogue d'ouverture d'une URL
En cliquant sur n’importe quel mot du document, la chaîne de caractères correspondante est surlignée
dans tous les documents. Si la touche contrôle est enfoncée lors de cette opération, il est possible
d’ajouter un mot-clé à la liste de thèmes favoris. Une boîte de dialogue d’ajout de thème s’affiche alors
avec le mot-clé sélectionné. Une couleur est choisie aléatoirement pour celui-ci. Celle-ci peut être
facilement modifiée en déplaçant le slider placé à droite du rectangle de prévisualisation de la couleur.
Le score du thème peut être modifié en sélectionnant l’une des valeurs de la liste déroulante des scores.
Si la case à cocher « Active » est activée, alors le thème sera mis en évidence dans le document avec la
couleur spécifiée dès l’enregistrement du thème. La case à cocher « Auto stemming » permet de
stemmer le mot que l’on souhaite ajouter. La partie utile du mot est mise en évidence avec la couleur
choisie et le titre de la barre de dialogue est modifié en conséquence. Lorsque la checkbox nommée
« Keep open » est cochée, la fenêtre ne sera pas masquée après l’enregistrement du mot-clé courant.
Ceci permet l’ajouter de plusieurs thèmes successifs sans avoir à repasser par la barre d’outils ou la
barre de menu.
Figure 6 : Boîte de dialogue d'ajout de thème
En cliquant à nouveau sur le même mot dans la visionneuse, il est possible d’éditer ses caractéristiques
avec une boîte de dialogue similaire. Si le label du thème se trouve dans une forme stemmée, alors la
case à cocher d’auto stemming est activée par défaut, sinon elle reste désactivée afin d’éviter la
stemmatisation involontaire d’un thème déjà enregistré.
13 Fonctionnalités
4.1.1 Champs de recherches
Le champ de recherches placé sous la visionneuse permet de chercher et de mettre en évidence une
chaîne de caractères dans le document. Naturellement, la casse n’est pas prise en compte lors de la
recherche. La chaîne de caractère est surlignée en gris clair, tandis que l’occurrence active apparaît en
gris foncé. Grâce au bouton « Next », il est possible de naviguer entre les occurrences du mot-clé dans le
document. Le calcul de prochaine occurrence tient compte de la position du chariot.
Figure 7 : Champ de recherche et mise en évidence d’un pattern
Lorsque le mot recherché ne se trouve pas dans le document, le champ de recherche est
immédiatement coloré en rouge et le bouton « Next » reste désactivé tant que le pattern n’est pas
détecté dans le document.
Figure 8 : Mot introuvable dans le document
4.2 Résumé global du document Le résumé global du document se décompose en plusieurs parties, deux listes de mots et un résumé
graphique des paragraphes importants. La première liste contient les mots possédant le plus grand
nombre d’occurrences. Il s’agit ainsi des thèmes qui caractérisent le mieux le document. La seconde liste
recense les mots les plus originaux, c’est-à-dire ceux ayant le TF-IDF le plus élevé. En clair, ce sont des
thèmes apparaissant avec une fréquence élevée dans une section du document spécifique. Grâce à
cette liste, il est donc possible de détecter certains mots thématiquement très différents du reste du
document. Dans les deux listes, la taille de la police utilisée dépend du nombre d’occurrences et de
l’originalité du mot. En outre, le nombre de mots-clés affichés dans chaque liste peut être facilement
modifié en déplaçant les sliders en regard des listes. À nouveau, il est possible d’ajouter ou d’éditer un
14 MyLink
thème en contrôle-cliquant sur un mot-clé du résumé global. De plus, cliquer sur un mot permet de le
surligne dans la visionneuse de document et de scroller vers sa prochaine occurrence.
Figure 9 : Résumé global du document
Le résumé graphique situé à gauche affiche les paragraphes sous forme de blocs. La couleur du
paragraphe dépend des thèmes affichés dans le résumé des thèmes ayant la plus forte redondance. Plus
un paragraphe est sombre, plus la concentration de thèmes y est élevée. Lorsque le slider associé à la
première liste de thèmes est déplacé, le résumé graphique des paragraphes est automatiquement mise
à jour. Ainsi, si un seul thème apparaît dans le résumé graphique des thèmes ayant le taux de
redondance le plus élevé, alors les blocs représentants les paragraphes seront soit blancs (ne contient
pas le thème), soit noirs (contient le thème). Si tous les mots-clés du document sont affichés, alors la
plupart des paragraphes seront légèrement grisés.
Un clic sur l’un des blocs met en évidence le paragraphe correspondant et affiche la partie souhaitée
dans la visionneuse de document. Il est à noter qu’en déplaçant la barre de défilement de la
15 Fonctionnalités
visionneuse, il est facile d’observer le rectangle de visibilité qui renseigne l’utilisateur quant à la portion
du document affiché.Enfin, lorsque la case à coche « My Themes only » est activé, seuls les thèmes
favoris apparaissent
4.3 Résumé personnel du document Le résumé personnel du document met en évidence la présence des mots-clés favoris de l’utilisateur
dans le document. Ceux-ci sont affichés dans la partie supérieure du panneau et prennent la forme
d’une barre colorée. Les portions sombres de la barre correspondent aux occurrences du mot-clé dans le
document. Il est ainsi aisé de connaître la position exacte d’un thème dans le document, d’autant plus
que ces occurrences sont cliquables, ce qui permet de mettre en évidence la partie désirée du document
dans la visionneuse. Pour éditer un thème à partir de cette vue, il suffit de double cliquer dans la liste
centrale et de contrôle-cliquer ou cliquer avec le bouton central de la souris sur la barre de thèmes
souhaitée.
Figure 10 : Résumé personnel du document
16 MyLink
Les thèmes favoris de l’utilisateur peuvent être classés par score, nombre d’occurrences ou importance.
L’importance dépend proportionnellement et du score et du nombre d’apparitions. Aussi, plus un thème
est important, plus sa barre est large. En outre, la case à cocher « Document themes only » permet de
n’afficher que les thèmes présents dans le document. Finalement, un slider de tolérance a pour rôle de
filtrer le nombre de mots-clés affichés dans le résumé graphique. Son déplacement provoque également
la mise à jour de la table de fichiers relatifs.
Si une barre de thème est grisé, cela signifique que le mot-clé correspondant n’est pas pris en compte
pour la recherche de fichiers annexes. En effet, la liste de thèmes sélectionnés au centre du panneau
sert de champ de requêtes pour Windows Search dont les résultats sont affichés dans la table du bas. Le
bouton « Open » dans le coin inférieur droit permet d’ouvrir les fichiers désirés.
Pour ajouter ou supprimer un thème dans la liste des thèmes sélectionnés, il suffit de cliquer sur la barre
de thème désiré. Aussi, il est possible d’utiliser les boutons « Remove » ou « Remove All » pour
supprimer un ou plusieurs thèmes spécifiques.La checkbox « Auto Refresh » permet d’avoir une liste de
thèmes sélectionnée en concordance permanente avec les thèmes affichés dans le résumé graphique.
Toute suppression de thème désactive cette case à cocher. Ainsi, pour réactualiser la liste, il suffit de
cliquer sur le bouton « Refresh ». Enfin, le bouton Google permet de lancer une recherche Web grâce à
ce même moteur avec la liste des thèmes sélectionnés.
4.4 Gestion des thèmes favoris Le gestionnaire de thèmes personnels, intitulé « My Themes », affiche les différents mots clés
sauvegardés par l’utilisateur dans une table. Les principales caractéristiques des thèmes y sont exposés,
tels que le label, le score et statut d’activité du thème. En doublecliquant sur un thème ou en pressant le
bouton « Edit », l’on peut modifier les différents paramètres du thème. Néanmoins, il n’est possible
d’éditer qu’un seul thème à la fois.
De plus, il est facile d’activer ou désactiver un thème par le biais de la case à cocher de la colonne
« Active ». Ceci permet par exemple de retirer temporairement un mot des résumés graphiques sans
pour autant le supprimer totalement. Enfin, lors de la suppression de thèmes, une confirmation est
demandée à l’utilisateur afin d’éviter toute mauvaise manipulation de sa part.
Figure 11 : Boîte de dialogue de confirmation de suppression de thèmes
17 Fonctionnalités
Figure 12 : Gestion des thèmes favoris
18 MyLink
5 Implémentation
5.1 Architecture Le programme se décompose en 3 modules principaux, à savoir le gestionnaire d’interface graphique, de
thèmes et de document. Le gestionnaire de thème, le ThemeManager, comporte un grand nombre de
sous-modules responsables de l’affichage des thèmes, du résumé du document ou encore de la gestion
des fichiers XML servant au stockage des thèmes de l’utilisateur.
Le gestionnaire de documents offre un grand nombre de fonctionnalités relatives à la visionneuse de
documents. En effet, le DocumentManager est responsable de la création et de l’ouverture de
documents HTML, RTF ou plain text, ainsi que de la mise en évidence des thèmes et des chaînes de
caractères recherchés par l’utilisateur.
En outre, divers modules outils fournissent des fonctionnalités secondaires. C’est notamment le cas du
Stemmer et du WDSInterface qui offrent respectivement des méthodes permettant la stemmatisation
de chaînes de caractères et l’envoi de requêtes vers Windows Desktop Search.
Figure 13 : Architecture globale du programme
DocumentManager ThemeManager
ThemeDetailedSummaryManager
ThemeTableManager
ThemeWDSManager
ThemeDialogManager
WDSInterface
GUIManager ThemeDocumentManager
Stemmer
ThemeXMLManager
ThemeGlobalSummaryManager
WordTools
19 Implémentation
5.2 GUIManager Tous les composants graphiques sont déclarés au sein du gestionnaire d’interface, le GUIManager.
Celle-ci est générée grâce à l’outil GUI Builder intégré à l’environnement de développement open source
NetBeans1, connu avant tout pour être l’un des principaux éditeurs d’applications Java, au même titre
qu’Eclipse2. L’utilisation d’un tel outil permet de sensiblement réduire le temps de travail nécessaire à la
mise en place des composants Swing, puisqu’il est en général fastidieux de créer manuellement des
designs complexes dotés de tous les raffinements en matière de positionnement et de
redimensionnement.
Figure 14 : Éditeur graphique de formulaires intégré à NetBeans
La gestion des différents événements relatifs aux composants de l’interface est réalisée, non pas
directement par le GUIManager, mais par les différents modules gérant une fonctionnalité ou un
panneau spécifique. Par exemple, la gestion de la liste déroulante, du slider et de la case à cocher dédiés
au résumé graphique détaillé est effectuée dans le module responsable de cette fonction, le
ThemeDetailedSummaryManager. Cette technique permet une gestion localisée des éléments
graphiques au sein de leur module respectif. L’utilisation des composants graphiques dans n’importe
quel module du programme est rendue possible grâce à leur déclaration de type public static final.
1 NetBeans : environnement de développement open source, http://www.netbeans.org 2 Eclipse : logiciel concurrent de NetBeans, http://www.eclipse.org
20 MyLink
5.3 ThemeDocumentManager Le module de gestion des thèmes et des documents est l’un des modules maîtres du programme. Il
permet la bonne synchronisation de ses deux modules fils, le ThemeManager et le DocumentManager.
Figure 15 : Diagramme de classe du ThemeDocumentManager
Le ThemeManager et le DocumentManager sont ainsi instanciés avec le ThemeDocumentManager lui-
même, afin de permettre une parfaite communication entre ses deux sous-modules. En pratique, cela
permet par exemple au gestionnaire de documents d’accéder directement à des fonctionnalités du
ThemeManager en passant par le ThemeDocumentManager, grâce à sa méthode getThemeManager. Cette
technique facilite énormément la synchronisation des informations entre les différents modules du
programme, sans nécessiter l’intégration de méthodes statistiques dans un module particulier.
5.4 Stemmer Le Stemmer est une classe outil qui permet d’isoler l’unité lexicale d’un mot et dans une moindre
mesure, son radical ou sa racine, par le biais de la méthode stem. Le stemmer utilisé dans MyLink est
basé sur l’algorithme de Porter, doté de 5 étapes de stemmatisation et précédé d’une étape de
dépréfixation qui consiste à retirer le préfixe du mot à traiter.
Le code utilisé a été traduit du langage C vers Java par Fotis Lazarinis, puis entièrement remanié afin de
prendre en charge les stop words3. La procédure de stemming a été modifiée afin d’être effectuée deux
fois, afin d’éviter la création de stems dotés d’une terminaison pouvant pourtant être à nouveau retirée.
Aussi, certaines étapes ont été légèrement modifiées afin de ne pas obtenir de stem ayant une
composition orthographique différente du mot d’origine. Par exemple, avec l’algorithme original, le mot
« business » est stemmé en « busy ». Il est cependant important de garder une orthographe similaire,
car Windows Desktop Search n’est pas capable de transformer le terme « busy » en « busi », ce qui peut
grandement nuire aux résultats d’une recherche de fichiers.
3 Stop word ou mot vide : mot lexicalement pauvre, généralement doté d’un très haut taux de redondance dans un
langage spécifique et d’un faible nombre de lettres. Par défaut, le Stemmer interprète tout mot de moins de 3 lettres en temps que stop word.
21 Implémentation
Figure 16 : Diagramme de classe du Stemmer
Enfin, le Stemmer est implémenté selon le pattern du singleton par le biais d’une méthode d’accès
statique getInstance. Ceci permet l’utilisation du Stemmer dans n’importe quel autre module sans
nécessiter d’instanciation localisée.
22 MyLink
5.5 DocumentManager Le gestionnaire de documents est responsable de l’ouverture et de l’affichage de documents au sein de
la visionneuse de documents. Le composant Java dédié à cette fonctionnalité est le JEditorPane, une
zone de texte évoluée prenant en compte divers styles de documents, tels que le HTML, le RTF et le
texte brut. Malheureusement, le support du HTML est encore embryonnaire puisque les feuilles de
styles CSS et le JavaScript ne sont pas pris en charge.
Figure 17 : Diagramme de classe du DocumentManager
23 Implémentation
L’ouverture d’un document à l’aide de la méthode openFile est précédée d’une tâche d’analyse de
l’extension du fichier afin de préparer la visionneuse pour un style de document prédéfini. Ainsi, pour un
document RTF, le kit éditeur de document sera un RTFEditorKit, pour un document HTML un
HTMLEditorKit et pour un simple document texte un StyleEditorKit.
//Retrieves the extension of the file
String filename = file.getName();
String extension = new String();
int pointPosition = filename.lastIndexOf(".");
if (pointPosition != -1) {
extension = filename.substring(pointPosition + 1, filename.length());
}
//Sets the document editor for an rtf/doc file
if (extension.equals("rtf") || extension.equals("doc")) {
GUIManager.documentEditor.setContentType("text/rtf");
GUIManager.documentEditor.setEditorKit(new RTFEditorKit());
GUIManager.documentEditableCheckbox.setEnabled(false);
this.setEditionMode(false);
//Sets the document editor for an html file
} else if (extension.equals("htm") || extension.equals("html")) {
GUIManager.documentEditor.setContentType("text/html");
GUIManager.documentEditor.setEditorKit(new HTMLEditorKit());
GUIManager.documentEditableCheckbox.setEnabled(false);
this.setEditionMode(false);
//Sets the document editor for a plain text file
} else {
GUIManager.documentEditor.setContentType("text");
GUIManager.documentEditor.setEditorKit(new StyledEditorKit());
GUIManager.documentEditableCheckbox.setEnabled(true);
this.setEditionMode(true);
}
Extrait de code 1 : Préparation de la visionneuse de documents lors de l’ouverture d’un fichier
De plus, seuls les documents de type texte brut peuvent être édités. En effet, bien que les documents
RTF ou HTML soient éditables dans le JEditorPane, il subsiste des bugs dans l’implémentation de ces
différents kits qui rendent quelques fois problématique l’édition de documents à la mise en page
24 MyLink
complexes. La modification de tels documents par l’utilisateur est donc rendue impossible grâce à
l’instruction setEditable(false).
Figure 18 : Interface graphique du DocumentManager
En outre, le DocumentManager fournit des méthodes relatives au statut du document ouvert : sa
longueur totale en pixel, la position exacte affichée ainsi que la longueur de la portion visible du
document. getPixelPosition permet de connaître précisément la position en pixel d’un mot en fonction
de sa position dans la chaîne de caractères qui composent le document source. Ces diverses fonctions
sont utilisées en particulier par le module responsable du résumé graphique détaillé, car il requiert des
informations précises quant à la position des mots à l’intérieure du document afin de dessiner
correctement les différentes barres de thèmes.
25 Implémentation
Outre les opérations de création et d’ouverture de documents, le DocumentManager a également pour
tâche de mettre en évidence les différents thèmes et mots clés recherchés dans la visionneuse de
documents. Il existe 3 types de surlignage : le highlight de thème, de sélection et de recherche. Le
surlignage de sélection est utilisé pour mettre en évidence un pattern particulier et celui de recherche
permet de surligner toutes les occurrences d’une chaîne de caractères à l’intérieur du document. La
couleur du surlignage de thèmes dépend de la couleur même du thème, tandis les surlignages de
sélection et de recherche utilisent des noirs semi-transparents. Afin d’éviter une mauvaise superposition
des surlignements et une impossibilité de distinguer des highlights se chevauchant, ceux-ci doivent être
repeints dans un ordre spécifique après chaque ajout d’un surlignage. Ainsi, la méthode
repaintHighLights se charge de redessiner dans un ordre précis les différentes instances de surlignage.
private void repaintHighLights() {
//Retrieves all highlights
Highlighter.Highlight[] hilites = documentEditor.getHighlighter().getHighlights();
removeAllHighLights();
//Repaints selection highlights
for (int i = 0; i < hilites.length; i++) {
if (hilites[i].getPainter() instanceof SelectionHighLighter) {
repaint(hilites[i]);
}
}
//Repaints search highlights
for (int i = 0; i < hilites.length; i++) {
if (hilites[i].getPainter() instanceof SearchHighLighter) {
repaint(hilites[i]);
}
}
//Repaints theme highlights
for (int i = 0; i < hilites.length; i++) {
if (hilites[i].getPainter() instanceof ThemeHighLighter) {
repaint(hilites[i]);
}
}
}
Extrait de code 2 : Méthode repaintHighlights
Les principales méthodes publiques de surlignement sont HighLightWord, HighLightParagraph et
HighLightThemes, qui permettent respectivement de mettre en évidence un mot, un paragraphe et une
liste de thèmes.
26 MyLink
5.6 ThemeManager Le gestionnaire de thèmes gère l’affichage du résumé graphique du document externe, la table
regroupant les différents thèmes de l’utilisateur, l’envoi de requêtes vers l’interface Windows Desktop
Search, ainsi que l’ajout et l’édition de thèmes via une boîte de dialogue. Ces fonctionnalités sont
assurées par 6 sous-modules dédiés : le ThemeXMLManger, le ThemeTableManager, le
ThemeDialogManager, le ThemeGlobalSummaryManager, le ThemDetailedSummaryManager et le
ThemeWDSManager. Ils sont instanciés dans le module maître ThemeManager qui assure la
synchronisation entre ses modules fils.
Figure 19 : Architecture globale du gestionnaire de thèmes
Outre les méthodes d’accès à tous les sous-modules, le ThemeManager offre la méthode repaint qui
permet de rafraîchir les modules secondaires dotés d’une interface graphique. Ainsi, cette méthode
permet la parfaite synchronisation des vues lors de la modification du document source par exemple.
De plus, le gestionnaire de thèmes met également à disposition de tous ses modules fils les listes de
thèmes wdsThemeList et displayedThemeList. La première correspond aux thèmes sélectionnés servant
27 Implémentation
de requêtes pour l’interface Windows Desktop Search et la seconde aux thèmes affichés dans le résumé
graphique de l’utilisateur. Leur déclaration est de type public protected, ce qui permet un accès et une
modification rapide.
5.6.1 Theme et ThemeList
L’objet de base incontournable de ce programme est le Theme. Un Theme est caractérisé par son label,
son score, sa teinte, son statut d’activité et sa liste de positions. Tout d’abord, le score s’échelonne entre
0 et 100. La teinte du thème est exprimée avec un nombre de type double ayant une valeur comprise
entre 0 et 1. Il ne s’agit pas d’une couleur de type RGB, mais HSB4. Le statut d’activité permet de
spécifier si un thème est actif ou non. Un thème non actif ne sera pas pris en compte dans les résumés
graphiques et ne sera pas mis en évidence dans la visionneuse de documents. La liste de positions
correspond aux différentes positions du label dans la chaîne de caractères composant le document
source.
Une ThemeList est une agrégation de Theme. Son implémentation est basée sur l’objet ArrayList qui
offre un large éventail de méthodes permettant de connaître le statut de la liste de thèmes : sa taille,
son contenu ou encore la position précise d’un des Themes. Naturellement, des méthodes add, remove et
removeAll sont disponible afin de respectivement ajouter un thème et supprimer un ou tous les thèmes.
La méthode sort permet de trier la liste selon une méthode particulière. La première ordonne les
thèmes par score, la seconde par nombre d’occurrences du thème dans le document. La dernière
méthode de tri classe les différents thèmes par importance : l’importance d’un thème dépend à la fois
de son score et de son nombre d’occurrences. Ainsi, un thème apparaissant à plusieurs reprises dans la
visionneuse de document et ayant un score élevé apparaîtra en tête de liste. Cette méthode est utilisée
par le ThemeDetailedSummaryManager afin d’afficher le résumé graphique détaillé du document
externe.
4 Hue, Staturation and Brightness : leurs 3 valeurs correspondantes s’échelonnent entre 0 et 1. Par défaut, le programme utiliser une saturation de 0.35 et une luminosité de 1.
28 MyLink
Figure 20 : Diagramme de classe de Theme et ThemeList
29 Implémentation
5.6.2 ThemeXMLManager
Le gestionnaire de fichiers XML permet de stocker les thèmes de l’utilisateur dans un fichier XML.
Lorsque celui-là ajoute, édite ou supprime un ou plusieurs thèmes, les modifications y sont
immédiatement répercutées.
<themes>
<theme>
<label>business</label>
<rank>50</rank>
<color>0.94</color>
<active>true</active>
</theme>
</themes>
Extrait de code 3 : Extrait du fichier XML
Les informations retenues pour le stockage d’un thème sont son label, son score, sa couleur et son
statut d’activité. Il n’est pas nécessaire de stocker sa liste de positions, puisque celle-ci varie en fonction
du document affiché dans la visionneuse de documents.
En plus des méthodes d’addition et de suppression de thème, le ThemeXMLManager permet d’extraire
la liste des thèmes du fichier XML grâce aux méthodes getThemeList et getActiveThemeList. La première
permet d’obtenir tous les thèmes contenus dans le fichier XML tandis que la seconde ne fournit que les
thèmes dont le statut d’activité est true.
Après chaque opération sur les thèmes, le fichier XML doit être sauvegardé à l’aide de la procédure
saveXMLFile. L’API utilisée pour manipuler les fichiers XML étant JDOM5, la totalité de l’arborescence
XML est donc stockée en mémoire vive. Ainsi, afin de l’enregistrer dans un fichier XML, il suffit
d’invoquer la méthode output qui se chargera d’écrire les données dans le fichier choisi.
private void saveXMLFile() {
XMLOutputter output = new XMLOutputter(Format.getPrettyFormat());
try {
output.output(this.document, new FileOutputStream(file));
} catch (IOException e) {
e.printStackTrace();
}
}
Extrait de code 4 : Méthode saveXMLFile
5 JDOM : Java Document Object Model, implémentation du modèle DOM et SAX pour la plateforme Java, http://www.jdom.org
30 MyLink
Figure 21 : Diagramme de classe du ThemeXMLManager
5.6.3 ThemeTableManager
Le ThemeTableManager est responsable de l’affichage des thèmes au sein de la table correspondante.
Dès lors que le fichier XML est modifié, la table doit être mise en jour afin de refléter en permanence le
contenu de ce dernier. Quatre boutons sont utilisés dans l’interface graphique, ils permettent d’ajouter
un thème, d’en éditer et de supprimer l’un ou la totalité des thèmes.
Figure 22 : Diagramme de classe du ThemeTableManager
31 Implémentation
La table affiche les informations principales au sujet des thèmes, à savoir son label, son score et son
statut d’activité. Celui-ci peut être modifié simplement en cochant la cache à cocher désirée dans la
colonne « Active ». À chaque clic de l’utilisateur sur une case à cocher, la méthode setActiveMode est
appelée afin de modifier le statut d’activité du thème dans le fichier XML.
private void setActiveMode() {
if (GUIManager.themeManagerTable.getSelectedRowCount() != 0) {
Theme theme = getselectedTheme();
themeManager.getThemeXMLManager().setActive(theme.getLabel(), !theme.getActive());
}
repaint();
this.themeManager.getThemeWDSManager().repaint();
}
Extrait de code 5 : Méthode setActiveMode
Après chaque clic dans la table, la procédure setButtons met à jour les différents boutons du panneau.
Ainsi, lorsque plusieurs lignes de la table ont été sélectionnées, le bouton « Edit » doit être désactivé via
la méthode setEnable(false), afin d’empêcher l’utilisateur d’éditer plus d’un thème à la fois. Aussi,
lorsque la table est vide, tous les boutons doivent être désactivés, sauf celui d’ajout de thèmes.
5.6.4 ThemeDialogManager
Le ThemeDialogManager peut être considéré comme une extension du gestionnaire de table, puisqu’il
permet d’ajouter et d’éditer des thèmes. La boîte de dialogue est ouverte lorsque l’utilisateur clique sur
le bouton « Add Theme » ou lorsqu’il clique sur le bouton « Edit » si une ligne de la table de thèmes est
sélectionnée.
Figure 23 : Interface graphique du ThemeDialogManager
32 MyLink
La procédure getWord permet de connaître la partie utile d’un mot. En fonction de la case à cocher
d’autostemming, elle retourne soit le mot complet, soit son stem. Cependant, si plusieurs mots sont
entrés dans le champ de texte, la méthode retourne null, car l’utilisateur ne peut entrer qu’un seul
thème à la fois. De plus, si le stem du mot entré est vide, s’il s’agit par exemple d’un simple préfixe tel
que « nano », la méthode retourne également la valeur null.
private String getWord() {
String text = GUIManager.themeDialogTextField.getText().trim();
if (text.indexOf(" ") != -1) {
return null;
} else {
if (GUIManager.themeDialogAutoStemmingCheckBox.isSelected()) {
String stem = Stemmer.getInstance().stem(text);
if(stem.isEmpty()){
return null;
}else{
return stem;
}
} else {
return text;
}
}
}
Extrait de code 6 : Méthode getWord
Une autre méthode importante du ThemeDialogManager est updateWordHighLight qui permet de mettre
en évidence le mot qui sera sauvegardé en tant que thème. Cette procédure est appelée dès que
l’observateur de type KeyListener détecte le relâchement d’une touche du clavier au sein du champ de
texte. Aussi, lorsque l’utilisateur modifie le statut de la case à cocher d’autostemming, la mise en
évidence du mot est actualisée par le biais d’un événement de type ActionEvent enregistré auprès de
celle-là.
private void updateWordHighlight() {
Highlighter highLighter = GUIManager.themeDialogTextField.getHighlighter();
String text = GUIManager.themeDialogTextField.getText();
String word = getWord();
//If there is a word to highlight...
if (word != null) {
try {
highLighter.removeAllHighlights();
33 Implémentation
highLighter.addHighlight(text.indexOf(word), text.indexOf(word) + word.length(),
new DefaultHighlightPainter(GUIManager.themeDialogColorPanel.
getBackground()));
} catch (BadLocationException ex) {
ex.printStackTrace();
}
//If there is no word to highlight...
} else {
highLighter.removeAllHighlights();
}
}
Extrait de code 7 : Méthode updateWordHighLight
Lorsque l’utilisateur désire ajouter un thème, la méthode add est appelée. Si un label est spécifié, la
méthode d’ajout de thème contrôle qu’il s’agisse d’un thème ne se trouvant pas déjà dans le fichier XML
servant au stockage des thèmes. Si tel est le cas, alors la boîte de dialogue passe en mode « édition ».
Sinon, une couleur aléatoire et un score par défaut de 50 sont appliqués.
Grâce à la méthode edit, l’utilisateur peut modifier un thème déjà enregistré. La boîte de dialogue
reflète alors les différentes informations au sujet du thème, son label, sa couleur, son score et son statut
d’activité. Si le label est dans une forme non-stemmée, alors la case à cocher d’autostemming n’est pas
sélectionnée.
Figure 24 : Diagramme de classe du ThemeDialogManager
34 MyLink
La procédure save permet de sauvegarder le thème affiché dans la boîte de dialogue. En fonction du
mode dans lequel se trouve la boîte de dialogue, « ajout » ou « édition » de thèmes, save fera appelle à
la méthode add ou edit du ThemeXMLManager afin de stocker le thème dans le fichier XML.
5.6.5 Word, Paragraph et Document
Avant de créer le résumé global du document source, il est nécessaire de l’analyser afin d’en extraire les
thèmes principaux. Tout d’abord, la classe Word est une conceptualisation d’un mot dans un extrait de
texte. Ainsi, elle possède un label, un compteur d’occurrences et un score. Par défaut, lors de la création
d’un Word, son compteur d’occurrences est initialisé à 1 et son score à 0.
A un niveau d’abstraction supérieure, l’on trouve le Paragraph. Il requiert une chaîne de caractère lors
de son initialisation, un paragraphe généralement. Par le biais de la méthode extractWords, les différents
mots composant le texte sont extraits, en ne gardant toutefois que les variantes stemmées. Les stop
words sont simplement rejetés lors de cette opération. Ensuite, la fréquence de chaque Word du
paragraphe est calculée grâce à la procédure computeTFRank.
Le Document se trouve au niveau le plus élevé. Il est chargé de tenir à jour une liste de Paragraph à
partir de laquelle l’on peut calculer le TF-IDF de chaque mot et renvoyer la liste des Words ayant le plus
grand nombre d’occurrences ou le TF-IDF le plus élevé grâce aux méthodes getWordList. Lors de sa
création, le Document utilise la chaîne de caractères composant le document externe. Le contenu de
celle-ci est analysé afin d’en extraire les paragraphes grâce à la méthode extractParagraphs. Une fois la
liste de Paragraphs créée, le TF-IDF de chaque mot est calculé via la procédure computeTFIDF. Comme le
Term Frequency du mot a déjà été calculé lors de la création du Paragraph auquel il appartient, il ne
reste plus qu’à le multiplier le score actuel par l‘IDF, Inverse Document Frequency.
private void computeTFIDF() {
for (int i = 0; i < this.paragraphList.size(); i++) {
Paragraph paragraph = this.paragraphList.get(i);
for (int j = 0; j < paragraph.size(); j++) {
Word word = paragraph.get(j);
String label = word.getLabel();
int counter = paragraphContainsCount(label);
//Sets the TF-IDF of the word
word.setRank(word.getRank() *
Math.log((double) this.paragraphList.size() /
(double) counter));
}
}
}
Extrait de code 8 : Méthode computeTFIDF
35 Implémentation
Figure 25 : Diagramme de classe de Word, Paragraph et Document
Finalement, une liste de Words est créée puis mise à jour avec la méthode updateWordList afin de
recenser l’ensemble des mots du document. Cette liste ne contient qu’une occurrence de chaque Word.
Le compteur d’occurrence correspond au nombre total d’occurrences du mot dans le document et le
score correspond au TF-IDF le plus élevé rencontré pour ce mot dans les différents paragraphes
analysés.
5.6.6 ThemeGlobalSummaryManager
Le ThemeGlobalSummaryManager gère l’affichage du résumé global du document. Il s’agit d’un résumé
graphique des paragraphes ainsi que d’un listage des thèmes fréquents et originaux rencontré dans le
document source.
36 MyLink
Figure 26 : Diagramme de classe du ThemeGlobalSummaryManager
Le résumé graphique des paragraphes est basé sur les thèmes ayant le plus grand nombre de
redondances. Chaque paragraphe est représenté par un ParagraphButton basé sur le conteneur JPanel
et dont le MouseListener permet de mettre en évidence le paragraphe correspond dans la visionneuse
de documents lorsque l’utilisateur clique à l’intérieure du bouton. Avant d’ajouter les différents
ParagraphButton, leur couleur doit être évaluée.Grâce à la méthode getScore de la classe Paragraph, le
degré de similitude entre la liste des mots importants et le paragraphe peut être quantifié entre 0 et 1.
Ainsi, plus le paragraphe contient de mots situés dans la liste fournie en paramètre, plus le score sera
proche de 1.
37 Implémentation
public double getScore(ArrayList<Word> wordList) {
if (!wordList.isEmpty()) {
int counter = 0;
for (int i = 0; i < wordList.size(); i++) {
String wordString = wordList.get(i).getLabel();
for (int j = 0; j < this.paragraph.size(); j++) {
Word word = this.paragraph.get(j);
//If the word is in the paragraph...
if (wordString.equals(word.getLabel())) {
//Increments the counter
counter++;
}
}
}
//Returns the score
return (double) counter / (double) wordList.size();
} else {
return 0;
}
}
Extrait de code 9 : Méthode getScore
Grâce à ce score normalisé, il ne reste plus qu’à définir la couleur du bouton. Comme un paragraphe
regorgeant d’un grand nombre de thèmes doit posséder une couleur sombre et que les scores de
similitudes sont normalisés entre 0 et 1, il suffit de soustraire 1 au score puis de multiplier le résultat
obtenu par 255. En utilisant cette même valeur pour les trois paramètres RGB de la couleur, on obtient
un niveau de gris qui permet de juger de l’importance du paragraphe. Enfin, à chaque mis à jour du
résumé graphique via la méthode repaint, le rectangle de visibilité indiquant la portion du document
visible dans la visionneuse de documents doit être repeint via la méthode paintVisibleRectangle.
//Sets the color of the paragraph button
double paragraphScore = 1 - paragraph.getScore(wordList);
int rgbValue = (int) (paragraphScore * 255);
Color color = new Color(rgbValue, rgbValue, rgbValue);
Extrait de code 10 : Calcul de la couleur du ParagraphButton
Les listes de mots-clés ayant le plus grand nombre d’occurrences et le plus haut TF-IDF peuvent être
aisément retrouvées grâce à la méthode getWordList de la classe Document, puis affichées par le biais
des méthodes getMostRedundantWords et getMostOriginalWords dans leur JEditorPane respectif. Ces deux
dernières procédures permettent de créer une chaîne de caractère de type HTML contenant les
38 MyLink
échantillons de mots importants. La taille de la police utilisée pour le label du mot dépend de son
compteur ou de son score. Ces deux paramètres sont normalisés et les valeurs obtenues sont converties
en taille de police HTML. Si un mot du résumé global appartient aux thèmes favoris de l’utilisateur, alors
la couleur d’arrière-plan du label correspondra à celle du thème.
//Linear normalization
double sigma = (rank - minRank) / (maxRank - minRank);
int htmlSize = 0;
if (sigma < 0.2) {
htmlSize = 2;
} else if (sigma < 0.4) {
htmlSize = 3;
} else if (sigma < 0.6) {
htmlSize = 4;
} else if (sigma < 0.8) {
htmlSize = 5;
} else if (sigma < 1) {
htmlSize = 6;
} else {
htmlSize = 7;
}
Extrait de code 11 : Normalisation des tailles de police
5.6.7 ThemeDetailedSummaryManager
Le ThemeDetailedSummaryManager génère le résumé graphique détaillé du document externe ouvert
dans la visionneuse de document. L’affichage des thèmes de l’utilisateur se déroule en deux phases.
Dans la première, le rectangle de visibilité est dessiné. Celui-ci indique la portion du document qui est
affichée dans la visionneuse de document. Les informations nécessaires sont la longueur totale du
document, la hauteur de la partie visible dans la visionneuse et la position exacte de cette portion, en
pixel. Il suffit ensuite d’effectuer une remise à l’échelle de ces différentes valeurs afin d’afficher
correctement ce rectangle dans le panneau de résumé.
private void paintVisibleRectangle(Graphics2D g) {
//Does not paint the visible rectangle when the theme list is empty
if (getThemeList().size() == 0) {
return;
} else {
//Retrieves information about the scrollbar
int documentLength = themeManager.themeDocumentManager.getDocumentManager().getTotalDocumentLength();
int documentVisibleLength = themeManager.themeDocumentManager.getDocumentManager().getVisibleDocumentLength();
39 Implémentation
int documentPosition = themeManager.themeDocumentManager.getDocumentManager().getDocumentPosition();
//Sets the vertical position and the height of the visible rectangle
double visibleRectY = documentPosition * graphPanelHeight / documentLength + graphPanelY;
double visibleRectHeight = documentVisibleLength * graphPanelHeight / documentLength + 5;
//Draws the visible document rectangle
g.setColor(Color.WHITE);
g.fillRect(graphPanelX, (int) visibleRectY, graphPanelWidth, (int) visibleRectHeight);
g.setColor(new Color(127, 157, 185));
g.drawRect(graphPanelX, graphPanelY, graphPanelWidth, graphPanelHeight + 4);
}
}
Extrait de code 12 : Méthode paintVisibleRectangle
Dans la seconde phase d’affichage du panneau, les ThemeBars, barres de thèmes, sont créées.
Contrairement au rectangle de visibilité qui est véritablement dessiné en utilisant des primitives Java2D
telles que drawRect ou fillRect, les barres de thèmes sont des conteneurs Swing à part entière. Ceci
permet une gestion des évènements beaucoup plus aisée, dans la mesure où il suffit par exemple
d’attribuer un MouseListener au panneau afin d’y détecter les clics de souris.
Figure 27 : Interface graphique du ThemeDetailedSummaryManager
Tout d’abord, la liste de thèmes est rapatriée depuis le gestionnaire de fichiers XML en fonction des
différents paramètres de filtrages offerts à l’utilisateur, tels que le mode de tri ou le nombre maximum
de thèmes. Durant cette opération, les thèmes se trouvant dans le document voient leur liste de
positions mise à jour. Cette liste recense toutes les occurrences du mot-clé dans la chaîne de caractères
composant le document.
La largeur de la barre de thème est définie par son importance. Celle-ci dépend à la fois du score
attribué au thème par l’utilisateur et du nombre d’occurrences du mot-clé dans le document.
L’épaisseur de la barre est ensuite normalisée en tenant compte des deux paramètres précités.
40 MyLink
//Normalizes the width of the theme according to its rank and its occurrences in the document
double width = theme.getRank() * theme.getPositionList().size();
double sigma = 0.125 * (1 + width / (Math.sqrt(Math.pow(width, 1.5) + 500)));
Extrait de code 13 : Normalisation de la largeur des barres de thèmes
La formule choisie diffère légèrement de la méthode de normalisation standard de type
, afin d’exagérer la largeur maximale et minimale des barres. Selon que le thème se trouve ou non
dans la liste des thèmes sélectionnés du gestionnaire Windows Desktop Search, la couleur de la barre
sera identique à celle du thème ou grisée. Aussi, afin d’écrire le label du thème en biais, il est nécessaire
d’effectuer une rotation antihoraire du panneau de 30°, soit – .
//Rotates the theme summary panel for writing the theme label
AffineTransform originalAngle = g.getTransform();
AffineTransform rotationAngle = AffineTransform.getRotateInstance(
-Math.PI / 6, (int) (themePositionX - 5), graphPanelY);
g.transform(rotationAngle);
String themeLabel = theme.getLabel();
g.drawString(themeLabel, (int) (themePositionX), graphPanelY);
Extrait de code 14 : Rotation du panneau pour l'écriture du label des thèmes
Dès son instanciation, la ThemeBar place en son sein même les ThemeButtons correspondant aux
occurrences du mot-clé dans le document. À nouveau, une opération de mise à l’échelle est nécessaire
afin d’y placer correctement ces boutons. Un observateur d’événement de souris est placé sur ceux-ci
afin qu’un clic de souris déclenche immédiatement le scroll du document source à la position même du
mot-clé.
41 Implémentation
Figure 28 : Diagramme de classe du ThemeDetailedSummaryManager
5.6.8 ThemeWDSManager
Le ThemeWDSManager permet la sélection de thèmes servant à l’envoi de requêtes vers l’interface
Windows Desktop Search. La sélection des thèmes s’effectue soit en cliquant sur une barre de thème du
résumé graphique, soit en appuyant sur le bouton « Refresh » afin de remplacer la liste des thèmes
sélectionnés avec celle des thèmes présents dans le résumé graphique. Lorsque la case à cocher « Auto
Refresh » est activée, la liste des thèmes sélectionnés correspond en permanence à la liste des thèmes
affichés.
42 MyLink
Figure 29 : Diagramme de classe du ThemeWDSManager
Ce gestionnaire propose des méthodes permettant d’ajouter et de retirer un ou la totalité des thèmes
dans la liste des thèmes sélectionnée. Une interaction forte existe avec le ThemeWDSManager et le
ThemeDetailedSummaryManager, puisque l’ajout ou la suppression de thèmes dans le premier
provoque une actualisation du second afin de colorer correctement les barres de thèmes. En effet, un
thème ne se trouvant pas dans la liste des thèmes sélectionnée du ThemeWDSManager doit être grisé
dans le résumé graphique détaillé.
La méthode googleSearch est associée au bouton Google est permet d’effectuer une recherche sur le
moteur de recherche cité avec les thèmes présents dans la liste. Cette procédure récupère tout d’abord
l’ensemble des éléments présents dans la liste afin de construire l’URL de recherche Google. Grâce à
l’instruction Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler " + query), le
navigateur par défaut du système se lance avec l’URL précédemment créée.
private void googleSearch() {
//Retrieves the elements in the list of selected themes
ArrayList<String> elements = new ArrayList<String>();
for (int i = 0; i < this.themeWDSListModel.getSize(); i++) {
elements.add(this.themeWDSListModel.getElementAt(i).toString());
}
if (!elements.isEmpty()) {
//Creates the google query
String query = "http://www.google.com/search?&rls=en&q=";
43 Implémentation
for (int i = 0; i < elements.size(); i++) {
query += elements.get(i);
query += "+";
}
//Launches the default browser with the google query
try {
Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler " + query);
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
Extrait de code 15 : Méthode googleSearch
Afin de remplir la table de fichiers associés aux thèmes sélectionnés, la méthode searchFiles est
utilisée. Elle fait appelle à l’interface Windows Desktop Search, WDSInterface, pour construire la requête
à partir de la liste des thèmes sélectionnées et récupérer les résultats renvoyés par l’objet COM associé
à Windows Desktop Search.
Figure 30 : Interface graphique du ThemeWDSManager
Autre méthode importante, repaint permet d’actualiser la wdsThemeList, de rafraîchir la liste des thèmes
sélectionnés, de mettre en évidence ceux-ci dans la visionneuse de document et de mettre à jour la
table des fichiers annexes.
44 MyLink
5.7 WDSInterface Le rôle de l’interface Windows Desktop Search est de fournir un pont entre l’application Java et l’objet
Windows COM dédié à Windows Desktop Search. WDSInterface est une classe outil, c’est-à-dire qu’elle
n’est pas instanciable en raison de son constructeur privé. Ainsi, ses méthodes sont déclarées sous la
forme public static.
Figure 31 : Diagramme de classe de WDSInterface
Deux méthodes sont offertes par cette classe. La première, createQuery, permet de construire une
requête WDS à partir d’une liste de thèmes. La seconde, getResultsFromWDS, permet d’envoyer une
requête vers Windows Desktop Search et d’en obtenir les résultats. Il s’agit précisément d’une liste de
chaîne de caractères que l’on peut aisément placer dans une liste ou une table. Cette dernière méthode
utilise les différentes classes offertes par l’API JACOB qui permet de communiquer avec les objets COM
de Windows. Enfin, le code source de ce module est basé sur une version simplifiée du travail de Florian
Evequoz.
45 Évaluation et améliorations
6 Évaluation et améliorations MyLink est encore à l’état de prototype et un grand nombre d’améliorations seraient nécessaires à son
perfectionnement. Après avoir effectué plusieurs sessions de tests avec des utilisateurs de divers
horizons, plusieurs points essentiels ont pu être mis en évidence.
6.1 Visionneuse de documents Tout d’abord, l’intégration d’une visionneuse de documents compatibles avec des formats tels que le
PDF permettrait d’augmenter les possibilités de visualisation de MyLink. En effet, le logiciel n’accepte
actuellement que des fichiers HTML simplistes. Aussi, son support du format RTF reste anecdotique
lorsqu’il s’agit d’ouvrir de tels documents sauvegardés à partir d’un traitement de textes moderne et
intégrant une mise en page complexe. De plus, une visionneuse polyvalente permettrait l’ouverture des
documents annexes dans MyLink même, et non dans un programme externe. Néanmoins, une telle
visionneuse devra offrir un haut niveau d’interaction, afin de permettre la création d’un résumé
graphique précis.
Dans un premier temps, l’intégration du JWebPane de JavaFX permettra d’améliorer fortement la
fidélité de rendu des pages HTML visionnées. De cette manière, MyLink pourra devenir un navigateur
Web à part entière, toutefois il faudrait améliorer l’expérience utilisateur via l’intégration d’une barre
d’outil dédié à la navigation Web. Naturellement, un tel ajout ouvrirait de nouveaux horizons en matière
d’analyse du comportement de l’utilisateur lors de ces visites sur Internet. Par exemple, si l’utilisateur
passe de nombreuses minutes sur une page Web particulière, il serait intéressant d’en extraire
automatiquement les thèmes importants et de les ajouter à une liste temporaire de thèmes favoris, tout
en redirigeant l’utilisateur vers des pages Web au contenu similaire.
Aussi, les capacités d’édition de la visionneuse de documents sont extrêmement réduites. L’ajout d’un
éditeur de texte WYSIWYG HTML par exemple permettrait la création de document à la mise en page
plus évoluée et pourrait servir de traitement de texte redirigeant l’utilisateur vers les fichiers annexes en
rapport avec le document rédigé.
6.2 Gestion des thèmes Tout d’abord, la possibilité de créer plusieurs profils de recherche permettrait une utilisation
multiutilisateur du logiciel. Aussi, un profil de recherche pourrait être dédié à chaque pôle d’intérêt de
l’utilisateur. Ainsi, un profil serait dédié à un projet spécifique, tandis qu’un autre serait spécialement
conçu pour contenir des thèmes en rapport avec ses hobbys.
De plus, l’on pourrait imaginer une option de synchronisation des thèmes en ligne, à la manière de
certains navigateurs Web proposant de sauvegarder ses favoris en ligne, tels qu’Opera1 ou Avant
Browser2. À nouveau, l’intégration d’une telle option ouvrirait une nouvelle dimension et cela
1 Opera, navigateur Web respectueux des standards W3C, www.opera.com 2 Avant Browser, navigateur Web basé sur le moteur d’Internet Explorer, www.avantbrowser.com
46 MyLink
permettrait d’analyser les thèmes préférés des utilisateurs, de mettre en correspondance des aux
centres d’intérêt proches à la manière de certains sites d’écoutes musicales tels que Last.FM ou
Deezer.com.
Figure 32 : Page d'accueil de Last.fm
6.3 Résumé graphique Il serait intéressant de réunir le résumé graphique global et personnel dans un seul et même panneau.
Toutefois, une telle modification nécessiterait probablement une remise à jour complète des différents
concepts utilisés jusqu’alors, notamment en matière d’interface graphique. Aussi faudrait-il éviter une
concentration trop élevée d’informations qui n’aurait pour effet que d’effrayer l’utilisateur.
6.4 Multithreading Un grand nombre d’opérations est effectué lors de l’entrée de texte dans la visionneuse de document
en mode édition. Ainsi, lorsque le document comporte un grand nombre de caractères, l’analyse en
direct du document ne permet pas de garantir une expérience parfaitement fluide pour l’utilisateur. De
cette façon, une profonde modification du logiciel à base de threads permettrait d’améliorer la
réactivité du logiciel dans certaines situations.
47 Évaluation et améliorations
6.5 Bugs connus
6.5.1 Ouverture de documents
Pour une raison inconnue, le programme peut, dans de rares cas, freezer lors de l’ouverture de
documents HTML ou RTF à la mise en page complexe. Ce problème pourrait être dû à une mauvaise
gestion des événements relatifs à l’actualisation des panneaux en cas de modification des panneaux ou
à l’implémentation même du JEditorPane qui refuse d’afficher certains documents qu’il considère
comme malformés.
6.5.2 Saturation de l’interface Windows Desktop Search
Lors d’un très grand nombre de requêtes simultanées sur l’interface Windows Desktop Search, il arrive
parfois qu’elle refuse soudainement de renvoyer des résultats complets. Généralement, seul le score est
indiqué, les autres champs restant irrémédiablement vides.
Un redémarrage du MyLink permet dans tous les cas de régler le problème. S’agissant d’un objet
Windows COM, le diagnostic d’un tel problème peut être complexe, puisqu’aucun message d’erreur
n’est affiché par la machine virtuelle Java au runtime.
Figure 33 : Saturation de l'interface Windows Desktop Search
48 MyLink
7 Conclusion Grâce à MyLink, l’utilisateur peut améliorer sa productivité lors de la lecture de ses documents. En effet,
le programme affiche des résumés tant textuels que graphiques. En effet, une synthèse liste les mots-
clés les plus fréquents et originaux. Aussi, deux résumés graphiques mettent respectivement en
évidence les paragraphes importants et la position exacte des thèmes favoris de l’utilisateur. De cette
manière, MyLink peut faciliter la lecture de documents externes inconnus en résumant leurs thèmes
principaux et en mettant en évidence leurs parties importantes.
De plus, un lien est créé entre le document externe et les fichiers locaux de l’utilisateur grâce à
l’intégration de l’outil de recherche Windows Desktop Search. En associant divers mots-clés, il est facile
de retrouver des documents relatifs à des intérêts particuliers. L’utilisateur peut facilement en ajouter à
sa liste de thèmes favoris grâce à un haut niveau d’interaction avec la visionneuse de document.
Bien qu’à l’état de prototype, MyLink fournit des résultats encourageants lorsqu’il s’agit d’identifier les
passages importants du document basés sur un profil de recherche relatif à l’utilisateur. Néanmoins,
l’intégration d’une visionneuse de document autorisant l’ouverture d’un large éventail de documents
avec une qualité de rendu optimal ainsi que l’amélioration des capacités d’éditions du document est un
passage obligé en cas de prolongation de ce projet. De plus, l’unification des résumés graphiques et une
plus grande automatisation des systèmes de recherches permettraient d’extraire encore plus facilement
les fichiers associés au document source visualisé dans la visionneuse de documents.
49 Annexe
8 Annexe
8.1 Configuration minimale MyLink nécessite un PC Windows équipé de la machine virtuelle Java 1.5 ou supérieur. Sur un PC avec
Windows 2000 et XP, l’installation de Windows Desktop Search 3 ou supérieure est requise. Microsoft
Vista ne nécessite pas l’installation d’un tel outil de recherche, car WDS est déjà intégré dans ce système
d’exploitation en tant que système d’indexation standard. Afin d’assurer un affichage optimal nécessaire
à la visualisation du document source et de ses résumés graphiques, une résolution d’au moins
1024*768 est recommandée.
8.2 Installation Pour lancer le logiciel, il suffit de double cliquer sur l’exécutable MyLink.jar placé dans le répertoire dist.
Les sources de MyLink du dossier src peuvent être intégrées dans tout projet NetBeans ou Ecplipse. Il
suffit de veiller à ce que les librairies placées dans le dossier lib soient intégrées au classpath. De plus, la
librairie Jacob.dll doit être placé à la racine du projet afin d’assurer la bonne communication entre
MyLink et Windows Desktop Search.