TD de linguistique
Programmation Perl, scripts et programmes externes d'Unitex
Exercice 1 : les bases de Perl
Lire attentivement les informations sur Perl.
Tester à partir
des exemples donnés.
Exercice 2 : fréquence des mots
Ecrire en Perl un programme qui découpe un fichier texte en mots
tout en les comptant. Utiliser des tables associatives et la fonction split. Essayer de convertir tous
vos mots en minuscules.
Exercice 3 : cooccurrence
Deux mots u et v sont cooccurrents s'ils
apparaissent tous deux dans la même fenêtre d'un texte. La
fenêtre peut être:
- soit une séquence de mots du texte de taille fixe
- soit une phrase, un paragraphe, etc.
Des mots cooccurrents sont "pertinents" s'ils ont un certain lien
sémantique entre eux.
Notations :
f(u,v) : la fréquence de
cooccurrence de u et v, c'est-à-dire le nombre de
fois que u et v apparraissent dans la même
fenêtre d'un texte.
f(u) : la fréquence
d'occurrence du mot u,
c'est-à-dire le nombre de fois que le mot u apparaît dans le texte.
Ecrire un script qui découpe un texte en phrases, puis le
convertit en code ascii (programmes externes d'Unitex) et enfin lance
le programme Perl bestCooccurrences.pl
(à
écrire). Ce dernier programme détermine pour chaque
couple de mots du texte, sa fréquence de cooccurrence
(fenêtre = phrase) et, pour
tout mot, calcule sa fréquence et trie ses cooccurents selon :
- la valeur de f(u,v)
- la valeur de f(u,v)/(f(u)+f(v)-f(u,v)) [à quoi correspond
cette valeur ?]
- la valeur de log f(u,v) - log f(u) - log f(v) [information mutuelle]
Utiliser d'abord le fichier texte sur la
coupe Davis puis le corpus
d'actualités.
Que constatez-vous?
Conseil
Il est possible d'utiliser une table
associative de tables associatives : l'expression $tab{$mot}{$cooc} pourrait
retourner la fréquence de cooccurrence du mot $mot avec le mot $cooc.
Sauvegarder une bonne fois pour toute vos résultats dans un
fichier car le temps de calcul des cooccurrences peut être long
sur de gros fichiers. Puis, écrire un autre programme perl
chargeant ce fichier résultat et affichant les résultats
que vous souhaitez analyser.
Créer manuellement un fichier motInterdits.txt
qui contient les mots grammaticaux les plus fréquents (de, un, une, le, la, ...) et un certain
nombre de mots "neutres" (avoir, être, faire, ...) [exemple]. Modifier le
programme précédent afin qu'il ne prenne en compte que
les mots n'appartenant pas à cette classe. Afficher pour un mot
donné ses cooccurrents les plus pertinents.
Que pourrait-t-on faire pour améliorer nos résultats?
Cherchez des
pistes linguistiques:
- le token est-il une unité de calcul pertinente ?
- quelles seraient les catégories grammaticales pertinentes?
Question bonus (stage ?)
Implanter vos solutions linguistiques.