Université De Bretagne Du Sud Ecole Nationale Supérieure D'ingénieurs De Bretagne-Sud

Architecture des Systèmes de recherche d'information (ENSIBS3-ARI)

Projet :RSS-Intelligence
Rapport Final

Réalisé par  Adnane AL ECHCHEIKH EL ALOUI

Encadré par  Pierre-François Marteau

Année Universitaire 2012/2013
1|Page

Sommaire
1. 2. 3. 4. 5. 6. 7. 8. Introduction ..................................................................................................................................................................................................................... 3 Analyse de Flux RSS : ........................................................................................................................................................................................................ 4 Un crawler/reader de flux RSS .......................................................................................................................................................................................... 5 Stockage des données ...................................................................................................................................................................................................... 6 Un module d’analyse des flux ........................................................................................................................................................................................... 8 L'indexation des flux RSS .................................................................................................................................................................................................. 9 Module moteur de recherche......................................................................................................................................................................................... 13 Index ............................................................................................................................................................................................................................ 16

2|Page

1. Introduction
L’objectif du projet est de réaliser un système de veille sur internet qui exploite des flux RSS et intégrer les étapes suivantes :
 Un crawler/reader de flux RSS qui exploite et collecte les flux RSS à distance sur Internet.  Un module d’analyse des flux qui contient des fonctions de : o Stemmer (la racinisation des mots) . o L'anti-dictionnaire : utilisé pour supprimer les mots « vides ».  L'indexation des flux RSS récupérées consiste à extraire les mots considérés comme significatifs du corpus à explorer. Les mots extraits sont enregistrés dans une base de données sous format d’un dictionnaire inverse ce qui permet de retrouver rapidement les mots .  La recherche en utilisant une technique qui permet de pondérer une mesure de cosinus en utilisant un indice de notoriété des flux. Schéma global

3|Page

2. Analyse de Flux RSS :
Un flux RSS est un flux d’information qui s’appuie sur un format de données basé sur XML qui contiendra les métadonnées <channel> qui contient une liste
des items, et chaque item se compose de plusieurs éléments <title> <description> <link>...

Traduction UML

4|Page

3. Un crawler/reader de flux RSS
Dans cette étape on va s’appuyer sur la librairie ROME 1.0 * (ROME est un ensemble Utilitaires de flux RSS et Atom pour Java qui est open source) pour lire le flux RSS .

On utilisant Interface SyndEntry on peut traiter les entrées de SyndFeedImpl RSS , par exemple pour récupérer la description :

*

la librairie ROME 1.0 https://rometools.jira.com/wiki/display/ROME/ROME+1.0+Release

5|Page

4. Stockage des données
Puisque l’ajout de nouvelles Flux RSS est une opération fréquente, une structure type fichier de « log » peut être avantageuse , mais pour éviter le parcoure de fichier log à chaque mise à jour ,on va passer par un hashtable (pointage rapide et la gestion des doublons ).

Cette étape consiste à stocker localement les dépêches RSS dans des fichiers LOG et à l’indexation incrémentale des éléments RSS ,et à chaque stockage on vérifie que le dépêche n’existe pas dans fichier log via l’utilisation d’un hashtable . le but c’est d’accélérer la mise à jour. Ce fichier log « fichier_log.log » contient tous les informations (<title> <description> <link>...) pour chaque élément de flux RSS et aussi un identificateur unique pour pointer rapidement sur les dépêches demandé et aussi pour éviter les redoublants. identificateur unique est calculer par une fonction de hachage MD5 .,qui génère une clé en se basant sur les informations (<title> <description> <link>...) 6|Page

Traduction UML

La fonction ecrireFichier() de la class Writer_log permet de stocker localement les dépêches RSS dans des fichiers LOG Format de fichier log :

7|Page

5. Un module d’analyse des flux
Un module d’analyse des flux qui contient des fonctions de :  Stemmer (la racinisation des mots) . Il cherche à rassembler les différentes variantes flexionnelle et dérivationnelle d’un mot autour d’un stemmer.

La fonction Stemmerx() pend en paramètre une liste de mots et retourne une liste de mots stemmé  L'anti-dictionnaire : utilisé pour supprimer les mots « vides ». La fonction nostopwords_sentence() enlève tous les mots vides

la liste des stopwords est stockée dans un hashtable ,ce qui permet la vérification rapide des mots.

8|Page

6. L'indexation des flux RSS
Pour le modèle d’indexation on a choisi une représentation vectorielle – listes inverse car il permet une recherche rapide sur les termes mais aussi pour chaque terme, on obtient une liste d’enregistrement contenant un PID, fréquence des termes et les positions des termes dans le document. La première étape consiste à stocker la liste des mots dans un dictionnaire et pour chaque item une adresse unique qui point vers la liste inverse, cette liste est présentée sous format d’une table de kyotocabinet de deux champs le did et une liste des items sérialisé

9|Page

Le dictionnaire c’est un hashtable qui contient tous les mots avec un identifiant et sa fréquence et son adresse dans la liste inverse, ces trois dernier sont présenter sous format d’un objet « Info_mots »

A la fin de chaque mise à jour le dictionnaire est sérialisé dans le fichier « dictionnaire_mots.ser » avec la methode

Ce qui permet de garde le contenu du dictionnaire à la fin de l’exécution d’indexation. Traduction UML dictionnaire liste inverse

10 | P a g e

La liste inverse va être stockée sous la base de données «KyotoCabinet» , KyotoCabinet est rapide et capable de gérer un haut niveau de concurrence , La table de KyotoCabinet « caskets.kch » contient deux lignes de type string donc il est nécessaire de sérialiser les listes des items Cette sérialisation est basee sur un mécanisme binaire « la librairie Base64Coder »* µDonc pour chaque did (PID) il y a une liste de items et chaque items contient Un id_item ,id_flux, nombre_occurence ,Arraylist_position et l’adresse dans le fichier log . Fonction pour stocker dans la base KyotoCabinet

Fonction pour lire dans la base KyotoCabinet

* Base64Coder - un open-source Base64 codeur / décodeur: http://www.source-code.biz/base64coder/java/ 11 | P a g e

Fonction pour convertir un objet a un string en utilisant ByteArray

12 | P a g e

7. Module moteur de recherche
La recherche et la classification est réalisé via le modèle vectoriel, c’est une méthode algébrique de représentation d'un document. La similarité cosinus (ou mesure cosinus) permet de calculer la similarité entre deux vecteurs à dimensions en déterminant l'angle entre eux. Donc cette étape du projet consiste à l’implémentation de ce modèle vectoriel en calculant la similarité.

i 1 Pour évaluer l'importance d'un terme contenu dans une dépêche on calcule Le TF-IDF

  d d sim(d j , d k )  j  k  d j dk

 w w  w 
n i 1 i, j n 2 i, j

i ,k

wi2,k i 1

n

f(i,j) = freq(i,j) / max(freq(l,j)) c’est le nombre d’occurance de i dans j diviser sur le max nombre d’occurance dans j i : un terme , j :un dépêche. idf(i) = log (N/ni) c’est lelog du nombre total des dépêches diviser sur le nombre dépêches contient le terme i

wij = f(i,j) * log(N/ni)

13 | P a g e

Pour les termes de la requête on va utiliser la suggestion du cours (page 244)

wiq = (0.5 + [0.5 * freq(i,q) / max(freq(l,q)]) * log(N/ni)

Pour calculer la similarité des dépêches il est important de fusionner les listes inverses des termes d’une requête

Ma liste fusionnée est sous le format suivant

14 | P a g e

Calcule de la similarité en parcourant ma liste fusionnée

sim(d j , d k ) 

 
n

n

i 1

wi , j wi ,k

w2 i 1 i , j

n

i 1

wi2,k

15 | P a g e

8. Index Traduction UML

16 | P a g e

Sign up to vote on this title
UsefulNot useful