| La tecnica della conversione fonetica permette di condensare varie cifre alla volta in un solo termine. Però non è sempre facile trovare la giusta parola che possa codificare un numero, e per codificare tutte i numeri sotto al 100 è necessario memorizzare lo schedario. Ho creato quindi un programma in python (qui di seguito il codice per chi fosse interessato) EDIT: ho aggiornato il codice CODE #@TarsioSpettro import string import re #Per prima cosa separiamo tra di loro i gruppi che corrispondono ad un fonema codificabile, ad ogni gruppo dovra' #corrispondere un numero def getSillabe (parola): s=normalizza(parola) #eliminiamo le doppie: 'palla' e 'pala' hanno la stessa codifica doppie=re.compile(r'([a-z])\1+') s=doppie.sub(r'\1',s) for c in ('b','c','d','f','g','k','l','m','n','p','q','r','s','t','v','x','z'): s=s.replace(c,'1'+c); #gruppo 'sci', 'sce' scivolo/scolo s=s.replace('s1ci','sci') s=s.replace('s1ce','sce') #gruppo 'gn' + vocale gnomo/gonna s=s.replace('g1na','gna') s=s.replace('g1ne','gne') s=s.replace('g1ni','gni') s=s.replace('g1no','gno') s=s.replace('g1nu','gnu') #gruppo 'gli' raglio s=s.replace('g1li','gli') #Parole che iniziano con 'gli' glicogeno if s[0:4]=='1gli': s='1g1'+s[2:] #Parole che iniziano con 'glie' glielo, gliela s=s.replace('glie','glie') parolaSpezzata=s.split('1') return parolaSpezzata def normalizza (parola): #mettiamo tutto in minuscolo s=parola.lower() #eliminiamo punteggiatura for c in string.punctuation: s=s.replace(c,''); #eliminiamo spazi bianchi for c in string.whitespace: s=s.replace(c,''); #eliminiamo numeri for c in string.digits: s=s.replace(c,''); #Ci sarebbero anche gli accenti da fare..... return s
def getNumeroGruppo (g): #cerchiamo qual'e' il numero corrispondente. Partiamo dal 7, ossia 'c' e 'g' dure in modo che possa essere poi sostituito da ce gli sci etc. cod='' for c in ('g','c','k','q'): if g.find(c)!=-1 : cod='7' #suono sibilante, sci e' gia' compreso in s for c in ('s','x','z'): if g.find(c)!=-1 : cod='0' #suono dentale for c in ('t','d'): if g.find(c)!=-1 : cod='1' for c in ('n'): if g.find(c)!=-1 : cod='2' for c in ('m'): if g.find(c)!=-1 : cod='3' for c in ('r'): if g.find(c)!=-1 : cod='4' for c in ('l'): if g.find(c)!=-1 : cod='5' for c in ('ci','ce','gi','ge'): if g.find(c)!=-1 : cod='6' for c in ('f','v'): if g.find(c)!=-1 : cod='8' for c in ('b','p'): if g.find(c)!=-1 : cod='9' return cod def getCodice(word): wordsplit=getSillabe(word) cod='' for x in wordsplit: cod+=getNumeroGruppo(x) return cod def convertiDizionario(nomeFile): f=open(nomeFile,'r') testo=f.read() f.close testosplit=testo.split('\n') testocod='' listaParole=[] for x in testosplit: listaParole.append([getCodice(x),x]) listaParole=sorted(listaParole) for x in listaParole: testocod=testocod+x[0]+'\t'+x[1]+'\n' f=open('dizionariocod.txt','w') f.write(testocod) f.close convertiDizionario('dizionario.txt') che trasforma un file di testo (dizionario.txt) contenente un elenco di parole in un file di testo contenenti i relativi numeri associati a qulle parole, dove per esempio 'streghe' diventa '0147'. Ho poi messo tutto in un foglio di excel e ordinato il tutto ed ho ottenuto una specie di dizionario della conversione fonetica. Ossia un elenco di parole, in ordine di numerazione, dove per ogni numero si vede quale parola vi si può associare. Così se per esempio avessi necessità di memorizzare il numero 6369012 andrò a cercare quale posizione occupano questi numeri, e trovo che cimice=636 e che bastone=9012, così ho bisogno di due immagini invece di 4. La cosa non è ancora definitiva, l'ho un po' improvvisata, diciamo che un elenco di parole più fornito e un metodo per individuarle più comodo dello scorrere il foglio migliorerebbero molto il risultato finale. Dopo non sempre si può avere la possibilità di consultare questo elenco, però può essere comodo per costruire un proprio schedario o per rendere più semplice memorizzare cose importanti (tipo numeri di telefono) con meno fatica Ecco qua il file: EDIT:http://ge.tt/8I3ledZ/v/0 Edited by TarsioSpettro - 27/2/2013, 20:44
|