TEORIE E TECNICHE DEL
RICONOSCIMENTO
Python:
Dizionari
Pratica con Python …
• www.codeacademy.com
USO DI DIZIONARI IN NLTK:
FREQUENCY DISTRIBUTIONS
• Text: indicizzato usando INTERI
text1[100]
• Frequency distributions: indicizzate usando PAROLE
fdist[‘monstruous’]
• Frequency distributions sono implementate in Python
come oggetti di tipo DICTIONARY, un terzo tipo di dati
fondamentale nel trattamento dei testi
– Equivalente di hash maps / associative arrays in altri
linguaggi di programmazione
• NLTK book, 5.3, pp. 10-11
DIZIONARI: ACCESSO AD ELEMENTI
eng2sp['one'] = 'uno'
• (NB Il termine ‘dizionari’ e’ dovuto al fatto che
queste strutture dati sono ideali per
implementare dei dizionari, p.e., Inglese /
Spagnolo.)
DIZIONARI: CREAZIONE ED AGGIUNTA
DI ELEMENTI
• Creazione dizionario
– Vuoto
eng2sp = dict()
pos = {}
– Con elementi
eng2sp = {'one': 'uno', 'two': 'dos', 'three': 'tres'}
• Aggiunta di oggetti
eng2sp[‘one’] = ‘uno’
Visualizzazione dei contenuti
• >>> print eng2sp
{'one': 'uno', 'three': 'tres', 'two': 'dos'}
• >>> len(eng2sp)
3
• >>> print eng2sp['four']
KeyError: 'four'
• >>> 'one' in eng2sp
True
COME IMPLEMENTARE HISTOGRAMS
(E FREQDIST)
• Immaginate di voler implementare una
funzione che calcola la frequenza dei caratteri
in una parola (o delle parole in un testo)
• Opzioni:
1. Usare 26 variabili diverse come contatori
2. Usare una lista con 26 posizioni
3. Usare un dizionario
1. e 2. impensabili per una freqdist!
HISTOGRAMS USANDO DIZIONARI
def histogram(s):
d = dict()
for c in s:
if c not in d:
d[c] = 1
else:
d[c] += 1
return d
Esempio di uso
>>> h = histogram('brontosaurus’)
>>> print h
{'a': 1, 'b': 1, 'o': 2, 'n': 1, 's': 2, 'r': 2, 'u': 2, 't': 1}
LESSICO USANDO DIZIONARI
• NLTK, cap. 5.1, p. 12 (Web version)
DEFAULT DICTIONARIES
• NLTK, cap. 5.1, p. 14 (Web version)
CHIAVI E VALORI COMPLESSI
• NLTK, cap. 5.1, p. 17 (Web version)
MEMOIZATION
• Un altro uso molto comune dei dizionari e’ per
aumentare l’efficienza di programmi evitando
di ricalcolare valori due volte
ESEMPIO: FIBONACCI
NUMERI DI FIBONACCI:
fibonacci(0) = 0
fibonacci(1) = 1
fibonacci(n) = fibonacci(n − 1) + fibonacci(n − 2);
Sequenza: 0, 1, 1, 2, 3, 5, 8, 13, …
FIBONACCI IN PYTHON, VERSIONE
RICORSIVA:
def fibonacci (n):
if n == 0:
return 0
elif n==1:
return 1
else:
return fibonacci(n-1) + fibonacci(n-2)
DUPLICAZIONE
FIBONACCI + MEMO
known = {0:0, 1:1}
def fibonacci(n):
if n in known:
return known[n]
res = fibonacci(n-1) + fibonacci(n-2)
known[n] = res
return res
Scarica

slides - clic