Correcteur orthographique [C#] - C#/.NET managed - Programmation
Marsh Posté le 24-05-2006 à 22:56:46
je viens de tester, ça marche même en japonais
vive la gestion du char en utf-8 en C#
Marsh Posté le 24-05-2006 à 22:58:57
z'êtes relous les gars. vous pourriez au mois me dire un truc genre "il est nul ton machin, je faisais ça sur ma Ti92 au collège" ou chais pas moi...
Marsh Posté le 24-05-2006 à 23:34:16
Si tu veux demain je relis mon Programming Pearls (me semble que c'est celui là) et je te dis à quel point c'est nul, j'ai souvenir qu'il parlait d'un correcteur orthographique codé en quelques ko, dictionnaire compris.
Marsh Posté le 24-05-2006 à 23:47:47
dictionnaire compris, spa possible
à la limite, en le stockant comme dans l'arbre en mémoire, on peux réduire la taille... mettons au dixième, mais pas à ce point
par contre, pour ce qui est du code, je suis d'accord. ma dll fait 12 Ko, en comptant que le C# compile par tranche de 4 Ko pour la taille de l'exe. donc mon truc fait entre 8 et 12 Ko en réalité (suffit de voir le source de toute façon, pour voir à quel point il est petit)
Marsh Posté le 24-05-2006 à 23:53:50
par contre, y'a un truc qui m'échappe : quand il est démarré, avec un dico vide (4 pauvres mots), mon truc bouffe 71 Mo
Marsh Posté le 25-05-2006 à 00:07:32
ReplyMarsh Posté le 25-05-2006 à 01:36:58
Arjuna a écrit : dictionnaire compris, spa possible |
J'ai retrouvé la référence.
C'est 'Spell' de Doug McIllroy, le dictionnaire étendu (càd l'intégralité des mots reconnus) est de ~75000 mots et le programme avait été créé pour tourner sur PDP-11 et tient donc dans 64ko de ram.
Marsh Posté le 25-05-2006 à 01:39:32
masklinn a écrit : Si tu veux demain je relis mon Programming Pearls (me semble que c'est celui là) et je te dis à quel point c'est nul, j'ai souvenir qu'il parlait d'un correcteur orthographique codé en quelques ko, dictionnaire compris. |
bah, spas mal moi je trouve
pis c'est un projet perso, pour apprendre ! à la rigueur, on s'en tape de l'optimisation
Marsh Posté le 25-05-2006 à 01:41:50
Harkonnen a écrit : bah, spas mal moi je trouve |
Le "à quel point c'est nul" était ironique et mirrorait sa propre utilisation du terme espèce de couillon
Marsh Posté le 25-05-2006 à 01:45:44
non paske bon, s'il faut optimiser, je te ponds un algo de huffman en assembleur que j'utilise pour lire le dico (lui meme codé en huffman ou autre algo pour économiser de la place), le tout couplé au moteur du correcteur toujours en assembleur, et avec une GUI 100% assembleur Win32 comme savait si bien les faire chrisbk ( ), et ça tiendra même dans une casio fx-7000g
Marsh Posté le 25-05-2006 à 01:49:32
Harkonnen a écrit : non paske bon, s'il faut optimiser, je te ponds un algo de huffman en assembleur que j'utilise pour lire le dico (lui meme codé en huffman ou autre algo pour économiser de la place), le tout couplé au moteur du correcteur toujours en assembleur, et avec une GUI 100% assembleur Win32 comme savait si bien les faire chrisbk ( ), et ça tiendra même dans une casio fx-7000g |
Ca sera pas suffisant pour battre spell, mais tu peux si tu veux
Marsh Posté le 25-05-2006 à 09:41:01
masklinn a écrit : le dictionnaire étendu (càd l'intégralité des mots reconnus) est de ~75000 mots |
euh...
là y'a une couille dans le potage.
moi mon dico contient plus de 360 000 mots
déjà, si je réduit à 75000, évidement, chuis sûr que moi aussi je le fais tourner sur ma montre
Marsh Posté le 25-05-2006 à 09:44:55
Faut pas oublier que le Français a moins de "mots" que l'anglais, mais très largement plus de déclinaisons possibles.
Exemples :
-> Les adjectifs en français s'écrivent au masculin, pluriel, féminin, féminin pluriel. En anglais, ils sont invariables
-> Les verbes se déclinent en 3 formes en anglais : infinitif, prétérit (_ed), présent 3 personne du singulier (_s) et présent progressif (_ing). En français, je te laisse admirer :
|
Marsh Posté le 25-05-2006 à 09:54:26
moi je dis quand mm chapeau à Arjuna. Si les autres ne sont jms content, c'est pour eux... Ici tu es tjs un des pionier dans certains domaine, continue ainsi
Marsh Posté le 25-05-2006 à 11:07:31
Arjuna a écrit : il est fou ce programme |
Bon, y'a facile 10-15 Mo pris par le framework, mais pour le reste faudrait profiler pour voir si y'a pas des leaks
Marsh Posté le 25-05-2006 à 11:26:27
Arjuna a écrit : Faut pas oublier que le Français a moins de "mots" que l'anglais, mais très largement plus de déclinaisons possibles.
|
J'ai pas lut tout ton code encore, mais pour ce genre tu cas tu peut pas "briser" un peu ton arbre et à partir du t de zozo sauter vers un bout d'arbre contenant toutes les terminaisons pour ce groupe, et tout les verbes de ce groupe réutilisant ce bout d'arbre... ?
(plus difficile de construire l'arbre, mais plus léger en mémoire, et aussi rapide en lecture)
Marsh Posté le 25-05-2006 à 12:33:48
Arjuna a écrit : Faut pas oublier que le Français a moins de "mots" que l'anglais, mais très largement plus de déclinaisons possibles. |
Et alors?
Tu fais tenir 360000 mots en 4Mo, Spell en fait tenir 75000 dans 64ko
Tu fais tenir 5fois plus de mots en 64 fois plus d'espace
Enfin bon vu que tu as l'air de te foutre de ces informations c'est probablement pas la peine de continuer
Arjuna a écrit : Exemples : |
Et alors?
Dans l'analyse lexicographique ayant précédé la finalisation de Spell McIllroy a effectué une analyse d'affixes ayant mené à l'intégration dans spell de 40 règles de préfixages et 30 règles de postfixages (plus une liste de ~1300 exceptions), comme je te l'ai dit un peu plus haut tu utilises une approche pûrement brute force, pas Spell
Marsh Posté le 26-05-2006 à 12:13:20
0x90 a écrit : J'ai pas lut tout ton code encore, mais pour ce genre tu cas tu peut pas "briser" un peu ton arbre et à partir du t de zozo sauter vers un bout d'arbre contenant toutes les terminaisons pour ce groupe, et tout les verbes de ce groupe réutilisant ce bout d'arbre... ? |
yes, sauf que pour ça, faut que je trouve un dico gramatical, et non pas de mots.
en effet, pour pouvoir dire comment se terminent les verbes, faut déjà que je sâche de quel groupe ils sont, et quelles sont les terminaisons possibles de ce groupe.
j'ai pas de bécherelle à la maison, et encore moins l'envie de le recopier
sinon, je ne suis pas convaincu que ce soit plus rapide à lire comme arbre.
par contre, ça ouvre la possibilité de la recherche de la vérification du genre/nombre et de la concordance des temps (un algo "niveau CP" devrait être plutôt simple à écrire... mais pour analyser des phrases à la Zola, ça risque d'être insuffisant )
Marsh Posté le 26-05-2006 à 12:14:36
masklinn a écrit : Et alors? |
jamais de la vie mon graphe utilise 4 Mo... A tout casser, 400 Ko je pense, faudrait faire un échantillon
Marsh Posté le 26-05-2006 à 12:18:17
masklinn a écrit : Dans l'analyse lexicographique ayant précédé la finalisation de Spell McIllroy a effectué une analyse d'affixes ayant mené à l'intégration dans spell de 40 règles de préfixages et 30 règles de postfixages (plus une liste de ~1300 exceptions), comme je te l'ai dit un peu plus haut tu utilises une approche pûrement brute force, pas Spell |
j'ai jamais prétendu écrire un truc qui fait de l'analyse synaxique pour vérifier qu'il n'y a pas d'incohérence dans ce qu'on écrit ou de fautes de style
et encore moins que mon programme tenait en 5 Ko
j'ai juste fait ça principalement "parceque je m'emmerdais", et aussi parce que nombre de gens sont emmerdés quand ils font un site web de type CMS : y'a jamais de correcteur orthographique gratuit utilisable directement depuis leur site.
là, il est pas parfait, mais il a l'avantage d'ête exploitable directement, et open source.
t'as qu'à le réécrire si t'es pas content
Marsh Posté le 26-05-2006 à 12:34:53
Arjuna a écrit : j'ai jamais prétendu écrire un truc qui fait de l'analyse synaxique pour vérifier qu'il n'y a pas d'incohérence dans ce qu'on écrit ou de fautes de style |
Nan mais j'avais bien compris hein
Arjuna a écrit : j'ai juste fait ça principalement "parceque je m'emmerdais", et aussi parce que nombre de gens sont emmerdés quand ils font un site web de type CMS : y'a jamais de correcteur orthographique gratuit utilisable directement depuis leur site. |
Ya pas de bindings C# pour Aspell
Marsh Posté le 26-05-2006 à 12:36:46
masklinn a écrit : |
si
http://aspell-net.sourceforge.net/
Marsh Posté le 26-05-2006 à 16:27:37
Arjuna a écrit : yes, sauf que pour ça, faut que je trouve un dico gramatical, et non pas de mots. |
Ca ne sera pas plus rapide à lire, ce sera exactement la même chose.
Et plutot que de lire un bécherelle, tu peut faire un gros algo bien bourrin pour repérer les similitudes et qui te sorte une version "compactée" de l'arbre. (Mais tu refait pas ce calcul à chaque fois, tu sauvegarde la version compact de l'arbre, sinon ca va être "un peu" lourd ...)
Marsh Posté le 24-05-2006 à 22:33:26
Salut
En mal de trouver un projet "intéressant", j'ai fini par avoir l'idée d'écrire un petit correcteur orthographique.
Bon, je vois d'ici les puristes râler : "ouais mais il est nul ton machin, il est lent et il fait pas grand chose".
Ouais ok... mais bon, c'est pour ça aussi que je poste les sources : si vous avez envie de l'améliorer, vous être libres (ou si vous avez des suggestions formulables en langage humain)
Sans plus tarder, entrons dans le vif du sujet.
Les sources sont partagées en deux projets.
Le premier, cOrthographe, est un projet de librairie de classes (DLL). Il contient tout ce qu'il faut pour l'implémenter dans un programme.
Tout... Pas tout à fait, j'y reviendrai plus tard...
Il contient deux classes :
cLettre, qui représente une lettre (qui l'eu cru !) ainsi qu'un array contenant la CLettre suivante, de façon à, au final, former le mot.
Il s'agit d'un arbre.
Pourquoi un arbre vous me direz ? Simplement pour une raison d'optimisation, et que c'est facile à mettre en place.
Je recherche mon mot lettre pas lettre, et je fini par le trouver (ou non) en ne parcourant à chaque lettre qu'un tableau très réduit, plutôt que de me taper tout le dictionnaire.
J'aurais pu aussi faire une recherche dicotomique, mais ça m'aurait imposé de trier les mots au chargement, ce que je ne fais pas ici (pas besoin).
cDictionnaire, qui hérite de cLettre. En fait, c'est une lettre virtuelle, qui va me permettre de stocker toutes les premières cLettre possibles pour stocker tout mon dictionnaire.
Il comporte aussi un constructeur plus évolué, qui permet de remplir directement le dictionnaire à partir d'un Array de strings. Genre, comme dans la distribution, on a un dictionnaire sous forme de fichier texte.
Le second projet, Orthographe, est un projet Windows. Il comporte une zone de saisie, et une ListBox qui va stocker toutes les fautes d'orthographe trouvées au cours de la saisie.
J'ai ajouté aussi plusieurs méthodes qui feraient bien d'être transplantées dans cOrthographe...
- Le chargement du fichier dictionnaire
- L'ajout d'un mot au fichier dictionnaire (click-droit sur la liste des erreurs quand une est sélectionnée)
- Le découpage du texte saisi en faisant abstraction des caractère "à la con" qui viennent polluer le texte
L'implémentation est un peu pourrie, je le reconnais. J'ai testé en copiant/collant le EULA.TXT de Windows (que vous trouvez dans c:\windows\system32) et... Ca a ramouillé quelques secondes quand même... Je vous parle pas ensuite pour taper le texte Ceci dit, le problème vient de mon implémentation, plus que du moteur de orthographique.
Les sources des projets :
cOrthographe (12 Ko)
Orthographe (881 Ko)
La version compilée du tout :
Release (859 Ko)
Vous noterez que c'est un peu gros... Normal, je distribue le dictionnaire avec... Et il fait 3.55 Mo...
Ce que ça fait :
- Analyse un mot (à vous de découper votre texte) et vérifie qu'il existe existent. Il renverra true ou false le cas échéant.
Ce que ça ne fait pas :
- Le découpage de votre texte
- L'ouverture/modification directe du fichier dico
- Pas de dictionnaire personnel (donc dans mon EXE, je met à jour le fichier du dictionnaire principal)
- Ne fait pas attention à la casse. "habITaTion" n'est pas compté comme une erreur, pas plus qu'une majuscule au milieu d'une phrase, et il n'ignore pas un mot tout en majuscule, qui contient des nombres ou autre.
Ce que ça ne fera certainement jamais :
- La grammaire (ouais, nan...)
- Le reconnaissance de la langue (quoique... y'a bien des méthodes bourrines pour ça...)
- La suggestion de corrections
- Interpolation des orthographes possibles à partir du radical et des préfixe/suffixe permis
On peut pas tout faire non plus...
Ceci dit, je pense que ça peut déjà être pas mal pour valider l'orthographe dans un petit CMS par exemple. Ca évite les méga-fautes...
Voilà, enjoy
Comme vous pouvez le constater, le code du moteur en lui-même est bien plus simple que celui de l'application de test (c'est toujours comme ça de toute façon... )
Message édité par Arjuna le 24-05-2006 à 22:38:44