Utente:DnaX/Script catalogazione chiese
Per catalogare le pagine disambiguazione sulle chiese come Chiesa di San Rocco o Chiesa di San Giovanni Battista ho creato uno script per analizzare i link presenti ai comuni e generare automaticamente la provincia di appartenenza e la separazione tra regioni.
Gli script creati sono due, uno per estrarre i dati da due banche dati in formato csv che mantengono le associazioni tra comuni e provincie, l'altro per analizzare la pagina non ordinata e generare il testo già formattato da incollare nella pagina insieme alle voci non riconosciute (frazioni italiane, località straniere, nessun link alla località ecc).
Vedi questi edit:
- https://it.wikipedia.org/w/index.php?title=Chiesa_di_San_Rocco&diff=34148730&oldid=33844073
- https://it.wikipedia.org/w/index.php?title=Chiesa_di_San_Giovanni_Battista&diff=34231792&oldid=33850479
- https://it.wikipedia.org/w/index.php?title=Chiesa_di_San_Bartolomeo&diff=prev&oldid=110278015
- https://it.wikipedia.org/w/index.php?title=Chiesa_di_Sant%27Andrea&diff=prev&oldid=110033939
- https://it.wikipedia.org/w/index.php?title=Chiesa_di_San_Francesco&diff=prev&oldid=110036738
Script
modificaScript dati.sh
modificaServe per estrarre i dati di ogni comune. Vengono utilizzati i file scaricabili da qui.
#!/bin/bash
if [ $# == '2' ]
then
PROV_CODE=`cat comuni.csv | grep -s -i ";$2[[:cntrl:]]" | cut -d ';' -f 1`
if [ "$PROV_CODE" = "" ]; then
exit 1
fi
case $1 in
"--reg")
cat regioni_province.csv | grep -s $PROV_CODE | sed "s/\([A-Z\-]*\);\([0-9]*\);\([A-Z \-]*\);\([0-9]*\);\([a-zA-Z' \-]*\);\([A-Z\-]*\)/\3/g"
;;
"--prov")
cat regioni_province.csv | grep -s $PROV_CODE | sed "s/\([A-Z\-]*\);\([0-9]*\);\([A-Z \-]*\);\([0-9]*\);\([a-zA-Z' \-]*\);\([A-Z\-]*\)/([[Provincia di \5|\6]])/g"
;;
"--reg-prov")
cat regioni_province.csv | grep -s $PROV_CODE | sed "s/\([A-Z\-]*\);\([0-9]*\);\([A-Z \-]*\);\([0-9]*\);\([a-zA-Z' \-]*\);\([A-Z\-]*\)/\3;([[Provincia di \5|\6]])/g"
;;
esac
else
PROV_CODE=`cat comuni.csv | grep -s -i ";$1[[:cntrl:]]" | cut -d ';' -f 1`
if [ "$PROV_CODE" == "" ]; then
exit 1
fi
cat regioni_province.csv | grep -s $PROV_CODE | sed "s/\([A-Z\-]*\);\([0-9]*\);\([A-Z \-]*\);\([0-9]*\);\([a-zA-Z' \-]*\);\([A-Z\-]*\)/Zona: \1\nRegione: \3\nProvincia: \5 (\6)/g"
fi
Uso: ./dati.sh "San Giuliano Terme" oppure ./dati.sh --prov "San Giuliano Terme"
Script categorizza.sh
modificaQuesto script serve a prendere in input la lista formattata e restituisce tutte le chiese con annessa provincia e raggruppate per regione, il tutto già formattato.
#!/bin/bash
ABRUZZO=''
BASILICATA=''
CALABRIA=''
CAMPANIA=''
EMILIA_ROMAGNA=''
FRIULI_VENEZIA_GIULIA=''
LAZIO=''
LIGURIA=''
LOMBARDIA=''
MARCHE=''
MOLISE=''
PIEMONTE=''
PUGLIA=''
SARDEGNA=''
SICILIA=''
TOSCANA=''
TRENTINO_ALTO_ADIGE=''
UMBRIA=''
VALLE_AOSTA=''
VENETO=''
echo -e "\e[1;37mVoci non rilevate:\e[0m"
while IFS= read -r line
do
# skip empty line
if [ -z "$line" ]; then
continue
fi
TAG=`echo -n "$line" | grep -s -o -e "\[\[[a-zA-Z' ]*\]\]" | tail -n 1 | sed "s/\[\[\([a-zA-Z' ]*\)\]\]/\1/g"`
# Try the form of [[Sonico (Italia)|Sonico]]
if [ -z "$TAG" ]; then
TAG=`echo -n "$line" | grep -s -o -E "\[\[[a-zA-Z|() ]*\]\]" | tail -n 1 | sed "s/\[\[\([a-zA-Z' ]*\) (Italia)|[a-zA-Z' ]*\]\]/\1/"`
fi
DATI=$(bash dati.sh --reg-prov "$TAG")
REG=`echo "$DATI" | cut -d ';' -f 1`
if [ -z "$REG" ]; then
echo "$line"
continue
fi
# Doesn't work with [[Sonico (Italia)|Sonico]]
if [[ $string == *"(Italia)"* ]]; then
STR=$(echo "$line" | sed "s/\[\[$TAG (Italia)|$TAG\]\]/[[$TAG (Italia)|$TAG]] `echo \"$DATI\" | cut -d ';' -f 2`/g")
else
STR=$(echo "$line" | sed "s/\[\[$TAG\]\]/[[$TAG]] `echo \"$DATI\" | cut -d ';' -f 2`/g")
fi
case $REG in
"ABRUZZO")
ABRUZZO="$ABRUZZO\n$STR"
;;
"BASILICATA")
BASILICATA="$BASILICATA\n$STR"
;;
"CALABRIA")
CALABRIA="$CALABRIA\n$STR"
;;
"CAMPANIA")
CAMPANIA="$CAMPANIA\n$STR"
;;
"EMILIA-ROMAGNA")
EMILIA_ROMAGNA="$EMILIA_ROMAGNA\n$STR"
;;
"FRIULI-VENEZIA GIULIA")
FRIULI_VENEZIA_GIULIA="$FRIULI_VENEZIA_GIULIA\n$STR"
;;
"LAZIO")
LAZIO="$LAZIO\n$STR"
;;
"LIGURIA")
LIGURIA="$LIGURIA\n$STR"
;;
"LOMBARDIA")
LOMBARDIA="$LOMBARDIA\n$STR"
;;
"MARCHE")
MARCHE="$MARCHE\n$STR"
;;
"MOLISE")
MOLISE="$MOLISE\n$STR"
;;
"PIEMONTE")
PIEMONTE="$PIEMONTE\n$STR"
;;
"PUGLIA")
PUGLIA="$PUGLIA\n$STR"
;;
"SARDEGNA")
SARDEGNA="$SARDEGNA\n$STR"
;;
"SICILIA")
SICILIA="$SICILIA\n$STR"
;;
"TOSCANA")
TOSCANA="$TOSCANA\n$STR"
;;
"TRENTINO-ALTO ADIGE")
TRENTINO_ALTO_ADIGE="$TRENTINO_ALTO_ADIGE\n$STR"
;;
"UMBRIA")
UMBRIA="$UMBRIA\n$STR"
;;
"VALLE D'AOSTA")
VALLE_AOSTA="$VALLE_AOSTA\n$STR"
;;
"VENETO")
VENETO="$VENETO\n$STR"
;;
esac
done < "$1"
echo
echo -e "\e[1;37mVoci rilevate:\e[0m"
echo "=== [[Abruzzo]] ==="
echo -e "$ABRUZZO"
echo "=== [[Basilicata]] ==="
echo -e "$BASILICATA"
echo "=== [[Calabria]] ==="
echo -e "$CALABRIA"
echo "=== [[Campania]] ==="
echo -e "$CAMPANIA"
echo "=== [[Emilia-Romagna]] ==="
echo -e "$EMILIA_ROMAGNA"
echo "=== [[Friuli-Venezia Giulia]] ==="
echo -e "$FRIULI_VENEZIA_GIULIA"
echo "=== [[Lazio]] ==="
echo -e "$LAZIO"
echo "=== [[Liguria]] ==="
echo -e "$LIGURIA"
echo "=== [[Lombardia]] ==="
echo -e "$LOMBARDIA"
echo "=== [[Marche]] ==="
echo -e "$MARCHE"
echo "=== [[Molise]] ==="
echo -e "$MOLISE"
echo "=== [[Piemonte]] ==="
echo -e "$PIEMONTE"
echo "=== [[Puglia]] ==="
echo -e "$PUGLIA"
echo "=== [[Sardegna]] ==="
echo -e "$SARDEGNA"
echo "=== [[Sicilia]] ==="
echo -e "$SICILIA"
echo "=== [[Toscana]] ==="
echo -e "$TOSCANA"
echo "=== [[Trentino-Alto Adige]] ==="
echo -e "$TRENTINO_ALTO_ADIGE"
echo "=== [[Umbria]] ==="
echo -e "$UMBRIA"
echo "=== [[Valle d'Aosta]] ==="
echo -e "$VALLE_AOSTA"
echo "=== [[Veneto]] ==="
echo -e "$VENETO"
Uso: ./categorizza.sh lista.txt
L'output sarà diviso tra voci non rilevate e voci rilevate e categorizzate.
Update
modifica- 20/01/2020: gestione link [[Como (Italia)|Como]]
Affidabilità
modificaCi sono ancora alcune voci non rilevate, sono comunque una minima parte di tutto.
Esempi:
- Viene analizzato sempre l'ultimo link trovato nella riga, ciò può creare errori
- Voci senza link non vengono analizzate
- Link diversi dai comuni italiani non rilevati (frazioni, località, città straniere)
In ogni caso sono da ricontrollare anche le voci categorizzate per correggere possibili errori. In ogni caso l'uso di questo script alleggerisce gran parte del lavoro! Può funzionare anche per altre tipologie di disambigue nei casi in cui c'è una lista la cui unica differenza cono i comuni.