** CE TP EST EFFECTUE SUR 2 SEANCES DE TP (9 mars 2022 et 22 mars 2022) **

1. But du TP

Les informations sur le langage python (version 2.7) vous ont été fournies dans le tp précédent. Dans ce TP, vous pouvez utiliser python 2.7 ou 3.7 : faites le choix au début et nanchangez plus ensuite.

Nous allons manipuler un système de recherche d'information développé en deux versions de python: 2.7 et 3.7. Si vous utilisez python 2.7, utiliser la commande python, et avec python 3.7 utiliser les commandes python3 ou python3.7.

On vous fourni contient 3 programmes : pour python 2.7 et 3.7 l'indexation est la même avec: (indexer_gendico_miashs.py, indexer_genindex_miashs.py. Pour la recherche, si vous utilisez python 2.7 moteurderecherche_miashs.py) et avec python 3.7 moteurderecherche_miashs37.py). Ces programmes, quelque soit la version de python, utilisent un fichier d'anti-dictionnaire common_words.txt, fourni, qui contient les 200 mots les plus fréquents du corpus.

Le système que vous aller utiliser est composé de plusieurs programmes :

  1. Le programme indexer_gendico_miashs.py établit le vocabulaire d'un corpus de documents. Il utilise en entrée un nom de répertoire (option -corpus), un fichier d'anti-dictionnaire (option -antidico) et calcule l'ensemble des termes présents, avec le df et idf (avec log10(ND/df)) en les sauvegardant via l'option -vocab .
  2. Le programme indexer_genindex_miashs.py génère le fichier inverse des documents. Il utilise les documents (option -corpus), le vocabulaire (-vocab) obtenu à l'étape précédente, pour génerer le fichier inverse sous forme de fichier json (option -index), ainsi que le fichier json qui stocke les normes de chaque document (option -normdocs).
  3. Le programme moteurderecherche_miashs.py (ou bien moteurderecherche_miashs37.py) permet de traiter les requêtes. Il charge le vocabulaire (-vocab), le fichier inverse (-index), le fichier d'anti-dictionnaire (-antidico), le normes des document (-normdocs), puis traite une requête d'un utilisateur sur ce corpus en renvoyant les 10 premières réponses.

2. Déroulement

0. Etape préliminaire : CHOIX DE VERSION DE PYTHON et INSTALLATION LIBRAIRIE PYTHON NLTK

Dans cette partie, vous devez définir quelle version de python vous utilisez (version 2.x ou 3.x et au dessus), et vous devez installer la librarie python nltk (Natural Language ToolKit) qui permet de faire la troncature des mots par l'algorithme de Porter décrit en cours.

Si vous savez quelle version de python vous utilisez (si vous êtes sur votre machine personnelle par exemple), et si vous savez installer une librarie python avec pip (ou pip3) alors vous n'avez qu'à installer la librairie python avec pip install nltk ou pip3 install nltk, et vous pouvez passer à la suite.

Python 2.7.x.

Si vous utilisez python 2.7.x. Vérifiez que vous avez la bonne version en tapant : python –version“ et vérifiez que vous avez bien 2.7.x. Vérifiez que la commande pip existe pour python 2.x (en tapant pip –version). Si cette commande fait une erreur alors faites la suite, sinon faite pip install nltk.

Afin de pouvoir utiliser des librairies spécifiques nécessaires au code qui vous est fourni, vous devez installer le logiciel adéquat en tapant :

wget https://bootstrap.pypa.io/get-pip.py -O /tmp/get-pip.py
python /tmp/get-pip.py --user

Uniquement si le wget ne fonctionne pas, rapatriez : get-pip.py avant de lancer python /tmp/get-pip.py –user .

Les programmes du système de recheche d'information fourni ne fonctionnent que si vous avez installé la librarie python nltk, que vous installez dans un terminal en lançant la commande

~/.local/bin/pip install --user nltk

Python 3.7.x.

Si vous utilisez python 3.7.x. Vérifiez que vous avez la bonne version en tapant : python –version” (ou python3, ou python 3.7) et vérifiez que vous avez bien 3.7.x. ou ultérieur.

Vérifiez que la commande pip3 existe pour python 3.x (en tapant pip3 –version). Si cette commande fait une erreur alors faites la suite, sinon faite pip3 install nltk.

Afin de pouvoir utiliser des librairies spécifiques nécessaires au code qui vous est fourni, vous devez installer le logiciel adéquat en tapant :

wget https://bootstrap.pypa.io/get-pip.py -O /tmp/get-pip.py
python /tmp/get-pip.py --user

Uniquement si le wget ne fonctionne pas, rapatriez : get-pip.py avant de lancer python /tmp/get-pip.py –user .

Les programmes du système de recheche d'information fourni ne fonctionnent que si vous avez installé la librarie python nltk, que vous installez dans un terminal en lançant la commande

~/.local/bin/pip3.7 install --user nltk

Si pb avec pip3.7, regarder si pip3.8 ….

Une fois ceci effectué, vous pouvez continuer.

Travail attendu

Construction du corpus de documents.

Créer un répertoire, par exemple “corpus_tp2” qui va contenir les documents du corpus.

Dans ce répetoire, vous créez 3 documents en anglais (doc-1, doc-2 et doc-3 qui contiennent respectivement :

  1. We see an opacity on the left part of the right lung, clearly visible.
  2. A large tumor on the anteroposterior cerebral cortex is visible, close an opacity on the cortex.
  3. An opacity, probably tumoral, is present on the anterior of the calcalneum.

Le système de recherche d'information fourni.

Le petit système fourni est composé de 3 programmes :

2 utilisés lors de l'indexation :
  1. indexer_gendico_miashs.py (indexer_gendico_miashs37.py): génère le vocabulaire à partir du corpus de documents et du fichier d'anti-dictionnaire, d'un fichier d'antidictionnaire (taper : python indexer_gendico_miashs.py -h , pour connaître son usage);
  2. indexer_genindex_miashs.py (indexer_genindex_miashs37.py): génère le fichier inverse, ainsi que le fichier des normes des documents à partir du corpus de documents et du fichier d'anti-dictionnaire, et du vocabulaire (taper : python indexer_genindex_miashs.py -h , pour connaître son usage).
1 utilisé lors du traitement de requête :
  1. moteurderecherche_miashs.py (moteurderecherche_miashs37.py): traite une requête par cosinus vectoriel à partir du fichier inverse et du fichier d'anti-dictionnaire, d'un fichier de norme des documents et du vocabulaire (taper : python moteurderecherche_miashs.py -h , pour connaître son usage).

Le fichier d'anti-dictionnaire à utiliser est common_words.txt (cf. ci-dessus partie 1).

A. Utilisation du système fourni (première séance)

Cette partie vous fait utiliser le système, sans le modifier.

1. La construction du vocabulaire

1. Lancez la génération du dictionnaire en utilisant le programme indexer_generdico_miashs.py (indexer_generdico_miashs37.py) avec les bons paramètres.

Ce programme génère le fichier de vocabulaire avec, pour chaque ligne :

mot  df  idf

qui donne pour chaque mot du vocabulaire son df, et son idf (=ln(ND/df), comme vu en cours, avec log népérien)

2. D'après le fichier vocabulaire généré, est-ce que le traitement passe les mots en minuscules ? Changez un mot de l'un des documents et relancez la commande pour vérifier.

3. Est-ce que le traitement utilise de la troncature ? Remplacez le mot “cerebral “du document doc-2 par “cerebrals” pour vérifier et relancer la commande.

4. Expliquer pourquoi le mot “opacity” n'est-il pas dans le fichier vocabulaire généré.

5. Pour vérifier votre supposition, enlevez le mot “opacity” du document doc-3 document et relancer la génération du vocabulaire. Que constatez-vous ? Remettez le mot opacity dans le document doc-3 avant de continuer.

6. Faire un calcul de df et d'idf pour l'un des termes, afin de vérfier que vous êtes d'accord avec les valeurs présentées.

2. La construction du fichier inverse

1. Lancez le programme indexer_genindex_MIASHS.py (indexer_genindex_MIASHS37.py) avec les bons paramètres. Ce programme crée le fichier inverse (avec les poids tf.idf tes termes pour les documents) en utilisant le format json (fichier texte).

Le format json représente n'importe quelle structure, par exemple :

{"anterior": [["doc-3", 1.09861228867]], "anteroposterior": [["doc-2", 1.09861228867]]}
représente un dictionnaire (cf. tp précédent) avec 2 entrées (les clés) : "anterior" et "anteroposterior". 
Pour l'entrée "anterior", une liste composée d'un seul couple ["doc-3", 1.09861228867], correspondant au poids tf.idf 
de anterior dans le document doc-1.

2. Regardez le fichier inverse qui est généré sur vos trois documents. Vérifiez que tous les termes du vocabulaire apparaissent.

3. Vérifiez les valeurs stockées pour le terme “cortex” dans le document doc-2 : refaites-le calcul tf.idf .

3. Le traitement d'une requête

1. Lancez le programme de traitement de requêtes moteurderecherche_miashs.py avec les bons paramètres.

Ce programme s'exécute en affichant par exemple, si on pose une requête avec un seul terme “left” :

***************** chargement normes de documents
***************** chargement fichier inverse
***************** chargement antidico
---------------------------------------
Bienvenue dans le moteur de recherche !
---------------------------------------
Que cherchez-vous ? left
-- Requete avec tf seul avant recherche si terme dans vocabulaire :
{u'left': 1}
-- Requete avec tf.idf avant recherche si terme dans vocabulaire :
{u'left': 1.09861228867}
-- Requete avec tf.idf normalise'e pour terme dans vocabulaire :
{u'left': 1.0}
-- Details du calcul de la correspondance avec le fichier inverse : 
left
Ligne du fichier inverse trate'e :
[[u'doc-1', 1.09861228867]]
*** Resultat final ***
(u'doc-1', ' (', 0.4916981343104934, ')')
***

Ce programme stocke le vecteur requête normalisé pour effectuer le calcul de cosinus.

2. Vérifiez que le programme gère correctement les mots en majuscule (en les transformant en minuscules) et les mots de l'anti-dictionnaire et les éliminant de la requête).

3. Posez la requête “left lung tumor heart” , et faire le calcul du cosinus pour vérifier que le résultat est bien celui du calcul de cosinus.

B. Modification du système fourni (deuxième séance)

Cette partie vous fait modifier le système, pour étudier l'impact des éléments. gardez bien les programmes originaux car vous allez vous en servir pour comparaison

1. La construction du vocabulaire

Dans cette partie, vous utiliserez les mêmes fichiers documents que précédemment.

1. Vous devez modifier le code du programme d'indexation et de requêtes, afin qu'il n'applique pas l'anti-dictionnaire. Ce traitement est réalisé par la fonction

filtreMotsOutils

de la génération de vocabulaire gendico (utilisée par les autres programmes).

2. Quel est l'impact de ce traitement sur la taille du vocabulaire, et pourquoi ?

3. Ensuite, vous allez modifier le code du programme d'indexation et de requêtes, afin qu'il ne tronque pas les termes, en remettant l'utilisation de l'anti-dictionnaire. Ce traitement est réalisé par la fonction

mot2racine

dans gendico.

4. Quel est l'impact de ce traitement sur la taille du vocabulaire, et pourquoi ?

2. Le traitement des requêtes

On va se baser sur le système que vous venez de modifier, sans anti-dictionnaire et sans troncature des termes.

1. Refaire le même traitement que précédemment sur les calculs en écrivant une requête avec au moins 2 termes dont au moins l'un des deux est affecté par la troncature.

2. Comparer le résultat de cette requête sur le sysème modifié et, pour la même requête, sur le système original fourni.

Travail à rendre (optionnel)

optionnel : non-noté

Un court compte-rendu avec le noms du ou des auteurs (entre 2 et 4 pages) contenant :

  • les réponses aux question posées sur les systèmes original et modifié;
  • quelques commentaires sur ce que vous retirez de ce TP.

Envoyer le document, avant le 30 mars 23h59, au format pdf à Philippe.Mulhem@imag.fr avec le titre : ”[MIASHS-TP2] Nom1 Nom2” avec vos noms si vous être 2 auteurs, et “[MIASHS-TP2] Nom” avec votre nom si vous êtes un seul auteur.

utilisation_sri.txt · Last modified: 2022/03/09 12:52 by mulhem
 
Except where otherwise noted, content on this wiki is licensed under the following license: CC Attribution-Share Alike 4.0 International
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki