MÉTHODES DE SEGMENTATION
Le fait que le thaï soit une langue sans séparateur implique deux niveaux de segmentation : segmentation en mots et segmentation en phrases. 4.1 Segmentation en mots En général, l’objectif de la segmentation en mots est de permettre au système de reconnaître les mots simples et composés dans les textes au moyen des dictionnaires. Cela est pour l’instant impossible du fait que l’application des dictionnaires d’INTEX ne fonctionne pas par caractère mais par lexème, ce qui veut dire que pour reconnaître un mot simple, il faut qu’il corresponde à la fois à un lexème et à une entrée du DELAF.
Cette limitation fait obstacle au traitement des langues sans séparateur de mots telles que le chinois, le japonais et le thaï. Pour résoudre ce problème, nous avons choisi de segmenter les textes en lexèmes plus petits et de segmenter de la même façon les entrées des dictionnaires, afin que ces dernières aient les mêmes formes que les lexèmes des textes. Après cela, INTEX sera capable d’appliquer les dictionnaires sur les textes.
Méthode par caractères
C’est la méthode la plus simple car elle ne réclame aucune connaissance en linguistique.
Principe
En consultant le dictionnaire de mots composés du français, INTEX est capable de reconnaître les mots « pomme de terre » et « terre cuite » dans la séquence de lexèmes « pomme de terre cuite » et de les lister dans le vocabulaire du texte, comme suit : pomme de terre,pomme de terre.N+NDN+Conc:fs/une;Comest terre cuite,terre cuite.N+NA+Conc+z1:fs/une;de&la La procédure de reconnaissance des mots composés en français fonctionne par lexèmes de telle manière que plusieurs lexèmes qui se suivent peuvent former un mot composé.
Si l’on considère que chaque lexème ne contient qu’un seul caractère et que plusieurs lexèmes (d’un caractère) qui se suivent peuvent former un mot, INTEX est également capable de reconnaître les mots thaï. Pour cela, il suffit d’ajouter (automatiquement) un espace blanc entre chaque caractère thaï dans les textes ainsi que dans toutes les entrées des dictionnaires et de placer ces derniers dans le répertoire des dictionnaires de mots composés d’INTEX. Désormais, INTEX considère que tous les mots thaï sont des mots composés et que chaque caractère thaï est un mot simple.
En analysant la forme syllabique du thaï (cf. Figure 2.2), elle sera transformée de la manière suivante : [Va]Ci[Vs][D][Vp][Cf][M] å [Va] Ci [Vs] [D] [Vp] [Cf] [M] Figure 4.1 Forme syllabique modifiée par la méthode par caractères Va : Caractère vocalique antéposé Vp : Caractère vocalique postposé Ci : Caractère consonantique initial Cf : Caractère consonantique final Vs : Caractère vocalique suscrit ou souscrit M : Phonème muet D : Signe diacritique Le phonème muet (cf. Figure 2.4) sera transformé de la même façon : [C][C][ ิ]C([ ิ]|[ ุ]) å [C] [C] [ ิ] C ([ ิ]|[ ุ]) Figure 4.2 Phonème muet modifié par la méthode par caractères C : Caractère consonantique ุ : Caractère vocalique [u] ิ : Caractère vocalique [i] : Signe de phonème muet
Algorithme
La modification du texte et du dictionnaire sera facilement réalisée au moyen d’expressions rationnelles. Malheureusement, celles d’INTEX ne fonctionnent pas en mode caractère (cf. §1.1.1) et nous sommes donc obligé d’utiliser un programme externe pour effectuer ce travail. Nous avons choisi le langage PERL pour sa simplicité et son efficacité dans la manipulation d’expressions rationnelles, surtout en mode caractère, et nous avons implémenté le programme suivant : $a = $ARGV[0];
#Fichier à segmenter $b = $ARGV[1]; #Grammaire $c = $ARGV[2]; #Fichier segmenté #Ouvrir le fichier texte en lecture < open(IN, »<$a »)||die(« Erreur à l’ouverture du Fichier à segmenter »); #Ouvrir la grammaire en lecture open(GRAM, »<$b »)||die(« Erreur à l’ouverture de la Grammaire »); #Ouvrir un fichier en écriture > open(OUT, »>$c »)||die(« Erreur à l’ouverture du Fichier résultat »); #Lire la grammaire while(){ push(@gram,$_); } #Segmenter le texte while(){ $texte = $_; foreach $regle(@gram){ chomp($regle); ($nb,$avant,$apres) = split(/\#/,$regle); print STDOUT « $avant—$apres\n »; eval(« \$texte =~ s/$avant/$apres/g »); } print OUT « $texte »; } close(IN); close(GRAM); close(OUT);