# versione di verif3.txt con controllo per le transcategorizzazioni # restano da controllare le nuove mw BEGIN { space = " " while(getline < "effedibi.txt" > 0) { if($0 == "") continue s = split($0,f,",") hdf[(f[1])] = $0 } close ("effedibi.txt") } { # scrivo ciascuna riga di codifica print $0 # verifico le parentesi tonde e il segno ";" #if($2 ~ /\(/ && $2 !~ /\)/) if($3 ~ /\(/ && $3 !~ /\)/) { print "%%% manca parentesi chiusa" next } #if($2 ~ /\)/ && $2 !~ /\(/) if($3 ~ /\)/ && $3 !~ /\(/) { print "%%% manca parentesi aperta" next } #if(($2 ~ /\(/ || $2 ~ /\)/) && $2 !~ /\;\(/) if(($3 ~ /\(/ || $3 ~ /\)/) && $3 !~ /\;\(/) { print "%%% manca segno di alternanza" next } gsub(/\)\;\(/,") (",$0) t = split ($0,trans," ") # qui introduco un loop per il controllo delle singole transcategor. tr = 2 while(tr < t) { tr++ sub(/^\(/,"",$tr) sub(/\)$/,"",$tr) codici = $tr s = split(codici,f,",") if(f[2] == 0 && f[7] !~ /11/) { print "%%% manca codice di multiword per lemma "(tr - 2) continue } if(f[2] == 0 && f[7] ~ /11/) { continue } lem = f[1] if(f[1] ~ /ø/ && f[s] ~ /0/ && tr > 3) { print "%%% manca codice di multiword per lemma "(tr - 2) } if(f[1] ~ /ø/ && f[s] ~ /0/ && tr == 3) { print "%%% manca codice di multiword " } if (t > 2) categ = f[2] # verifico il numero di codici (devono essere 7) if(s < 7 && t > 3) # la condizione (tr > 3) Š per catturare i casi di transcat print "%%% manca qualche codice per lemma "(tr - 2) if(s < 7 && t == 3) print "%%% manca qualche codice " if(s > 7 && t > 3) print "%%% ci sono troppi codici per lemma "(tr - 2) if(s > 7 && t == 3) print "%%% ci sono troppi codici " # controllo la POS if((categ in hdf) == 0 && t > 3) { print "%%% POS non riconosciuta per lemma "(tr - 2) break } if((categ in hdf) == 0 && t== 3) { print "%%% POS non riconosciuta " break } if(categ == 75 || categ == 76) { break } # per controllare la coerenza tra POS e valori morfologici assegnati # estraggo da HDF i codici ammessi per la POS ammessi = hdf[categ] # trasformo le alternanze in coordinate per facilitare il controllo gsub(/\;/,",",ammessi) a = split(ammessi,amm,",") # nzeri indica quanti zeri ci devono essere, eccetto l'ultimo in caso di mw nzeri= amm[2] gsub(/\;/,",",codici) s = split(codici,f,",") sub(/\)$/,"",f[s]) zeri = 0 d = 2 # controllo fino a (s - 1), contando anche gli zeri while(d < (s - 1)) { d++ if(f[d] == "0") zeri++ am = 0 ok = 0 while(am < (a - 1)) { am++ # attenzione a amm[2] che indica il nr di zeri voluto, e quindi va skippato if(am == 2) continue if(f[d] == amm[am]) ok++ } if(ok == 0) print "%%% codice "f[d] " non ammesso per la POS " categ " per lemma "(tr - 2) } if(zeri > nzeri && t > 3) print "%%% ci sono troppi zeri per lemma "(tr - 2) if(zeri > nzeri && t == 3) print "%%% ci sono troppi zeri " if(zeri < nzeri && t > 3) print "%%% manca qualche zero per lemma "(tr - 2) if(zeri < nzeri && t == 3) print "%%% manca qualche zero " # controllo l'ultimo codice, che deve essere uno zero o un codice di mw if(f[s] != 0 && (f[s] < 11 || f[s] > 19 )) { if(t > 3) print "%%% errato l'ultimo codice per lemma "(tr - 2) if(t == 3) print "%%% errato l'ultimo codice per il lemma " } # verifico che nessun codice, eccetto lo zero, sia duplicato # riparto quindi dall'inizio dei codici linguistici, settando d e d1 = 3 d = 2 while(d < (s - 1)) { d++ d1 = d while(d1 < s) { d1++ if(d == d1) continue if(f[d] == f[d1] && f[d] != 0) print "%%% codice "f[d] " ripetuto per lemma "(tr - 2) } } } }