PureBasic

Forums PureBasic
Nous sommes le Dim 19/Mai/2013 2:02

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 4 messages ] 
Auteur Message
 Sujet du message: un petit crocki pour rechercher le mot le plus proche...
MessagePosté: Dim 17/Oct/2010 21:47 
Hors ligne

Inscription: Mer 11/Nov/2009 18:17
Messages: 1251
Localisation: Poitiers (Vienne)
Salut !

Je me suis acharner a crée ce petit code sympathique qui permet simplement de donner le mot le plus proche du votre
je trouve sa ingénieux mais simple et pourtant j'ai ramer a le mettre au point car sa marchais pas comme je voulais

Code:
mot$ = "entipathique"
base_de_donner$ = "Anticonstitutionnellement, entité, encombrer, cambrement, antipat, banjo, emcombrera, encombrerais, combattre, Encombrement, ambre, bande, imbriquée, antipathique, bonjour, enfoncer, concombre, bando."

mot$ = RTrim(mot$)
mot$ = LCase(mot$)
base_de_donner$ = RTrim(base_de_donner$)
base_de_donner$ = LCase(base_de_donner$)

position_exraction = 0
numero_mot_base_de_donner = 0

NewList mot_au_caractere_simillaire.s()

Repeat
  position_exraction + 1
  caractere$ = Mid(base_de_donner$, position_exraction, 1)
 
  If caractere$ = "," Or caractere$ = "."

    position_exraction + 1
    position_exraction_mot = 0
    position_extraction_mot_base_de_donner = 0
    caractere_simillaire = 0
    numero_mot_base_de_donner + 1
    longueur_mot = Len(mot$)
    longueur_extraction_mot_base_de_donner = Len(extraction_mot_base_de_donner$)
   
    Repeat
     
      position_exraction_mot + 1
      caractere_mot$ = Mid(mot$, position_exraction_mot, 1)
     
      position_extraction_mot_base_de_donner + 1
      caractere_extraction_mot_base_de_donner$ = Mid(extraction_mot_base_de_donner$, position_extraction_mot_base_de_donner, 1)
     
      If caractere_mot$ = caractere_extraction_mot_base_de_donner$ And caractere_mot$ <> "" And caractere_extraction_mot_base_de_donner$ <> ""
        caractere_simillaire + 1
      ElseIf caractere_mot$ = "" Or caractere_extraction_mot_base_de_donner$ = ""
        LastElement(mot_au_caractere_simillaire())
        AddElement(mot_au_caractere_simillaire())
        mot_au_caractere_simillaire() = Str(caractere_simillaire) + "," + extraction_mot_base_de_donner$
        Break
        EndIf
     
    ForEver
   
    extraction_mot_base_de_donner$ = ""
   
  Else
   
    If caractere$= ""
      Break
    Else
      extraction_mot_base_de_donner$ + caractere$
      EndIf
  EndIf
 
ForEver

FirstElement(mot_au_caractere_simillaire())
ForEach mot_au_caractere_simillaire()
  element + 1
  If Val(mot_au_caractere_simillaire()) > nombre
    nombre = Val(mot_au_caractere_simillaire())
    element_base_de_donner = element
    mot_simillaire$ = mot_au_caractere_simillaire()
    EndIf
Next mot_au_caractere_simillaire()

Debug "Le mot le plus proche du votre est " + Chr(34) + Mid(mot_simillaire$, FindString(mot_simillaire$, ",", 1) + 1) + Chr(34)


amélioration:

Code:
mot$ = "banjour"
base_de_donner$ = "Anticonstitutionnellement, entité, encombrer, cambrement, antipat, banjo, emcombrera, encombrerais, combattre, Encombrement, ambre, bande, imbriquée, antipathique, bonjour, enfoncer, concombre, bando."

mot$ = RTrim(mot$)
mot$ = LCase(mot$)
base_de_donner$ = RTrim(base_de_donner$)
base_de_donner$ = LCase(base_de_donner$)

mot$ = RemoveString(mot$, "a")
mot$ = RemoveString(mot$, "e")
mot$ = RemoveString(mot$, "i")
mot$ = RemoveString(mot$, "o")
mot$ = RemoveString(mot$, "u")
mot$ = RemoveString(mot$, "y")
mot$ = RemoveString(mot$, "h")
mot$ = RemoveString(mot$, "ç")

position_exraction = 0
numero_mot_base_de_donner = 0

NewList mot_au_caractere_simillaire.s()

Repeat
  position_exraction + 1
  caractere$ = Mid(base_de_donner$, position_exraction, 1)
 
  If caractere$ = "," Or caractere$ = "."

    position_exraction + 1
    position_exraction_mot = 0
    position_extraction_mot_base_de_donner = 0
    caractere_simillaire = 0
    numero_mot_base_de_donner + 1
    longueur_mot = Len(mot$)
    longueur_extraction_mot_base_de_donner = Len(extraction_mot_base_de_donner$)
   
    extraction_mot_base_de_donner2$ = RemoveString(extraction_mot_base_de_donner$, "a")
    extraction_mot_base_de_donner2$ = RemoveString(extraction_mot_base_de_donner2$, "e")
    extraction_mot_base_de_donner2$ = RemoveString(extraction_mot_base_de_donner2$, "i")
    extraction_mot_base_de_donner2$ = RemoveString(extraction_mot_base_de_donner2$, "o")
    extraction_mot_base_de_donner2$ = RemoveString(extraction_mot_base_de_donner2$, "u")
    extraction_mot_base_de_donner2$ = RemoveString(extraction_mot_base_de_donner2$, "y")
    extraction_mot_base_de_donner2$ = RemoveString(extraction_mot_base_de_donner2$, "ç")
    extraction_mot_base_de_donner2$ = RemoveString(extraction_mot_base_de_donner2$, "h")

    Repeat
     
      position_exraction_mot + 1
      caractere_mot$ = Mid(mot$, position_exraction_mot, 1)
     
      position_extraction_mot_base_de_donner + 1
      caractere_extraction_mot_base_de_donner$ = Mid(extraction_mot_base_de_donner2$, position_extraction_mot_base_de_donner, 1)
     
      If caractere_mot$ = caractere_extraction_mot_base_de_donner$ And caractere_mot$ <> "" And caractere_extraction_mot_base_de_donner$ <> ""
        caractere_simillaire + 1
      ElseIf caractere_mot$ = "" Or caractere_extraction_mot_base_de_donner$ = ""
        LastElement(mot_au_caractere_simillaire())
        AddElement(mot_au_caractere_simillaire())
        mot_au_caractere_simillaire() = Str(caractere_simillaire) + "," + extraction_mot_base_de_donner$
        Break
        EndIf
     
    ForEver
   
    extraction_mot_base_de_donner$ = ""
   
  Else
   
    If caractere$= ""
      Break
    Else
      extraction_mot_base_de_donner$ + caractere$
      EndIf
  EndIf
 
ForEver

FirstElement(mot_au_caractere_simillaire())
ForEach mot_au_caractere_simillaire()
  element + 1
  If Val(mot_au_caractere_simillaire()) > nombre
    nombre = Val(mot_au_caractere_simillaire())
    element_base_de_donner = element
    mot_simillaire$ = mot_au_caractere_simillaire()
    EndIf
Next mot_au_caractere_simillaire()

Debug "Le mot le plus proche du votre est " + Chr(34) + Mid(mot_simillaire$, FindString(mot_simillaire$, ",", 1) + 1) + Chr(34)


et la le dernier code

Code:
mot$ = "elefan"
base_de_donner$ = "Anticonstitutionnellement, entité, encombrer, éléphant, cambrement, antipat, banjo, emcombrera, encombrerais, combattre, Encombrement, ambre, bande, imbriquée, antipathique, bonjour, enfoncer, concombre, bando."

mot$ = RTrim(mot$)
mot$ = LCase(mot$)
base_de_donner$ = RTrim(base_de_donner$)
base_de_donner$ = LCase(base_de_donner$)

mot$ = RemoveString(mot$, "a")
mot$ = RemoveString(mot$, "à")
mot$ = RemoveString(mot$, "â")
mot$ = RemoveString(mot$, "e")
mot$ = RemoveString(mot$, "é")
mot$ = RemoveString(mot$, "è")
mot$ = RemoveString(mot$, "ê")
mot$ = RemoveString(mot$, "ë")
mot$ = RemoveString(mot$, "i")
mot$ = RemoveString(mot$, "î")
mot$ = RemoveString(mot$, "ï")
mot$ = RemoveString(mot$, "o")
mot$ = RemoveString(mot$, "ô")
mot$ = RemoveString(mot$, "ö")
mot$ = RemoveString(mot$, "u")
mot$ = RemoveString(mot$, "û")
mot$ = RemoveString(mot$, "ü")
mot$ = RemoveString(mot$, "h")
mot$ = ReplaceString(mot$, "ç", "s")
mot$ = ReplaceString(mot$, "w", "v")
mot$ = ReplaceString(mot$, "y", "ll")
mot$ = ReplaceString(mot$, "ÿ", "ll")
mot$ = ReplaceString(mot$, "ph", "f")

position_exraction = 0
numero_mot_base_de_donner = 0

NewList mot_au_caractere_simillaire.s()

Repeat
  position_exraction + 1
  caractere$ = Mid(base_de_donner$, position_exraction, 1)
 
  If caractere$ = "," Or caractere$ = "."

    position_exraction + 1
    position_exraction_mot = 0
    position_extraction_mot_base_de_donner = 0
    caractere_simillaire = 0
    numero_mot_base_de_donner + 1
    longueur_mot = Len(mot$)
    longueur_extraction_mot_base_de_donner = Len(extraction_mot_base_de_donner$)
   
    extraction_mot_base_de_donner2$ = RemoveString(extraction_mot_base_de_donner$, "a")
    extraction_mot_base_de_donner2$ = RemoveString(extraction_mot_base_de_donner2$, "à")
    extraction_mot_base_de_donner2$ = RemoveString(extraction_mot_base_de_donner2$, "â")
    extraction_mot_base_de_donner2$ = RemoveString(extraction_mot_base_de_donner2$, "e")
    extraction_mot_base_de_donner2$ = RemoveString(extraction_mot_base_de_donner2$, "é")
    extraction_mot_base_de_donner2$ = RemoveString(extraction_mot_base_de_donner2$, "è")
    extraction_mot_base_de_donner2$ = RemoveString(extraction_mot_base_de_donner2$, "ê")
    extraction_mot_base_de_donner2$ = RemoveString(extraction_mot_base_de_donner2$, "ë")
    extraction_mot_base_de_donner2$ = RemoveString(extraction_mot_base_de_donner2$, "i")
    extraction_mot_base_de_donner2$ = RemoveString(extraction_mot_base_de_donner2$, "î")
    extraction_mot_base_de_donner2$ = RemoveString(extraction_mot_base_de_donner2$, "ï")
    extraction_mot_base_de_donner2$ = RemoveString(extraction_mot_base_de_donner2$, "o")
    extraction_mot_base_de_donner2$ = RemoveString(extraction_mot_base_de_donner2$, "ô")
    extraction_mot_base_de_donner2$ = RemoveString(extraction_mot_base_de_donner2$, "ö")
    extraction_mot_base_de_donner2$ = RemoveString(extraction_mot_base_de_donner2$, "u")
    extraction_mot_base_de_donner2$ = RemoveString(extraction_mot_base_de_donner2$, "û")
    extraction_mot_base_de_donner2$ = RemoveString(extraction_mot_base_de_donner2$, "ü")
    extraction_mot_base_de_donner2$ = RemoveString(extraction_mot_base_de_donner2$, "h")
    extraction_mot_base_de_donner2$ = ReplaceString(extraction_mot_base_de_donner2$, "ç", "s")
    extraction_mot_base_de_donner2$ = ReplaceString(extraction_mot_base_de_donner2$, "w", "v")
    extraction_mot_base_de_donner2$ = ReplaceString(extraction_mot_base_de_donner2$, "y", "ll")
    extraction_mot_base_de_donner2$ = ReplaceString(extraction_mot_base_de_donner2$, "ÿ", "ll")
    extraction_mot_base_de_donner2$ = ReplaceString(extraction_mot_base_de_donner2$, "ph", "f")
   
    Repeat
     
      position_exraction_mot + 1
      caractere_mot$ = Mid(mot$, position_exraction_mot, 1)
     
      position_extraction_mot_base_de_donner + 1
      caractere_extraction_mot_base_de_donner$ = Mid(extraction_mot_base_de_donner2$, position_extraction_mot_base_de_donner, 1)
     
      If caractere_mot$ = caractere_extraction_mot_base_de_donner$ And caractere_mot$ <> "" And caractere_extraction_mot_base_de_donner$ <> ""
        caractere_simillaire + 1
      ElseIf caractere_mot$ = "" Or caractere_extraction_mot_base_de_donner$ = ""
        LastElement(mot_au_caractere_simillaire())
        AddElement(mot_au_caractere_simillaire())
        mot_au_caractere_simillaire() = Str(caractere_simillaire) + "," + extraction_mot_base_de_donner$
        Break
        EndIf
     
    ForEver
   
    extraction_mot_base_de_donner$ = ""
   
  Else
   
    If caractere$= ""
      Break
    Else
      extraction_mot_base_de_donner$ + caractere$
      EndIf
  EndIf
 
ForEver

FirstElement(mot_au_caractere_simillaire())
ForEach mot_au_caractere_simillaire()
  element + 1
  If Val(mot_au_caractere_simillaire()) > nombre
    nombre = Val(mot_au_caractere_simillaire())
    element_base_de_donner = element
    mot_simillaire$ = mot_au_caractere_simillaire()
    EndIf
Next mot_au_caractere_simillaire()

Debug "Le mot le plus proche du votre est " + Chr(34) + Mid(mot_simillaire$, FindString(mot_simillaire$, ",", 1) + 1) + Chr(34)
[/code]

_________________
La vie, C'est comme, Une boitte, De startis, On en voie, De toutes, Les couleurs !

Mon forum http://purebasic.forumphp3.com/index.php


Dernière édition par dayvid le Dim 17/Oct/2010 22:30, édité 4 fois.

Haut
 Profil  
 
 Sujet du message: Re: un petit crocki pour rechercher le mot le plus proche...
MessagePosté: Dim 17/Oct/2010 22:14 
Hors ligne

Inscription: Mer 11/Nov/2009 18:17
Messages: 1251
Localisation: Poitiers (Vienne)
a quoi sa sert ?

et bien sa sert comme je l'es dit a rechercher le mot le plus proche du votre
pour une correction par exemple voilà !

_________________
La vie, C'est comme, Une boitte, De startis, On en voie, De toutes, Les couleurs !

Mon forum http://purebasic.forumphp3.com/index.php


Dernière édition par dayvid le Dim 17/Oct/2010 22:31, édité 2 fois.

Haut
 Profil  
 
 Sujet du message: Re: un petit crocki pour rechercher le mot le plus proche...
MessagePosté: Dim 17/Oct/2010 22:17 
Hors ligne
Avatar de l’utilisateur

Inscription: Ven 13/Fév/2004 0:57
Messages: 3065
c'est pas très viable comme solution, ça ne marchera que sur des erreurs de lettres avec une longueur de mot toujours identique, ce qui est loin d'être le cas.

D'ailleurs, ça aurait été bien d'expliquer le fonctionnement du code!


Haut
 Profil  
 
 Sujet du message: Re: un petit crocki pour rechercher le mot le plus proche...
MessagePosté: Dim 17/Oct/2010 22:33 
Hors ligne

Inscription: Mer 11/Nov/2009 18:17
Messages: 1251
Localisation: Poitiers (Vienne)
Corriger ! :D

voici pourquoi j'ai crée sa
je trouve d’ailleurs que le système que Falsam ma fait n'est pas
vraiment au point enfin bon bref

http://sd-2.archive-host.com/membres/up ... _proche.7z

le fichier est asses gros puisque j'ai inclue le gros dico de + de 30 Mo

_________________
La vie, C'est comme, Une boitte, De startis, On en voie, De toutes, Les couleurs !

Mon forum http://purebasic.forumphp3.com/index.php


Haut
 Profil  
 
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 4 messages ] 

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye