Remarques sur le fichier des affixes fr_FR.dic pour écrire une procédure
"munch"
Le fichier des affixes français, tel qu'il est présentement, décrit une
liste de drapeaux, qui eux-mêmes définissent les opérations à effectuer
sur un lemme et selon quelles conditions.
Or, si ce fichier est suffisamment pertinent pour retrouver toutes les
déclinaisons d'un lemme donné avec ses drapeaux ("unmunch"), il manque
cependant des informations pour faire proprement l'opération inverse
("munch"), c'est-à-dire créer un dictionnaire d'entrées (lemme+drapeaux)
à partir de toutes les déclinaisons possibles des verbes, des adjectifs
et des noms.
En effet, si vous consultez le fichier des affixes commentés :
http://fr.openoffice.org/Documentation/Guides/fr_FR.aff.document%E9
vous observerez qu'il est précisé régulièrement que tel affixe ne peut
s'appliquer que sur des noms uniquement, ou seulement sur les verbes.
D'autres cas particuliers sont aussi définis, mais ces informations ne
sont pas explicitées dans les définitions pertinentes des affixes,
hormis dans les commentaires. C'est pourquoi le programmeur qui veut
écrire une fonction "munch" doit nécessairement inclure dans son
programme nombre de bidouilles pour tenir compte de certaines conditions
non-définies.
On distingue plusieurs types de lacunes d'informations pertinentes :
1. Il est impossible de savoir si un drapeau concerne les verbes
seulement, les noms ou les deux, comme le précisent les commentaires du
fichier des affixes français.
Cela est pourtant important, car la logique des drapeaux définis pour
une catégorie entre souvent en conflit avec l'autre.
Par exemple, les drapeaux L et l servent à placer le même préfixe "l'",
l'un devant les noms, l'autre devant les verbes. La seule différence
entre ces deux drapeaux, c'est que le second permet la combinaison avec
les suffixes, l'autre non.
Si nous avons la liste suivante à "muncher":
amour
l'amour
adore
l'adore
Il est impossible donc, sans information complémentaire, de savoir s'il
faut choisir:
- amour/L ou amour/l
- adore/L ou adore/l
On observe aussi beaucoup d'interférences entre les drapeaux pour les
verbes et les drapeaux pour les noms/adjectifs:
Prenons par exemple la liste suivante:
vomir
vomie
vomies
vomi
vomie
"Munch" va donner
vomir/y
vomie/F
vomie/F est une entrée redondante, car vomir/y permet déjà d'obtenir
toutes les déclinaisons de vomie/F.
Il est donc obligatoire de faire de nombreuses recherches sur les
drapeaux qui entrent en conflit pour trouver la solution correcte.
Le drapeau S notammment, prévu pour le pluriel des noms, est susceptible
d'être apposé sur tous les verbes combinant deux formes presque
identiques, la seconde ayant juste un 's' ajouté à la fin de la
première. Par exemple:
donne donnes ---> donne/S
tombai tombais ---> tombai/S
etc.
Il existe d'une manière générale de nombreux cas, difficile à énumérer,
où les drapeaux réservés pour les noms et les adjectifs peuvent
s'appliquer sur les verbes conjugués, et créent maintes interférences où
il est difficile, voire impossible(?), de savoir lequel est le bon.
--
2. Il serait utile d'avoir dans la description d'un affixe, le nombre
minimal de déclinaisons qu'il faut trouver pour appliquer un drapeau sur
un lemme, ou le nombre maximal de déclinaisons possibles.
Deux raisons à cela:
a. Connaître le nombre minimal de déclinaisons à trouver pour apposer un
drapeau est parfois indispensable pour départager plusieurs solutions
possibles.
Certains affixes créent un nombre de déclinaisons variable selon
le lemme sur lequel on les appose.
Le drapeau F, par exemple, donnera tantôt 3, tantôt 2 déclinaisons,
voire une seule, selon le lemme sur lequel il est apposé. (Cf. le
fichier
des affixes).
Pourtant, l'utilisation du drapeau F n'est pertinente que si nous
trouvons au moins deux déclinaisons du lemme sur lequel nous faisons
un test.
Le drapeau F, en effet, ne sert que pour décliner les noms communs
pouvant adopter des formes féminines.
Exemple: voleuse/F donne 3 déclinaisons: voleur / voleurs / voleuses.
Or, l'apposition du drapeau F, si on se borne aux conditions définies
par le fichier des affixes, est valable sur de nombreux lemmes.
Par exemple:
fraise/F donne 1 déclinaison: fraises
Le drapeau F n'a pas été prévu pour gérer les pluriels des noms
sans formes féminines. C'est le rôle du drapeau S.
fraise/S donne 1 déclinaison: fraises
Il en va de même pour le drapeau G (servant pour décliner d'autres
noms à formes féminines).
fraise/G donne 1 déclinaison: fraises
Donc, si nous avons la liste de noms à "muncher" (fraise, fraises),
nous nous retrouvons avec la possibilité d'apposer 3 drapeaux
tous valides sur "fraise".
fraise/F donne 1 déclinaison: fraises
fraise/G donne 1 déclinaison: fraises
fraise/S donne 1 déclinaison: fraises
Impossible de départager lequel est nécessaire.
C'est pourquoi j'ai été obligé, pour éliminer les solutions fausses,
d'insérer dans le code une heuristique obligeant les drapeaux F et G
à trouver un nombre de déclinaisons minimal supérieur à 1, afin de ne
pas être utilisé à la place de S.
b. Le nombre maximal de déclinaisons possible n'est utile que pour
optimiser le processus "munch", qui est long et coûteux en ressources.
C'est même une "usine à gaz" et toute astuce pour accélérer le
processus
est la bienvenue.
Or, avec cette information, on peut réduire le nombre de tests
à effectuer sur un lemme pour chaque drapeau si on connaît le
nombre maximal de déclinaisons que celui-ci est censé provoquer
lorsqu'il sera appliqué sur un lemme.
Exemple avec le drapeau A :
PFX A Y 10
PFX A 0 ad [^bcdfglmnpqrst]
PFX A 0 a [bdgm]
PFX A 0 ac [cq]
PFX A 0 af [f]
PFX A 0 al [l]
PFX A 0 an [n]
PFX A 0 ap [p]
PFX A 0 ar [r]
PFX A 0 as [s]
PFX A 0 at [t]
ce qui est ce qui est condition pour
ôté au ajouté apposer l'affixe
lemme. au lemme
0 = rien ^ signifie "tout sauf"
Admettons que nous ayons dans notre liste de mots à "muncher":
"verbe" et "adverbe"
Pour chaque mot, le programme va essayer d'apposer tous les
drapeaux, et voir s'il trouve une déclinaison existante dans la
liste.
Le programme munch teste le drapeau A sur "verbe", et cherche s'il
va trouver la déclinaison possible définie par chacun des opérateurs.
Il trouve donc l'entrée "adverbe", correspondant à la première
déclinaison possible définie par le premier opérateur de l'affixe A:
PFX A 0 ad [^bcdfglmnpqrst]
(nous ajoutons "ad" à "verbe", parce que la première lettre de "verbe"
est différente de celles dans "bcdfglmnpqrst" et parce que nous
avons trouvé dans notre liste de mots, le mot composé par
"ad"+"verbe" = "adverbe")
Or, comme la définition de l'affixe ne précise pas combien de
déclinaisons possibles le drapeau effectue sur un lemme,
nous ignorons s'il est utile de tester le lemme avec les autres
opérateurs pour trouver d'autres déclinaisons.
Pourtant, il est évident que la réponse, dans ce cas, est toujours:
une seule déclinaison est possible avec l'affixe A.
Si nous le savions, nous pourrions, en l'occurrence, arrêter les
essais dès le premier opérateur de cet affixe.
--
3. Certains affixes ne peuvent s'apposer à des lemmes que dans des
conditions qui, une fois encore, ne sont expliquées que dans les
commentaires.
Exemple: les affixes p et q ne servent qu'à conjuguer les verbes
réflexifs dans le cas précis de l'élision du pronom se. Plus clairement,
ça signifie que ces deux drapeaux ne peuvent théoriquement être placés
que sur les lemmes commençant par "s'"
Comme une fonction "munch" classique ne peut pas deviner cette condition
non-explicitée, elle place ce drapeau sur d'autres verbes respectant les
conditions définies par le fichier des affixes. Pour parer cet effet
indésirable, il faut donc encore écrire une heuristique.
-----------------------------------------------------------------------------------------
Si nous appliquons brutalement les drapeaux sur les lemmes, sans tenir
compte des lacune du fichier des affixes, nous pouvons obtenir des
résultats comme suit (j'ai utilisé le "munch" fourni avec MySpell) :
fraise/G <-- ici, munch ne sait pas s'il faut mettre le drapeau
F, G ou S et en a vraisemblablement choisi un au hasard
fraise/S est le résultat correct.
sèche/F
sec/F <-- sec/F est une entrée inutile, puisqu'elle peut être
obtenue
par déclinaison de sèche/F
patine/pGu <-- p est un drapeau théoriquement réservé aux lemmes
commençant
par "s'". G est un drapeau réservé pour les noms et les
adjectifs, et il est ici combiné avec u, un drapeau
pour
les verbes.
abaissa/nFlLtm <-- l et L sont apposés sur un même lemme. F est un
drapeau qui
n'est pas prévu pour les verbes.
-----------------------------------------------------------------------------------------
Suggestions pour remédier à ces problèmes, c'est-à-dire, donner dans le
fichier des affixes des informations complémentaires :
- Inclure dans la première ligne de définition d'un affixe le nombre
minimal et le nombre maximal de déclinaisons. Ce qui donnerait:
PFX/SFX nom Y/N nombre_de_lignes minimum_decl_à_trouver
maximum_decl_possibles
- Donner la possibilité de classer les affixes par catégories et définir
quels sont les drapeaux incompatibles entre eux.
- (?) Inclure dans la description d'un suffixe une condition décrivant
si celui ne peut s'apposer que si le lemme possède un préfixe défini, et
réciproquement inclure dans la description d'un préfixe une condition
décrivant si celui ne peut s'apposer que si le lemme possède un suffixe
défini.
Ce ne sont que des suggestions basées sur le travail que j'ai fait pour
écrire une fonction "munch" avec le fichier des affixes français.
J'ignore si celles-ci seraient pertinentes pour d'autres langages.
Aubéron
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]