CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[C]Correction orthographique

solidsquall
solidsquall
Niveau 8
29 mars 2008 à 21:49:01

Bonsoir,
J'aimerais savoir comment créer une fonction de correction orthographique.
Par exemple, on a une chaine de caractère à l'entrée de la fonction, puis la fonction va détecter les mots non reconnus et les souligner par exemple. Et puis en sortie on revoit la chaine de caractère avec les mots non reconnu souligné.
En gros, je voudrais savoir quoi mettre dans ma fonction.
Merci beaucoup :)

novembre
novembre
Niveau 18
29 mars 2008 à 22:10:41

Pour commencer, tu dois te constituer un dictionnaire.
Un mot sera faux s'il n'est pas dans le dictionnaire.
Tu parses donc ta chaine de caractère pour découper les mots et vérifier s'il sont dans le dico.
Sinon pour le fait de renvoyer une chaine de caractères avec des mots souligné je vois pas trop comment.

godrik
godrik
Niveau 30
30 mars 2008 à 00:05:21

"Sinon pour le fait de renvoyer une chaine de caractères avec des mots souligné je vois pas trop comment."
C'est un probleme d'affichage, il faut ensuite voir comment integrer ton correcteur dans un logiciel plus vaste.

solidsquall
solidsquall
Niveau 8
30 mars 2008 à 09:24:10

Oui, je me suis déjà fait un dictionnaire pour ça :ok: .
Sinon ce que je pensais faire c'est prendre en compte chaque mots qui sont séparés par le caractère " "(je pense que c'est ce que tu entendais par découper), puis faire des strcmp dans mon fichier de dictionnaire avec tout les mots, mais le problème c'est le temps d'exécution.

Kaoron
Kaoron
Niveau 9
30 mars 2008 à 09:28:44

Pour faire une conception réutilisable, tu as tout intérêt à ne pas modifier ta chaine dans cette fonction, et renvoyer juste de quoi cibler les mots incorrects afin qu'une autre fonction s'occupe de les souligner, surligner, encadrer ou colorer, suivant ton humeur. :)

Kaoron
Kaoron
Niveau 9
30 mars 2008 à 09:51:10

"mais le problème c'est le temps d'exécution"

Le truc, c'est d'avoir un dictionnaire qui minimisera ton temps de recherche, ou une astuce te permettant de faire des ellipses généreuses sur ton dico ; par exemple, si ton mot à rechercher est turbine, tu gagnerais un temps monstre si tu avais un acces direct aux mots commencant par un T, au lieu de te payer tout le dico. Mais ça c'est peu extensible, donc tu peux passer par d'autres structures adaptées à la recherche, un ABR par exemple, ou réduire ton domaine de recherche en estimant ton texte à une certaine valeur (hash).

Tu es obligé de faire cette opération pour chaque mot de ton texte, donc si ton opération de base est lente, t'es déjà mal barré pour le temps d'execution. Le seul point optimisable, c'est la recherche dans le dico.

Ensuite, basiquement, les correcteurs des logiciels de traitement de texte modernes s'exécutent en parallèle. Ils attendent que tu aies fini de taper ou de modifier un mot et le passent à la moulinette pendant que tu continues à taper, ainsi tu as l'impression que c'est rapide et transparent, mais étant donné que la détection de mots inconnus dans un texte est complexe, la correction du texte en entier prendrait du temps, et ça c'est quasiment incompressible.

UltraSPARC
UltraSPARC
Niveau 2
30 mars 2008 à 12:28:45
  1. Kaoron Voir le profil de Kaoron
  2. Posté le 30 mars 2008 à 09:51:10 Avertir un modérateur
  3. "mais le problème c'est le temps d'exécution"

tu peux passer par d'autres structures adaptées à la recherche, un ABR par exemple, ou réduire ton domaine de recherche en estimant ton texte à une certaine valeur (hash).

:d) c'est un mix des deux qui est le plus rapide en fait, c'est un arbre ou chaque noeud à 26 fils et un booléen pour indiquer si il est une fin de mot possible, pour trouver si un mot existe tu as au pire (si le mot existe) la longueur du mot à parcourir.

Kaoron
Kaoron
Niveau 9
30 mars 2008 à 15:49:15

En fait, non, le plus rapide est un tableau de booléens pouvant être indicé par un mot, réponse en temps constant : 1 opération, quelle que soit la longueur du mot.
Mais... c'est pas une solution intelligente XD.

"pour trouver si un mot existe tu as au pire (si le mot existe) la longueur du mot à parcourir."
Au pire 26 fois la longueur du mot à parcourir si tu as un arbre à noeuds, la longueur seulement si tu as un arbre en tableaux imbriqués.
Pas obligé d'avoir un degré 26 à chaque noeud sinon (d'utiliser des tableaux), une liste des lettres possibles est suffisante. Soit nlog(m) opérations avec une recherche dichotomique de chaque lettre sur un alphabet de taille m pour un mot de taille n. :)
C'est une bonne solution!

MongueurGecko
MongueurGecko
Niveau 6
02 avril 2008 à 04:25:33

Avant de chercher si un mot existe, on peut d'abord chercher à savoir s'il vérifie bien la grammaire du langage (exemple : un mot avec 4 "t" à la suite n'existe pas dans la grammaire française).
La reconnaissance d'un mot selon ce principe peut se faire relativement facilement via un automate.

De plus dès que l'on tombe sur un faute de grammaire, on peut proposer des choix de corrections (les transitions valides qui suivent le dernier caractère correct) plus ou moins pertinents.

Kaoron
Kaoron
Niveau 9
02 avril 2008 à 09:20:00

Gecko : La grammaire, mieux vaut la garder pour la correction syntaxique (et encore, pour un langage naturel on est pas sortis). Ici, c'est innaproprié parce que:
1/ La vérification de la correction d'un mot est potentiellement plus complexe que son existence : n*g opérations au pire cas, g étant le nombre de regles de grammaire à vérifier, non transitives, ni ordonnées.
2/ La correction grammaticale n'implique pas l'existence d'un mot, donc tu dois tout de même faire une recherche au bout de ton test de grammaire.
3/ L'existence d'un mot inclut sa correction grammaticale, c'est à dire qu'au pire cas pour ta grammaire (le mot est grammaticalement correct) tu as quand même la totalité de l'arbre d'existence à affronter, car les mots existants sont supposés grammaticalement corrects. Et à un cas probable d'incorrection à un rang n, les deux vérifications sont redondantes (un mot levant une erreur de grammaire au rang n n'existe pas, c'est à dire : n'a pas de possibilité de poursuivre sa recherche au rang n+1 dans l'arbre d'existence.

Pour les choix de correction à proposer, il faut une notion de distance à évaluer pour classer les suggestions par ordre de pertinence. (qui te dit que c'est le dernier caractère qui est incorrect?)

godrik
godrik
Niveau 30
02 avril 2008 à 19:00:42

je suis assez d'accord avec kaoron, une table de hashage semble toute indiqué.
Il y a 60 000 mots en francais, si tu map vers un ensemble de taille 2^21 (200 000). Il y aura en moyenne 1/3 mot par valeur. Pour un index de moins de 10 Mo; c'est raisonable...

Apres, etant données le peu de mots (3 suivant un test rapidement fait sur ma machine) qu'il y aura par valeur du hash, une recherche bourrine suffira probablement.

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment