Elaborazione del linguaggio naturale ed estrazione di informazioni da Twitter Natural Language Processing and Information Extraction from Twitter

Pagina creata da Giorgio Bianchi
 
CONTINUA A LEGGERE
Elaborazione del linguaggio naturale ed estrazione di informazioni da Twitter Natural Language Processing and Information Extraction from Twitter
Scuola Politecnica e delle Scienze di Base
Corso di Laurea in Ingegneria Informatica

Elaborato finale in INTELLIGENZA ARTIFICIALE

Elaborazione del linguaggio naturale ed estrazione di
informazioni da Twitter
Natural Language Processing and Information
Extraction from Twitter

Anno Accademico 2019/2020

Candidato:

Vincenzo Coppola
matr. N46 003356
Elaborazione del linguaggio naturale ed estrazione di informazioni da Twitter Natural Language Processing and Information Extraction from Twitter
Dopo tre intensi anni è finalmente arrivato il tanto atteso giorno.
È stato un periodo di grande apprendimento, non solo per l’istruzione ricevuta, ma anche a livello personale.
Vorrei pertanto ringraziare tutte le persone che mi hanno aiutato e sostenuto in questo percorso.
Prima di tutto, vorrei ringraziare i miei relatori, la professoressa Amato Flora e il professore Cozzolino Giovanni, che,
oltre ad avermi guidato nella stesura di questo lavoro, sono stati sempre disponibili e mi hanno fornito preziosi consigli per
intraprendere la strada giusta e portare a compimento la mia tesi.
Un ringraziamento va anche a tutti i professori per le conoscenze, la passione e l’entusiasmo che mi hanno trasmesso.
Vorrei ringraziare i miei genitori per essere sempre presenti, per i loro consigli e per la loro capacità di ascoltarmi e
supportarmi anche nelle situazioni peggiori.
Ringrazio mia sorella, i miei nonni e tutta la mia famiglia che mi è sempre stata vicina.
Un ringraziamento va anche a tutti i miei colleghi, in particolare ad Alberto, Antonio, Dario e Salvatore, con i quali ho
condiviso a pieno questi tre anni.
Per ultimi, ma non per importanza, vorrei ringraziare Cristiana, Ferdinando, Giuseppe, Raffaele e tutti i miei amici, che
ogni giorno hanno condiviso con me gioie, sacrifici e successi senza mai voltarmi le spalle.
L’affetto e il sostegno che mi avete dimostrato rendono questo traguardo ancora più prezioso... siete la mia seconda famiglia.

Un sentito grazie a tutti!

Vincenzo Coppola
Elaborazione del linguaggio naturale ed estrazione di informazioni da Twitter Natural Language Processing and Information Extraction from Twitter
INDICE

Indice                                                             III
Introduzione                                                        4
Capitolo 1: Natural Language Processing                             5
   1.1 Cos'è il Natural Language Processing                         5
   1.2 Storia del NLP                                               6
   1.3 NLP e Deep Learning                                          6
   1.4 NLP per il dialogo                                           7
   1.5 Social Network e Big Data alla base dei progressi del NLP    8
Capitolo 2: Analisi testuale                                       10
   2.1 Analisi del contenuto                                       10
   2.2 Specifiche di progetto e strumenti utilizzati               12
       2.2.1 Twitter                                               12
       2.2.2 spaCy                                                 12
       2.2.3 Python                                                13
   2.3 Descrizione analisi                                         14
   2.4 Esempio di Output                                           17
Capitolo 3: Information Extraction                                 19
   3.1 Gli strumenti per l'IE                                      20
   3.2 IE from Twitter: Tweepy                                     21
       3.2.1 StreamAPI                                             22
       3.2.2 RestAPI                                               24
   3.3 Analisi dei tweet                                           26
       3.3.1 Sentiment Analysis                                    27
Conclusioni                                                        31
Bibliografia                                                       33

                                                III
Elaborazione del linguaggio naturale ed estrazione di informazioni da Twitter Natural Language Processing and Information Extraction from Twitter
Introduzione

     Alla base di questo studio vi è l’analisi del linguaggio naturale al fine di poter estrarre delle
     informazioni di interesse.
     In particolare, si pone l’attenzione sul Natural Language Processing che offre numerosi
     spunti di analisi.
     La motivazione principale che mi ha spinto ad approfondire tale tema è la curiosità nel
     capire come sia possibile che, sistemi come Alexa di Amazon o Siri di Apple, siano in grado
     non solo di imitare il dialogo umano ma anche di rispondere a domande su argomenti di

     diversa natura ed eseguire operazioni molto complesse.
     L’obiettivo di questa tesi di laurea è quello di fornire delle informazioni riguardanti le
     tecniche di Natural Language Processing ed Information Extraction e mettere in evidenza i
     risultati ottenuti da quest’analisi.
     In particolare, è stata effettuata un’analisi di tweet, estratti da Twitter, con l’obiettivo di
     poter estrarre alcune informazioni di interesse.

     La tesi è articolata in tre capitoli: nel primo viene fornita un’introduzione del fenomeno del
     Natural Language Processing e come esso si approccia con altri campi di studio; nel secondo
     capitolo si fa riferimento all’analisi testuale, facendo particolare leva sull’analisi del
     contenuto, e viene proposto un semplice progetto in cui si va ad analizzare il contenuto di
     un tweet utilizzando la libreria spaCy; il terzo e ultimo capitolo si concentra invece
     sull’Information Extraction e su come questa possa essere realizzata utilizzando le funzioni
     messe a disposizione dalla libreria Tweepy.
     A tal proposito, è stato realizzato un progetto dimostrativo di cui sono riportati anche i
     risultati.
     Infine, nelle conclusioni di questa tesi, sono state riportate le principali sfide di ricerca
     ancora aperte e quali possono essere le possibili soluzioni.

                                                4
Elaborazione del linguaggio naturale ed estrazione di informazioni da Twitter Natural Language Processing and Information Extraction from Twitter
Capitolo 1: Natural Language Processing

1.1   Cos’è il Natural Language Processing

      Il Natural Language Processing è un campo di ricerca interdisciplinare che coinvolge
      informatica, intelligenza artificiale e linguistica, il cui scopo è quello di sviluppare
      algoritmi che siano in grado di analizzare, rappresentare e comprendere il linguaggio
      naturale.
      Per linguaggio naturale si intende la lingua che utilizziamo tutti i giorni ed è sinonimo di

      linguaggio umano, principalmente per poterlo distinguere dal linguaggio formale a cui
      appartiene il linguaggio dei computer.
      Così com’è, il linguaggio naturale è la forma di comunicazione umana più comune non solo
      nella sua versione parlata, ma anche in quella scritta che sta crescendo esponenzialmente

      negli ultimi anni attraverso i social media. Rispetto al linguaggio formale, il linguaggio
      naturale è molto più complesso, contiene spesso ambiguità che lo rendono molto difficile
      da elaborare e comprendere.
      Determinante per la comprensione del linguaggio naturale è la suddivisione di esso in vari

      livelli di dettaglio: dalle parole, in relazione al loro significato ed alla loro appropriatezza
      d’uso all’interno di un contesto, fino alla grammatica ed alle regole di strutturazione sia
      delle frasi, sia dei paragrafi e sia delle pagine.
      In primo luogo, l’NLP fornisce soluzioni per analizzare la struttura sintattica del testo,
      associando alle singole parole le rispettive categorie morfologiche (ad esempio nome,
      verbo, aggettivo), così da poter identificare entità, classificarle in varie categorie ed estrarre
      dipendenze sintattiche e relazioni semantiche.
      In secondo luogo, l’NLP consente di comprendere la semantica del testo, identificando il
      significato delle parole all’interno del contesto in cui vengono utilizzate, e le modalità di
      utilizzo (per esempio ironia, sarcasmo, sentimento).

                                                  5
Elaborazione del linguaggio naturale ed estrazione di informazioni da Twitter Natural Language Processing and Information Extraction from Twitter
1.2   Storia del NLP

      La storia di questo campo di ricerca ha inizio negli anni ’50, quando Alan Turing pubblicò
      il suo articolo “Machine and Intelligence”, in cui propose un test per valutare l’abilità di
      un computer nel mostrare comportamenti intelligenti, indistinguibili da quelli di un essere

      umano, conversando in linguaggio naturale.
      Fino agli anni ’80, la maggior parte degli approcci NLP ha provato a formalizzare nei
      computer i vocabolari e le regole del linguaggio naturale con risultati però poco
      soddisfacenti a causa della rigidità e non scalabilità delle regole scritte a mano.
      Negli anni ’90 i risultati iniziarono ad essere più soddisfacenti vista la comparsa dei primi
      approcci di NLP basato su corpora, ossia grandi collezioni di testi scritti o orali prodotti in
      contesti comunicativi reali.
      I corpora permettono quindi di osservare l’uso effettivo di una lingua e di verificare
      tendenze generali su base statistica.
      Non è quindi più necessaria una codifica manuale preliminare e risulta pertanto risolto il
      problema degli approcci a regole, consentendo ad una macchina di apprendere
      autonomamente le preferenze lessicali e strutturali.

1.3   NLP e Deep Learning

      Data l’estrema varietà e quantità di contenuti espressi in linguaggio naturale, l’intelligenza
      artificiale assume un ruolo fondamentale, favorendo la realizzazione di soluzioni innovative
      non solo per l’elaborazione e la comprensione del linguaggio ma anche per la produzione
      automatica di dati testuali.
      In particolare, negli ultimi anni, si è assistito alla nascita di nuovi approcci che vanno ad
      integrare l’elaborazione del linguaggio naturale con gli algoritmi di apprendimento
      profondo, i cosiddetti algoritmi di Deep Learning; grazie a questi ultimi oggi è possibile
      tradurre sia testi che parlato in lingue differenti in maniera del tutto automatica e con

      prestazioni molto elevate, dialogare con le macchine in linguaggio naturale (Siri, Alexa) o

                                                6
Elaborazione del linguaggio naturale ed estrazione di informazioni da Twitter Natural Language Processing and Information Extraction from Twitter
ancora generare contenuto in linguaggio naturale per sintetizzare le informazioni chiave di
      un documento.

      Il Deep Learning si basa sul concetto di rete neurale artificiale, ossia un modello
      matematico ispirato dal punto di vista funzionale ai sistemi neurali del cervello umano.
      Una prima caratteristica fondamentale di tali reti è che sono in grado di apprendere, in
      maniera autonoma, sia una rappresentazione di tipo gerarchico delle caratteristiche
      descrittive dei dati in ingresso, sia le modalità con le quali combinare al meglio queste
      informazioni per risolvere un compito specifico.
      Una seconda caratteristica, anch’essa molto importante, è che tali reti apprendono dalle loro
      esperienze: sono quindi in grado di migliorare le loro prestazioni nella risoluzione di un
      problema complesso in funzione della quantità di esempi con cui sono addestrate.
      C’è però un problema: queste reti neurali sono in grado di elaborare solamente dati numerici
      e non stringhe testuali ed è proprio per questo motivo che, a partire dal 2013, sono state
      proposte tecniche differenti per la rappresentazione del linguaggio in maniera numerica
      come un vettore continuo di numeri reali (word embeddings).
      Tra le reti neurali maggiormente utilizzate per problemi di NLP vi sono:
      •   le reti convolutive, che sono in grado di estrarre caratteristiche complesse operando
          localmente su piccole porzioni di testo;

      •   le reti ricorrenti, che sono in grado di trattare dati sequenziali e quindi apprendono
          dipendenze più lunghe all’interno di un testo.
      Il Deep Learning, attraverso la combinazione di word embeddings e reti convolutive e
      ricorrenti, rappresenta quindi l’approccio maggiormente utilizzato per affrontare
      problematiche relative all’elaborazione e alla comprensione del linguaggio naturale.

1.4   NLP per il dialogo

      Al giorno d’oggi, le tecniche di NLP basate su deep learning trovano sempre più
      applicazione nello sviluppo di sistemi conversazionali intelligenti, ossia sistemi in grado di
      emulare il dialogo umano, di rispondere a domande su diversi argomenti ed eseguire compiti
      anche molto complessi.
                                               7
Elaborazione del linguaggio naturale ed estrazione di informazioni da Twitter Natural Language Processing and Information Extraction from Twitter
Tra i sistemi conversazionali più noti troviamo Siri di Apple, Alexa di Amazon, Cortana di
      Microsoft e Assistant di Google.

      Questi sistemi sono capaci di:
      •   fornire risposte dirette e coincise a domande poste dall’utente in linguaggio naturale su
          uno specifico dominio; affinché ciò sia possibile vengono adoperati approcci di deep
          learning in grado di analizzare e classificare domande ed estrarre risposte in linguaggio
          naturale interrogando basi di conoscenza di grandi dimensioni e/o collezioni di
          documenti testuali, come il Web, risolvendo ambiguità e favorendo relazioni di tipo
          semantico;
      •   “conversare” in maniera del tutto naturale con gli esseri umani sfruttando a piena
          potenza gli algoritmi di deep learning che consentono di apprendere differenti tipologie
          di risposte, su vari domini di interesse, a partire da esempi di dialogo reali;
      •   supportare l’utente nell’esecuzione di compiti più o meno complessi, come l’acquisto di
          un biglietto o la prenotazione di un viaggio; per fare ciò si sfruttano algoritmi addestrati
          per comprendere le intenzioni dell’utente, aggiornare lo stato della conversazione in
          funzione di tali intenzioni, selezionare la prossima azione da eseguire e convertire
          quest’ultima in una risposta anch’essa espressa in linguaggio naturale.

      Queste sono solamente alcune delle innumerevoli funzionalità dei sistemi conversazionali
      che vengono realizzate attraverso tecniche di NLP e che sono destinate col tempo a
      diventare sempre più importanti nel “rapporto” uomo-macchina.

1.5   Social Network e Big Data alla base dei progressi del NLP

      A partire dalla nascita di Internet e fino alla comparsa dei primi social networks, la mole di
      dati disponibile sul Web era molto scarsa; possiamo quantificarla come una decina di
      exabyte.
      Per comprendere quanto i social networks siano importanti per l’analisi è sufficiente sapere
      che, oggigiorno, questa mole di dati viene prodotta settimanalmente.

                                                8
Elaborazione del linguaggio naturale ed estrazione di informazioni da Twitter Natural Language Processing and Information Extraction from Twitter
Questo fenomeno di generazione e diffusione di dati può essere ricondotto a diversi fattori:
 I.      l’avvento del Social Web e la disponibilità di dispositivi tecnologici sempre più alla

         portata di tutti, che hanno fatto sì che l’utente, da fruitore passivo, sia passato ad essere
         un protagonista attivo, producendo così dei contenuti che danno vita ad una enorme
         mole di dati di natura eterogenea;
II.      l’informatizzazione dei processi aziendali e la digitalizzazione della maggior parte dei
         documenti.

                                                9
Elaborazione del linguaggio naturale ed estrazione di informazioni da Twitter Natural Language Processing and Information Extraction from Twitter
Capitolo 2: Analisi Testuale

      “Le diverse tecniche di analisi testuale, attraverso il supporto di specifici software,
      rispondono all’esigenza di accostarsi a campi d’indagine complessi e consentono
      l’esplorazione, la descrizione, e l’analisi di corpora testuali anche molto estesi e poco
      strutturati.”
      (Francesca della Ratta Rinaldi, 2007).

      Dalla citazione si deduce che, attraverso l’analisi testuale, è possibile esplorare rapidamente
      e in modo semi-automatico la struttura di testi, anche molto ampi, con il vantaggio di poter

      tornare in qualsiasi momento ai testi originali.
      È importante però sottolineare che le procedure di analisi testuale non si limitano
      semplicemente al conteggio delle singole parole ma consentono anche di approfondire i
      contenuti presenti nel documento attraverso delle operazioni di ricerca, selezione e
      classificazione dei testi.

2.1   Analisi del contenuto

      L’analisi del contenuto è un insieme di tecniche, manuali o assistite da computer, che ha
      come obiettivo interpretare documenti, provenienti da processi di comunicazione, ed
      assegnare un significato al loro contenuto con lo scopo di produrre inferenze valide e
      attendibili.
      Una volta definito l’insieme dei testi da analizzare è necessario eseguire una serie di
      operazioni preliminari al fine di curare l’organizzazione interna e la trascrizione dei
      documenti.
      A tal proposito bisogna verificare in primo luogo la comparabilità dei testi, in secondo
      luogo la disponibilità di una o più caratteristiche da associare a ciascun frammento e, infine,

                                               10
che i testi siano sufficientemente lunghi al fine di rendere vantaggioso il ricorso a tecniche
automatiche di analisi.

Il punto di partenza è l’analisi delle parole che compongono il corpus così da poter
individuare le cosiddette “parole tema” che consentono di cogliere, in maniera immediata,
gli argomenti principali del testo.
Successivamente è necessario seguire diversi passaggi che consentono di descrivere in
modo semi-automatico il contenuto del testo:
•   analisi dei segmenti ripetuti: si tratta di quelle forme composte, costituite da parole che
    compaiono nel corpus con la stessa sequenza, che aiutano a fornire una rappresentazione
    sintetica dei contenuti del corpus e ad individuare rapidamente oggetti e azioni su cui è
    strutturato il testo;
•   analisi delle co-occorrenze: consente di studiare le associazioni tra parole, individuando
    quelle che compaiono più spesso vicine tra loro;
•   analisi delle parole caratteristiche: consente di differenziare le parti di un testo,
    evidenziando quelle parole che sono sovra-rappresentate nel linguaggio di una certa
    categoria di autori, così da poter caratterizzare il linguaggio;
•   analisi del linguaggio peculiare: a ciascuna parola è associata una frequenza che serve
    ad indicare l’uso atteso di ogni parola nella comunità linguistica a cui il lessico è riferito;

•   analisi delle parole con caratteristiche grammaticali omogenee: utile affinchè l’insieme
    dei verbi ricondotti al lemma fornisca una graduatoria delle azioni menzionate nel testo,
    l’insieme degli aggettivi fornisca elementi per valutare il tono del testo ed infine i
    pronomi diano conto del tipo di interazione presente tra soggetti;
•   analisi delle concordanze: tecnica che consente di analizzare il contesto d’uso di una
    parola di interesse attraverso l’analisi di n parole precedenti e n parole successive ad
    essa; quest’analisi viene eseguita ogni qualvolta la parola di interesse compare nel
    corpus, al fine di risolvere le ambiguità semantiche e definire una mappa concettuale tra
    parole e temi affrontati;
•   analisi delle corrispondenze lessicali: consente di sintetizzare l’informazione contenuta
    in una grossa matrice di dati testuali, visualizzando le associazioni tra le parole in analisi

                                           11
e cercando la miglior rappresentazione simultanea degli elementi così da poter studiare
            le dipendenze tra caratteri.

2.2     Specifiche di progetto e strumenti utilizzati

        L’obiettivo di questo primo progetto è quello di realizzare l’analisi testuale utilizzando la
        libreria spaCy.
        In particolare, si vogliono analizzare documenti prelevati dall’applicazione Twitter, al fine

        di effettuare le operazioni di analisi che sono state elencate in precedenza.

2.2.1   Twitter

        Twitter è un servizio di notizie e microblogging fornito dalla società Twitter,Inc. su cui gli
        utenti “postano” i propri pensieri ed interagiscono con messaggi chiamati tweet.
        Ogni utente possiede una propria pagina personale, aggiornabile tramite messaggi di testo
        con una lunghezza massima di 280 caratteri.
        Il sito web è stato creato nel marzo 2006 ed è stato lanciato nel luglio dello stesso anno.
        Grazie alla sua semplicità e all’immediatezza d’uso, oggigiorno, è uno dei social network
        più popolari; a partire dal 2016 conta oltre 319 milioni di utenti attivi mensilmente.
        Inoltre, è utilizzato dagli utenti anche per diffondere notizie, come strumento di giornalismo
        e soprattutto viene utilizzato dalla maggior parte dei politici e dagli organi di stato, motivo
        per il quale la sua popolarità è in aumento costante.
        Data la vasta mole di utenti, l’insieme dei tweet pubblicati su Twitter costituisce un’enorme
        quantità di materiale che può essere utilizzato per effettuare delle analisi.

2.2.2   spaCy

        “Se si lavora con un testo di grandi dimensioni, alla fine potrebbe essere utile saperne di
        più su di esso. Per esempio, di cosa si tratta? Cosa significano le parole nel contesto? Chi
        sta facendo cosa a chi? Quali aziende e prodotti sono menzionati? Quali testi sono simili
        tra loro?

                                                  12
spaCy è progettato specificamente per l'uso produttivo e aiuta a costruire applicazioni che
             elaborano e "comprendono" grandi volumi di testo. Può essere utilizzato per costruire

             sistemi di estrazione delle informazioni o di comprensione del linguaggio naturale, o per
             pre-processare il testo per un apprendimento profondo.”

             spaCy è una libreria software open-source1 per l’elaborazione avanzata del linguaggio
             naturale; è scritta utilizzando il linguaggio di programmazione Python e mette a
             disposizione un gran numero di funzionalità.
             Tra queste quelle più importanti sono:
             •   tokenizzazione;
             •   named entity recognition;
             •   grammatical tagging;
             •   text classification;
             •   deep learning integration.

             Per l’installazione di spaCy è necessario installare prima il comando pip e successivamente
             eseguire il comando pip install -U spaCy.

2.2.3       Python

             Python è un linguaggio di programmazione ad alto livello, orientato agli oggetti e adatto a
             sviluppare applicazioni distribuite e scripting.
             È un linguaggio multi-paradigma che ha tra i principali obiettivi dinamicità, semplicità e
             flessibilità; supporta inoltre anche il paradigma object oriented, la programmazione
             strutturata e molte caratteristiche di programmazione funzionale.
             Le principali caratteristiche del linguaggio Python sono le variabili non tipizzate e l’uso
             dell’indentazione per la definizione delle specifiche.

1   open-source: software non protetto da copyright e liberamente modificabile dagli utenti.
                                                            13
Altre caratteristiche, anch’esse molto importanti, sono l’overloading degli operatori, la
        presenza di una grande quantità di tipi e funzioni di base e l’opportunità di poter usufruire

        di una vasta gamma di librerie.
        Il controllo dei tipi è forte (strong typing) e viene eseguito a runtime (dynamic typing); una
        variabile è un contenitore a cui viene associata “un’etichetta” che rappresenta il nome della
        variabile e che, durante il suo ciclo di vita, può essere associata a diversi contenitori non
        necessariamente dello stesso tipo.
        La memoria è gestita dai garbage collectors che sono direttamente integrati nell’ambiente
        di esecuzione.
        Python, infatti, non rilascia necessariamente la memoria al sistema operativo ma possiede
        un allocatore dedicato per oggetti di dimensioni inferiori a 512 byte, che mantiene alcuni
        pezzi di memoria già allocata per un ulteriore uso futuro.
        La quantità di memoria che Python utilizza dipende dal contesto e, in alcuni casi, tutta la
        memoria allocata potrebbe essere rilasciata solo quando il processo termina.
        Se un processo Python di lunga durata richiede più memoria nel tempo, non significa
        necessariamente che si hanno perdite di memoria.
        I GC sono quindi, in sintesi, responsabili di liberare automaticamente la memoria
        cancellando tutte quelle risorse che sono inutilizzate.

2.3     Descrizione analisi

N.B: Il codice è stato eseguito sul sistema operativo Linux Mint con la versione 2.7 di Python.
        Una volta installata la libreria spaCy (par. 2.2.2) bisogna scaricare ed installare un modello
        che deve essere successivamente caricato tramite l’istruzione spacy.load().
        Questo restituirà un oggetto Language contenente tutti i componenti e i dati necessari per
        elaborare il testo.
        Nel caso in esame è stato utilizzato il modello per la lingua inglese.
                              python -m spaCy download en_core_web_sm
        Consideriamo ora un documento contenente una serie di tweet da analizzare.

                                                 14
Lo script realizzato ha come obiettivo soddisfare tutti i punti che costituiscono la pipeline
          NLP:

          • Pretrattamento del corpus: è stata realizzata una correzione manuale dei caratteri
               utilizzati nei tweet al fine di poterli rendere riconoscibili secondo il codice ASCII;
          • Annotazione morfo-semantica: è stata assegnata ad ogni termine la categoria di
               appartenenza e, successivamente, è stato individuato il lemma;
          • Analisi lessico-metrica: Noun Chanks e Navigating the Pars Tree individuano per ogni
               termine tutte le parole che sono ad esso associate e le inseriscono all’interno di una lista;
          • Estrazione dei termini peculiari: la Named Entity Recognition identifica i nomi e i
               concetti con maggiore importanza;
          • Identificazione delle relazioni: è stato utilizzato un approccio endogeno in quanto le
               informazioni sono state estratte dai corpus stessi.

          Possiamo adesso analizzare lo script realizzato in linguaggio Python.

import spacy

nlp = spacy.load('en_core_web_sm')
tweets = open("tweets.txt", "r")
indice = 0
for contenuti in tweets.readlines():
    indice += 1
    doc = nlp(unicode(contenuti, "utf-8"))
    analizzato = open('anallizato.txt', 'a')

    analizzato.write("********************...ANALYZING TWEET NUMBER " +str(indice) + "...******************")
    analizzato.write("LEMMATIZZATION\n")
    analizzato.write("TEXT   LEMMA   POS   TAG   DEP\n")
    for token in doc:
        analizzato.write(token.text + '   ' + token.lemma_ + '    ' + token.pos_ + '   ' + token.tag_ + '   ' + token.dep_
+ '\n')

    analizzato.write("\n\nNOUN CHUNKS\n")
    analizzato.write("TEXT   ROOT_TEXT    ROOT_DEP   ROOT_HEAD_TEXT\n")
    for chunk in doc.noun_chunks:
        analizzato.write(chunk.text + '    ' + chunk.root.text + '   ' + chunk.root.dep_ + '   ' + chunk.root.head.text +
'\n')

    analizzato.write("\n\nNAVIGATING THE PARSE TREE\n")
    analizzato.write("TEXT   DEP   HEAD_TEXT   HEAD_POS   CHILDREN\n")
    for token in doc:
        analizzato.write(token.text + '   ' + token.dep_ + '   ' + token.head.text + '    ' + token.head.pos_     + '   ' +
str([child for child in token.children]) + '\n')

    analizzato.write("\n\nITERATING AROUND THE LOCAL TREE\n")
    analizzato.write("TEXT   DEP   N_LEFTS   N_RIGTHS   ANCESTORS\n")
    root = [token for token in doc if token.head == token][0]
    subject = list(root.lefts)[0]
    for descendant in subject.subtree:
        assert subject is descendant or subject.is_ancestor(descendant)
        analizzato.write(descendant.text + '   ' + descendant.dep_ + '   ' + str(descendant.n_lefts) + '    ' +
str(descendant.n_rights) + '   ' + str([ancestor.text for ancestor in descendant.ancestors]) + '\n')

    analizzato.write("\n\nNAMED ENTITY RECOGNITION\n")
    analizzato.write("TEXT   START    END LABEL    DESCRIPTION\n")
    for ent in doc.ents:
        analizzato.write(ent.text + '    ' + str(ent.start_char) + '   ' + str(ent.end_char) + '   ' + ent.label_)

    analizzato.write("\n\nSENTENCE RECOGNITION\n")
    for sent in doc.sents:
        analizzato.write(sent.text + '\n')

    analizzato.close()
    print('DOCUMENTO ANALLIZZATO')

                                                            15
Per prima cosa è stata importata la libreria scaricata in precedenza attraverso l’istruzione
import spacy; successivamente è stato caricato il modello della lingua inglese utilizzando la

funzione spacy.load() ed è stato aperto in lettura il documento di testo contenente i tweet.
Dal momento che ogni tweet occupa una sola riga del documento, sfruttando una variabile
indice è stato possibile tener conto di quale fosse il tweet analizzato.
L’istruzione successiva è la lemmatizzazione che si occupa di riconoscere
automaticamente le diverse flessioni di sostantivi, aggettivi, verbi, e di riportarli alla loro
radice comune.
La lemmatizzazione comporta che le forme dei sostantivi e degli aggettivi vengano
ricondotte al maschile singolare, quelle dei verbi all’infinito presente, quelle delle
preposizioni articolate alla loro forma senza articolo e così via.
Questa porzione di codice individua il lemma, cioè la forma base, il pos, cioè la categoria
di appartenenza del termine, il tag ovvero l’etichetta dettagliata della categoria del termine
e infine il dep, cioè la relazione sintattica tra i vari token che si ottiene attraverso tecniche
di I.E.(information extraction).
Successivamente sono stati analizzati i Noun Chunks, ossia “frasi di base” che hanno un
nome come testa.
In questa fase si determinano: il root text, cioè il testo originale della parola che collega il

noun chunk al resto della frase, il root dep, cioè la relazione di dipendenza che collega la
radice alla sua testa, e infine il root head text, ossia il testo della testa del token della radice.
Navigating the Parse Tree ha come obiettivo quello di analizzare l’albero delle
dipendenze, connettendo i termini che dipendono tra loro con un arco.
In questa fase di analisi possiamo quindi individuare il dep, ossia la relazione sintattica che
collega il “figlio” alla testa, l’head text, cioè il testo originale della testa del token, l’head
pos, ossia la categoria di appartenenza della testa, ed infine il children che altro non è che il
figlio, inteso come relazione di dipendenza, della testa.
L’iterazione rispetto all’albero delle dipendenze locali ha come obiettivo identificare,
per ogni termine, i termini da cui esso dipende.

                                            16
Gli attributi Token.lefts e Token.rights forniscono sequenze di “figli” sintattici che si
      verificano prima e dopo il token e che servono per individuare le relazioni di gerarchia.

      La Named Entity Recognition permette invece di riconoscere i “nomi” all’interno del
      documento: in particolare, restituisce il testo originale, a che categoria appartiene e la
      posizione in cui si trova all’interno della frase.
      Infine è stata realizzata la Sentence Recognition il cui obiettivo è il riconoscimento delle
      frasi che compongono il testo.

2.4   Esempio di Output

      A scopo illustrativo considereremo un solo tweet, pubblicato da Donald Trump, nonostante
      il codice realizzato sia in grado di effettuare l’analisi anche di più tweet, attraverso un ciclo
      for che esegue il codice per ogni riga del documento.

      “Sorry losers and haters, but my I.Q. is one of the highest -and you all know it! Please don't
      feel so stupid or insecure, it's not your fault.”
      Eseguendo lo script che è stato commentato in precedenza si ottiene il seguente risultato:

                        ***********ANALYZING TWEET NUMBER 1*************
                                             LEMMATIZZTION
                                 TEXT      LEMMA      POS      TAG       DEP
                                Sorry       sorry      ADJ       JJ      amod
                              losers       loser      NOUN       NNS      nsubj
                                   and      and     CCONJ        CC      cc
                               haters      hater       NOUN       NNS      conj
                                    ,     ,     PUNCT      ,      punct
                                   but      but     CCONJ        CC      cc
                                my      -PRON-      DET      PRP$        poss
                                I.Q.      I.Q.      PROPN       NNP      conj
                                   is     be     VERB      VBZ       ROOT
                                   one      one     NUM      CD      attr
                                    of      of     ADP     IN       prep
                                    the      the     DET      DT      det
                               highest        high     ADJ       JJS      pobj
                                 -and      -and      PUNCT       :      ROOT
                               you      -PRON-      PRON      PRP        nsubj
                                   all     all      DET     DT       appos
                                know      know       VERB      VBP       ROOT
                                it      -PRON-      PRON      PRP        dobj
                                    !     !     PUNCT      .      punct
                               Please      please       INTJ       UH      intj
                                    do      do     VERB      VB      aux
                                    n't      not     ADV      RB      neg
                                 feel      feel      VERB       VB      ROOT
                                   so     so     ADV      RB      advmod
                               stupid      stupid       ADJ      JJ      acomp
                                    or      or     CCONJ       CC      cc
                             insecure       insecure       ADJ        JJ     conj
                                    ,     ,     PUNCT      ,      punct
                                it     -PRON-      PRON       PRP       nsubj
                                   's     be     VERB      VBZ       conj
                                    not      not     ADV      RB      neg
                               your      -PRON-       DET     PRP$        poss

                                                  17
fault    fault   NOUN     NN   attr
                      .    .   PUNCT    .    punct

                              NOUN CHUNKS
           TEXT     ROOT_TEXT     ROOT_DEP     ROOT_HEAD_TEXT
                  Sorry losers     losers     nsubj    is
                   haters    haters     conj     losers
                    my I.Q.    I.Q.    conj     losers
                       you    you    nsubj     know
                         it   it    dobj     know
                         it    it    nsubj     's
                    your fault     fault    attr    's

                         NAVIGATING THE PARSE TREE
           TEXT     DEP       HEAD_TEXT         HEAD_POS         CHILDREN
                  Sorry        amod      losers        NOUN      []
losers    nsubj      is       VERB      [Sorry, and, haters, ,, but, I.Q.]
                     and       cc     losers        NOUN      []
                 haters         conj      losers       NOUN       []
                    ,      punct       losers        NOUN      []
                     but       cc     losers        NOUN      []
                     my      poss      I.Q.       PROPN       []
                 I.Q.        conj      losers        NOUN      [my]
               is      ROOT       is     VERB       [losers, one]
                     one       attr      is     VERB       [of]
                  of      prep       one      NUM      [highest]
                    the       det     highest         ADJ     []
                  highest         pobj      of      ADP     [the]
                   -and        ROOT      -and      PUNCT       []
                  you       nsubj       know      VERB      [all]
                     all       appos       you      PRON      []
            know        ROOT       know      VERB       [you, it, !]
                      it      dobj      know       VERB      []
                      !     punct       know       VERB      []
                  Please         intj      feel       VERB      []
                       do      aux     feel       VERB      []
                      n't       neg     feel       VERB      []
   feel    ROOT      feel        VERB      [Please, do, n't, stupid, 's]
                   so       advmod       stupid        ADJ      []
        stupid     acomp         feel      VERB       [so, or, insecure]
                       or      cc     stupid       ADJ      []
                insecure          conj      stupid       ADJ       []
                        ,     punct       's     VERB      []
                       it      nsubj       's     VERB      []
        's    conj        feel      VERB       [,, it, not, fault, .]
                        not      neg      's     VERB      []
                   your        poss      fault        NOUN      []
                  fault        attr      's     VERB       [your]
                        .     punct      's      VERB      []
                                 .    PUNCT       []

                   ITERATING AROUND THE LOCAL TREE
            TEXT     DEP    N_LEFTS          N_RIGTHS    ANCESTORS
             Sorry     amod      0      0     [u'losers', u'is']
                  losers      nsubj        1     5   [u'is']
               and     cc    0      0      [u'losers', u'is']
            haters      conj      0      0     [u'losers', u'is']
              ,     punct     0      0      [u'losers', u'is']
               but     cc    0      0      [u'losers', u'is']
         my    poss      0   0      [u'I.Q.', u'losers', u'is']
             I.Q.     conj      1      0     [u'losers', u'is']

                      NAMED ENTITY RECOGNITION
              TEXT    START   END LABEL    DESCRIPTION
                        I.Q.   32   36   GPE

                     SENTENCE RECOGNITION
  Sorry losers and haters, but my I.Q. is one of the highest
                             -and
                       you all know it!
 Please don't feel so stupid or insecure,it's not your fault.

                                   18
Capitolo 3: Information Extraction

           L’estrazione di informazioni da una “sorgente” scritta in linguaggio naturale comporta lo
           sviluppo di una capacità di interpretazione semantica che è legata alla lingua utilizzata e al
           dominio.
           La comprensione del linguaggio naturale viene considerata come un problema di IA-
           completo perché si ritiene che il riconoscimento del linguaggio richieda una conoscenza
           estesa del mondo e una grande capacità di comprensione.
           Tuttavia, come abbiamo già detto in precedenza, questo processo è reso molto complicato
           a causa delle ambiguità del linguaggio umano ed è quindi necessario suddividerlo in diverse

           fasi:
           •   analisi lessicale: si scompone l’espressione in token;
           •   analisi grammaticale: si associano le parti del discorso2 a ciascuna parola nel testo;
           •   analisi sintattica: si definiscono le relazioni tra i token;
           •   analisi semantica: si assegna un significato alla struttura sintattica e quindi
               all’espressione linguistica.

           L’IE ha come obiettivo l’estrazione automatica di informazioni strutturate da documenti
           non strutturati o semi-strutturati.
           Nella maggior parte dei casi quest’attività riguarda l’elaborazione di testi in lingua umana
           mediante le tecniche di NLP; tuttavia, grazie alle recenti attività come l’annotazione
           automatica e l’estrazione automatica di contenuti da immagini, video e audio, l’information
           extraction può essere utilizzata anche per l’estrazione automatica di contenuti da documenti
           multimediali.
           L'Information Extraction è la parte di un puzzle più ampio che si occupa del problema
           dell'ideazione di metodi automatici per la gestione del testo, oltre che alla sua trasmissione,
           memorizzazione e visualizzazione.

2 parti del discorso: il discorso è costituito da 9 parti, 5 variabili (articolo, nome, aggettivo, pronome e verbo) e 4
invariabili (avverbio, preposizione, congiunzione e interiezione).
                                                             19
La disciplina dell’Information Retrieval (IR) ha sviluppato metodi automatici, tipicamente
      basati su approcci statistici, per l'indicizzazione di grandi collezioni di documenti e la

      classificazione degli stessi.
      L’IE si occupa quindi di compiti che sono tra l’IR e il NLP e presuppone l'esistenza di un
      insieme di documenti in cui ognuno di essi segue un modello, cioè descrive una o più entità
      o eventi in un modo simile a quelli di altri documenti ma diverso nei dettagli.
      In un processo di IE è possibile intervenire su tre livelli:
      •   named entity recognition: riconoscimento di nomi propri di entità, di espressioni
          temporali, di luoghi;
      •   coreference resolution: rilevamento di legami di coreferenza, cioè frasi che si
          riferiscono allo stesso referente, e di anafora, cioè riferimenti tra porzioni di testo tra
          loro più o meno distanti;
      •   relationship extraction: riconoscimento di legami associativi tra entità.

3.1   Gli strumenti per l’IE

      Esistono numerosi strumenti e piattaforme “open source” di supporto alla progettazione e
      realizzazione di applicazioni di IE basate su NLP; ognuna di esse si differenzia per vari
      aspetti tra cui il tipo di licenza, i linguaggi di sviluppo e gli ambienti supportati.
      Tra gli strumenti più utilizzati troviamo GATE.

      GATE è una piattaforma open source gratuita per lo sviluppo di sistemi di IE che comprende
      un ambiente integrato per lo sviluppo di componenti di Language Processing chiamato
      GATE Developer.
      La piattaforma si presta ottimamente per realizzazioni sia “rule based” che “machine
      learning”.
      In una fase preliminare, l’utente sceglie quante e quali processing resources (PR) utilizzare,
      definendo per ognuna di esse le language resources coinvolte.
      Il formato per la rappresentazione dei dati in GATE è denominato annotation.

                                                 20
Un’interessante applicazione basata su GATE è ANNIE, A Nearly-New Information
            Extraction system, che utilizza una serie di risorse per riconoscere istanze di entità

            all’interno di un testo.
            ANNIE si basa su algoritmi a stati finiti e sul linguaggio JAPE (Java Annotation Pattern
            Engine) e contiene un set di PR, ognuna delle quali crea nuove annotazioni o modifica quelle
            esistenti.
            Tra queste quelle più utilizzate sono:
            •   Document Reset: rimuove le annotazioni create in precedenza per evitare duplicazioni;
            •   Tokenizer: suddivide il contenuto del testo in Token che andranno poi a formare i
                Gazzetteers, ossia file testuali contenenti liste di nomi;
            •   Sentence Splitter: divide il contenuto del documento in segmenti corrispondenti alle
                diverse frasi del testo;
            •   Pos Tagging (part-of-speech tagging): associa ad ogni parola di una frase una classe
                morfologica basandosi su un corpus pre-taggato.

3.2        IE from Twitter: Tweepy

            Come abbiamo già detto in precedenza, la vasta mole di utenti iscritti a Twitter da vita ad
            un enorme contenitore di informazioni che possono essere estratte e successivamente
            analizzate.

            Per poter estrarre tali informazioni, lo stesso Twitter mette a disposizione un wrapper, ossia
            un oggetto che renda disponibili all'applicazione che si sta scrivendo le funzioni contenute
            in una libreria esterna; questa libreria è nota come Tweepy.
            Tweepy è una libreria per Python che mette a disposizione un wrapper per l’API3 di Twitter
            al fine di rendere il processo di comunicazione con questa semplice e rapido.
            Per poter accedere all’API è necessario in primis installare Tweepy, utilizzando il comando
            pip install tweepy, e successivamente creare una specifica TwitterApp attraverso la quale
            realizzare le ricerche.

3   API: Application Programming Interface.
                                                      21
Una volta creata l’App avremo a disposizione delle credenziali che ci consentiranno di
          accedere direttamente a Twitter utilizzando uno script python.

          La prima cosa da fare è quindi creare un semplice script contenente le credenziali, che dovrà
          essere essere importato in tutti gli script per l’estrazione di informazioni.

N.B: per motivi di privacy in questo screenshot non vengono mostrate le credenziali di accesso.

          A questo punto possiamo procedere con l’estrazione dei tweet.
          A tal proposito, Tweepy consente di accedere a due API molto importanti di Twitter:
          RestAPI e StreamAPI.

3.2.1 StreamAPI

          StreamAPI fornisce l'accesso ai tweet in tempo reale; gli stream possono essere filtrati in

          base a parole chiave, lingua, posizione e altre caratteristiche.
          Per poter avviare lo stream bisogna importare dalla libreria Tweepy due importanti classi:
          •   StreamListener: è la classe che consente di realizzare lo stream di tweet in base alla
              parola chiave;
          •   OAuthHandler: è la classe che serve per effettuare l’autenticazione utilizzando le
              variabili che sono state memorizzate nel file delle credenziali (par. 3.2).
          Importiamo poi anche lo script contenente le credenziali e creiamo due classi:
          1. la classe TwitterStreamer, all’interno della quale troviamo il costruttore della classe,
              che ha il compito di inizializzare le variabili di istanza, e una funzione stream_tweets
              che, sfruttando le credenziali di accesso e le funzioni contenute nella classe
              StreamListener, realizza l’estrazione dei tweet;

                                                       22
2. la classe StdOutListener il cui scopo è quello di inserire i tweet estratti all’interno di

   un file di testo, con estensione .txt, se il processo di estrazione va a buon fine, altrimenti
   restituire lo status dell’errore che si è verificato; uno degli errori più comuni è l’errore
   420 che si verifica quando l’applicazione effettua troppe richieste di stream. Pertanto,
   la verifica che l’errore sia il 420 è fondamentale per evitare di effettuare nuove richieste
   che farebbero aumentare esponenzialmente il tempo di attesa.

Una volta create le due classi lo stream può essere avviato invocando nel main le funzioni
che sono state realizzate.

                                         23
Ogni tweet estratto avrà una forma standard e conterrà una grande quantità di informazioni:
        l’id dell’utente che lo ha pubblicato, il testo, il dispositivo dal quale è stato pubblicato, il

        nome dell’utente, i followers, la data di creazione del tweet e tante altre informazioni che
        possono essere sfruttate per l’analisi.
        Per esempio, se volessimo estrarre solamente il testo del tweet per poterlo analizzare,
        potremmo usare un semplice script che “splitta” le informazioni estratte e inserisce il solo
        testo all’interno di un documento.

3.2.2 RestAPI

        REST (Representational State Transfer) è un API che consente agli sviluppatori di accedere
        direttamente alle informazioni e alle risorse utilizzando un’invocazione http.
        È quindi possibile risalire direttamente ad informazioni come l’utente che ha pubblicato il
        tweet, il numero di likes, la lista degli ultimi tweet che egli ha pubblicato, senza doverli
        estrarre manualmente come nel caso dello Stream.
        Per poter estrarre queste informazioni bisogna importare in primis il file contenente le
        credenziali di accesso e successivamente una serie di librerie:
        •   API: è una libreria che contiene tutti i metodi che permettono di agire direttamente sulle
            risorse dei tweet;
        •   Cursor: nello sviluppo delle API di Twitter viene frequentemente utilizzata la
            paginazione, ossia l'iterazione attraverso linee temporali, liste utenti, messaggi diretti;
            Tweepy fornisce l'oggetto Cursore che gestisce per noi tutto il lavoro di impaginazione;
        •   OAuthHandler (par. 3.2.1);
        •   TextBlob: è una libreria per l’elaborazione dei dati testuali che fornisce una semplice
            API per effettuare NLP (nel nostro caso è stata utilizzata per la Sentiment Analysis);
                                                  24
•   numpy: è una libreria per il calcolo in Python; fornisce oggetti multidimensionali ad alte
    prestazioni e strumenti per lavorare con gli array;

•   pandas: è una libreria che rende molto più facile l’importazione e l’analisi dei dati
    rendendo la loro manipolazione molto più leggera;
•   matplotlib: è una libreria che mette a disposizione un’interfaccia, chiamata pyplot, che
    consente di generare automaticamente grafici;
•   re (regular expression): questa libreria contiene dei metodi che vengono utilizzati per
    “pulire” il tweet estratto da caratteri trascurabili nella fase di analisi.

Una volta importate le librerie necessarie possiamo creare la classe per effettuare
l’autenticazione attraverso i parametri importati in precedenza.

La classe successiva, denominata TwitterClient, contiene un insieme di funzioni che sono
state realizzate per poter estrarre, dato un utente, alcune informazioni relative al suo account.
La prima funzione è il costruttore della classe che effettua l’autenticazione e definisce il
nome dell’utente preso in considerazione.

La funzione get_client_api serve invece per realizzare l’interfacciamento con l’API al fine
di poter estrarre i tweet.

                                           25
get_user_timeline_tweets restituisce una timeline dei tweet pubblicati dall’utente,
      inserendoli all’interno di una lista vuota; il numero di tweet da estrarre è fornito come

      parametro della funzione.

      Allo stesso modo sono state realizzate altre due funzioni, get_followers_of_user e
      get_friend_list, che restituiscono rispettivamente gli ultimi n followers dell’utente e una

      lista degli amici dell’utente.

      Infine, la funzione get_home_timeline_tweets restituisce gli ultimi n stati, compresi i

      retweet, pubblicati o dall’utente che si è autenticato o dai suoi amici.

3.3   Analisi dei tweet

      Oltre che all’estrazione di informazioni possiamo anche analizzare i tweet che vengono
      estratti.
      In una prima fase di analisi possiamo ad esempio ricavare il testo del tweet, la lunghezza,
      la data di pubblicazione, la sorgente dalla quale è stato pubblicato, il numero di like e anche
      il numero di retweet.
      Affinché ciò sia possibile bisogna utilizzare le librerie pandas e numpy che abbiamo in
      precedenza importato.

                                               26
Utilizzando la classe DataFrame di Pandas è possibile realizzare una struttura dati
        bidimensionale che contiene i Panda Series Object, ossia degli array unidimensionali (righe

        o colonne) etichettati che possono contenere oggetti di qualsiasi tipo.
        Nel nostro caso creiamo una tabella che presenta, nella prima colonna, il testo dei tweet che
        sono stati estratti.
        Successivamente, sfruttando la classe array di Numpy, andiamo a riempire la tabella con
        altre colonne che contengono le informazioni che abbiamo elencato in precedenza.

3.3.1   Sentiment Analysis

        Una seconda fase di analisi è la Sentiment Analysis.
        La Sentiment Analysis, anche nota come opinion mining, è un campo dell’elaborazione del
        linguaggio naturale che si occupa di costruire sistemi per l’identificazione e l’estrazione di
        opinioni dal testo; consente quindi di raccogliere in tempo reale le reazioni degli utenti ad
        un qualsiasi evento.
        Essa rappresenta uno strumento accurato per individuare ed “ascoltare” conversazioni
        online fornendo alle aziende un’interpretazione del mercato molto realistica.
        Sono molteplici i settori in cui la sentiment analysis può essere utilizzata: dalla politica al
        marketing, dalla comunicazione ai mercati azionari, dall’ambito sportivo a quello della
        medicina e soprattutto per misurare le preferenze del consumatore in relazione ad un
        prodotto.

        Esistono 4 categorie principali di approcci alla sentiment analysis:
        •   “spotting” di parole chiave;
                                                 27
•    affinità lessicale;
          •    metodi statistici;

          •    tecniche di livello concettuale.
          La prima classifica il testo utilizzando parole influenti come contento, triste, annoiato.
          L’affinità lessicale assegna alle parole una probabile affinità a emozioni particolari.
          I metodi statistici fanno invece leva su elementi tratti dal machine learning come analisi
          semantica latente4, collezioni di parole e orientazione semantica.
          Gli approcci a livello concettuale fanno invece leva sugli elementi della rappresentazione
          della conoscenza, come le ontologie5, e sono quindi capaci di rilevare semantiche che sono
          espresse in maniera sottile.
          Per realizzare la sentiment analysis sfruttando tweepy sono necessarie le librerie re e
          TextBlob.
          Per prima cosa realizziamo una funzione che, invocando il metodo sub della libreria Regular
          Expression, rimuove dal testo dei tweet tutti quei caratteri che non sono utili per l’analisi.
          Successivamente è stata creata la funzione analyze_sentiment che sfrutta il metodo
          sentiment della libreria TextBlob; questo metodo restituisce una tupla nella forma (polarity,
          subjectivity) dove polarity è una variabile di tipo float che oscilla nel range [-1 ; +1] e
          subjectivity è una variabile di tipo float che oscilla nel range [0 ; 1] e che indica quanto

          l’analisi è oggettiva/soggettiva.

4 analisi semantica latente: tecnica di elaborazione del linguaggio naturale basata su matrici matematiche che analizza le
relazioni fra insiemi di documenti e produce un insieme di concetti ad essi correlati.
5 ontologia: rappresentazione formale, condivisa ed esplicita di un dominio di interesse.

                                                           28
A questo punto non ci resta che invocare nel main tutte le funzioni che abbiamo in
           precedenza elencato ed eseguire lo script.

           Il risultato dell’esecuzione dello script potrebbe essere di questo tipo:

In questo caso sono stati estratti gli ultimi 20 tweet pubblicati dal Ministro dell’Interno e Vicepresidente del consiglio Matteo
Salvini.
Possiamo notare, per esempio, che nel tweet col maggior numero di likes (9018) il ministro, capo della Lega, afferma di non
aver paura del giudizio degli italiani alle future elezioni in seguito alla crisi di governo.
Da qui possiamo quindi dedurre che il numero di seguaci del partito leghista resta comunque molto elevato nonostante la
situazione a sfavore che si è venuta a creare.

                                                              29
C’è però una libreria che ancora non è stata utilizzata: matplotlib.pyplot.
Utilizzando questa libreria possiamo ottenere automaticamente dei grafici contenenti le

informazioni desiderate.
Affinché ciò sia possibile è necessario creare dei Panda Series Object, definendo l’ascissa
e l’ordinata del grafico, e successivamente invocare su di essi la funzione plot, che crea il
grafico, e la funzione show che mostra il grafico precedentemente creato.

Eseguendo anche questa porzione di script otteniamo i grafici desiderati.
Esempio:

                                         30
Conclusioni

     Il Natural Language Processing e l’Information Extraction trovano quindi applicazione in
     diversi campi, ognuno dei quali ha obiettivi differenti.
     Tuttavia, nonostante gli enormi progressi e i tantissimi risultati ottenuti recentemente nel
     campo del NLP grazie all’utilizzo degli algoritmi di deep learning, restano ancora numerose
     sfide di ricerca aperte.
     Tra queste sicuramente vi è l’elaborazione automatica del linguaggio naturale per quelle
     lingue per le quali i dati disponibili non sono in numero elevato.
     Gli algoritmi di deep learning, infatti, utilizzano una modalità di apprendimento di tipo

     supervisionato, ossia necessitano di dataset di addestramento etichettati con le classi o
     fenomeni che si vogliono determinare.
     Annotare dataset è però un processo che richiede tempo e risorse umane, soprattutto quando
     si tratta di lingue non comuni per le quali vi è carenza di dati utilizzabili.
     L’obiettivo che si vuole raggiungere è quello di definire un “modello universale” del
     linguaggio, a partire da aspetti comuni identificati tra le diverse lingue, che consenta di

     adottare strategie di addestramento per gli algoritmi di deep learning che utilizzino piccoli
     insiemi di dati.
     Un’altra sfida riguarda la reale comprensione del linguaggio naturale in maniera
     automatica, ossia la capacità di leggere e capire un testo proprio come un essere umano.
     La comprensione del linguaggio naturale nell’essere umano è strettamente correlata alla
     percezione del mondo esterno per cui diventa necessario, al fine di riprodurre nelle
     macchine la capacità di comprensione del linguaggio umano, fornire anche rappresentazioni
     concettuali di oggetti dell’ambiente circostante.
     A tal proposito, esistono sempre più approcci che, integrando conoscenze riguardanti le
     neuroscienze e le scienze cognitive, cercano di realizzare sistemi conversazionali che siano
     in grado di simulare funzioni cognitive di alto livello, apprendendole attraverso
     l’interazione con l’ambiente esterno.
                                               31
Tra le sfide più importanti vi è anche la capacità di effettuare ragionamenti di senso comune
al fine di risolvere ambiguità dovute a conoscenza implicita o non specificata.

Per ragionamenti di senso comune si intendono quei ragionamenti immediati che
permettono di capire, per esempio, a chi si riferisce un pronome all’interno di una frase.
Sebbene siano stati fatti importanti progressi, ad oggi non vi è ancora una tecnica ben
definita che permetta ad una macchina di effettuare ragionamenti di senso comune; ciò
rappresenta una delle più grandi barriere che limitano le capacità sia di comprensione dei
fenomeni che accadono nel mondo circostante sia di comunicazione naturale con gli esseri
umani, non consentendo alle macchine di comportarsi in maniera ragionevole in situazioni
sconosciute e di apprendere da nuove esperienze che non sono state considerate in fase di
apprendimento.
In conclusione, sono due le strade che devono convergere per affrontare queste sfide: da un
lato, lo sviluppo di soluzioni avanzate che prendano ispirazione da diverse discipline, a
partire dall’informatica fino alla linguistica e alle neuroscienze, e che consentano di
rappresentare, comprendere e generare testo o parlato in linguaggio naturale proprio come
un essere umano; dall’altro, la necessità di grandi quantità di dati, anche organizzati in base
alla lingua, che permettano di addestrare tali soluzioni e validarne le prestazioni.

                                         32
BIBLIOGRAFIA
Albanese, E. (2017, Maggio 24). Introduzione al Natural Language Processing (NLP). Tratto da
        alimenaonline: http://www.alimenaonline.eu/enzoalbanese/2017/05/24/introduzione-al-
        natural-language-processing-nlp/
API Reference. (2019). Tratto da Tweepy: http://docs.tweepy.org/en/latest/api.html
Aureli Cutillo, E. (2004). Applicazioni di analisi statistica dei dati testuali. (S. Bolasco, A cura di)
        Roma: Casa Editrice Università degli studi di Roma, La Sapienza.
Authentication Tutorial. (2019). Tratto da Tweepy:
        http://docs.tweepy.org/en/latest/auth_tutorial.html
Bird, S., Klein, E., & Loper, E. (2009). Natural Language Processing with Python. O'Reilly Media.
Carey, B. (2009, Giugno 09). Using the Twitter Rest API. Tratto da IBM:
        https://www.ibm.com/developerworks/library/x-twitterREST/index.html
Ceron, A., Curini, L., & Iacus, S. (2013). Social Media e Sentiment Analysis: L'evoluzione dei
        fenomeni sociali attraverso la Rete. Springer Verlag.
Cursor Tutorial. (2019). Tratto da Tweepy: http://docs.tweepy.org/en/latest/cursor_tutorial.html
della Ratta Rinaldi, F. (2002). L’analisi testuale, uno strumento per la ricerca qualitativa. In F. della
        Ratta Rinaldi, La ricerca qualitativa in educazione. Milano: FrancoAngeli.
Esposito, M. (2019, Febbraio 06). Linguaggio naturale e intelligenza artificiale: a che punto siamo.
        Tratto da Agenda Digitale: https://www.agendadigitale.eu/cultura-digitale/linguaggio-
        naturale-e-intelligenza-artificiale-a-che-punto-siamo/
Golubin, A. (2019, Agosto 10). Garbage collection in Python: things you need to know. Tratto da
        Rushter: https://rushter.com/blog/python-garbage-collector/
Gupta, S. (2018, Gennaio 7). Sentiment Analysis: Concept, Analysis and Application. Tratto da
        towardsdatascience: https://towardsdatascience.com/sentiment-analysis-concept-analysis-
        and-applications-6c94d6f58c17
Information Extraction (IE). (2019, Luglio). Tratto da Wikipedia:
        https://en.wikipedia.org/wiki/Information_extraction
ing. Gallerani, R. (2015, Dicembre 17). Natural Language Processing (NLP) e Information
        Extraction (IE). Tratto da www.gallerani.it: https://www.gallerani.it/sito/natural-language-
        processing-nlp-e-information-extraction-ie/
Introduction to Tweepy. (2019). Tratto da Tweepy:
        http://docs.tweepy.org/en/latest/getting_started.html
Magnani, F. (2014, Maggio 13). Sentiment Analysis: Definizione e campi di applicazione. Tratto da
        Beantech: https://www.beantech.it/blog/articoli/sentiment-analysis-definizione-e-campi-di-
        applicazione/
matplotlib.pyplot. (2019, Luglio). Tratto da matplotlib:
        https://matplotlib.org/3.1.1/api/_as_gen/matplotlib.pyplot.html
Navlani, A. (2019, Aprile 16). Text Classification in Python using spaCy. Tratto da Dataquest:
        https://www.dataquest.io/blog/tutorial-text-classification-in-python-using-spacy/
Panda Series. (2019, Luglio). Tratto da GeeksforGeeks: https://www.geeksforgeeks.org/python-
        pandas-series/
Piccini, M. P. (2010). L’analisi testuale e l’analisi delle corrispondenze lessicali. Tratto da
        uniroma3: http://europa.uniroma3.it/cipriani/files/4e3330e5-f2bc-4961-9185-
        9ff91187d9d5.pdf
Python Numpy Array . (2019, Marzo 19). Tratto da Datacamp:
        https://www.datacamp.com/community/tutorials/python-numpy-
        tutorial?utm_source=adwords_ppc&utm_campaignid=898687156&utm_adgroupid=489472
        56715&utm_device=c&utm_keyword=&utm_matchtype=b&utm_network=g&utm_adposti
        on=1t1&utm_creative=332602034343&utm_targetid=a

                                                   33
Puoi anche leggere