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.