Docsity
Docsity

Prepara i tuoi esami
Prepara i tuoi esami

Studia grazie alle numerose risorse presenti su Docsity


Ottieni i punti per scaricare
Ottieni i punti per scaricare

Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium


Guide e consigli
Guide e consigli

Introduzione a Python: linguaggio alto livello e computational linguistics, Sbobinature di Tecniche E Linguaggi Di Programmazione

Una panoramica dettagliata dell'inizio del corso di programmazione in python, con un focus sul linguaggio di alto livello e sulla computational linguistics. Cosa significa programmare, l'algoritmo alla base di ogni programma, i tipi di linguaggio di programmazione, la traduzione di un programma scritto in un linguaggio di alto livello in un linguaggio di basso livello, la terminologia base, l'enunciato, le variabili, i tipi di dato, gli operatori aritmetici, i metodi, le funzioni, il slicing, la conversione di variabili, i metodi delle stringhe, la libreria standard, l'importazione di moduli e le regular expression.

Tipologia: Sbobinature

2023/2024

In vendita dal 27/05/2024

Giozizzi03
Giozizzi03 🇮🇹

5

(5)

56 documenti

1 / 21

Toggle sidebar

Anteprima parziale del testo

Scarica Introduzione a Python: linguaggio alto livello e computational linguistics e più Sbobinature in PDF di Tecniche E Linguaggi Di Programmazione solo su Docsity! ELEMENTI DI PROGRAMMAZIONE PER L’ANALISI DEI TESTI Esistono tanti tipi di programmazione ma la nostra attenzione verrà rimandata ai testi e alla loro manipolazione. Linguistica computazionale/TAL Computational linguistics and natural language processing […] are sometimes used interchangeably to describe the field concerned with the processing of human language by computers ● Computational Linguistics is used to describe research interested in answering linguistic questions using computational methodology ● Natural Language Processing describes research on automatic processing of human language for practical applications Quando si realizzano dei programmi di analisi dei testi si prende il testo e lo si divide in token  tutti elementi minimi di analisi, poi si possono lemmatizzare i token, si può conteggiare la frequenza di parole. Analisi delle concordanze: parola all’interno del contesto d’uso Identificazione delle collocazioni: espressioni che concorrono insieme Assegnazione parti del discorso Riconoscimento e classificazione dei nomi propri Estrazione topic Analisi del sentimento How to Think Like a Computer Scientist (Learning with Python): http://openbookproject.net/thinkcs/python/english3e/ ● Python 101: http://python101.pythonlibrary.org/index.html ● Pensare in Python: https://www.massimolauria.net/informatica2022/docs/PensareInPyt hon.pdf Libri più recenti dalla biblioteca dei Paolotti L'esame consiste nella realizzazione di un programma in Python da svolgere a casa e che viene discusso durante l’orale ● Il programma (creato su Colab), con i relativi materiali, deve essere inviato alla docente 7 giorni prima dell’appello ● La valutazione si basa su: - Correttezza e funzionamento del programma - Complessità del lavoro svolto - Qualità della documentazione (commenti nel programma) - Qualità della discussione del progetto all’orale ● N.B. Le domande all’orale possono riguardare qualunque aspetto affrontato durante il corso Lezione 1 Cosa vuol dire programmare? Dare istruzioni al computer per risolvere problemi. Da un punto id vista più poetico può essere considerata un’arte, poiché ci sono molti modi per far fonte ad un problema. Si parla di ELEGANZA di un programma. È una scienza studiata a livello sia pratico sia teorico e se funziona bene ci si diverte anche Competenza utile per la ricerca e il lavoro che permette di essere autonomi nella gestione dei dati testuali, capire meglio come funzionano i programmi fatti da altri, capirsi meglio con gli informatici. In modo tale da avere un atteggiamento critico nei confronti dei programmi. Un programma è la serie di istruzioni per risolvere il problema: ○ di tipo matematico, come la soluzione di un sistema di equazioni ○ di tipo simbolico, come la ricerca e la sostituzione di una parola in un documento ○ di tipo grafico come l’elaborazione di un’immagine o la riproduzione di un filmato Alla base di ogni programma vi è un algoritmo: la successione di passi che definisce le operazioni che servono ad arrivare ad un risultato. Non è esattamente la stessa cosa di un programma che invece è la realizzazione pratica, l’algoritmo è la teoria. Se l’algoritmo funziona è perché è scritto con un linguaggio di programmazione che è artificiale o formale eseguibile al computer. Un codice fatto di segni con una sintassi e una semantica come una lingua naturale MA: ○ non è ambiguo: una dichiarazione = un significato. Nelle lingue naturali si fa fronte a problema dell’ambiguità grazie al contesto, nel linguaggio di programmazione questo non esiste, ogni cosa scritta ha uno un solo significato ○ non è ridondante: no prolissità. Nelle lingue naturali aiuta la ridondanza, nei linguaggi di programmazione si deve essere il più concisi possibile ○ non ammette significati figurati. Se alla fine il programma non fa quello che vogliamo è colpa nostra. N.B. Esistono altri linguaggi formali: la notazione della matematica per esprimere le relazioni tra numeri e simboli; la notazione della chimica per descrivere la struttura chimica delle molecole Esistono due tipi di linguaggio di programmazione in base al modo in cui le istruzioni sono codificate 1) linguaggi di basso livello (linguaggi macchina, linguaggi assemblativi), più vicini al funzionamento fisico del computer, specifici per famiglia di computer 2) linguaggi di alto livello (e.g., java, python), più vicini al linguaggio naturale, indipendenti dal tipo di computer ● Necessità di tradurre un programma scritto con linguaggio di alto livello in un linguaggio di basso livello per farlo eseguire. LISTA Nel momento in cui c’è bisogno di inserire più variabili si utilizza una lista La si deve inserire tra virgolette. Tutto ciò che è tra virgolette diventa una stringa (un carattere). grazie all’indice di posizione io posso entrare nel punto particolare che mi interessa nella lista. List. & =: 231 list bi = Ì SS - dI - D cl lol = [list a,list b] +4 [[1,2,3],[4,5,6]] ToL[0] [1] +2 [0] — indice della lista [1] — indice dell'elemento della lista lol[1] [2] > ©? e Un contenitore che memorizza associazioni tra coppie di oggetti (chiave e rispettivo valore) wordl = { "forma" : "gatte", forma ea gatte "lemma" : "gatto", "pos" : "nome", lemma i gatto freq" : 25 pos nome } wordi["pos"] —» nome freq Lund 25 LISTA DI LISTE DIZIONARIO CICLO FOR è l’istruzione che viene data. N.B. L’istruzione print è indentata! COSTRUZIONE IF - else Operatori aritmetici ● NON si possono usare tra stringhe ● + (addizione), - (sottrazione), * (moltiplicazione), / (divisione), ** (elevamento a potenza) 3+3 → 6 3-3 → 0 3*3 → 9 3/3 → 1 3**2 → 9 N.B. Cosa succede con: 3+"3"? Operatori relazionali ● > (maggiore), < (minore), >= (maggiore o uguale), <= (minore o uguale), == (uguale), != (diverso) → questi ultimi si possono usare anche con le stringhe 3 == 4 → falso 3 <= 4 → vero 4 >= 4 → vero 3 > 4 → falso 3 == 5 - 2 → vero 3 != 5 - 1 → vero "ciao" != "arrivederci" → vero Operatori booleani Operazioni con numeri, utilizzando anche altre funzioni. Faremo analisi di tipo quantitativo. Funzioni già presenti!!! ● Oltre a usare gli operatori aritmetici visti precedentemente, ci sono delle apposite funzioni come: ○ round(45.621) → 46 → arrotondamento all’intero più vicino, se i due numeri interi su entrambi i lati sono equidistanti, viene scelto il numero pari: ■ round(4.5) → 4 ARROTONDAMENTO PER DIFETTO ○ round(45.621,1) → 45.6 → arrotondamento a una cifra decimale (a quante cifre decimali si vuole arrotondare) ○ max(3,1,10,15) → 15 → elemento con valore più alto ○ min(3,1,10,15) → 1 → elemento con valore più basso Le virgolette corrispondenti possono essere singole o doppie MA l’importante è che ci siano sia all’inizio sia alla fine. Tabulazione: tasto tab N e t sono due lettere che hanno un significato particolare Quando le virgolette fanno parte della stringa stessa e non segnano la fine o l’inizio della stringa. Se si utilizzano le virgolette singole, si possono usare quelle doppie per printarle normalmente Non si possono mescolare più funzioni, se si fa una concatenazione tra un intero e una stringa il risultato è un errore, per cui si CONVERTE. Ci sono alcune funzioni apposite. Non è possibile concatenare stringhe e numeri insieme per cui si convertono La conversione avviene una volta sola Stringa con spazio vuoto perché lo spazio viene conteggiato sempre. Dal Python 3.6 si ha una conversione diversa, molto più semplice. F NO SPAZIO “Risultati…. I nomi delle variabili da convertire devono essere tra parentesi graffe Questo funziona solo dalla versione 3.6, su Colabe c’è quello più recente possibile (operatore di Google) Il + può effettivamente essere un carattere ambiguo, perché è un operatore aritmetico ma anche di concatenazione di stringhe. Un altro operatore è l’*  viene utilizzato nelle stringhe per ripeterle Per le stringhe si hanno dei metodi, cioè delle funzioni specifiche per le stringhe UPPER MAIUSCOLO, LOWER MINUSCOLO Split: Può essere un primo modo per eseguire una tokenizzazione https://docs.python.org/3/library/stdtypes.html#string-methods “he*o” mi trova heo, senza lettere in mezzo, ma anche hello o tutte le altre parole che ha dei caratteri nel mezzo. “he+o” mi dice che al posto del + ci deve per forza essere almeno un carattere, o anche di più. “he.?o” mi dice che trova zero o una occorrenza: heo oppure hero (per es.).  Tra parentesi graffe, dopo il punto, il numero esatto di occorrenze di caratteri.  | dice di trovare almeno una delle due. Nelle regular expression troviamo spesso lo slash \. Se vogliamo segnare un + come carattere interno, lo si precede da \. Il \b è molto importante > considera il confine di parola quando o dopo c’ uno spazio o c’è un carattere che non sia un numero o una lettera. Poi uso delle parentesi quadre (mi servono ad indicare un range): - [arn] mi trova un carattere tra a, r o n - [a-n] mi trova tutti i caratteri tra a e n in ordine alfabetico - [^arn] se è dentro la parentesi è un NOT, cioè tutto tranne a,r,n - (0123) mi trova qualsiasi numero tra 0, 1, 2, 3 - [0-9] mi trova ogni numero tra 0 e 9 - [0-5][0-9] mi trova due numeri compresi tra 00 e 59, quindi ok 53, non 63. - [a-zA-Z] mi considera in maiuscolo o minuscolo qualunque carattere tra a e z. - Prestare attenzione all’utilizzo di + ecc che hanno valore anche di metacarattere. Questi sono quelli che chiamiamo pattern: cioè ciò che vogliamo cercare. Usando i pattern posso anche cercare nei testi. Libreria standard re() – funzioni Re.search(pattern, string, flag) Search (solo la prima occorrenza) cerca la stringa pattern all’interno della stringa string e restituisce la prima occorrenza trovata e dice anche in che posizione, contando i caratteri. Si può aggiungere un altro parametro: flag. Può essere utile usare due flag: re.IGNORECASE esegue la ricerca senza considerare differenza tra maiuscole e minuscole, perché altrimenti la ricerca sarebbe key sensitive. re.MULTILINE esegue la ricerca considerando inizio e fine delle singole righe di una stringa posta su più righe. Esempio: - Su più righe: si mettono le tre virgolette all’inizio e le tre virgolette alla fine. - Devo mettere un escape poiché ci sono virgolette all’interno del testo. - Definisco una variabile pattern=“signor.?” > re.search(pattern, string) mi trova “signore” ma con la minuscola. - Se aggiungo re.search(pattern, string, flags) me ne trova uno. - C’è una funzione per trovare tutte le stringhe: re.findall(pattern, string, flag) > cerca la stringa pattern all’interno della stringa string e restituisce una lista di stringhe > mi trova TUTTE le occorrenze. Ha la stessa struttura di re.search - Altra funzione importante: re.sub(pattern, repl, string, count, flag) → sostituisce le occorrenze della stringa pattern all’interno della stringa string con la stringa repl; l’argomento count indica il numero massimo di occorrenze del pattern da sostituire → 0 = TUTTE. re.split(pattern, string, maxsplit, flags) → restituisce una lista in cui la stringa string è stata divisa a ogni corrispondenza del pattern re.compile(pattern,flag)→ compila un pattern salvandolo per essere utilizzato in seguito import. Cioè non devo inserire uno string. re string = "Elenco autori dal 1500 al 1600:" > Mi serve per salvare un pattern per poi riutilizzarlo successivamente pattern = re.compile(r"\d{4}") > me lo salvo lì il pattern e poi posso riutilizzarlo. Mi dice che è una sequenza di 4 numeri. result = pattern.findall(string) print(result) VEDI ESERCIZIO SU COLAB. N.B.: per gestire testi su più righe o uso le tre virgolette a inizio e fine O solo una virgoletta a inizio e fine ma a fine di ogni riga devo mettere \ Quando usiamo findall, dobbiamo ricordare che ci vengono restituiti i valori tra parentesi quadre: cioè ci viene restituita una lista. I gruppi sono tra parentesi tonde () > i valori che ci vengono restituiti sono una lista di lista, cioè una lol > ci fa capire come entrare in questa lista di lista. Utile fare prove su questa piattaforma di test per le espressioni regolari (ci permette di capire anche se il match è giusto): https://regexr.com/
Docsity logo


Copyright © 2024 Ladybird Srl - Via Leonardo da Vinci 16, 10126, Torino, Italy - VAT 10816460017 - All rights reserved