Geolinguistica digitale e impianto di una rete romanza sovraregionale II – parte informatica (Zitieren)

Stephan Lücke


(2161 Wörter)

Come lavoriamo noi …

Usiamo un certo modo di organizzare i dati. Quello si chiama il modello relazionale. Nella terminologia informatica la parola "relazione" significa semplicemente una tabella. Al punto dove stiamo adesso – voglio dire nella fase della transizione dal mondo analogo al mondo digitale – la sfida consiste nella digitalizzazione di dati pubblicati in un modo analogo, vuol dire in libri come dizionari e atlanti per nominare il genere il più importante per il nostro lavoro. Questa digitalizzazione non consiste soltanto nel uso di un computer, ma richiede un cambio della metodologia.

Cominciamo con un esempio preso dal libro di Roberto Sottile che è dedicato al vocabolario del mondo pascolare nelle Madonie. Suppongo che conoscete bene quel libro e mi sembra superfluo spiegare che esso contiene due capitoli con contenuto reciproco, uno di cui organizzando il lessico pastorale dal punto di vista semasiologico e l'altro dal punto di vista onomasiologico.

Ho scelto un esempio dalla parte onomasiologica per mostrare come arrivare dalla rappresentazione analoga nel libro alla struttura relazionale già menzionata che è necessaria per l'analisi dei dati in un modo veramente digitale.

Roberto Sottile ci ha trasmesso un file Word che è stato creato su un computer del tipo Apple/Macintosh. L'esempio è preso da questo file e precisamente dal campo della lavorazione del latte perché è quello che attualmente sta nel centro del lavoro a VerbaAlpina .

Ecco una schermata / un fermo-immagine del concetto "piccola forma di formaggio" preso dalla parte onomasiologica del libro:

sottile2002_formediformaggio

Per il lettore umano i significati delle singole parti dello scritto sono proprio chiari: La prima linea contiene un titolo, indicando che di seguito vengono elencati concetti  e significati connessi  con questo campo.  Nella seconda linea si trova la descrizione del concetto e le linee successive presentano le singole parole che indicano quel concetto.  La coerenza semantica delle parole portando lo stesso significato viene sottolineata tramite le lettere nerette.  Dopo ogni parola seguono le sigle dei nomi degli abitati in cui viene usata la parola rispettiva.

Dal punto di vista del computer tutte le informazioni appena spiegate e contenute in un modo immanente non sono chiare per niente. Per arrivare alla possibilità di analizzare col computer anche quelle informazioni immanenti ci vuole una modificazione della rappresentazione dei dati. Come già detto una tale possibilità può – ed ormai vorrei sottolineare il *può* perché ci sono anche altri modi di procedere – può essere il modello relazionale. Nel modello relazionale si potrebbe organizzare le informazioni come di seguito. E dico "potrebbe" perché nel dettaglio ci sono sempre parecchi varianti, la scelta di cui dipende dallo scopo della ricerca. Il nostro scopo è chiaro: Vogliamo analizzare i dati in una prospettiva geolinguistica. Allora, ecco come si potrebbe procedere:

Denominazione concetto campo di concetti luoghi
pricintinu piccola forma di formaggio FORME DI FORMAGGIO GA
pizzuḍḍa piccola forma di formaggio FORME DI FORMAGGIO GE
squadatu piccola forma di formaggio FORME DI FORMAGGIO GA,GE,PS,CA,PO
tumazzunìeḍḍu piccola forma di formaggio FORME DI FORMAGGIO GE,CA

Abbiamo creato una tabella con le denominazioni. Ogni riga della tabella contiene una denominazione. Nelle colonne della tabella si trovano gli attributi delle parole. È da sottolineare che il modello relazionale permette l'illimitata addizione di righe e di colonne.

Dal punto di vista informatico la struttura scelta presenta almeno una offesa contro le regole: i campi dell'ultima colonna non contengono valori cosiddetti "atomici" ma in alcuni casi una concatenazione di valori. Lo svantaggio diventa ovvio se si tenta di assortire i valori secondo l'alfabeto. La soluzione la più facile sarebbe di copiare le righe riguardante e di distribuire i singoli valori sui righe nuove. Ecco il risultato:

 Denominazione concetto campo di concetti luoghi
pricintinu piccola forma di formaggio FORME DI FORMAGGIO GA
pizzuḍḍa piccola forma di formaggio FORME DI FORMAGGIO GE
squadatu piccola forma di formaggio FORME DI FORMAGGIO GA
squadatu piccola forma di formaggio FORME DI FORMAGGIO GE
squadatu piccola forma di formaggio FORME DI FORMAGGIO PS
squadatu piccola forma di formaggio FORME DI FORMAGGIO CA
squadatu piccola forma di formaggio FORME DI FORMAGGIO PO
tumazzunìeḍḍu piccola forma di formaggio FORME DI FORMAGGIO GE
tumazzunìeḍḍu piccola forma di formaggio FORME DI FORMAGGIO CA

Purtroppo la soluzione del primo problema comporta un nuovo problema: Adesso informazione identica è moltiplicata, vuol dire: la tabella contiene sempre la stessa quantità di informazione ma ormai è diventata più larga. In conseguenza, se per qualsiasi motivo sarebbe necessario cambiare qualcosa, per esempio l'ortografia della denominazione "squadatu", occorre ripetere il cambio in tutti i campi col valore "squadatu". Nel caso che si deve gestire una tabella molto più grande di quella attuale la ridondanza di informazione comporta  gravi problemi riguardanti la "performance". Allora ci vuole un'altra modificazione della struttura finora ottenuta. Ormai dobbiamo individuare cosiddetti "entità", vuol dire classi di oggetti  nel complesso dei dati rappresentati nella tabella, che sono definiti tramite una gamma di attributi specifici. Per ogni entità ci vuole una tabella propria. Il collegamento logico tra gli elementi salvati nelle tabelle viene elencata attraverso numeri identificativi:
sottile2002_formediformaggio_normalisiert

Abbiamo già menzionato la possibilità di arricchire le tabelle di righe e colonne addizionali. Per dare un esempio abbiamo aggiunto colonne supplementari alla tabella 3, marcate col colore blu, in cui si trova la liste dei comuni. Omai sono elencati il nome della comune, i dati necessari per la georeferenziazione, dunque i gradi di longitudine e di latitudine, e infine il numero degli abitanti. Tutto quello che abbiamo fatto finora, nella terminologia informatica, si chiama "normalizzazione" di una banca dati.

Per calcolare in quali comuni viene usata la denominazione "tumazzunìeḍḍu" per significare il concetto "piccola forma di formaggio" ci vuole combinare i numeri identificativi: La denominazione "tumazzunìeḍḍu" nella tabella 1 porta il numero 4 (marcato in rosso). Nella tabella 4 troviamo due righe con questo numero 4 nel campo chiamato "id_denom". Nelle stesse righe nel campo "id_luogo" accanto si trovano i numeri identificativi dei comuni in cui la denominazione viene usata. Quei numeri infine rimandano alla tabella 2 dove sono elencati i dati riguardanti i comuni. Presento qui i dati combinati in questo modo:

sottile2002_formediformaggio_normalisiert_kominiert

Al più tardi ormai siamo arrivati ad un punto dove la struttura dei dati è diventata così complessa, che abbiamo bisogno del aiuto dalla parte tecnica per gestirla. A ciò esistono sistemi cosiddetti, in inglese, "Database Management Systems", abbreviato DBMS. Il forse più noto di quei sistemi è MySQL.

Ecco come si presentano le tabelle nel sistema MySQL:

db_va_demo_palermo

Sulla parte superiore della schermata si vede un esempio della lingua formale/artificiale, chiamata SQL (Structured Query Language) e costruita in particolare per la gestione di dati in struttura relazionale. Sulla parte sinistra della schermata si trova la lista delle tabelle che abbiamo creati. E, finalmente sul fondo della schermata si vede il risultato dell'istruzione SQL.

Abbiamo preparato qualche altro esempio di istruzioni SQL (archivio scaricabile), solo per dare un idea della capacità. Nella lista vengono elencati gli istruzioni SQL e il risultato rispettivo:

/* crea una lista dei luoghi che indica la quantità dei denominazioni 
usati per significare il concetto "piccola forma di formaggio" */

SELECT
 luoghi.nome, 
 count(*) as quantità, 
 group_concat(denominazioni.Denominazione) as `denominazioni`

FROM denominazioni
join x_denom_luoghi on denominazioni.id_denom = x_denom_luoghi.id_denom
join luoghi on x_denom_luoghi.id_luogo = luoghi.id_luogo

group by luoghi.sigla

order by quantità DESC
;

Risultato:

/* trova i luoghi in cui si usano più di una denominazione sola 
per significare il concetto "piccola forma di formaggio" */

SELECT
 luoghi.nome, 
 count(*) as quantità, 
 group_concat(denominazioni.Denominazione) as `denominazioni` 

FROM denominazioni
join x_denom_luoghi on denominazioni.id_denom = x_denom_luoghi.id_denom
join luoghi on x_denom_luoghi.id_luogo = luoghi.id_luogo

group by luoghi.sigla

having quantità > 1
;

Risultato:

/* crea una lista di denominazioni simile a quella 
che si trova nel libro di Roberto Sottile */

select 
 concat(
 sq.campo, 
 '\n\n', 
 sq.concetto, 
 '\n', 
 group_concat(denominazioni separator '\n')
 ) as `testo scorrevole, non strutturato`

 from 
(
 SELECT 
 concetti.`campo di concetti` as campo, 
 concetti.concetto, 
 concat(
 denominazioni.Denominazione, 
 ' ', 
 GROUP_CONCAT(luoghi.sigla)
 ) as denominazioni

 FROM denominazioni
 join x_denom_luoghi on denominazioni.id_denom = x_denom_luoghi.id_denom
 join luoghi on x_denom_luoghi.id_luogo = luoghi.id_luogo
 join x_denom_concetti on denominazioni.id_denom = x_denom_concetti.id_denom
 join concetti on x_denom_concetti.id_concetto = concetti.id_concetto

 group by denominazioni.Denominazione
) as sq 

group by sq.campo, sq.concetto
;

Risultato:

sql_testo_scorrevole

/* crea un documento KML usabile ad esempio col programma Google Earth */

SET SESSION group_concat_max_len = 1000000;
select 
 concat(
 '
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2" xmlns:kml="http://www.opengis.net/kml/2.2" xmlns:atom="http://www.w3.org/2005/Atom">
<Document>
 <name>',sq.concetto,'.kml</name>
 <Style id="s_ylw-pushpin">
 <IconStyle>
 <scale>1.1</scale>
 <Icon>
 <href>http://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png</href>
 </Icon>
 <hotSpot x="20" y="2" xunits="pixels" yunits="pixels"/>
 </IconStyle>
 </Style>
 <StyleMap id="m_ylw-pushpin">
 <Pair>
 <key>normal</key>
 <styleUrl>#s_ylw-pushpin</styleUrl>
 </Pair>
 <Pair>
 <key>highlight</key>
 <styleUrl>#s_ylw-pushpin_hl</styleUrl>
 </Pair>
 </StyleMap>
 <Style id="s_ylw-pushpin_hl">
 <IconStyle>
 <scale>1.3</scale>
 <Icon>
 <href>http://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png</href>
 </Icon>
 <hotSpot x="20" y="2" xunits="pixels" yunits="pixels"/>
 </IconStyle>
 </Style>',
 group_concat(XML separator '\n'),
 '</Document>
</kml>'
 ) as `KML`

 from 
(
SELECT 
 concetti.`campo di concetti` as campo, 
 concetti.concetto, 
 concat(
 '<Placemark>
 <name>', luoghi.nome, '</name>
 <description>',GROUP_CONCAT(denominazioni.Denominazione),'</description>
 <LookAt>
 <longitude>',luoghi.`grado di longitudine`,'</longitude>
 <latitude>',luoghi.`grado di latitudine`,'4</latitude>
 <altitude>0</altitude>
 <heading>3.792984664259817</heading>
 <tilt>0</tilt>
 <range>30917.97286332985</range>
 <gx:altitudeMode>relativeToSeaFloor</gx:altitudeMode>
 </LookAt>
 <styleUrl>#m_ylw-pushpin</styleUrl>
 <Point>
 <gx:drawOrder>1</gx:drawOrder>
 <coordinates>',luoghi.`grado di longitudine`,',',luoghi.`grado di latitudine`,',0</coordinates>
 </Point>
 </Placemark>'
 ) as XML

 FROM denominazioni
 join x_denom_luoghi on denominazioni.id_denom = x_denom_luoghi.id_denom
 join luoghi on x_denom_luoghi.id_luogo = luoghi.id_luogo
 join x_denom_concetti on denominazioni.id_denom = x_denom_concetti.id_denom
 join concetti on x_denom_concetti.id_concetto = concetti.id_concetto

 group by luoghi.sigla
) as sq 

group by sq.campo, sq.concetto
;

Risultato:

archivio KML, usabile per esempio col programma Google Earth. La schermata qui sotto mostra la superficie di Google Earth dopo l'apertura del file KML:

denominazioni_ge

Parte pratica

Finora abbiamo presentato teoricamente la nostra metodologia. Ma siamo in un Workshop ed ormai passiamo al lavoro pratico che faremo insieme durante le due o tre ore seguenti. E rimaniamo sempre al vocabolario pascolare delle Madonie e al libro di Roberto Sottile.

Siamo riusciti di estrare dal Word-File tutti i tipi morfologici del lessico e li abbiamo inserito in una banca dati molto simile a quella di cui abbiamo parlato finora. Ci siamo ristretti al campo della produzione del formaggio. Nella banca dati adesso si trovano 512 tipi morfologici. Sono anche registrati gli informazioni sulla provenienza e sul significato. Questi dati sono gia disponibili su una cartina online che è accessibile al indirizzo http://www.als-online.gwi.uni-muenchen.de/carta/:

als_online_carta

Purtroppo i tipi phonetici trascritti nel alfabeto fonetico internazionale (IPA) nel word-file sono, diciamo, "danneggiati" in un modo che non sono leggibili. Per questo è necessario digitare i tipi fonetici nella banca dati a mano usando il sistema X-SAMPA che permette digitare i singoli segni del IPA usando esclusivamente segni disponibili su una tastiera europea. Un elenco del sistema X-SAMPA si trova qui: https://commons.wikimedia.org/wiki/X-SAMPA?uselang=it

Diamo un esempio come procedere. Ecco il tipo lessicale "scacciuni" dal lessico di Roberto Sottile:

scacciuni

Al inizio del primo paragrafo si trova il lemma, vuol dire il tipo lessicale. Dopo il lemma sono elencati i tipi fonetici rappresentanti quel tipo lessicale. Le sigle indicano le comuni in cui i tipi fonetici relativi sono attestati.

Sistema didattico: http://dhvlab.gwi.uni-muenchen.de/mgmt/labuser/signup

Accesso al sistema banca dati: http://dhvlab.gwi.uni-muenchen.de/sql

Documentazione X-SAMPA: https://commons.wikimedia.org/wiki/X-SAMPA?uselang=it