OK
AJAX error!

Les forumsTribune libreêtre, et dictionnaires hunspell pour un lemmatiseur

être, et dictionnaires hunspell pour un lemmatiseur

Bonjour,

Je suis en train d'écrire un programme Java pour utiliser les dictionnaires hunspell comme “stemmer” dans un moteur de recherche (un peu comme Google qui cherche à vous faire plaisir en devinant vos mots). Un petit exemple sera plus clair.

elec.enc.sorbonne.fr…

Chercher “suivre” trouvera je “suis”, c'est ennuyeux, mais on peut imaginer que bientôt, chercher “être” permettra de trouver tu “es”. Cet usage mène à souhaiter que les formes du verbe être soient d'une manière ou d'une autre rapportées à leur lemme. Est-ce qu'il y a encore une limitation dans l'implémentation hunspell officielle pour supporter la suppression complète du radical ? Sinon, est-ce que le dispositif dicollecte permet d'introduire des des champs supplémentaires ? (Optional data fields) manpages.ubuntu.com… par exemple st:être

Merci pour toutes suggestions m'évitant de mal comprendre un usage ou d'ajouter des triturations spécifiques à mon programme, j'imagine que des choses sont déjà prêtes pour LanguageTool.

Sinon ce programme déjà pas mal pour le latin (après des modifications du dictionnaire hunspell).
--
Frédéric Glorieux
École des chartes
Ingénieur de recherche
le 23 novembre 2010 à 01:16
Bonjour,

Hunspell permet de modifier totalement le radical du lemme depuis la version 1.2.7 (implémentée dans OOo 3.2+, Firefox 3.5+, Thunderbird 3+). Il faut utiliser la commande FULLSTRIP.
Être : www.dicollecte.org…

Je ne me sers de cette possibilité que depuis peu pour des raisons de rétrocompatibilité, mais le prochain dictionnaire (4.0) utilisera la commande FULLSTRIP et ne sera plus compatible avec les anciennes versions.

Dicollecte peut gérer les champs morphologiques de Hunspell st, is, ip, dp, ip, sp, pa, st, al, ph, etc. Simplement, je ne les active pas tous, car la plupart ne sont pas vraiment utiles pour le projet français. Et les autres attendent qu’on ait terminé des tâches plus importantes.

Cet usage mène à souhaiter que les formes du verbe être soient d'une manière ou d'une autre rapportées à leur lemme.


Alors il faut que tu fasses ce que j’ai fait pour le dictionnaire français, créer un fichier d’affixes avec toutes les conjugaisons pour tous les verbes. (C’est plus simple que de devoir écrire un champ stem pour les conjugaisons de tous les verbes.)
Personnellement, ça m’a pris six mois à écrire et six autres à déboguer, et j’ai encore trouvé des erreurs après ça. Ça a été long, mais pas trop difficile, sauf la réforme orthographique qui a bien compliqué l’affaire.
Et puis ces foutus verbes du 1er groupe sont aussi irréguliers que ceux du 3e ! :)
Exemple: www.dicollecte.org…
le 23 novembre 2010 à 09:48

Alors il faut que tu fasses ce que j’ai fait pour le dictionnaire français



Pour le latin, c'est en cours. Par exemple pour les verbes irréguliers, comme dico, dixi, dictum, il ne semble pas raisonnable de les mettre en règles d'affixes, j'utilise le champ “st:”. Heureusement je ne suis pas seul, de meilleurs latinistes que moi sont au travail, mais dans des formats maison. Nous ne savons pas encore si le standard hunspell (et l'application dicollecte) se prête à notre projet (lemmatiseur des latins classiques et médiévaux). En tous cas j'ai déjà mesuré le désordre de la conjugaison française,

dictionnaire (4.0)



Pour le français, ce serait exactement le dictionnaire dont j'aurais besoin. Est-il téléchargeable ? Est-ce que vous avez une sorte d'export pour développeurs, un peu comme un subversion de projets informatiques ? À court terme (premier semestre) je fais utiliser l'hunspell français à des étudiants sur le dictionnaire de Littré. Je ne sais pas si cela peut vous servir, mais cela révèle quelques milliers de mots rares, comme “diplocéphale”.

Vous avez certainement une réponse évidente, est-il vraiment impossible de se passer des drapeaux /n'q'l'm't's' ? Dans d'autres contextes applicatifs, il est de coutume de “tokeniser les clitiques” avant de réduire les affixes. Pour le latin (-que, -ve, -de) je le fais avant de soumettre un mot à hunspell. Est-ce qu'il n'est pas possible de faire quelque chose avec les commandes “compound” (que je ne connais pas) ? Comment faîtes-vous pour générer vos listes pour LanguageTool ? De mon côté, lorsqu'il me faut générer les formes d'un lemme, j'évite donc de suivre ce deuxième niveau d'affixes.
le 23 novembre 2010 à 22:13
Le dictionnaire 4.0 n’est pas encore disponible, en décembre peut-être. L’état dans lequel est présentement le dictionnaire est assez récent. Il y a peu, il n’était pas normalisé pour l’étiquetage grammatical, et on se coltinait pas mal de choses qui ne serviront finalement pas. Ce n’est que dernièrement que j’ai procédé à une épuration du superflu dans les règles d’affixation.

Le Littré contient pas mal de mots désuets qui ne sont pas vraiment utiles. Même si notre dictionnaire est effectivement incomplet. Mais le souci, ce n’est pas de récupérer des listes de mots (j’ai le Littré XML sur mon disque dur, ainsi que d’autres), mais de trouver des listes de mots déjà étiquetées et sous licence libre. :)

Vous avez certainement une réponse évidente, est-il vraiment impossible de se passer des drapeaux /n'q'l'm't's' ? Dans d'autres contextes applicatifs, il est de coutume de “tokeniser les clitiques” avant de réduire les affixes. Pour le latin (-que, -ve, -de) je le fais avant de soumettre un mot à hunspell. Est-ce qu'il n'est pas possible de faire quelque chose avec les commandes “compound” (que je ne connais pas) ?


Oui, ça devrait être possible avec des commandes COMPOUND* et BREAK. Ce n’est pas le choix que j’ai retenu (même si j’ai été tenté de le faire), car ça ne présente pas que des avantages. Je ne connais pas bien ces commandes, car je ne m’en sers pas. Mais il est possible de définir l’apostrophe comme un séparateur.

Comment faites-vous pour générer vos listes pour LanguageTool ?


Je génère toutes les formes fléchies et j’ôte celles qui présentent une composition avec une forme élidée. Ensuite, j’ai un dictionnaire qui convertit toutes les morphologies de notre dictionnaire selon les étiquettes pour LT.
C’est un script hors-ligne qui fait ça, car c’est bien trop lourd pour un script sur un serveur partagé. Ce script crée toutes les variantes du dictionnaire, construit les extensions pour OOo et Mozilla, génère le lexique avec toutes les formes fléchies, le convertit pour LT, fait des calculs d’occurrences sur Wikipédia et Wikisource, etc.

Mais pour plusieurs raisons, notre dictionnaire ne correspondra peut-être pas à votre attente pour un lemmatiseur. D’abord, chez nous, ce sont les formes féminines qui sont les lemmes (pour des raisons de commodité). Ensuite, pour l’instant, comme je n’ai pas activé le champ st (stem), les pluriels de nombre de mots composés ne sont pas associés avec la forme au singulier. Mais ça viendra avec le temps, je pense.
le 24 novembre 2010 à 01:37

notre dictionnaire ne correspondra peut-être pas à votre attente pour un lemmatiseur



Au contraire, je suis impatient de lire la 4.0, voici mon email si je pouvais bénéficier d'une prévue frederic(point)glorieux(à)fictif(point)org. Quand ce sera sorti, vous risquez d'intéresser la communauté du TAL (Traitement Automatique de Langue). Pour l'instant nous utilisons Morphalou cnrtl.fr… lexique.org www.lexique.org… (qui a des statistiques de fréquence sur Frantext), ou Unitex infolingu.univ-mlv.fr… Ces projets de la recherche publique sont rigoureux, dynamiques, mais ne peuvent pas se vanter d'avoir autant d'utilisateurs. Les besoins de LT me semblent vous conduire exactement vers ceux d'un lemmatiseur, comme le correcteur grammatical Cordial (qui fut dans MS.Word) a généré le sous produit Cordial Analyseur www.synapse-fr.com… Entraînés par la communauté libre, est-ce que vous ne prenez pas ce chemin ?

ce sont les formes féminines qui sont les lemmes



D'autres lexiques ont fait ce choix. Pour une lemmatisation, cela peut se défendre, pour de la recherche plein texte, c'est en effet plus ennuyeux (quand on cherche “boulanger” on veut aussi les “boulangères”, sinon c'est retour aux recherches tronquées, “boulang?r*”, qui trouve aussi “boulangerie”). Peut-être est-il possible d'envisager des moyens de contribuer sur cette partie (à partir de la 4.0) ?

il est possible de définir l’apostrophe comme un séparateur



Cela fonctionne correctement pour le cas général, à condition de ne pas regretter “prud'hommes” ou “aujourd'hui”. Vous avez testé comment réagit hunspell en ce cas ? “Aujourd'hui” peut-il rester au dictionnaire ? Ou faut-il mettre “hui” ?

[COMPOUND] ça ne présente pas que des avantages



Qu'est-ce que vous craignez ? Je vais essayer pour le latin sur les -que, je vous en dis plus dans quelques jours.

Je génère toutes les formes fléchies et j’ôte celles qui présentent une composition avec une forme élidée.



En contexte multilingue, c'est ennuyeux de commencer par les exceptions pour chaque langue, en tous cas il me semble que László Németh (pour ce que j'en lis, je ne le connais pas) a l'air d'encourager la conception des dictionnaires hunspell dans le sens de stemmers fiables.

le 24 novembre 2010 à 13:20

Au contraire, je suis impatient de lire la 4.0, voici mon email si je pouvais bénéficier d'une prévue frederic(point)glorieux(à)fictif(point)org.


Je le ferai dès que je trouverai le foutu bug dans mon script (que je viens de réécrire en accord avec toutes les modifications récentes). Là, plus rien ne fonctionne correctement. Les dictionnaires sont générés, tout a l’air normal, mais le correcteur ne reconnaît aucune des formes fléchies. J’ai beau chercher, je ne comprends pas où est le problème. :(

Les besoins de LT me semblent vous conduire exactement vers ceux d'un lemmatiseur, comme le correcteur grammatical Cordial (qui fut dans MS.Word) a généré le sous produit Cordial Analyseur www.synapse-fr.com… Entraînés par la communauté libre, est-ce que vous ne prenez pas ce chemin ?


En fait, LanguageTool n’est pas ma priorité. Je convertis simplement notre dictionnaire pour eux. Ça ne me coûte presque rien de le faire et ça leur est utile. Mais les formats sont très différents. Mon objectif, c’est plutôt de pouvoir utiliser directement le dictionnaire de Hunspell dans le correcteur grammatical Lightproof de László Németh, que j’ai repris.
Mais, oui, la lemmatisation est assez utile.

D'autres lexiques ont fait ce choix. Pour une lemmatisation, cela peut se défendre, pour de la recherche plein texte, c'est en effet plus ennuyeux (quand on cherche “boulanger” on veut aussi les “boulangères”, sinon c'est retour aux recherches tronquées, “boulang?r*”, qui trouve aussi “boulangerie”). Peut-être est-il possible d'envisager des moyens de contribuer sur cette partie (à partir de la 4.0) ?


L’une des raisons pour lesquelles j’ai préféré utiliser le féminin pour lemme, c’est que ça simplifie la tâche de ceux qui veulent contribuer à enrichir le dictionnaire. Sinon, il faut multiplier le nombre de drapeaux pour arriver au même résultat, ce qui nous compliquerait la tâche.
Ici, on est pragmatique, le but, c’est d’abord de fournir un outil pour OOo et autres logiciels libres, pas de faire de la linguistique. ;)

Cela fonctionne correctement pour le cas général, à condition de ne pas regretter “prud'hommes” ou “aujourd'hui”. Vous avez testé comment réagit hunspell en ce cas ? “Aujourd'hui” peut-il rester au dictionnaire ? Ou faut-il mettre “hui” ?


N’ayant pas essayé, je n’en suis pas sûr, mais je pense que les mots avec apostrophes seront reconnus, et s’ils ne le sont pas, le correcteur scindera le mot en deux et vérifiera chacune des 2 parties. C’est ainsi qu’il fonctionne par défaut avec le trait d’union.

[COMPOUND] ça ne présente pas que des avantages


Qu'est-ce que vous craignez ? Je vais essayer pour le latin sur les -que, je vous en dis plus dans quelques jours.


En fait, plusieurs raisons expliquent ce choix.
1. Raison historique. Myspell, l’ancien correcteur, ne gérait pas les mots composés, alors nous n’avions pas le choix, il fallait s’occuper des formes élidées.
2. Raison personnelle. Quand je suis passé à Hunspell, je n’avais d’abord pas prêté attention aux possibilités de COMPOUND, et des mois plus tard, quand j’en ai pris conscience, j’étais déjà très avancé dans la création du système d’affixation actuel (réécrit entièrement). C’était plus compliqué à écrire, mais ça apportait l’avantage de proscrire pas mal de formes erronées, comme j’avait, l’ingénieurs, c’été, etc. Comme OOo ne possédait pas de correcteur grammatical, c’était toujours ça que le correcteur ne laisserait pas passer. Du reste, encore maintenant, c’est toujours ça de moins à gérer pour le correcteur grammatical.
le 24 novembre 2010 à 17:41
(4.0) qui programme comprend parfaitement.

Lightproof : intéressant. Il reste tout de même ce désagréable problème de design introduit par MS.word, des règles typographiques comme les espaces insécables avant les ponctuations doubles ne sont pas du même ordre que l'accord du participe passé. Concrètement, pour les premières les expressions régulières suffisent, tandis qu'il faut au moins lexique pour les autres.

Apostrophes, l'histoire a des raisons plus puissantes que la raison. J'ai tout de même essayé avec hunspell 1.1.12 en ligne de commande, ça semble marcher. Ce programme est diablement bien fait.


# (pardon si l'indentation fonctionne mal, je ne connais pas encore la syntaxe du forum).

# test.aff
SET UTF-8
WORDCHARS '
BREAK 1
BREAK '

#test.dic
3
aujourd'hui
c
est

#test.txt
C'est aujourd'hui que ça commence.


En tant qu'utilisateur d'OOo depuis longtemps, je dois avouer que le traitement de l'apostrophe m'agace beaucoup, notamment pour l'ajout de mots au dictionnaire commençant par une voyelle. Il me semble que l'avantage de souligner “j'avait” est beaucoup plus secondaire (même si j'ai une orthographe déplorable). Exemple concrets que je viens de tester dans OOo ou Firefox (essayer d'ajouter “ascagasse” à son dictionnaire personnel)

Je l'ascagasse. Il m'ascagasse. Ça ascagasse.

Quel est votre circuit de décision ? Comment peut-on discuter une telle option (dont on imagine les conséquences en travail et vérifications) ?

Cette conversation m'a entraîné à tester plus vite que prévu le “-que” latin, ça marche très bien dans hunspell (encore faut-il que je le programme dans mon stemmer).


ex Patre Filioque procedit (querelle du schisme orthodoxe)

4
ex
patre/N
filio/N
que/&

COMPOUNDMIN 1
COMPOUNDRULE 1
COMPOUNDRULE N&?

le 24 novembre 2010 à 23:04
Bon, ce n’était pas mon script qui merdait, mais l’encodage du fichier des affixes qui est parti en vrille. (Un jour, il faudra vraiment que je comprenne comment ces choses-là arrivent.)

Bref, une bêta du dictionnaire 4.0 est disponible : www.dicollecte.org…

Lightproof : intéressant. Il reste tout de même ce désagréable problème de design introduit par MS.word, des règles typographiques comme les espaces insécables avant les ponctuations doubles ne sont pas du même ordre que l'accord du participe passé. Concrètement, pour les premières les expressions régulières suffisent, tandis qu'il faut au moins lexique pour les autres.


Lightproof permet aussi de récupérer les données morphologiques de Hunspell.

En tant qu'utilisateur d'OOo depuis longtemps, je dois avouer que le traitement de l'apostrophe m'agace beaucoup, notamment pour l'ajout de mots au dictionnaire commençant par une voyelle. Il me semble que l'avantage de souligner “j'avait” est beaucoup plus secondaire (même si j'ai une orthographe déplorable). Exemple concrets que je viens de tester dans OOo ou Firefox (essayer d'ajouter “ascagasse” à son dictionnaire personnel)


Je comprends, mais quand on s’occupe d’un dictionnaire, il y a toujours quelqu’un à qui une décision ne plaît pas. Les débats et querelles sont inhérentes à cette activité. :)
Mais non, votre orthographe n’est pas déplorable. Mon choix, il est vrai, sert surtout les moins doués.

Quel est votre circuit de décision ? Comment peut-on discuter une telle option (dont on imagine les conséquences en travail et vérifications) ?


Pour les décisions «techniques» sur le dictionnaire, j’ai toujours été le seul à décider puisque j’ai écrit tout le système moi-même. Je fais aussi les modifications nécessaires pour générer des formes fléchies auxquelles je n’avais pas songé en premier lieu, comme les pluriels anglais ou italiens.
En revanche, pour la politique du dictionnaire, ce sont les participants qui donnent souvent l’inflexion dans un sens ou dans un autre. Laurent (l’administrateur qui a géré la politique du dictionnaire) nous a quittés le mois dernier, et c’est Sylvain qui le remplace, mais pour l’instant nous suivons toujours la même politique.

Donc, si vous voulez qu’on change la manière de segmenter les mots, il va falloir ouvrir un autre fil et qu’on en discute dans le détail. :) Je n’y suis pour l’instant ni opposé ni favorable (j’avais vraiment d’autres choses à penser ces derniers temps). Quoi qu’il en soit, ça va demander pas mal de boulot (j’imagine), et je n’ai pas forcément le temps en ce moment. Mais c’est une proposition intéressante.
le 25 novembre 2010 à 00:19
Un fil est ouvert sur l'apostrophe, j'ai peut-être mal fait de commencer dans tribune libre, sinon pour ce qui me concerne, j'ai toutes les réponses aux questions ouvertes par ce fil.
le 25 novembre 2010 à 14:05
Pas de souci, je peux déplacer le fil. ;)
le 25 novembre 2010 à 19:31

Notification par e-mail    0