Anagrammes, solution efficace pour les trouver ?

Anagrammes, solution efficace pour les trouver ? - PHP - Programmation

Marsh Posté le 26-09-2004 à 02:56:28    

J'ai téléchargé un ptit logiciel pour trouver les anagrammes d'un mot (tous les mots ayant les memes lettres qu'un autre, dans un ordre different, ex: loupi -> poilu ,ok ca veut rien dire mais c'est pour l'exemple :D ), et dans son dossier d'installation il y'a des fichiers textes contenant des dizaines(des centaines?) de milliers de mots triés alphabétiquement.
 
Je me demande comment faire en php pour trouver les anagrammes d'un mot, il y'a la solution d'une regex ("tous les mots ayant toutes les lettres du mot de départ" ) et de passer tous les mots de la bdd en revue à la suite, trés lourd tout de meme. Verriez-vous une autre solution :??:

Reply

Marsh Posté le 26-09-2004 à 02:56:28   

Reply

Marsh Posté le 26-09-2004 à 14:04:15    

le pb de tous les mots ayant les meme lettres c qu'ensuite faut faire gaffe au doublons de lettres !
 
moi je vois une solution : pour chaque mot tu fait un anagramme qui ne veux rien dire mais qui a toutes les lettres de ce mot mais dans l'ordre alphabetique résultat tu fait pareil pour le mot que tu cherche et t'as qu'a faire un relevé  
 
exemple :  
Loupi -> ilopu
poilu -> ilopu
bob -> bbo
....
 
tien moi au courant  !

Reply

Marsh Posté le 26-09-2004 à 16:12:06    

J'ai pas compris :heink:  :D

Reply

Marsh Posté le 26-09-2004 à 16:20:39    

bon je recommence  
pour TOUT tes mots dans ta bdd tu creer un 'mot joint' suivant cette regle : chaque mo joint contient toutes les lettres du mot d'origine mais triées par ordre alphabetique
 
exemple :  

Code :
  1. Mot  - >  Mot joint
  2. poilu  -> ilopu
  3. anagramme -> aaaegmmnr
  4. forum  -> fmoru


 
ensuite quand tu cherche un annagramme tu prend le ton mot d'origine  :
Loupi et tu fait la meme chose  
Loupi -> ilopu  
 
ensuite tu cherche dans ta base de données ce 'mot joint'. a chaque fois que tu trouve ce 'mot join',  
tu sais que le mot correspondant est un annagramme
 
l'avantage c que t'as juste a parcourrir 1 fois ta bdd sans regle trop compliquée de comparaison puisque le champ doit etre egal à ton 'mot joint'.  
 
pareil si tu utilise un fichier a la place de ta bdd, un coup de ereg ou d'une fonction parallele et tu recupere ton mot !
 
envoie moi ton fichier de mots et je te montrerai !

Reply

Marsh Posté le 26-09-2004 à 18:18:43    

hannnn terrible comme solution :love:  :love:  :love:
 
Pour les fichiers, j'ai cherché mais j'avais supprimée le programme, ceci-dit il est sur telecharger.com, j'avais fait une recherche sur anagramme et scrabble, j'ai essayé de le retrouver mais pas moyen (j'en ai reinstaller 4 sans succés :/ )

Reply

Marsh Posté le 26-09-2004 à 18:26:37    

de rien  
 
c un pb auquel j'avais refléchi et en fait t obligé de te derouter completement de la constitution d'un mot pour arriver a en comparer plusieurs !
 
je cherche un dico correcte et la j'en ai trouvé un de 3.5Mo
y a tout les verbes conjugués dedans je crois  
soit 336531 mots - ca va exploser ma base sql de free je crois !

Reply

Marsh Posté le 26-09-2004 à 19:07:50    

jolly a écrit :

de rien  
 
c un pb auquel j'avais refléchi et en fait t obligé de te derouter completement de la constitution d'un mot pour arriver a en comparer plusieurs !
 
je cherche un dico correcte et la j'en ai trouvé un de 3.5Mo
y a tout les verbes conjugués dedans je crois  
soit 336531 mots - ca va exploser ma base sql de free je crois !


 
C'est le dico d'un programme à télécharger ou tu l'a trouvé ailleurs? :)

Reply

Marsh Posté le 26-09-2004 à 19:11:20    

Arf, un bête array_intersect est largement suffisant... Faudrait commencer à consulter la doc de temps en temps...


---------------
Expert en expertises
Reply

Marsh Posté le 26-09-2004 à 19:33:50    

Hermes le Messager a écrit :

Arf, un bête array_intersect est largement suffisant... Faudrait commencer à consulter la doc de temps en temps...


 
ouais et tu veux qu'on la connaisse comment la fonction? Elle est peu utilisée, n'a pas un nom explicite, et je me vois mal lire la doc entière avec ses milliers de fonctions :sarcastic:

Reply

Marsh Posté le 26-09-2004 à 20:24:59    

ah conais pas cette fonction  !
 
mais apres ton array intersec, t'as encore a comparer la longueure du résultat ....
et pour 3 millions de mots ca fait quand meme bcp
 
je pense aussi que c plus lourd qu'une comparaison cde chaines 'simples'

Reply

Marsh Posté le 26-09-2004 à 20:24:59   

Reply

Marsh Posté le 26-09-2004 à 21:13:11    

jolly a écrit :

ah conais pas cette fonction  !
 
mais apres ton array intersec, t'as encore a comparer la longueure du résultat ....
et pour 3 millions de mots ca fait quand meme bcp
 
je pense aussi que c plus lourd qu'une comparaison cde chaines 'simples'


 
C'est ce que je pense aussi, avec ta méthode il suffit de faire un select * from machin where truc = truc2, une seule et unique requete, on peut pas faire plus léger :)

Reply

Marsh Posté le 26-09-2004 à 22:02:42    

sauf sur la quantité de mots  
a la rigueure je peense qu'il serait interessant de fragmenter selon la longueure des mots en plusieures tables mais je suis pas sur que 3 000 000 d'entrées dans Mysql soit si lourd que ca a gerer  !
 
en fait je bug deja dans la creation des entrées (timeout) alors :D !


Message édité par jolly le 26-09-2004 à 22:02:57
Reply

Marsh Posté le 26-09-2004 à 22:34:24    

jolly a écrit :

ah conais pas cette fonction  !
 
mais apres ton array intersec, t'as encore a comparer la longueure du résultat ....
et pour 3 millions de mots ca fait quand meme bcp
 
je pense aussi que c plus lourd qu'une comparaison cde chaines 'simples'


 
Non, il suffit de prendre la longueur de la chaine et de comparer avec le nombre d'occurences. c'est rêglé en 2 lignes.


---------------
Expert en expertises
Reply

Marsh Posté le 26-09-2004 à 22:36:01    

aspegic500mg a écrit :

ouais [u]et tu veux qu'on la connaisse comment la fonction[/u]? Elle est peu utilisée, n'a pas un nom explicite, et je me vois mal lire la doc entière avec ses milliers de fonctions :sarcastic:


 
Et comment tu crois que je l'ai trouvé la fonction ?
 
Tu prends la doc PHP en .chm, tu vas sur rechercher, tu mets tableaux, et tu regardes les fonctions capables de comparer deux tables. C'est aussi simple que ça, sachant que pour comparer la composition de 2 mots, tu devras passer par des tables de lettres...


---------------
Expert en expertises
Reply

Marsh Posté le 26-09-2004 à 22:49:02    

la Hermes a raison : la seule solution pour trouver les bonnes fonction c de potasser les manuels et de chercher  !

Reply

Marsh Posté le 26-09-2004 à 23:32:21    

Je vois pas pourquoi j'aurai cherché à comparer 2 tableaux pour trouver des anagrammes, justement je demandais comment faire ca de manière efficace :o
 
Bon faut vraiment que je trouve ces fichiers de mots que j'avais, pour pouvoir tester ce bordel! (jolly si tu veux être généreux c'est le moment :D )

Reply

Marsh Posté le 27-09-2004 à 21:29:38    

(je réitère)  
 
je t'offre toute ma considération  
mais la ca me reloute : 3 million de mots c enorme  
ca explose deja un peu les timeout chez moi !!

Reply

Marsh Posté le 27-09-2004 à 23:08:21    

Vite les timeout :D

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed