Page 2 sur 4

Re: Comment trouver des mot similaires parmi une liste

Publié : lun. 11/oct./2010 21:45
par dayvid
Falsam, je sais pas quoi dire

T'as fait tous sa pour moi, merci :cry:

Je sais pas comment sa marche mais en tous qu'a sa marche
tu es caler sa ce voie :P, t'es un dieux en PB

Pourquoi ne m'aiderais tu pas a améliorer mon projet :D

Sinon c'est vrais que c'est hyper long a crée la base de dico
comment sa se fait ? 8O et sa va poser problème par la suite
ba oui car moi ont peut ajouté des mots alors tu imagine
si je doit la remettre a jour tous les jour, sa va pas le faire
sa va prendre au moins troix jour refaire :cry:

J'ai toujours rien capter a la manière donc ce truc fonctionne
mais je l'étourdirais attentivement :)

Merci encore :D

Edit: je vais avoir encore besoin d'aide :oops:
Pis en love, ranger vos armes et venez m'aider :mrgreen:

Re: Comment trouver des mot similaires parmi une liste

Publié : lun. 11/oct./2010 22:02
par djes
falsam> Super intéressant! Merci :)

Re: Comment trouver des mot similaires parmi une liste

Publié : lun. 11/oct./2010 22:48
par falsam
Un Dieu ? Houla que nonnnnn
Ce n'est que un peu de code PB et des instruction de base SQL.

Un Dieu ..... Qu'est ce qu'il ne faut pas entendre .....Hahahaha :)

@Dayvid : j'ai prévenu que ça allait etre long. Tu viens de stocker dans ton fichier SQLite 62000 enregistrements qui ont subis chacun un calcul de clé Soundex.

Tu n'as plus besoin de refaire cette opération. Par contre la recherche des mots dans la 2eme partie du programme est très rapide comme tu as pu le constater.

Si tu ajoutes des mots dans ton dictionnaire, il faut que tu ajoutes un bouton qui te permet d'ajouter ce mot dans ta base de données.

Ne t'amuse pas à ajouter ce mot dans ton fichier texte poru ensuite refaire tout le traitement de création de la base de données.

Re: Comment trouver des mot similaires parmi une liste

Publié : mar. 12/oct./2010 0:07
par dayvid
Un Dieu ? Houla que nonnnnn
Ce n'est que un peu de code PB et des instruction de base SQL.
Ha en plus d'être bon et sympa faut que tu soit modeste :lol:
Un Dieu ..... Qu'est ce qu'il ne faut pas entendre .....Hahahaha
Oui mon seigneur :lol: , je ne connais pas du tous ce que tu as fait :?
@Dayvid : j'ai prévenu que ça allait etre long.
De quoi parle tu ?, tu compte m'aider encore un petit peut j'espère :)
Tu viens de stocker dans ton fichier SQLite 62000 enregistrements qui ont subis chacun un calcul de clé Soundex.
Me dit pas que t'es devin aussi 8O
Comment tu sais sa toi ? :?, il est très fort sa ce voie, normale, c'est un dieux, et c'est mon dieux a moi :mrgreen:
Dommage pour toi, je ne l'es pas encore fait, c'est trop long enfin j'ai essayer mon seignieur mais vue le temps que sa as pris j'ai laisser béton mais bon en s'en tape :lol:
Tu pense qu'il y aurais moyen que sa ail plus vite, faut trouvé une solution 8)
Tu n'as plus besoin de refaire cette opération
hé si hélas car moi j'ai une base de donner de au moins 500 000 mots
au mon dieux que sa va prendre une éternité tous sa
en plus si faut que j'ajoute des mot, oh la la, je vais mourir avent l'heur moi :lol:
Par contre la recherche des mots dans la 2 ème partie du programme est très rapide comme tu as pu le constater.
Ha que oui, c'est instantané 8O
Si tu ajoutes des mots dans ton dictionnaire, il faut que tu ajoutes un bouton qui te permet d'ajouter ce mot dans ta base de données.
Bon j'ose pas te demander comment ont fait alors je vais essayer tous seule et si j'y arrive vraiment pas je te demanderais d'accord :D
Ne t'amuse pas à ajouter ce mot dans ton fichier texte pour ensuite refaire tout le traitement de création de la base de données.
Ok ok de toute façon je serais déjà mort avent même d'y parvenir :mrgreen:

A plus et encore un grand grand merci a toi falsam :D

Tien j'y pense, voici ma liste de mots français et anglais
http://sd-2.archive-host.com/membres/up ... anglais.7z

ya bien des mot faut mais bon dans l'ensemble il sont corecte

Re: Comment trouver des mot similaires parmi une liste

Publié : mar. 12/oct./2010 1:46
par falsam
515510 Mots dans ton fichier au format texte !!!! Il est évident que le calcul Soundex de chaque mot va prendre du temps.

je ne peux que t'encourager à gérer une base de données dans laquelle tu stockeras l'ensemble de ces mots une bonne fois pour toute. Une application te permettra d'ajouter de nouveaux mots dans cette base données.

la suite demain car il est tard :)

Re: Comment trouver des mot similaires parmi une liste

Publié : mar. 12/oct./2010 8:00
par comtois
j'avais fait ça il y a quelques temps

http://www.purebasic.fr/french/viewtopi ... it=soundex

@falsam je n'ai pas encore regardé de près ta solution, mais l'utilisation des expressions régulières semble très intéressante, merci de partager avec nous.

Re: Comment trouver des mot similaires parmi une liste

Publié : mar. 12/oct./2010 11:20
par dayvid
Salut !

@Falsam, j'ai commencer donc hier a faire ce que tu m'as dit de faire
et j'ai laisser toutes la nuis et la encore c'est pas fini mais sa avance
je suis a la lettre P, sa va prendre encore un bon moment. :)

Bon, une question primordiale, si par la suite je choisie d'ajouté un mot
est-ce-que le programme va vérifier si ce mot existe déjà dans la base de donnée ?
va t-il l'ajouté a la base de donnée ou faut t-il tous recommencer ? :wink:

Tu croix que ont pourra faire un truc aussi efficace que un correcteur d'orthographe ? :D

EDIT: merci @Comtois pour ton éxemple :)
mais sa marche pas avec ma verssion 4.50 :cry:

Re: Comment trouver des mot similaires parmi une liste

Publié : mar. 12/oct./2010 16:49
par Geo Trouvpatou
Salut.
Le code de Comtois converti pour PB4.50

Code : Tout sélectionner

;****************************************
;*soundex2 francisé par Frédéric BROUARD*
;****************************************

;Version Purebasic : Comtois 
;Date : 21/04/04
; PB version : 3.81 fonctionne avec PB4.50

; Librairies extérieures utilisées : Aucune

;Categories : Algorithmes / Soundex 

;Le principe 
;Comment dans une liste de nom de personne arriver à retrouver un certain DUPONT ou DUPOND ou DUPAN ou encore DEPAIN ??? 
;C'est simple, il suffit de se baser sur la consonance et non sur les mots eux-mêmes. 

;Tous les algorithmes de Soundex reposent sur un principe de base qui consiste à codifier Le Mot en éliminant les lettres en doubles,
;les lettres muettes (H en particulier) et en rapprochant les sons de certaines lettres. 
;une fois cette codification obtenue on la stocke auprès de la donnée de base et on effectue la recherche par comparaison directe
;entre Le Soundex</span> ainsi obtenu et Le Mot recherché codifié lui aussi en <span class="posthilit">Soundex. 

;Pour en savoir plus , faites un tour sur le site de Frédéric BROUARD
;http://sqlpro.developpez.com/Soundex/SQL_AZ_soundex.html

Global Dim Voyelle.s(4) 
Global Dim Combin1.s(11,2) 
Global Dim Combin2.s(5,2) 

;voyelles 
For A=1 To 4
        Read$ Voyelle(A) 
Next A 

;Combi1
For A=1 To 11
        For b=1 To 2
            Read$ Combin1(A,b) 
        Next b
Next A

;Combi2
For A=1 To 5
        For b=1 To 2
            Read$ Combin2(A,b) 
        Next b
Next A  

Procedure.s prepare(sIn.s) 
        ; on vide les blancs en Tête et queue, on converti la chaîne en majuscule 
        ; et on remplace les majuscules accentuées, le c avec cédille majuscule 
        ; et l'e dans l'o majuscule R en lettre équivalent en majuscules normales 
        Define.l tailleSin 
        Define.s car,sOut
        
        ; mise en majuscule 
        sIn=Trim(sIn) : sIn=UCase(sIn) : tailleSin=Len(sIn) 
        sOut ="" 
        
        For i=1 To tailleSin 
            car=Mid(sIn,i,1) 
            If car="Â" Or car="Ä" Or car="À" 
                    car ="A"
            ElseIf car="Ç"
                    car="S" 
            ElseIf car="È" Or car="É" Or car="Ê" Or car="Ë" Or car="R" 
                    car="E"
            ElseIf car="Î" Or car="Ï"
                    car="I"
            ElseIf car="Ô" Or car="Ö"
                    car="O"
            ElseIf car="Ù" Or car="Û" Or car="Ü" 
                    car="U"
            EndIf   
            sOut=sOut+car 
        Next i
        ; suppression des blancs et des tirets 
        sIn=sOut : sOut="" 
        For i=1 To Len(sIn) 
            car=Mid(sIn,i,1)
            If (car <> " ") And (car <> "-") 
                    sOut=sOut+car 
            EndIf   
        Next i
        ProcedureReturn sOut 
EndProcedure

Procedure.s soundex2(sIn.s) 
        Define.l i,lSin
        Define.s prfx,let,sIn2

        ; cas trivial : la chaîne est vide 
        If sIn="" 
            ProcedureReturn "    " 
        EndIf
        
        ; on prepare la chaine : étapes 1, 2 et 3 
        sIn=prepare(sIn) 
        lSin=Len(sIn) 
        
        ; traitement du second effet de bord : chaîne de longeur 1 
        If lSin=1 
            ProcedureReturn sIn+"   " 
        EndIf
            
        ;/étape 5 : on remplace les consonnances primaires 
        For i=1 To 11 
            sIn=ReplaceString(sIn,Combin1(i,1),Combin1(i,2)) 
        Next i 
        
        ;/étape 6 : on remplace les voyelles sauf le Y et sauf la première par A 
        lSin=Len(sIn) 
        sIn2= Right(sIn,lSin-1) 
        For i=1 To 4 
            sIn2=ReplaceString(sIn2,Voyelle(i),"A") 
        Next i     
        sIn=Left(sIn,1)+sIn2 

        ;/étape 7 : on remplace les préfixes 
        lSin=Len(sIn) 
        If lSin>=2 
            prfx=Left(sIn,2)
        EndIf   
        If prfx="KN" 
            prfx="NN"
        EndIf 
        If prfx="PH" Or prfx="PF" 
            prfx="FF"
        EndIf 
        If lSin=2 
            sIn=prfx 
        Else 
            sIn=prfx+Right(sIn,lSin-2) 
        EndIf 
        If lSin>=3 
            prfx=Left(sIn,3) 
        EndIf   
        If prfx="MAC" 
            prfx="MCC" 
        EndIf   
        If prfx="SCH" 
            prfx="SSS"
        EndIf 
        If prfx="ASA" 
            prfx="AZA"
        EndIf 
        If lSin=3 
            sIn=prfx 
        Else 
            sIn=prfx+Right(sIn,lSin-3) 
        EndIf 
                                                
        ;/ étape 8 : on conserve la première lettre et on fait  les remplacements complémentaires 
        sIn2=Right(sIn,lSin-1) 
        For i=1 To 5 
            sIn2=ReplaceString(sIn2,Combin2(i,1),Combin2(i,2))
            sIn=Left(sIn,1)+sIn2 
        Next i   
        
        ;/étape 9 : suppression des H sauf CH ou SH 
        lSin=Len(sIn) 
        sIn2="" 
        For i=1 To lSin 
            ; pas de H on conserve la lettre 
            If Mid(sIn,i,1)<>"H" 
                    sIn2=sIn2+Mid(sIn,i,1) 
            Else 
                    ; le H est précédé d'un S ou d'un c on le conserve 
                    If (i>1) And ((Mid(sIn,i-1,1)="C") Or (Mid(sIn,i-1,1)="S")) 
                        sIn2=sIn2+Mid(sIn,i,1) 
                    EndIf 
            EndIf   
        Next i  
        sIn=sIn2 
                            
        ;/étape 10 : suppression des Y sauf précédés d'un A 
        lSin=Len(sIn) 
        sIn2="" 
        For i=1 To lSin 
            ; pas de Y on conserve la lettre  
            If Mid(sIn,i,1)<>"Y" 
                    sIn2=sIn2+Mid(sIn,i,1) 
            Else 
                    ; le Y est précédé d'un A on le conserve  
                    If i>1 And Mid(sIn,i-1,1)="C" 
                        sIn2=sIn2+Mid(sIn,i,1) 
                    EndIf   
            EndIf   
        Next i  
        sIn=sIn2 
        
        ;/étape 11 : on supprime les terminaisons A, T, d, s 
        lSin=Len(sIn)
        let=Right(sIn,1) 
        If let="A" Or let="D" Or let="S" Or let="T" 
            sIn=Left(sIn,lSin-1) 
        EndIf
        
        ;/étape 12 : suppression de tous les A sauf en Tête 
        lSin=Len(sIn) 
        sIn2=Left(sIn,1) 
        For i=2 To lSin 
            ; pas de A on conserve la lettre 
            If Mid(sIn,i,1) <> "A" 
                    sIn2=sIn2+Mid(sIn,i,1)
            EndIf    
        Next i
        sIn=sIn2 
                    
        ;/étape 13 : on supprime les lettres répétitives 
        lSin=Len(sIn)
        sIn2.s=""
        For i=1 To lSin 
            car.s=Mid(sIn,i,1)
            If FindString(sIn2,Mid(sIn,i,1),1)=0 
                    sIn2=sIn2+car
            EndIf   
        Next i
        sIn=sIn2  
                    
        ;/étape 14 : on ne retient que 4 caractères ou on complète avec des blancs 
        sIn=Left(LSet(sIn,4 ," "),4) 
        ProcedureReturn sIn 
EndProcedure

;Tests
a$="Bidouille"  : Debug a$+ "=>"+soundex2(a$) ; code = BDL
a$="Bydouile"   : Debug a$+ "=>"+soundex2(a$) ; code = BDL
a$="Byddouyle"  : Debug a$+ "=>"+soundex2(a$) ; code = BDL
a$="Bi douile"  : Debug a$+ "=>"+soundex2(a$) ; code = BDL
a$="Bi douile"  : Debug a$+ "=>"+soundex2(a$) ; code = BDL
a$="Bi dooil"   : Debug a$+ "=>"+soundex2(a$) ; code = BDL
a$="Bhidooihl"  : Debug a$+ "=>"+soundex2(a$) ; code = BDL
Debug "-------------------------------"
a$="Faure"  : Debug a$+ "=>"+soundex2(a$) ; code = FR
a$="Fort"  : Debug a$+ "=>"+soundex2(a$) ; code = FR
a$="phaure"  : Debug a$+ "=>"+soundex2(a$) ; code = FR
a$="Feaure"  : Debug a$+ "=>"+soundex2(a$) ; code = FR
a$="Faure"  : Debug a$+ "=>"+soundex2(a$) ; code = FR
a$="Fort"  : Debug a$+ "=>"+soundex2(a$) ; code = FR
a$="phaurre"  : Debug a$+ "=>"+soundex2(a$) ; code = FR
a$="Fhaure"  : Debug a$+ "=>"+soundex2(a$) ; code = FR
End

;-
DataSection
;Voyelles
Data.s "E","I","O","U"   
;Combin1
Data.s "GUI","KI" 
Data.s "GUE","KE" 
Data.s "GA","KA" 
Data.s "GO","KO" 
Data.s "GU","K" 
Data.s "CA","KA" 
Data.s "CO","KO" 
Data.s "CU","KU" 
Data.s "Q","K" 
Data.s "CC","K" 
Data.s "CK","K" 
;combin2
Data.s "ASA","AZA" 
Data.s "KN","NN" 
Data.s "PF","FF" 
Data.s "PH","FF" 
Data.s "SCH","SSS"      
EndDataSection

Re: Comment trouver des mot similaires parmi une liste

Publié : mar. 12/oct./2010 17:38
par dayvid
Ouais cool grand merci @Geo Trouvpatou :D
Sa marche du tonner :D

@Falsam, sa y est c'est fini :D
la base de donnée est crée.

Par conte j'ai essayer de recommencer
je me suis dit que si les mots existais déjà
et bien que il allais juste les ignorer
mais il recommence tous :cry:

Il faudrait qu'il regarde dans sa base
de donnée si le mot n'existe pas et si
"non" qu'il le rajoute. :idea:

mais comment il va faire car il ne peut pas trier
ba ouais, imagine que il trouve par exemple
un mot commencent par A ou D etc. :?

Bon bref sinon j'ai une idée pour la
création de la base, pourquoi au lieux d'écrire
dans le fichier, tu n'écris pas dans une variable
et stock tous une fois qu'il a fini, sa irais plus vite non ?

Bref c'est énormément trop long ce truc la :cry:
faut trouvé une solution pour que sa ail plus vite. :P

Bien sinon franchement c'est superbe ton truc la
sa marche très très bien mais je trouve que c'est pas
encore bien opérationnel la recherche de mot pour
la correction, exemple tu entre "autou" et moi je
cherche « autour », et ba si tu entre pas « autour »
il le trouve pas, bref c'est pas sa encore
tu pense que se serais possible d'améliorer sa ? :D

Re: Comment trouver des mot similaires parmi une liste

Publié : mar. 12/oct./2010 20:11
par falsam
Quand on a 515510 Mots dans son dictionnaire, on ne s'amuse pas à vouloir les stocker dans des variables.

Il faut créer une base de données qui intégrera ton dictionnaire dont chaque ligne contient un champ qui sera ton mot ainsi qu'un autre champs qui contiendra la clé soundex calculé.

Iil faudra aussi créer deux clés de tri. Une pour le mot de ton dictionnaire et une autre pour la clé soundex.

De cette maniere lors que tu voudras incorporer un nouveau mot, le programme mettra une fraction de seconde pour te dire si le mot existe ou pas. De meme comme tu as pu le voir dans mon code précédent, la recherche des mots approchant ta saisie prendra aussi qu'une fraction de seconde.

QUAND TU AJOUTERAS UN MOT IL SERA INUTILE DE REFAIRE LA MOULINETTE.......TE

Re: Comment trouver des mot similaires parmi une liste

Publié : mar. 12/oct./2010 20:25
par falsam
Objectif : Lire séquentiellement ton dictrionnaire au format texte (515 510 mots) et le transferer dans une base de donnée SQLite.

Durant le transfert le programme devra calculer la clé Soundex de chacun des mots.

Voila le code qui te permettra de créer ta base de donnée au format SQListe.
par rapport au code précédent, J'ai ajouter une clé de tri sur la colonne des noms figurant dans ton dictionnaire.

J'insiste lourdement : Ce code est à lancer qu'une seule fois.

Tu crées ton executable et tu le lances. Etant réduit à sa plus simple expression, le programme ne t'affichera un message que quand ça sera terminer :)

Code : Tout sélectionner

IncludeFile "soundex.pb"
UseSQLiteDatabase()

Enumeration                 
  #dico_txt  ;Le dictionnaire au format texte
  #dico_db  ;La base de données SQlite3
  #dico_tab ;la table des mots 
EndEnumeration

SqlQuery.s  ;Requéte SQL
Word.s       ;Mot en cours de lecture 

;Creation de la base de données 
If CreateFile(#dico_db,"dico.db3")
  CloseFile(#dico_db)
EndIf

;Connection à la base de données
If OpenDatabase(#dico_db, #PB_Compiler_FilePath+"/dico.db3", "", "", #PB_Database_SQLite)
  
  ;Création de la table dictionnaire
  SqlQuery="Create Table DicoFR (Word Char(30), SoundexCode Char(10))"
  DatabaseUpdate(#dico_db,SqlQuery)
  
  ;Création de la clé de tri sur la colonne des mots.
  SqlQuery="Create Index WordKey On DicoFr(Word ASC)"
  DatabaseUpdate(#dico_db,SqlQuery)
  
  ;Création de la clé de tri sur la colonne des code SoundDex
  SqlQuery="Create Index SoundexKey On DicoFr(SoundexCode ASC)"
  DatabaseUpdate(#dico_db,SqlQuery)
  
  ;Lecture du fichier texte contenant les mots à enregistrer dans la base de données
  If ReadFile(#dico_txt,"Dico.txt")
    ;Tant que la fin du fichier n'est pas atteint
    While Eof(#dico_txt)=0
      
      ;Lecture du mot suivant 
      word=ReadString(#dico_txt)
      
      ;Mise en forme de la requete d'ajout dans la base de données 
      SqlQuery = "insert into dicoFR (Word, SoundexCode) values ('"
      SqlQuery + Word + "','"
      SqlQuery + Soundex(Word) + "') "
      
      ;Enregistrement du mot dans la base de données.
      DatabaseUpdate(#dico_db,SqlQuery)
    Wend
    FinishDatabaseQuery(#dico_db)
    CloseFile(#dico_txt)
    MessageRequester("Information","Fin du traitement")
   EndIf
EndIf
 

Re: Comment trouver des mot similaires parmi une liste

Publié : mar. 12/oct./2010 20:26
par falsam
Programme principal (Trés minimaliste) de gestion de ton dictionnaire.

Fonctionnalité :
- Recherche d'un mot
- Ajout d'un mot et calcul de son code Soundex
- Suppression d'un mot

Code : Tout sélectionner

IncludeFile "soundex.pb"

UseSQLiteDatabase()

Enumeration 
  #FontApp   ;Police de caractére globale de l'application
  #Dico         ;Base de donnée SqLite
  #MainForm ;La fenetre de saisie 
  #Edit          ;avec son champs de saisie 
  #ListeResult;et sa liste de résultat 
  #BtnAdd     ;Ajout d'un enregistement
  #BtnDel      ;Tout le monde peut se tromper : Voila notre bouton suppression
EndEnumeration


;Affichage de l'ecran principale
Procedure MainFormSHow()
  LoadFont(#FontApp,"Arial",10)
  SetGadgetFont(#PB_Default,FontID(#FontApp)) 
  If OpenWindow(#Mainform,0,0,500,400,"Dico", #PB_Window_ScreenCentered | #PB_Window_SystemMenu )
    TextGadget(#PB_Any,20,20,400,24,"Saisir le mot à rechercher ou bien à ajouter ou supprimer")
    StringGadget(#edit,20,50,200,22,"")
    ListViewGadget(#ListeResult,35,80,200,200)
    ButtonGadget(#BtnAdd,300,50,80,24,"Ajouter")
    ButtonGadget(#BtnDel,300,75,80,24,"Supprimer")
    HideGadget(#ListeResult,1)
    SetActiveGadget(#Edit)
  EndIf
EndProcedure

;Cherchons la liste de mot ayant en commun le meme code SoundEx
;le mot recherché doit au moins avoir 2 lettres 
Procedure SearchWord() 
  ReqSql.s="select Word from dicoFr where SoundexCode="+Chr(39)+soundex(GetGadgetText(#Edit))+Chr(39)
  
  If Len(GetGadgetText(#Edit))>2
    If OpenDatabase(#Dico, #PB_Compiler_FilePath+"/dico.db3", "", "", #PB_Database_SQLite)
      If DatabaseQuery(#Dico, ReqSql)
        ClearGadgetItems(#ListeResult)
        HideGadget(#ListeResult,0)
        While NextDatabaseRow(#Dico)
          AddGadgetItem(#ListeResult,-1,GetDatabaseString(#Dico, 0))
        Wend
        FinishDatabaseQuery(#Dico)
      Else
        MessageRequester("Erreur", "Impossible d'executer la requete: "+DatabaseError())
      EndIf
      CloseDatabase(#Dico)
    EndIf
  Else
    HideGadget(#ListeResult,1)
  EndIf
EndProcedure

;Ajout d'un mot dans la base de données 
Procedure AddWord()
  Word.s=LCase(GetGadgetText(#Edit))
  xWord.s=""
  
  If OpenDatabase(#Dico, #PB_Compiler_FilePath+"/dico.db3", "", "", #PB_Database_SQLite)
    
    ;On cherche si le mot existe ou pas .
    ;La variable xWord contiendra le résultat si la recherche a abouti
    ReqSql.s="select Word from dicoFr where Word="+Chr(39)+LCase(Word)+Chr(39)
    
    If DatabaseQuery(#Dico,ReqSql)
      While NextDatabaseRow(#Dico)
        xWord=GetDatabaseString(#Dico, 0)
      Wend
      FinishDatabaseQuery(#Dico)
      
      If xWord=Word
        MessageRequester("Information","Le mot "+Word+" existe déja dans le dictionnaire")
        
      Else
        
        ;Le mot n'existe pas dans la base: Initialisation de la requete poru ajout dans la base
        ReqSql.s = "insert into dicoFR (Word, SoundexCode) values ('"
        ReqSql + Word + "','"
        ReqSql + Soundex(Word) + "') "
        
        ;Exécution de la requete
        DatabaseUpdate(#dico,ReqSql)
        FinishDatabaseQuery(#Dico)
        
        MessageRequester("Information","Le mot "+Word+" a été ajouté")     
      EndIf
    EndIf
  Else
    MessageRequester("Information","La base n'a pu etre ouverte correctement")
  EndIf
      
EndProcedure

;Suppression d'un mot
Procedure DelWord()
  Word.s=LCase(GetGadgetText(#Edit))
  xWord.s=""
  
  If OpenDatabase(#Dico, #PB_Compiler_FilePath+"/dico.db3", "", "", #PB_Database_SQLite)
    ;Verifions que le mot n'a pas déja était supprimé
    ReqSql.s="select Word from dicoFr where Word="+Chr(39)+LCase(Word)+Chr(39)
    
    If DatabaseQuery(#Dico,ReqSql)
      While NextDatabaseRow(#Dico)
        xWord=GetDatabaseString(#Dico, 0)
      Wend
      FinishDatabaseQuery(#Dico)
      
      If xWord=Word
        ;Le mot existe, supprimons le
        ReqSql.s = "delete from dicoFR where Word="+Chr(39)+ Word+Chr(39)
        If DatabaseUpdate(#Dico, ReqSql)=1
            MessageRequester("Information","Le mot "+ Word+ " a été supprimé")
          Else
            MessageRequester("Information","Erreur lors de la suppression du mot "+Word+" "+DatabaseError())
        EndIf
        FinishDatabaseQuery(#Dico)
      Else
        MessageRequester("Information","Le mot "+Word+" N'existe pas dans la base")
    EndIf
    CloseDatabase(#Dico)
  EndIf

  Else
    MessageRequester("Information","La base n'a pu etre ouverte correctement")
  EndIf
EndProcedure


MainFormSHow()

Repeat
  Select WaitWindowEvent()
    Case #PB_Event_Gadget
      Select EventGadget()
          
        Case #ListeResult
          SetGadgetText(#Edit, GetGadgetText(#ListeResult))
          SetActiveGadget(#Edit)
          HideGadget(#ListeResult,1)
          
        Case #Edit
          Select EventType()
            Case #PB_EventType_Focus
            Case #PB_EventType_Change
              SearchWord()
          EndSelect
          
        Case #BtnAdd ;Ajout d'un mot
          AddWord()
          
        Case #BtnDel ;Supprression d'un mot 
          DelWord()
          
      EndSelect
                
    Case #PB_Event_CloseWindow
      End
      
  EndSelect
ForEver

On aurait pu inclure dans ce code la possibilité d'ajouter un ensemble de nouveaux mots figurant dans un fichier texte.

Re: Comment trouver des mot similaires parmi une liste

Publié : mar. 12/oct./2010 20:51
par dayvid
whaou, j'en bave d'avence :)

Voici la toute dernière base de donnée de mots français et anglais
http://sd-2.archive-host.com/membres/up ... anglais.7z

Avec 7-Zip, il la compresser a 1.15 Mo alors que avec paq8px_v69 a 389 Ko, étonnant hein !

Re: Comment trouver des mot similaires parmi une liste

Publié : mar. 12/oct./2010 22:22
par falsam
Je voudrais bien comprendre pourquoi tu mélanges les mots anglais et français.

Re: Comment trouver des mot similaires parmi une liste

Publié : mar. 12/oct./2010 23:06
par dayvid
Ba cher pas moi comme sa ta tous !

Cool ton éxemple Falsam, merci :D
Que doi-je faire maintenant ?