#! /usr/bin/gawk -f # Last edited on 2004-12-30 20:46:29 by stolfi # exclude-wrong-class - EXCLUI CLASSIFICACOES INCORRETAS BEGIN { # CONSTANTES DE PADRAO subst = "sb..." # classe dos substantivos adj = "aj..." # classe dos adjetivos substouadj = "((" subst ")|(" adj "))" # substantivo ou adjetivo abreviatura = ".+[.]" # abreviatura ou reticencias # VARIAVEIS no1 = 0 # no' de saida do arco no2 = 0 # no' de chegada do arco no_ini_abrev = 0 # no' de inicio de um arco duplo de abreviatura # estes arcos significam que a abreviatura poderia ser tambem # um arco da abreviatura ou palavra sem ponto + um arco de ponto final abrev = 0 # flag que indica se houve abreviatura encontrada no dicionario descapit = 0 # flag que indica se existe palavra descapitalizada de classe } # substantivo ou adjetivo ou sem classificacao para o mesmo arco # CODIGO DO PROGRAMA // { gsub(/[ ]+/," ") # converte espacos multiplos para um so espaco gsub(/[ ]$/,"") # retira espaco no fim da linha } (($1 != no1) || ($2 != no2)) { # novo arco a tratar no1 = $1 no2 = $2 descapit = 0 # reinicializa variavel de existencia de descapitalizada } (($2 == $1 + 6) && ($3 ~ "^" abreviatura "$")) { # arco duplo de abreviatura no_ini_abrev = $1 if (NF > 5) # existe essa palavra de abreviatura no dicionario abrev = 1 else # nao encontrou essa abreviatura no dicionario { abrev = 0 next # exclui abreviatura nao encontrada quando pode existir } # nao abreviatura ligando os mesmos nos } ((NF == 5) && ($1 == no_ini_abrev) && ($2 == no_ini_abrev + 3)) { # palavra nao encontrada de um arco simples, if ((abrev == 0) && ($3 ~ "^" abreviatura "$")) # mas com o mesmo no' inicio do arco duplo de abreviatura next # exclui abreviatura nao encontrada se tem opcao de nao abreviatura if ((abrev == 1) && ($3 !~ "^" abreviatura "$")) next # exclui palavra nao encontrada se encontrou abreviatura } ((NF > 5) && ($5 ~ "^mMi[0-9]+$")) {descapit = 1} # palavra descapitalizada com classificacao ((NF == 5) && ($5 ~ "^MMi[0-9]+$") && (descapit == 1)) {next} # exclui capitalizada em inicio de frase qdo existe descapitalizada (ex. Quem) ((NF == 5) && ($5 ~ "^mM.[0-9]+$")) {next} # exclui nomes proprios descapitalizados (ex. brasil) ((NF > 5) && ($5 ~ "^mMm[0-9]+$") && ($6 !~ "^" substouadj "$")) {next} # exclui classificacoes nao subst, adj originada de # nome proprio no meio da frase (ex. serra - verbo) ((NF == 5) && ($5 !~ "^...0$")) {next} # exclui palavras nao encontradas, mas parentisadas // { printf("%s\n", $0) } # nao exclui todas as demais classificacoes