Taylemub, terminologiste mal éduqué

Contenu du snippet

Hey ! Toi là, ammène ton minois ! J'ai un truc à te montrer.

Je te présente Taylemub (puisqu'il veut qu'on l'appelle par son petit nom, le coquin!). Méchemment pythonner en 2.7 mouvements, il peut te produire des palabres qui laissera pantois ton imagination goze.
Pour ce fasal, Taylemub sculpte avec une élègance ... particulière une arch table (c'est un archéen adict...) grâce une sorte d'analysus frequentialisis de plus de 300k Weshs ! Puis sro une chieste, Tay utilise la arch table (c'est une Markov's chain, mon gars!) pour mettre bas à une portée de Weshiettes (ils sont si mignons!).
En jed, Tay permettra d'enrichir ton vocabulaire de mots inédits qui époustoufleront ton auditorat !

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from numpy import *
import os.path

scriptpath = os.path.dirname(__file__)
f1 = os.path.join(scriptpath, "data/liste_de_mots.txt")
f2 = os.path.join(scriptpath, "data/table.txt")

#25/10/15

#>>> ord('A');ord('Z')
#65
#90

#i (resp. j) correspond toujours pr les matrices au numero de la ligne (resp. colonne)
#t[j][i] : proba que la j+1 iemes lettre de l'alphabet soit suivie de la i+1 ieme lettre de l'alphabet

#n[i]=card({l'ensemble des caracteres correspondant a une meme lettre})
#t : matrice carree de taille 26
def table_proba():
 t = [[ 0 for j in range(26) ] for i in range(26) ]
 n = [ 0 for j in range(26) ]
 k = 0
 
 f = open(f1,"r")
 
 for l in f:
  for m in l.split(" "):
   if m[-1] == "n":#le prog n'aime pas le "n", dc on les enleve
    m = m[:-1]
   for i in range( len(m) - 1 ):
    t[ ord(m[i+1]) - 65 ][ ord(m[i]) - 65 ] += 1
    n[ ord(m[i+1]) - 65 ] += 1
 
 f.close()
 
 for j in range(26):
  for i in range(26):
   if t[j][i] != 0:
    t[j][i] = float( t[j][i] ) / float( n[j] )
 
 return t

def ecrire_table(t):
 f = open(f2,"w")
 
 for i in range(26):
  for j in range(26):
   f.write( str(t[j][i]) + ";" )
  f.write( "n" )
 
 f.close()
 
def lire_table():
 t = [[ 0 for j in range(26) ] for i in range(26) ]
 i = 0
 j = 0
 
 f = open(f2,"r")
 
 for l in f:
  for v in l.split(";")[:-1]:#le prog n'aime pas le "n", dc on les enleve
   t[j][i] = float(v)
   j += 1
  i += 1
  j = 0
 
 f.close()
 
 return t
 
def generer_mots(t,n):
 l = []
 p = 0.0
 u = 0.0
 j = 0
 c = 0
 l.append( chr( random.randint(65,91) ) )
 
 for i in range(n-1):
  c = ord(l[-1]) - 65
  p = random.random()
  u = t[c][j]
  while u < p:
   j += 1
   u += t[c][j]
  l.append( chr( j + 65 ) )
  j = 0
 
 return "".join(l)

def generer_mots_hasard(n):
 l = []
 
 for i in range(n):
  l.append( chr( random.randint(0,26) + 65 ) )
 
 return "".join(l)

def controle_table(t):
 u = 0.
 w = 1.
 for j in range(26):
  for i in range(26):
   u += t[j][i]
  w *= u
  u = 0.
 print("Le produit des sommes des valeurs de chaque colonne vaut : " + str(w) + ".")
 
if os.path.isfile(f2):
 t = lire_table()
else:
 t = table_proba()
 ecrire_table(t)
 
controle_table(t)

print("1ère colonne : avec table; 2ème colonne : au hasard")
for i in range(20):
 a = random.randint(3,9)
 b = random.randint(3,9)
 print( str( generer_mots( t, a ) ) + "".join([" " for i in range(9-a)]) + str( generer_mots_hasard(b) ) )



Nota Bene :
- Ringo ne pourra être tenu responsable pour les dommages irréversible occasionné par la proposition de l'étude de Taylemub.
- Taylemub remercie le gars qui a pondu l'article La machine à inventer des mots (https://sciencetonnante.wordpress.com/2015/10/16/la-machine-a-inventer-des-mots-video) qui a permit de le mettre au monde.

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.