OK
AJAX error!

Les forumsGrammalecteTester si un mot est un verbe

Tester si un mot est un verbe

Bonjour à tous,

J'ai une question basique :

Avec Hunspell (et pas seulement avec le dictionnaire français) existe-t-il une façon simple de tester si un mot est un verbe ?

exemple : mangeait -> verbe (manger)

Merci :)
le 07 décembre 2012 à 17:58
Bonjour,

Il faut utiliser Hunspell en ligne de commande (option -m)
www.dicollecte.org…

Mais ça ne fonctionne pas sous Windows. Vous pouvez faire ça avec Linux (dans une MV pas exemple).

Sinon, regardez dans cette extension qui fonctionne avec LibreOffice :
www.dicollecte.org…
En cliquant sur un mot, ça renvoie les données morphologiques de Hunspell.

Si vous programmez en C/C++, Hunspell a une API :
www.dicollecte.org…
le 08 décembre 2012 à 10:05
Bonjour Admin et merci pour votre réponse.

Pour Linux, tant mieux, puisque j'utilise Ubuntu (en fait j'utilise Hunspell à travers Python).



Dans mes tests en ligne :

#echo mangeait | hunspell -d fr_FR -a -m

retourne :

@(#) International Ispell Version 3.2.06 (but really Hunspell 1.2.8)
mangeait st:manger fl:a0

Si j'ai bien compris : une minuscule dans 'fl:' indique un verbe.



Mais en anglais :

#echo eating | hunspell -d en_US -a -m

retourne :

@(#) International Ispell Version 3.2.06 (but really Hunspell 1.2.8)
eating st:eating
eating st:eat fl:G

Ici, c'est une majuscule !



Mais peut-être que j'utilise mal l'option -m ?
le 08 décembre 2012 à 10:42

Ragd :
(en fait j'utilise Hunspell à travers Python).


Euh ? en ligne de commande ?
Normalement, vous pouvez utiliser Hunspell comme une DLL avec Python.
Si vous y parvenez, je suis preneur, car je bloque sur l’obtention des résultats données par référence.
www.dicollecte.org…

mangeait st:manger fl:a0


Je ne suis pas un expert un expert de Hunspell en ligne de commande (je ne l’utilise jamais de cette manière). Utilisez-vous bien un dictionnaire grammaticalement étiqueté ? Il est normal qu’il ne renvoie que ça si vous n’utilisez pas un dico étiqueté.
Normalement, il devrait aussi indiquer pour mangeait :
po:v1tp is:iimp is:3sg
ce qui signifie, verbe du premier groupe, transitif, pronominal, imparfait (indicatif), 3e personne du singulier.

fl indique le drapeau (flag), ça peut vous aider à détecter un verbe, mais c’est quand même plus facile avec les étiquettes morphologiques (po, is). Les drapeaux servent à générer les formes fléchies.

Les drapeaux en anglais sont différents du français.

Ça vous aidera à comprendre les codes et la structure du dictionnaire :
www.dicollecte.org…
le 08 décembre 2012 à 11:11

Euh ? en ligne de commande ?
Normalement, vous pouvez utiliser Hunspell comme une DLL avec Python.
Si vous y parvenez, je suis preneur, car je bloque sur l’obtention des résultats données par référence.
www.dicollecte.org…



C'était juste comme ça, pour tester. En effet, j'utilise pyhunspell.
D'après ce que je lis, vous utilisez des DLL en passant par ctypes. Je n'ai jamais fait ce genre de manipulation, mais c'est une approche intéressante.( où trouver les DLL ?)


Avec hunspell :

import hunspell
dico = hunspell.HunSpell('/usr/share/hunspell/fr_FR.dic', '/usr/share/hunspell/fr_FR.aff')
dico.analyze('mangeait')

retourne : [' st:manger fl:a0']



Sinon, il est possible d'utiliser la ligne de commande avec python, cependant la commande pour windows est différente.

avec Linux :

fichier_sortie = os.popen("echo mangeait | hunspell -d fr_FR -a -m")
x = fichier_sortie.read()
fichier_sortie.close()
print x

retourne :
@(#) International Ispell Version 3.2.06 (but really Hunspell 1.2.8)
mangeait st:manger fl:a0


Utilisez-vous bien un dictionnaire grammaticalement étiqueté ?



Je ne sais pas, quelle est l'extension des fichiers ?

Dans /usr/share/hunspell/
j'ai des fichiers du genre fr_FR.dic et fr_FR.aff

Sinon, où les trouver ? Ah, ça y est, j'ai trouvé vos dictionnaires. Certaines personnes utilisent celui de la réforme de 1990 ?

Le problème (pas avec vos dictionnaires, hunspell) c'est qu'il ne semble pas proposer une fonction simple pour tester si un mot est un verbe. Avec le retour po:v1tp is:iimp is:3sg, c'est simple malgré tout. Cependant, il faut des dictionnaires étiquetés pour toutes les langues à tester.
le 08 décembre 2012 à 20:32

Ragd :
D'après ce que je lis, vous utilisez des DLL en passant par ctypes. Je n'ai jamais fait ce genre de manipulation, mais c'est une approche intéressante.( où trouver les DLL ?)


Dans l’archive que je propose ici :
www.dicollecte.org…
Ce sont les mêmes DLL que celles du projet LanguageTool.

Ah, ça y est, j'ai trouvé vos dictionnaires.


Bien, problème résolu.

Certaines personnes utilisent celui de la réforme de 1990 ?


Oui, mais très peu. C’est vraiment à part.

Le problème (pas avec vos dictionnaires, hunspell) c'est qu'il ne semble pas proposer une fonction simple pour tester si un mot est un verbe. Avec le retour po:v1tp is:iimp is:3sg, c'est simple malgré tout. Cependant, il faut des dictionnaires étiquetés pour toutes les langues à tester.


En effet, Hunspell ne dispose pas de mécanisme par défaut pour savoir s’il s’agit d’un verbe. Il se contente de donner les étiquettes apposées sur les entrées.
Pour le français, il suffit que la chaîne contienne po:v. Le chiffre suivant indique le groupe de verbe. 0 pour être et avoir. 0e pour être, 0a pour avoir. La page documentation vous aidera à comprendre les étiquettes.
le 09 décembre 2012 à 10:33
Merci Admin pour toutes vos réponses.

J'ai essayé votre script spell.py et j'ai tenté de résoudre le problème avec ce pointer to an array of strings pointer, mais je n'y suis pas parvenu. J'y réfléchirai encore un peu, cela m'intéresse. Sinon ... heureusement que pyhunspell répond à mes besoins.
le 10 décembre 2012 à 09:10
Bon, je le tiens !

Essayez cela :

def analyze (self, s):

....l = POINTER(None)()
....n = self.libHunspell.Hunspell_analyze(self.oDict, pointer(l), s)
....l = cast(l, POINTER(c_char_p * n))
....print n, l
....for i in range(n) :
........print l[0][i]

Je ne sais pas si c'est la solution la plus propre, mais cela semble faire l'affaire.
le 11 décembre 2012 à 00:04
Merci pour ça ! :D
le 11 décembre 2012 à 14:31
;)
le 11 décembre 2012 à 15:33

Notification par e-mail    0