Pacchetti necessari

library(koRpus)            # TreeTagger e text analysis
library(koRpus.lang.it)
library(spacyr)            # Spacy

Il testo

L’articolo è stato ricavato dal web:


(ANSA) - SANREMO, FEB - “Ve lo dico, da ospite al festival di Sanremo non tornerò più. L’ ho fatto già troppe volte. Da conduttore non è proprio il caso. Ma potrei tornare da cantante”. Tra il serio e il faceto Fiorello apre alla possibilità in un futuro di tornare a cantare e di farlo al Festival. “Mi piacerebbe tornare a fare il cantante serio, Ho anche un sacco di amici che potrebbero scrivere per me canzoni davvero belle. Da Lorenzo Jovanotti a Giuliano Sangiorgi”.    “Il momento che mi ha colpito di più? Achille Lauro mi ha fatto morire”, dice Fiorello nella sua incursione a sorpresa in sala stampa. “L’ esibizione del cantante è stata teatro, spettacolo.    L’ ho visto entrare in scena e ho pensato, guarda c’ è Belfagor.    Poi mi sono girato un attimo e l’ ho visto nudo. Mi ha divertito molto”. Con Amadeus, racconta, “eravamo d’ accordo che dopo il numero iniziale sarei andato via e mi sarei fatto sentire magari al telefono. Invece ho pensato: ma dove vado? Solo in albergo? E sono rimasto lì. Tutto quello che è successo dopo è nato così, anche gli sketch con Amadeus. So quello che sa fare. poco, ma lo fa bene. fa ridere perché lo fa a modo suo”. Quanto agli ascolti della prima serata, oltre milioni di spettatori, “non pensavo che andasse così bene. Mi vesto da De Filippi come ho promesso? Non lo so, ci sto pensando anche se sui social insistono”.Nella seconda serata del festival, stasera febbraio, annuncia lo showman, “canterò una canzone inedita talmente bella che se fosse stata in gara avrebbe avuto l’ opportunità di vincere qualcosa, La classica canzone di Sanremo”. (ANSA).


http://www.ansa.it/sito/notizie/topnews/2020/02/05/sanremo-fiorello-al-festival-mai-piu-ospite-magari-in-gara_c5f516c5-62f9-41d2-91e9-d5b0aeeeada4.html

Forme, occorrenze e frasi nel testo
Text Types Tokens Sentences
text1 196 351 24

La punteggiatura è stata conservata, per identificare le frasi e migliorare il riconoscimento delle parti grammaticali. Quindi il conteggio include anche i segni di punteggiatura.

Lemmatizzazione

Per la lemmatizzazione in R, è necessario installare TreeTagger e/o Python (miniconda o Anaconda + Spacy), e ricorrere a pacchetti che permettono il loro utilizzo in ambiente R.

TreeTagger

Effettuiamo la lemmatizzazione con TreeTagger. La funzione treetag() è inclusa nel pacchetto koRpus. Impostazioni e modelli della lingua italiana vengono caricati con il pacchetto koRpus.lang.it (per installazione e uso: https://reaktanz.de/?c=hacking&s=koRpus).

I file devono essere in formato txt (dunque contenuti in una cartella, e non oggetti dell’environment) e con codifica UTF-8.

lemmiart.t <- treetag(
  "../dati/articolo.txt",     # file in UTF-8
  encoding = "UTF-8",
  treetagger="manual",
  stopwords = sw,             # sw è un vettore carattere
  lang="it",
  TT.options=list(
    path="C:/TreeTagger", 
    preset = "it"
  )
) 

Eseguiamo poi la lemmatizzazione con spacyr, dopo aver caricato il relativo pacchetto (per installazione e uso: https://spacyr.quanteda.io/).

spacy_initialize(model = "it")
lemmiart.s <- spacy_parse(articolo)

Risultati di default

In entrambi i casi, gli argomenti delle funzioni consentono un uso più estensivo delle librerie.

lemmiart.t@TT.res %>% head()
Variabili con TreeTagger
doc_id token tag lemma lttr wclass desc stop stem idx sntc
NA ( PON ( 1 punctuation NA FALSE NA 1 1
NA ANSA NOM ansa 4 noun NA FALSE NA 2 1
NA ) PON ) 1 punctuation NA FALSE NA 3 1
NA - PON - 1 punctuation NA FALSE NA 4 1
NA SANREMO NOM 7 noun NA FALSE NA 5 1
NA , PON , 1 punctuation NA FALSE NA 6 1
lemmiart.s %>% head()
Variabili con spacyr
doc_id sentence_id token_id token lemma pos entity
text1 1 1 ( ( PUNCT
text1 1 2 ANSA ANSA PROPN ORG_B
text1 1 3 ) ) PUNCT
text1 1 4 - - PUNCT
text1 1 5 SANREMO SANREMO PROPN MISC_B
text1 1 6 , , PUNCT

Notiamo in primo luogo che spacy include fra i tokens anche alcuni spazi, con la conseguenza che abbiamo 357 righe nel dataframe risultante, anziché 351, come le occorrenze effettive.

Qualità dei risultati

Le forme non riconosciute da TreeTagger sono 10. Si tratta dell’articolo apostrofato (“l”, 2 occ) e dei nomi. spacy, invece, non segnala lemmi non riconosciuti.

lemmiart.t@TT.res %>% filter(lemma == "<unknown>")
Occorrenze non riconosciute da TreeTagger
doc_id token tag lemma lttr wclass desc stop stem idx sntc
NA SANREMO NOM 7 noun NA FALSE NA 5 1
NA FEB NOM 3 noun NA FALSE NA 7 1
NA Sanremo NOM 7 noun NA FALSE NA 19 1
NA Sangiorgi VER:impe 9 verb NA FALSE NA 100 7
NA Belfagor NOM 8 noun NA FALSE NA 159 11
NA l VER:impe 1 verb NA TRUE NA 168 12
NA Amadeus NOM 7 noun NA FALSE NA 181 14
NA Amadeus NOM 7 noun NA FALSE NA 238 19
NA l VER:infi 1 verb NA TRUE NA 334 26
NA Sanremo NOM 7 noun NA FALSE NA 345 26

Controllando infine i risultati “a vista”, scorrendo cioè direttamente i dataframe, sono state individuate le forme riconosciute erroneamente:

Forme riconosciute erroneamente
spacyr TreeTagger
volte volto
cantante cantare
serio seriare
farlo farlo
sorpresa (n) sorpreso (agg)
sala salare
stampa stampare
visto vistare
accordo accordare
numero numerare
telefono telefonare
fosse fossa
canzoni canzonare
TOTALE (su 196 forme) 6.1% 0.5%

Al momento sembrerebbe che TreeTagger sia molto più affidabile di Spacy, che resta una libreria da tenere d’occhio per il futuro.