begin process at 2008 07 25 09:57:02
1 216 107 membres
84 nouveaux aujourd'hui
14 180 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

"ANAGRAMMEUR"


Information sur la source

Catégorie :Application complète Classé sous : anagrammes, tkinter, anagrammeur, interface, ods Niveau : Débutant Date de création : 01/07/2005 Date de mise à jour : 15/01/2008 03:02:25 Vu / téléchargé: 19 314 / 957

Note :
8,75 / 10 - par 8 personnes
8,75 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (35)
Ajouter un commentaire et/ou une note

Description

Ce programme propose une interface graphique en TK et permet de trouver les anagrammes d'un mot entré.

Il gère le caractère '?' comme "n'importe quel caractère"(par exemple le JOKER au Scrabble). Il affichera alors les lettres remplacées en majuscule.

Il utilise le dictionnaire "L'Officiel Du Scrabble 2008" qui se trouve dans le zip (ods5.txt).

Source

  • class Dictionary_Anagrams:
  • def __init__(self, path):
  • self.dictionary={}
  • self.load(path)
  • #load the dictionary from the file path
  • def load(self, path):
  • f=open(path,'r')#open the dictionary file in read mode
  • for line in f:#for each line of the file
  • line=line.replace('\n','')#remove the endofline character
  • if len(line) in self.dictionary:#if a word of the same length have already been appened to our dictionary
  • self.dictionary[len(line)].append(line.upper())#just add the word
  • else:
  • self.dictionary[len(line)]=[line.upper()]#else, construct a new list with the word
  • #tell if w1 & w2 are anagrams. Do not check their length. Need both words to at the same case level
  • def areAna(self, w1, w2):
  • for c in w1:#for each char in the first word
  • if c not in w2 and c != '?':#if this char is not in word2 and is not a '?'
  • return False#then return false
  • else:
  • w2=w2.replace(c,'',1)#else, remove the char from word2
  • return True#if false have never been returned, return true!
  • #find the word anagrams: return a list containing them
  • def find (self, word):
  • if len(word) not in self.dictionary:#if the word is too small or to big for the dictionnary: return an empty list
  • return []
  • word=word.upper()#put the word to the upper case
  • ana=[]
  • for word2 in self.dictionary[len(word)]:#for each word of the same length in the dictionnary
  • if (self.areAna(word, word2)):#check if they are anagrams: if true
  • ana.append(word2)#add the word to the anagram list
  • return ana#finally, return the anagram list
  • from Tkinter import *
  • #called when the user press the keyboard in the entry
  • def key(event):
  • listbox.delete(0, END)#delete the listobx lines
  • word=entry.get()
  • ana=ana_finder.find(word)#find the anagrams for the word
  • for anagram in ana:#for each word in the anagram list
  • anagram=anagram.lower()#put it to lower case
  • for char in anagram:#for each char in each anagram
  • if char not in word:#if char is not in the original word
  • anagram=anagram.replace(char,char.upper(),1)#put the char to upper case
  • listbox.insert(END, anagram)#put the anagram at the end of the listbox
  • ana_finder=Dictionary_Anagrams("ods5.txt")#initialize the dictionary_anagrams object with the dictionary file
  • root=Tk()#create the main window
  • root.title("VyCHNou'S aNaGRaMS")
  • entry = Entry(root,bg="black", fg="lightgrey", font=14)#create the entry
  • entry.pack(anchor=NW, side=TOP, fill=X)#use the pack layout to attach the entry to the windows
  • entry.bind("<KeyRelease>", key)#bind the entry to the callback "key"
  • entry.focus()#give the entry the focusscrollbar = Scrollbar(root)#add a scrollbar for the listbox
  • scrollbar.pack(side=RIGHT, fill=Y)
  • listbox = Listbox(root,height=30,font=14)#add a listbox
  • listbox.pack(anchor=SW, side=LEFT, fill=BOTH)
  • scrollbar.config(command=listbox.yview)#configure the scrollbar
  • root.mainloop()#let's run the window
class Dictionary_Anagrams:
	def __init__(self, path):
		self.dictionary={}
		self.load(path)
	#load the dictionary from the file path
	def load(self, path):
		f=open(path,'r')#open the dictionary file in read mode
		for line in f:#for each line of the file
			line=line.replace('\n','')#remove the endofline character
			if len(line) in self.dictionary:#if a word of the same length have already been appened to our dictionary
				self.dictionary[len(line)].append(line.upper())#just add the word
			else:
				self.dictionary[len(line)]=[line.upper()]#else, construct a new list with the word
	#tell if w1 & w2 are anagrams. Do not check their length. Need both words to at the same case level
	def areAna(self, w1, w2): 
		for c in w1:#for each char in the first word
			if c not in w2 and c != '?':#if this char is not in word2 and is not a '?'
				return False#then return false
			else:
				w2=w2.replace(c,'',1)#else, remove the char from word2
		return True#if false have never been returned, return true!
	#find the word anagrams: return a list containing them
	def find (self, word):
		if len(word) not in self.dictionary:#if the word is too small or to big for the dictionnary: return an empty list
			return []
		word=word.upper()#put the word to the upper case
		ana=[]
		for word2 in self.dictionary[len(word)]:#for each word of the same length in the dictionnary
			if (self.areAna(word, word2)):#check if they are anagrams: if true
				ana.append(word2)#add the word to the anagram list
		return ana#finally, return the anagram list
from Tkinter import *
#called when the user press the keyboard in the entry
def key(event):
	listbox.delete(0, END)#delete the listobx lines
	word=entry.get()
	ana=ana_finder.find(word)#find the anagrams for the word
	for anagram in ana:#for each word in the anagram list
		anagram=anagram.lower()#put it to lower case
		for char in anagram:#for each char in each anagram
			if char not in word:#if char is not in the original word
				anagram=anagram.replace(char,char.upper(),1)#put the char to upper case
		listbox.insert(END, anagram)#put the anagram at the end of the listbox
ana_finder=Dictionary_Anagrams("ods5.txt")#initialize the dictionary_anagrams object with the dictionary file
root=Tk()#create the main window
root.title("VyCHNou'S aNaGRaMS")
entry = Entry(root,bg="black", fg="lightgrey", font=14)#create the entry
entry.pack(anchor=NW, side=TOP, fill=X)#use the pack layout to attach the entry to the windows
entry.bind("<KeyRelease>", key)#bind the entry to the callback "key"
entry.focus()#give the entry the focusscrollbar = Scrollbar(root)#add a scrollbar for the listbox
scrollbar.pack(side=RIGHT, fill=Y)
listbox = Listbox(root,height=30,font=14)#add a listbox
listbox.pack(anchor=SW, side=LEFT, fill=BOTH)
scrollbar.config(command=listbox.yview)#configure the scrollbar
root.mainloop()#let's run the window

Conclusion

Je serais ravi de lire vos commentaires.
Je me suis inspiré de l'algorithme qu'avait mis en place doudoubidou dans la source http://www.pythonfrance.com/codes/RECHERCHE-ANAGRAMME_37143.aspx
pour améliorer la vitesse de recherche.
En esperant que cela vous plaise ...
Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

01 juillet 2005 02:21:39 :
MAJ car lien pour le dictionnaire défaillant sous IE
01 juillet 2005 12:45:18 :
Correction d'un bug d'ailleurs visible dans la capture d'écran
27 octobre 2006 12:46:02 :
Grosse mise à jour: changement de l'algorithme de recherche des anagrammes (inspiré de celui de DoudouBidou) Simplification du code (57 lignes environ) Commentaires mis en anglais
28 octobre 2006 14:48:43 :
Correction d'un léger bug de mise en forme des '?'
10 janvier 2007 11:15:58 :
Changement de l'explication finale
02 janvier 2008 17:16:27 :
Mise à jour pour être conforme avec l'ODS 5 (Version ODS 2008)
02 janvier 2008 17:32:32 :
Changement du zip
15 janvier 2008 03:02:29 :
Enfin, le vrai ods5 !
  • signaler à un administrateur
    Commentaire de lepecheur le 02/07/2005 10:48:13

    lien de l'ods down

  • signaler à un administrateur
    Commentaire de vychnou le 02/07/2005 13:06:05

    Oui je l'ai remarqué et j'ai mis à jour la page depuis hier mais ca n'a pas bougé?!
    Le problème surviens sous IE, pas sous firefox, il suffit alors d'aller sur la page http://www.membres.lycos.fr/utilitairesonline/
    Désolé pour le désagrément

  • signaler à un administrateur
    Commentaire de al1k le 31/07/2005 17:57:05

    Moi, j'ai trouvé cette intéressante page par Google en cherchant "anagrammeur" mais je ne connais pas Python.
    J'ai téléchargé le zip de Vychnou puis l'ai dézipé dans un dossier et fait de même avec celui d'ODS4, dans le même dossier.
    Et ensuite ... que faut-il exécuter ?

    Si quelqu'un pouvait m'aider ou m'orienter ...

  • signaler à un administrateur
    Commentaire de vychnou le 01/08/2005 03:35:51

    Python est un langage interprété qui, comme java, recquiert un interpréteur.
    Tu devras l'installer sur ton système d'exploitation.
    Vas sur le site de python pour télécharger le nécessaire.

  • signaler à un administrateur
    Commentaire de lyzdcoto le 23/08/2005 05:03:50

    C'est pas clair pour moi la façon d'intaller l'ensemble. Ils sont tous dans la chemise de "pythonfrance" dans "Application" mais le terminal me donne toujours la même erreur:
    Welcome to Darwin!
    toronto-hse-ppp3770698:~ quelqun$ "/usr/bin/pythonw"  "/Applications/pythonfrance/anagrammes.py"  && echo Exit status: $? && exit 1
    Traceback (most recent call last):
      File "/Applications/pythonfrance/anagrammes.py", line 128, in ?
        fen=IHM_Anagrammes()
      File "/Applications/pythonfrance/anagrammes.py", line 72, in __init__
        self.initDico(self.path+'ods4.txt')
      File "/Applications/pythonfrance/anagrammes.py", line 48, in initDico
        f = open(cheminDuDico)
    IOError: [Errno 2] No such file or directory: 'ods4.txt'
    toronto-hse-ppp3770698:~ quelqun$

    que dois-je faire

  • signaler à un administrateur
    Commentaire de vychnou le 24/08/2005 05:22:41

    Aurais-tu oublié de télécharger le dictionnaire que je propose (l'officiel du scrabble), un fichier contenant tous les mots francais de 2 à 15 lettres acceptés dans le scrabble ?
    http://www.membres.lycos.fr/utilitairesonline/ pour le télécharger
    Il faut ensuite placer le fichier (ods4.txt) dans le dossier ou tu as placé les fichiers du zip.

  • signaler à un administrateur
    Commentaire de ange1402 le 01/11/2005 20:41:43

    Salut
    Alors j'ai bien tout déziper et mis ods4 dans le même fichier mais cela ne donne rien je n'ai pas d'application, je veux dire que je n'ai pas de programme au montré plus haut.
    Merci de m'aider un peu

    Sinon ce programme à l'air d'être très bien.

  • signaler à un administrateur
    Commentaire de al1k le 01/11/2005 22:19:59

    Bonsoir,

    Pour ma part, ça s'est mis à bien marcher quand j'ai téléchargé et lancé le fichier d'installation "python-2.4.2.msi" du site de Python (http://python.org/), comme Vychnou me l'avais préconisé.

    En effet, après cela, les fichiers .py sont reconnus par ton OS et tu peux les exécuter ou les éditer ...

    Bonne chance ...

  • signaler à un administrateur
    Commentaire de DoudouBidou le 19/04/2006 10:05:33

    Je n'ai pas regardé la source mais c'est pas mal du tout

    effectivement c'est un peu long pour 7 caractères avec 2 inconnus
    mais en même temps ce n'est pas le plus courant de faire des mots avec 2 inconnus (encore que...)

  • signaler à un administrateur
    Commentaire de DoudouBidou le 19/04/2006 10:38:49

    ça m'a donné une idée et finalement j'ai écris un petit script très simple où la recherche est basé sur la longueur du mot et le contenu du mot

    et là la recherche est pratiquement instantannée !

    si ça ne t'embète pas je vais poster mon code dès que j'aurai fait une interface graphique, non pas pour te faire de la concurrence mais pour montrer une autre façon de faire

    Seb

  • signaler à un administrateur
    Commentaire de vychnou le 19/04/2006 12:35:51

    Avec plaisir au contraire! Et peut être m'en inspirerais-je pour améliorer mon anagrammeur

  • signaler à un administrateur
    Commentaire de DoudouBidou le 19/04/2006 13:12:49

    voilà j'ai posté ma source

    allez faire un petit tour pour comparer :)

    http://www.pythonfrance.com/code.aspx?ID=37143

  • signaler à un administrateur
    Commentaire de DoudouBidou le 19/04/2006 16:00:15

    j'ai placé une autre source sur le même modèle mais plus spécialisé dans la triche au Scrabble ;)

    http://www.pythonfrance.com/code.aspx?ID=37146

  • signaler à un administrateur
    Commentaire de linus06vl le 02/08/2006 17:33:19

    Bonjour,
    j'ai bien tout déziper et mis ods4 dans le même fichier, j'ai aussi télécharger le programme Python - 2.4.3ia64 mais lors de l'installation un message d'erreur apparaît : "Ce package d'installation n'est pas pris en charge par ce processeur."
    Je suis sous XP et le processeur est un pentium 4 CPU 3 GHz.
    Merci pour votre aide.

  • signaler à un administrateur
    Commentaire de vychnou le 05/08/2006 14:20:26

    Bonjour. Le programme d'installation "Python - 2.4.3ia64" est sans doute pour processeur 64bits et vous devez avoir un processeur 32 bits. Téléchargez le programme d'installation "normal" (pour processeur 32 bits)
    --> http://www.python.org/ftp/python/2.4.3/python-2.4.3.msi <--

  • signaler à un administrateur
    Commentaire de linus06vl le 05/08/2006 18:21:14

    Bonjour,

    Merci de m'avoir répondu si rapidement.

    J'ai télécharger le progromme comme indiqué dans votre réponse et à la fin de l'installation, un message apparait, peut-être sans importance puisque l'anagrammeur fonctionne mais "à moitié" seulement.
    En effet, il ne trouve que des anagrammes de mots de 7 lettres et les mots de moins de 7 lettres il ne les trouve pas.

    Special xindows thanks to :
    letterror, Erik Van Blokland, for the Python for windows graphic.
    HTTP://www.letterror.com/

    Mark Hammoud, without whose yearsof freely shared windows expertise, Python for windows would still be Python for dos.

    Merci.

  • signaler à un administrateur
    Commentaire de vychnou le 05/08/2006 18:44:52

    C'est normal qu'il ne trouve pas de mots en dessous de 7 lettres si vous entre 7 lettres, il recherche des anagrammes au mot que vous avez entré et n'est pas spécifiquement pour trouver des tirages au scrabble.
    Cordialement

  • signaler à un administrateur
    Commentaire de totot49 le 01/01/2007 07:30:50

    si g bien tout compris ceci es un programme mais comment fait-on si on veut le mettre sur un site comme le fait celui-ci

    http://duel-de-mots.com/cgi-bin/q3shell.php

    Il faut creer un fichiers js ?

    je tien a preciser d'abord que je suis nul mais j'essai de comprendre kan meme :D

  • signaler à un administrateur
    Commentaire de vychnou le 05/01/2007 13:10:47

    Toto49: Un programme est écrit dans un langage particulier. Ici, le langage utilisé est le python (extension .py ou .pyw ou .pyc). Un fichier portant l'extension .js est un programme écrit dans le langage javascript (directement compris et exécuté par le navigateur internet, à la différence de python).
    Si tu veux utiliser les lignes de code du programme python pour utiliser cet anagrammeur sur une page web, comme l'exemple que tu as fournis, tu as plusieurs solutions (mais je ne pense pas que tu ais le niveau nécessaire pour les mettre en exécution, ce ne sont pas des opérations triviales):
    -réécrire légerement le script python pour qu'il se comporte comme un script CGI et renvoie à partir des données d'un formulaire la liste des anagrammes, intégrer tout cela à ton site (cela impose que ton serveur web gère python comme langage de script CGI)
    -autre solution: utiliser directement un serveur web écrit en python, utiliser la méthode find pour récupérer la liste des anagrammes
    -autre solution: réécrire ce script du python vers le javascript(le client fait le calcul) ou le php(le serveur fait le calcul)
    Chacune de ces solutions nécessite des bases solides en programmation, donc je ne pense pas que partir de ce script python soit une bonne solution pour toi, pour ajouter un anagrammeur à ton site web.

    Bonne chance tout de même!

  • signaler à un administrateur
    Commentaire de totot49 le 05/01/2007 13:43:41

    comme tu l'a dit je n'ai pas le niveau, je c modifier quelques script javascript ,integrer des liens dans 1 fichiers js (mais sa meme un gosse de 7 ans saurai le faire) je tien a te remercier pour la clareté de t explication, o moins je suis moins nul maintenant.
    mais si cela est possible de faire des modif pour avoir la meme chose que mon exemple pk cela n'est-il pas fait ? cela serait bien pour moi et mon site :-D ( et a d'autre je pense), cela demande bcp de travail ?

    merci

  • signaler à un administrateur
    Commentaire de vychnou le 05/01/2007 15:01:22

    Car la il s'agit d'un moteur pour trouver des anagrammes et exploité par une interface graphique, et NON par une page web. C'est à dire que l'application marche seule, elle n'a pas besoin d'un navigateur internet (comme la calculatrice windows par exemple).
    Je fournis le code de mon application, après libre aux gens de la modifier selon leurs besoins.
    Après pour la question du travail, cela en demande peu s'il s'agit seulement de convertir cela en script CGI...

  • signaler à un administrateur
    Commentaire de totot49 le 05/01/2007 15:24:31

    ok c bon j'ai compris domage pour moi que tu n'es pas fait la "conversion"

    merci et bonne journée

  • signaler à un administrateur
    Commentaire de vychnou le 05/01/2007 17:41:02

    si tu veux, pour l'exemple j'ai fait un petit serveur en python qui trouve les anagrammes d'un mot en ce servant de la classe.

  • signaler à un administrateur
    Commentaire de totot49 le 05/01/2007 17:46:05

    merci mais comme jy comprend rien cela ne va guerre m'avancer ;)

  • signaler à un administrateur
    Commentaire de vychnou le 05/01/2007 17:55:42

    Tu peux regarder à cette adresse:
    http://vychnou.selfip.net/?

  • signaler à un administrateur
    Commentaire de totot49 le 06/01/2007 06:21:05

    je veux bien mais lien hs et g essayer
    http://vychnou.selfip.net
    *et
    http://vychnou.selfip.net/?

  • signaler à un administrateur
    Commentaire de vychnou le 06/01/2007 12:54:58

    désolé j'avais éteint le serveur, c'est bien--->   http://vychnou.selfip.net/?

  • signaler à un administrateur
    Commentaire de totot49 le 06/01/2007 14:04:01

    ouais sa c bien mais dans mon exemple y'a plein de truc avec (plus 1 lettre etc...)

    gros travail ke ta fait ? ou c un pteit amusement pour "l'exemple"

  • signaler à un administrateur
    Commentaire de vychnou le 06/01/2007 14:27:13

    Juste pour l'exemple, 2minutes de code, comment récupérer le code python et l'intégrer à un serveur

  • signaler à un administrateur
    Commentaire de CYM13 le 23/08/2007 14:57:29

    Pour une prochaine amélioration, tu devrait envisager de :
    -ne pas limiter le nombre de lettres
    -ne retenir que les solution les plus pertinentes en vérifiant la présence de groupes de lettres souvent présents (le,la,les,...)

    Je sait que j'adore les codes secrets mais que comme je viens juste de télécharger l'interpréteur python, je suis incapable de réaliser un code décent. Bonne chance.

    PS:Tu pourrait même mettre une fonctionnalité pour choisir entre le mode sccrabble et le mode libre. Enfin moi! Pour ce que j'en dis ...

  • signaler à un administrateur
    Commentaire de gamesou le 08/01/2008 18:07:07 9/10

    Très bien ce programme !

    Juste une remarque : il me semble que le dictionnaire est l'ODS4 et pas l'ODS5 (il ne contient pas AALENIEN par exemple). Erreur de lien ?
    (d'ailleurs si tu sais ou trouver l'ODS5 au format texte ca m'intéresse) !

    Merci et bnone année !

  • signaler à un administrateur
    Commentaire de vychnou le 08/01/2008 18:11:42

    En fait c'est un mixte, j'ai rentré les mots de 2 et 3 lettres, mais je vais écrire un script automatique pour rentrer tous les mots parce qu'il y en a trop. Je ferais ça quand j'aurai le temps.
    Merci de la remarque ;)

  • signaler à un administrateur
    Commentaire de vychnou le 15/01/2008 03:13:59

    Voici l'ODS complet. Si vous trouvez des mots absents dites moi, mais à priori c'est bon!

  • signaler à un administrateur
    Commentaire de pgnouf le 17/01/2008 15:18:45 8/10

    pas mal, mais il pourrait être pratique de faire des recherches avec les mot de moins de lettres que notées.

  • signaler à un administrateur
    Commentaire de vychnou le 17/01/2008 15:20:27

    Mais après ça ne serait plus un anagrammeur ;)

Ajouter un commentaire

Pub



Appels d'offres

Creation portail video
Budget : 3 000€
Site de e-commerce
Budget : 5 000€
Demande de devis pour ...
Budget : 7 000€

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Boutique

Boutique de goodies CodeS-SourceS