Percorso: "Rappresentazione e analisi del testo e dei documenti" UNITA' 5 - Analisi della struttura ed estrazione del contenuto SINTESI 1. Parole e termini L'estrazione terminologica è una sottocategoria dell'estrazione di informazioni che consiste nell'identificare (automaticamente) i termini rilevanti in un dato corpus. [Wikipedia] Prima di tutto, cosa è un termine in linguistica? Il "Dizionario della Lingua Italiana" Sabatini Coletti, tra le tante accezioni della voce "termine", include la seguente: <> [1] Notiamo poi che di solito, per esempio trattando di SEO (= ottimizzazione di una pagina o sito web nei confronti dei motori di ricerca), si considerano termini non solo singole parole ma anche sequenze di parole che richiamano un concetto. Per esempio, nel linguaggio settoriale della gestione d'impresa, potrebbero considerarsi termini: "processo di business", "transazione economica", "socio in affari", ecc. Ma poi, quali termini vanno considerati "termini rilevanti" in un testo o in un corpus? Risposta: i termini che lo caratterizzano rispetto ad altri testi o corpora. Non si tratta quindi di un criterio assoluto ma relativo, applicabile solo per confronto; per esempio, non basta considerare la frequenza dei termini in un corpus, ma capire quali termini occorrono con una frequenza significativamente maggiore che in altri corpora. 2. A che cosa serve estrarre i termini Estrarre i termini da un corpus di documenti prodotti dai membri di una certa comunità (scientifica, professionale, ecc.) può essere il primo passo nella costruzione di una terminologia di settore; questa può poi essere rielaborata in forma di glossario: una raccolta sistematica di termini appartenenti ad un ambito specifico, nella quale si cerca di dare definizioni e/o esempi di uso dei singoli termini, possibilmente mettendoli in qualche relazione tra loro. Una terminologia condivisa è uno strumento importante per la coesione di una comunità e/o per l'interoperabilità di sistemi e strumenti con i quali quella comunità opera. Estrarre i termini rilevanti da un singolo testo può essere il primo passo nell'estrazione del suo contenuto, consentendoci di capire di che cosa parla il testo: se afferisce a qualche specifico settore disciplinare, intorno a quali concetti ruota, se afferma qualcosa a proposito di certi soggetti, luoghi, fatti, ecc. Come già accennato più sopra, un uso comune dell'estrazione dei termini (chiamati anche keyword, in questo caso) è quello che fa in forma automatica un motore di ricerca web per indicizzare le pagine web e talora, in modo manuale, il webmaster di un sito web per segnalare esplicitamente al motore di ricerca quali, secondo lui, sono i termini più significativi. 3. Analizzare la struttura del testo per estrarne il contenuto (il parse/parsing) L'estrazione dei termini da un testo, come forse si è potuto intuire, è motivata dall'interesse per il suo contenuto semantico - concettuale e/o fattuale -, cioè per ciò che il testo vuole comunicare. Ma tale estrazione si giova fortemente della capacità di analizzare la struttura sintattica del testo stesso, di capire come le frasi sono costruite componendo parole lessicali con parole grammaticali (cfr. la sezione sulla "densità lessicale"). Numerosi e molto vari sono i modi di analizzare la struttura sintattica del testo (parsing, in Inglese); i pricipali approcci sono: - l'analisi per costituenti; in prima approssimazione corrisponde a quella che a scuola si insegna come analisi sintattica; essa rappresenta la struttura della frase (S = sentence) come un albero, che dalla radice si biforca in una frase nominale (NP = noun phrase), corrispondente al soggetto, e una frase verbale (VP = verb phrase); ciascuno di questi due "nodi" costituenti può essere, in modo ricorsivo, la radice di sottoalberi - l'analisi di dipendenza; la dipendenza di tipo più noto, quella semantica, corrisponde all'analisi logica che si insegna alla scuola media; le relazioni di dipendenza includono quelle tra il verbo, il soggetto e i complementi, e quella tra un nome e i suoi modificatori (articolo, aggettivi, ecc,); esse sono espresse tipicamente nella forma "X regge Y". In entrambi i casi, l'analisi può essere effettuata partendo dai singoli token - le "foglie" nel caso di una rappresentazione ad albero - e cercando di raggrupparli per passi successivi in strutture di dimensioni crescenti, applicando le regole di una qualche grammatica; questa modalità è spesso chiamata "bottom-up", termine che si comprende solo tenendo conto che l'albero viene rappresentato visivamente con la radice in alto e i rami in basso. 4. Una forma semplificata di analisi bottom-up: il chunking Un'alternativa al parsing completo è il chunking, detto anche "analisi sintattica di superficie". Il chunking comincia con l'identificare i costituenti elementari di una frase (nomi, verbi, aggettivi, preposizioni, ecc.), usando una tecnica di POS-tagging (vedi ..), e poi li collega in unità più complesse, dette chunk: tipicamente gruppi nominali e verbali; cioè costruisce, a partire dal basso, uno o più alberi sintattici parziali, di estensione e profondità limitata, senza pretendere di ricostruire l'albero sintattico completo. Quello che ci interessa è che tali chunk, o almeno una selezione di essi, rappresentano i termini che vogliamo estrarre dal testo; quindi il chunking è usato per estrarre dal testo frammenti di informazione in modo rapido e robusto. 5. Come avviene il chunking Già abbiamo notato che il chunking prevede il POS-tagging della frase come passo preliminare. L'assiemamento dei costituenti elementari in chunk può avvenire mediante pattern matching, per esempio usando un insieme di espressioni regolari (vedi ..) da applicare ad una stringa in cui ogni costituente della frase è rappresentato dal suo POS-tag, che si può recuperare mediante look-up in un lessico morfologico. In tale caso, le espressioni regolari assomigliano molto alle regole grammaticali usate nell'analisi per costituenti. I chunk di maggior interesse per l'estrazione del contenuto sono quelli di tipo nominale (noun chunks), che corrispondono alle frasi nominali (NP). Una grammatica ("chunk grammar") per il riconoscimento di chunk nominali potrebbe essere espressa nel seguente modo: NP: {regola 1} {regola 2} ... dove "NP:" sta per "un chunk nominale è così definito" e le regole, in parentesi graffe, vanno provate nell'ordine fino a che si trova un match. Qui sotto, come esempio, riportiamo le prime regole di una grammatica che è stata costruita a mano, allo scopo di analizzare le pagine di uno specifico sito web; in questo caso si è proceduto per tentativi (trial and error), sulla base della plausibilità dei risultati ottenuti. NP: {
} # traduzioni di qualita per ogni budget
    {?} # traduzione [di] siti web, portfolio siti web
    {} # agenzia web internazionale
    {??} # [la] traduzione di testi [altamente] specialistici
Abbiamo usato dei commenti, preceduti dal simbolo "#",  per riportare chunk di esempio che soddisfano le rispettive regole. I tag sono tra parentesi angolari; per il resto il formalismo è simile a quello delle espressioni regolari e di tante altre grammatiche formali:
- nella prima regola, in "" l'asterisco ha il ruolo di jolly: il tag è soddisfatto da un lemma il cui tag di primo livello sia "DET" (aggettivo determinativo), quale che sia il secondo livello (possessivo, indefinito, numerale, ...)
- nella seconda regola, il token corrispondente al secondo tag può essere presente o no ("?" = facoltativo) e la barra verticale separa due alternative valide (preposizione o preposizione articolata)
- anche nella quarta regola vi sono tag che corrispondono a token che possono mancare.
Come "motore" di esecuzione delle regole abbiamo usato un algoritmo in Python della libreria NLTK. Poi abbiamo provato a contare il numero di occorrenze di ciascun chunk e a ordinarli per frequenza.

6. La costruzione della grammatica

Ma è molto laborioso costruire a mano, e poi raffinare per tentativi, l'insieme delle regole (o delle espressioni regolari) da applicare nel chunking; il compito più critico è scegliere l'ordine in cui applicare le regole, dato che cambiandone l'ordine si possono ottenere risultati diversi, con il rischio di non riconoscere quei chunk che corrispondono ai frammenti di contenuto più significativi.
Allora, come per lo stesso POS-tagging, anche in questo caso la tendenza è di ricorrere ad algoritmi addestrati con tecniche di apprendimento automatico, fino a che siano in grado di comporre i chunk che meglio riflettano le relazioni semantiche tra i costituenti di base.
Una volta per tutte si compie lo sforzo di annotare a mano un corpus da usare per l'addestramento, rappresentativo del dominio di interesse e di dimensioni adeguate: si marcano in esso tutti i chunk rilevanti dal punto di vista del contenuto. In questo modo si ottengono dei chunker (algoritmi, applicazioni, in grado di effettuare il chunking) particolarmente abili nell'assiemare insiemi di costituenti dello stesso tipo in modo diverso, scegliendo ogni volta la regola ottimale in base al contesto.

7. Estrazione di entità "nominate"

...

ACRONIMI

RIFERIMENTI (webography)

[1] Corriere della Sera > Dizionari > Dizionario Italiano > T >termine, http://dizionari.corriere.it/dizionario_italiano/T/termine.shtml
[2] Melissa Gattoni, Le relazioni di dipendenza, https://www.tesionline.it/appunto/863/37/Le_relazioni_di_dipendenza

[4] Introducing the La Repubblica Corpus: A Large, Annotated, TEI(XML)-Compliant Corpus of Newspaper Italian

[6] Steven Bird, Ewan Klein, and Edward Loper, Natural Language Processing with Python, Chap.7 - Extracting Information from Text, https://www.nltk.org/book/ch07.html


DA WIKIPEDIA

Analisi del contenuto, https://it.wikipedia.org/wiki/Analisi_del_contenuto
Content analysis, https://en.wikipedia.org/wiki/Content_analysis
Estrazione terminologica, https://it.wikipedia.org/wiki/Estrazione_terminologica
Terminology extraction, https://en.wikipedia.org/wiki/Terminology_extraction
Tool di estrazione terminologica, https://it.wikipedia.org/wiki/Tool_di_estrazione_terminologica
Glossario, https://it.wikipedia.org/wiki/Glossario
Glossary, https://en.wikipedia.org/wiki/Glossary
Dependency grammar, https://en.wikipedia.org/wiki/Dependency_grammar
Phrase structure grammar, https://en.wikipedia.org/wiki/Phrase_structure_grammar
Shallow parsing, https://en.wikipedia.org/wiki/Shallow_parsing


term mining, http://www.treccani.it/enciclopedia/term-mining_%28Lessico-del-XXI-Secolo%29/