Advertisement
tpaper

Truzzator 0.1

Jan 10th, 2012
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.14 KB | None | 0 0
  1. # -*- coding: utf-8 -*-
  2. # -->> Truzzator V 0.1 <--
  3. # BeLLa Zio, è scrito in Python 2.7.2+
  4. #
  5. # By: Enrico `tpaper' Ronconi ronconi.enrico@yahoo.it
  6. # From original PHP project of Diego `nolonx' Malatesta
  7. #
  8. # 10 Gennaio 2012
  9. #
  10. # ITALIAN
  11.  
  12. # ************** IMPOSTAZIONI **************
  13. # Fra parentesi i valori/intervalli consigliati/predefiniti
  14.  
  15. lim = 2 #Caratteri minimi per corrompere la parola (2) (La modifica può comportare errori)
  16. d_intercalari_rec = 11 #Reciproco della densità di intercalari. Immaginando che sia x, inserisce un intercalare ogni x parole. (7-12)
  17. d_errori_rec = 15 #Reciproco della densità di errore. Immaginando che si chiami x, genera un errore ogni x parole. (14-20)
  18. case_swap = False #Abilita lo sWaP CaSe, che da un fastidio boia (False)
  19. acc_swap = False #Abilita lo swàp dèll'àccèntò (False)
  20.  
  21.  
  22.  
  23.  
  24.  
  25.  
  26. import random
  27.  
  28. #Dizionario del truzzo
  29. diz = [\
  30. #Indice 0: Inizio della frase
  31. ['Bella','Hey','A'],\
  32. #Indice 1: Apposizione dell'indice zero (es. Bella fra, Hey fra)
  33. ['zio','fratè'],\
  34. #Indice 2: Intercalari
  35. ['zio','cioè','inzomma','spaccaa','minchia oh','porcoddue','cazzo','figa','figa','figa'],\
  36. #Indice 3: Sostituzioni
  37. [ ['per','x'], ['ch','k'], [' sei ',' 6 '], [' ci ',' c '], ['ciao','bellazzio!'], ['sono', 'sn'], ['non', 'nn'], ['comunque','cmq'], ['stella', 'stela'], ['qualcosa', 'qlc'], ['qualcuno', 'qlc'], ['qualunque', 'qlc'], ['qualsiasi', 'qls'], ['capito','cpt'], ['va bene','vbb']],\
  38. #Indice 4: Errori grammaticali (Beta)
  39. [ ['a me','a me mi'], ['ma','ma però']],\
  40. #Indice 5: Chiusura frase
  41. ['capito','ce la so xò eh'],\
  42. #Indice 6: Errore di invio
  43. ['ù','+'],\
  44. #Indice 7: Caratteri di errore
  45. 'q w e r t y u i o p è a s d f g h j k l ò à ù z x c v b n m'.split()]
  46. acc = [['a','à'], ['e','è'], ['i','ì'], ['o','ò'], ['u','ù']]
  47.  
  48. def unisci(lista,sep): #Unisce una lista di stringhe in una stringa
  49.     risultato = '' #Crea la stringa del risultati
  50.     for a in lista: #Per ogni elemento di lista
  51.         risultato += (a + sep) #Aggiunge il suo contenuto al risultato
  52.     return risultato #Restituisce il risultato
  53.    
  54.  
  55. def corrompi_parola(parola):
  56.     global diz
  57.     parola = list(parola) #Converte la stringa parola in lista per gestirla meglio
  58.     lunghezza = len(parola) #Lunghezza della parola
  59.     caso = random.randint(0,1) #Sceglie se modificare una lettera (1) o eliminarla (0)
  60.     lettera = random.randint(0,lunghezza - 1) #Sceglie la lettera da corrompere
  61.     if caso == 0:
  62.         parola.pop(lettera) #Elimina la lettera
  63.     else:
  64.         parola[lettera] = diz[7][random.randint(0,len(diz[7]) - 1)] #Cambia la lettera con una lettera caso
  65.     parola = unisci(parola,'') #Converte la lista parola in stringa per restituirla alla frase
  66.     return parola #Restituisce la parola corrotta
  67.        
  68.  
  69. def errore_ortografico(frase,d,limite): #Genera errori ortografici a caso nella frase
  70.     if limite <= 2:
  71.         return frase #Ferma se il limite della lunghezza minima di parole da taroccare è inferiore a 2
  72.     lunghezza = len(frase)
  73.     n = lunghezza/d + 1 #Numero di errori da generare, circa uno ogni 'd' parole
  74.     taroccate = [-6] #Lista di parole già taroccate da non corrompere troppo
  75.     for a in range(0,len(frase)): #Aggiunge alle parole da non taroccare le parole composte da meno di 4 caratteri
  76.         if len(frase[a]) <= limite:
  77.             taroccate.append(a)
  78.     if len(frase) - len(taroccate) < n+1:
  79.         n = len(frase) - len(taroccate) -1 #Se ci sono troppe poche parole da corrompere, diminuisce il numero di parole da corrompere
  80.     attuale = -6 #Valore iniziale tarocco  
  81.     for a in range(0,n+1): #Genera n errori
  82.         while attuale in taroccate: #Controlla se la parola è già corrotta (Evita più errori nella stessa frase)
  83.             attuale = random.randint(0,lunghezza - 1) #Se è già corrotta, ne sceglie un'altra
  84.         taroccate.append(attuale) #Aggiunge la parola alla lista di parole già corrotte
  85.         frase[attuale] = corrompi_parola(frase[attuale]) #Corrompe la parola
  86.     return frase #Restituisce la frase con errori ortografici
  87.  
  88. def intercalare(frase,dens): #Aggiunge intercalari truzzesi
  89.     global diz
  90.     lunghezza = len(frase)
  91.     n = lunghezza/dens #Numero di intercalari da inserire
  92.     pos_taroccate=[-6] #Posizioni ove è già stato aggiunto un intercalare
  93.     attuale=-6
  94.     for a in range(1,n+1): #Genera n intercalari
  95.         while attuale in pos_taroccate: #Controlla se la posizione contiene già un intercalare
  96.             attuale = random.randint(1,lunghezza - 1) #Se un intercalare è già in quella posizione, ne sceglie un'altra
  97.         pos_taroccate.append(attuale) #Aggiunge la posizione alla lista di posizioni con intercalari
  98.         frase.insert(attuale,diz[2][random.randint(0,len(diz[2])-1)]) #Inserisce un intercalare a caso in posizione attuale
  99.     return frase #Restituisce la frase con intercalare
  100.  
  101. def sost(frase):
  102.     global diz
  103.     for a in diz[3]:
  104.         while a[0] in frase.lower():
  105.             frase = s(frase,frase.lower().find(a[0]),len(a[0]),a[1])
  106.     return frase
  107.  
  108. def s(frase,pos,l,new):
  109.     return frase[0:pos]+new+frase[pos+l:len(frase)]
  110.    
  111. def case(frase):
  112.     p = 0
  113.     f = []
  114.     for a in frase:
  115.         par = []
  116.         for z in list(a):
  117.             p += [0,0,0,0,0,0,-1,-1,+1,+1,-2,+2,+3][random.randint(0,12)]
  118.             if p%2 == 0:
  119.                 par.append(z.swapcase())
  120.             else:
  121.                 par.append(z)
  122.             p += 1
  123.         f.append(unisci(par,''))
  124.     return f
  125.  
  126. def truzza(frase,dens_int,dens_err,cs): #Truzza la frase
  127.     global diz
  128.     global lim
  129.     frase = sost(frase)
  130.     frase = frase.split()
  131.     frase = errore_ortografico(frase,dens_err,lim)
  132.     frase = intercalare(frase,dens_int)
  133.     frase = unisci(frase,' ')
  134.     frase = diz[0][random.randint(0,len(diz[0])-1)]+' '+diz[1][random.randint(0,len(diz[1])-1)]+' '+frase
  135.     frase += diz[5][random.randint(0,len(diz[5])-1)]+' '+diz[1][random.randint(0,len(diz[1])-1)]+'?'
  136.     if cs == True:
  137.         frase = frase.split()
  138.         frase = case(frase)
  139.         frase = unisci(frase,' ')
  140.     return frase
  141.  
  142. if acc_swap == True:
  143.     for a in acc:
  144.         diz[3].append(a)
  145.  
  146. def main():
  147.     global lim,d_intercalari_rec,d_errori_rec,case_swap
  148.     print 'Parla anche tu con i truzzi e i bimbominchia con Truzzator versione 0.1!'
  149.     print 'Digita una frase nulla per uscire'
  150.     vero = raw_input('Frase > ')
  151.     while vero != '':
  152.         print 'Truzzata:\n\n',truzza(vero,d_intercalari_rec,d_errori_rec,case_swap),'\n\n\n'
  153.         vero = raw_input('Frase > ')
  154.  
  155. if __name__ == "__main__":
  156.     main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement