Strumenti Utente

Strumenti Sito


definire_una_funzione_in_python

Definire una funzione in Python

Immaginiamo, dato un testo, di voler trovere quale sia la parola-tipo con rango di frequenza 5. Possiamo creare una “lista di liste”, ossia una lista che contiene una serie di liste, ciascuna delle quali contiene a sua volta il numero di occorrenze di una parola tipo e la parola tipo.

#creazione del testo dal corpus LDT
import xml.etree.ElementTree as ET
parole=ET.parse('testi/ldt-1.5.xml').getroot().findall('.//word')
testo=[i.attrib['form'].lower() for i in parole]
 
#creazione e ordinamento della lista di liste
freq_parole=[[testo.count(i), i] for i in set(testo)]
freq_parole=sorted(freq_parole, reverse=True) #o, in alternativa: freq_parole.sort(reverse=True)
 
#stampa il 2° elemento (forma della parola) contenuto nel 5° elemento contenuto nella 'lista di liste'
print(freq_parole[5-1][2-1])  #l'aggiunta di -1 è necessaria perché gli indici partono da 0

Lo stesso procedimento si può riscrivere sotto forma di funzione con il comando def, in modo da poter essere poi applicato ad altri testi e con altri numeri di rango. Nel codice seguente, all'interno della definizione della funzione trovaparola, t e r rappresentano rispettivamente il testo, che deve essere dato in forma di lista, e il rango.

def trovaparola(t,r): #tra parentesi sono scritte le variabili in input
    fp=[[t.count(i), i] for i in set(t)]
    fp=sorted(fp, reverse=True) #o, in alternativa: fp.sort(reverse=True)
    return fp[r-1][2-1] #il comando return definisce l'output della funzione

Una volta definita la funzione, per un qualsiasi testo in forma di lista basterà scrivere quanto segue per visualizzare la parola cercata:

print(trovaparola(testo,5))

Se può essere scritta in una sola riga (come accade nel nostro caso a patto che si usi sorted e non sort() per ordinare la lista), la funzione può essere definita in alternativa attraverso il comando lambda.

trovaparolabis = lambda t, r: sorted([[t.count(i), i] for i in set(t)], reverse=True)[r-1][2-1]

In un unico script:

es_funzione.py
def trovaparola(t,r): #tra parentesi sono scritte le variabili in input
    fp=[[t.count(i), i] for i in set(t)]
    fp=sorted(fp, reverse=True) #o, in alternativa: fp.sort(reverse=True)
    return fp[r-1][2-1] #il comando return definisce l'output della funzione
 
trovaparolabis = lambda t, r: sorted([[t.count(i), i] for i in set(t)], reverse=True)[r-1][2-1]
 
import xml.etree.ElementTree as ET
parole=ET.parse('testi/ldt-1.5.xml').getroot().findall('.//word')
testo=[i.attrib['form'].lower() for i in parole]
 
print(trovaparola(testo,5))
print(trovaparolabis(testo,5))
definire_una_funzione_in_python.txt · Ultima modifica: 2021/10/29 21:19 da deleteme