** CE TP NOTE EST EFFECTUE SUR 3 SEMAINES
(11 novembre 2024 et 2 décembre 2024) **
1. But du TP NOTE
Dans ce TP noté, vous pouvez u3liser python 3.7 ou ultérieur : faites le choix au début et ne changez plus
ensuite.
Nous allons manipuler un système de recherche d'informa3on développé en python 3.7.
On vous fourni 3 programmes : pour python 3.7 ou ultérieur, l'indexa3on est la même:
(indexer_gendico_miashs.py, indexer_genindex_miashs.py.
Pour la recherche, moteurderecherche_miashs37.py.
Ces programmes, quelque soit la version de python, u3lisent un fichier d'an3-
dic3onnaire common_words.txt, fourni, qui con3ent les 200 mots les plus fréquents du corpus.
Le système que vous aller u3liser est composé de plusieurs programmes :
1. Le programme indexer_gendico_miashs.py établit le vocabulaire d'un corpus de documents. Il u3lise en
entrée un nom de répertoire (op3on -corpus), un fichier d'an3-dic3onnaire (op3on -an3dico) et calcule
l'ensemble des termes présents, avec le df et idf (avec log10(ND/df)) en les sauvegardant via l'op3on -vocab
2. Le programme indexer_genindex_miashs.py génère le fichier inverse des documents. Il u3lise les
documents (op3on -corpus), le vocabulaire (-vocab) obtenu à l'étape précédente, pour génerer le fichier
inverse sous forme de fichier json (op3on -index), ainsi que le fichier json qui stocke les normes de chaque
document (op3on -normdocs).
3. Le programme moteurderecherche_miashs37.py permet de traiter les requêtes. Il charge le vocabulaire (-
vocab), le fichier inverse (-index), le fichier d'an3-dic3onnaire (-an3dico), le normes des document (-
normdocs), puis traite une requête d'un u3lisateur 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 ceXe par3e, vous devez définir quelle version de python vous u3lisez (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 u3lisez 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 3.7.x. ou ultérieur
Si vous u3lisez python 3.7.x ou ultérieur. Vérifiez que vous avez la bonne version en tapant : python –version”
et vérifiez que vous avez bien 3.7.x. ou ultérieur.
Vérifiez que la commande pip3 existe pour python 3.x ou ultérieur (en tapant pip3 –version). Si ceXe
commande fait une erreur alors faites la suite, sinon faite pip3 install nltk.
Afin de pouvoir u3liser des librairies spécifiques nécessaires au code qui vous est fourni, vous devez installer
le logiciel adéquat en tapant :
wget hXps://bootstrap.pypa.io/get-pip.py -O /tmp/get-pip.py
python /tmp/get-pip.py --user
Uniquement si le wget ne foncRonne pas, rapatriez : get-pip.py avant de lancer python /tmp/get-pip.py –
user .
Les programmes du système de recheche d'informa3on fourni ne fonc3onnent 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 conRnuer.
1
Travail aEendu
A. ConstrucRon du corpus de documents.
Créer un répertoire, “corpus_tpnoté” 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 con3ennent respec3vement
:
1. We see an opacity on the lee 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.
B. Le système de recherche d'informaRon fourni.
Le pe3t système fourni est composé de 3 programmes :
2 uRlisés lors de l'indexaRon :
1. (indexer_gendico_miashs37.py): génère le vocabulaire à par3r du corpus de documents et du fichier
d'an3-dic3onnaire, d'un fichier d'an3dic3onnaire (taper : python indexer_gendico_miashs.py -h , pour
connaître son usage);
2. (indexer_genindex_miashs37.py): génère le fichier inverse, ainsi que le fichier des normes des
documents à par3r du corpus de documents et du fichier d'an3-dic3onnaire, et du vocabulaire (taper :
python indexer_genindex_miashs.py -h , pour connaître son usage).
1 uRlisé lors du traitement de requête :
1. (moteurderecherche_miashs37.py): traite une requête par cosinus vectoriel à par3r du fichier
inverse et du fichier d'an3-dic3onnaire, d'un fichier de norme des documents et du vocabulaire (taper :
python moteurderecherche_miashs.py -h , pour connaître son usage).
Le fichier d'an3-dic3onnaire à u3liser est common_words.txt (cf. ci-dessus par3e 1).
C. URlisaRon du système fourni
CeXe par3e vous fait u3liser le système, sans le modifier.
1. La construcRon du vocabulaire
1. Lancez la généra3on du dic3onnaire en u3lisant le programme (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), 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 u3lise 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 supposi3on, enlevez le mot “opacity” du document doc-3 document et relancer la
généra3on du vocabulaire. Que constatez-vous ? RemeXez le mot opacity dans le document doc-3 avant de
con3nuer.
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 construcRon du fichier inverse
1. Lancez le programme (indexer_genindex_MIASHS37.py) avec les bons paramètres. Ce programme crée le
fichier inverse (avec les poids s.idf tes termes pour les documents) en u3lisant 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 dic3onnaire (cf. tp précédent) avec 2 entrées (les clés) : "anterior" et "anteroposterior".
2
Pour l'entrée "anterior", une liste composée d'un seul couple ["doc-3", 1.09861228867], correspondant au
poids s.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 s.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 “lee” :
***************** chargement normes de documents
***************** chargement fichier inverse
***************** chargement an3dico
---------------------------------------
Bienvenue dans le moteur de recherche !
---------------------------------------
Que cherchez-vous ? lee
-- Requete avec s seul avant recherche si terme dans vocabulaire :
{u'lee': 1}
-- Requete avec s.idf avant recherche si terme dans vocabulaire :
{u'lee': 1.09861228867}
-- Requete avec s.idf normalise'e pour terme dans vocabulaire :
{u'lee': 1.0}
-- Details du calcul de la correspondance avec le fichier inverse :
lee
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'an3-dic3onnaire et les éliminant de la requête).
3. Posez la requête “lee lung tumor heart” , et faire le calcul du cosinus pour vérifier que le résultat est bien
celui du calcul de cosinus.
D. ModificaRon du système fourni (deuxième séance)
CeXe par3e 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 construcRon du vocabulaire
Dans ceXe par3e, vous u3liserez les mêmes fichiers documents que précédemment.
1. Vous devez modifier le code du programme d'indexa3on et de requêtes, afin qu'il n'applique pas l'anR-
dicRonnaire. Ce traitement est réalisé par la fonc3on filtreMotsOu3ls de la généra3on de vocabulaire gendico
(u3lisé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'indexa3on et de requêtes, afin qu'il ne tronque pas
les termes, en remeXant l'u3lisa3on de l'an3-dic3onnaire. Ce traitement est réalisé par la fonc3on
mot2racine dans gendico.
4. Quel est l'impact de ce traitement sur la taille du vocabulaire, et pourquoi ?
3
Travail à rendre : noté
Un compte-rendu avec le noms du ou des auteurs (entre 3 et 4 pages) contenant :
§ les réponses aux ques3on posées sur les systèmes original et modifié;
§ quelques commentaires sur ce que vous re3rez de ce TP.
SoumeXez-le, avant le 01 décembre 23h59, au format pdf avec le 3tre : ”[N°groupe-Nom1_ Nom2” avec vos
noms si vous être 2 ou 3 auteurs, et N°groupe pour désigner le groupe 3IMM1, 3IMM2,..,”
Une soutenance technique individuelle ou par équipe est prévue durant la semaine du 02 décembre 2024.
Prévoir un PC avec le travail effectué par équipe.