openWordnet-PT icon indicating copy to clipboard operation
openWordnet-PT copied to clipboard

CSTNews : verificar cobertura own-pt

Open arademaker opened this issue 8 years ago • 26 comments

M. A. Sobrevilla Cabezudo, E. G. Maziero, J. W. D. C. Souza, M. D. S. Dias, P. C. F. Cardoso, P. P. Balage Filho, V. Agostini, F. A. A. Nóbrega, C. D. De Barros, A. Di Felippo, and T. A. S. Pardo, “Anotação de Sentidos de Verbos em Textos Jornalísticos do Corpus CSTNews,” RELIN, vol. 23, no. 3, pp. 797–36, Dec. 2015.

Dados em http://www.icmc.usp.br/~taspardo/sucinto/cstnews.html

Podemos usar para verificar completude de OWN-PT.

arademaker avatar Mar 20 '16 23:03 arademaker

se for usar os arquivos dsl, sugiro usar o cl-ppcre:

(let ((input "Segundo o músico César Kiles , que está hospedado<2652494> com sua mulher no Hotel Oasis , os turistas receberam<2210119> orientação para se dirigirem<1835496> para o abrigo subterrâneo do hotel caso o furacão passe<2050132> pela região ."))
       (cl-ppcre:do-scans (s e a b "([^ ]+)<([0-9]+)>" input)
         (format t "~a ~a ~a ~a~%" s e a b)))

Mas vc pode também escolher processar os XML, para isso, vc pode usar SAX (https://common-lisp.net/project/cxml/). Exemplo:

https://github.com/arademaker/harem/blob/master/harem.lisp

arademaker avatar Mar 31 '16 19:03 arademaker

Me ocorreu mais uma melhoria possível. Podemos usar freeling no texto original (ou no marcado removendo as marcações antes de chamar freeling) para comparar o resultado da ferramenta com a anotação manual e obter os lemas.

Por exemplo, no arquivo D3_C10_OGlobo.dls, primeiro parágrafo:

A aviação de Israel realizou<1712704> durante a madrugada desta segunda-feira , dia 7 , ataques a 150 alvos no Líbano . Enquanto isso , soldados israelenses mataram<1323958> 10 integrantes da milícia do Hezbollah . Durante este domingo , dia 6 , foram travadas<1090335> lugas sangrentas .

Freeling output usando o mesmo parágrafo com o texto original que está no diretório Textos-fonte:

# cat C10_Mundo_BombardeioLibano/Textos-fonte/D3_C10_OGlobo.txt | analyze -f pt.cfg

A o DA0FS0 0.676943 -
aviação aviação NCFS000 1 00300441-n:0.00371603/00302394-n:0.00351464/06096913-n:0.00322251
de de SPS00 1 -
Israel israel NP00000 1 09361816-n:0.00839949
realizou realizar VMIS3S0 1 02526085-v:0.00179588/01617192-v:0.00152564/01640855-v:0.00141477/00486018-v:0.00130958/02561995-v:0.00124519/02671880-v:0.00121096/02560767-v:0.00117759/02244603-v:0.00108166
durante durante SPS00 0.997271 -
a o DA0FS0 0.676943 -
madrugada madrugada NCFS000 0.990196 07326108-n:0.00483733/15168790-n:0.00472595
de de SPS00 1 -
esta este DD0FS0 0.884246 - este PD0FS000 0.115754 -
segunda-feira_,_dia_7 [L:7/??/??:??.??:??] W 1 -
, , Fc 1 -
ataques ataque NCMP000 0.968254 00972621-n:0.00288991/00773814-n:0.00247663/00977301-n:0.00235064/00457723-n:0.00230406
a a SPS00 0.311806 -
150 150 Z 1 -
alvos alvo NCMP000 0.954545 05980875-n:0.0093903
em em SPS00 1 -
o o DA0MS0 1 -
Líbano líbano NP00000 1 -
. . Fp 1 -

Enquanto enquanto RG 0.982866 00022131-r:0.00851264
isso isso PD0NN000 1 -
, , Fc 1 -
soldados soldado NCMP000 0.980583 10622053-n:0.0101409
israelenses israelenses AQ0CP0 0.3125 -
mataram matar VMIS3P0 0.65 01323958-v:0.00253418/02482425-v:0.00193108/01322854-v:0.00189604/00479391-v:0.00180489/00355038-v:0.00171705
10 10 Z 1 -
integrantes integrante AQ0CP0 1 -
de de SPS00 1 -
a o DA0FS0 0.676943 - a SPS00 0.311806 - o PP3FSA00 0.00614912 - o PD0FS000 0.00498492 - a NCMS000 0.000116421 -
milícia milícia NCFS000 1 08397255-n:0.00962587
de de SPS00 1 -
o o DA0MS0 0.946534 - o PD0MS000 0.0337339 - o PP3MSA00 0.0197186 - o NCMS000 1.38766e-05 -
Hezbollah hezbollah NP00000 1 -
. . Fp 1 -

Durante durante SPS00 0.997271 -
este este DD0MS0 0.846616 -
domingo_,_dia_6 [G:6/??/??:??.??:??] W 1 -
, , Fc 1 -
foram ir VMIS3P0 0.325 01835496-v:0.00186033/02051694-v:0.000631115/01955984-v:0.000623078/01995549-v:0.000594457/02072849-v:0.000570708/01904930-v:0.000565201/02009433-v:0.000531945/01957529-v:0.000521603/01935233-v:0.000512202/02102398-v:0.000502001/00341560-v:0.000486487/01846916-v:0.000482558/02685951-v:0.000462614/02058994-v:0.000461603/01882814-v:0.000461088/02102002-v:0.000456941/01849221-v:0.00045598/01841079-v:0.000452011/02686471-v:0.00041511/01839538-v:0.000408164/00343898-v:0.000399735
travadas travar VMP00PF 0.728175 01863593-v:0.00340513/01863817-v:0.00331457/02559752-v:0.00316108
lugas lugas NCFP000 1 -
sangrentas sangrento AQ0FP0 1 00247439-a:0.0101831
. . Fp 1 -

O problema é pensar como recuperar a anotação manual dado que a ordem dos tokens muda no resultado da análise (contrações) do texto original se comparado com a lista de tokens no texto anotado. Talvez possamos simplesmente colocar um espaço antes das tags:

A aviação de Israel realizou <1712704> durante a madrugada desta segunda-feira , dia 7 , ataques a 150 alvos no Líbano . Enquanto isso , soldados israelenses mataram <1323958> 10 integrantes da milícia do Hezbollah . Durante este domingo , dia 6 , foram travadas <1090335> lugas sangrentas .

Mas precisamos testar se estes códigos quando no texto não vão interferir na análise do FreeLing. Neste caso, a entrada acima teria como output:

# cat teste.txt | analyze -f pt.cfg
A o DA0FS0 0.676943 -
aviação aviação NCFS000 1 00300441-n:0.00371603/00302394-n:0.00351464/06096913-n:0.00322251
de de SPS00 1 -
Israel israel NP00000 1 09361816-n:0.00839949
realizou realizar VMIS3S0 1 02526085-v:0.00179588/01617192-v:0.00152564/01640855-v:0.00141477/00486018-v:0.00130958/02561995-v:0.00124519/02671880-v:0.00121096/02560767-v:0.00117759/02244603-v:0.00108166
< < Fz 1 -
1712704 1712704 Z 1 -
> > Fz 1 -
durante durante SPS00 0.997271 -
a o DA0FS0 0.676943 -
madrugada madrugada NCFS000 0.990196 07326108-n:0.00483733/15168790-n:0.00472595
de de SPS00 1 -
esta este DD0FS0 0.884246 - este PD0FS000 0.115754 -
segunda-feira_,_dia_7 [L:7/??/??:??.??:??] W 1 -
, , Fc 1 -
ataques ataque NCMP000 0.968254 00972621-n:0.00288991/00773814-n:0.00247663/00977301-n:0.00235064/00457723-n:0.00230406
a a SPS00 0.311806 -
150 150 Z 1 -
alvos alvo NCMP000 0.954545 05980875-n:0.0093903
em em SPS00 1 -
o o DA0MS0 1 -
Líbano líbano NP00000 1 -
. . Fp 1 -

arademaker avatar Apr 01 '16 02:04 arademaker

Arquivo cstnews-verb-suggestions.txt localizado em:https://github.com/own-pt/wordnet-editor/pull/10/files possui as 5358 sugestões de verbos coletadas a partir de http://www.icmc.usp.br/~taspardo/sucinto/cstnews.html nos arquivos .dls, todas analisadas pelo freeling e cada sugestão foi mapeada em um dado do tipo:

((:human-suggestion "1712704" :form "realizou" :lemma "realizar" :tag "VMIS3S0"  :synset-list "01617192-v:0.00164307/02526085-v:0.000924113/01640855-v:0.000678315/00486018-v:0.000566452/02561995-v:0.000514269/02671880-v:0.000505066/02560767-v:0.000491567/02244603-v:0.000443902")(....))

Ao usar este dado, lembrar de completar a sugestão humana: 1712704 -> 01712704-v

rafaelbetatester avatar Apr 10 '16 19:04 rafaelbetatester

Alexandre, nao estou entendendo a proposta aqui. pode explicar?

de qq forma espero que voce esteja lembrando que temos muitos verbos de ligacao em PT e que "realizar ataques" devia ser o mesmo que "atacar" e que "travar lutas" devia ser o mesmo que "lutar". dai que mapear corretamente esse "realizar" e esse "travar" nao e' essencial, enquanto que "atacar" e "lutar" sao mapeamentos essenciais.

vcvpaiva avatar Apr 10 '16 20:04 vcvpaiva

De @claudiafreitas :

Outra coisa: tem como na hora de alinhar a palavra com o synset, alinhar com o synset que fica imediatamente um nível acima?

arademaker avatar Apr 11 '16 00:04 arademaker

@vcvpaiva acho que seus exemplos é o que no artigo (vide primeiro comentário) eles chamam de 'predicado complexo'. Vamos pesquisar os casos no corpus.

arademaker avatar Apr 11 '16 00:04 arademaker

@claudiafreitas resultados parciais:

https://raw.githubusercontent.com/own-pt/wordnet-editor/master/cstnews.org

arademaker avatar Apr 11 '16 16:04 arademaker

Temos que contar os casos de predicados complexos como lembrando por @vcvpaiva ! Uma forma simplificada de melhorar nossa estatística seria apenas contar quantos predicados complexos ocorrem no corpus:

#/bin/bash

for f in $(find . -ipath '*dls*xml'); do
    echo $f $(xmllint --xpath "count(//Comentario[contains(@content,'complexo')])" $f);
done

arademaker avatar Apr 11 '16 17:04 arademaker

seguindo sugestão @claudiafreitas , podemos tentar achar ancestral comum na hierarquia:

select ?ss 
{
  wn30en:synset-01120069-v wn30:hyponymOf* ?ss .
  wn30en:synset-01617192-v wn30:hyponymOf* ?ss .
}

arademaker avatar Apr 11 '16 17:04 arademaker

Para corrigir o nome dos diretórios e arquivos - Retirar espaços: (Todos os files dentro do CST-5.0)

find . -depth -name '* *' \
| while IFS= read -r f ; do mv -i "$f" "$(dirname "$f")/$(basename "$f"|tr ' ' _)" ; done

Depois verificamos que temos 132 predicados complexos.

rafaelbetatester avatar Apr 11 '16 18:04 rafaelbetatester

@claudiafreitas resultados atualizados

https://raw.githubusercontent.com/own-pt/wordnet-editor/master/cstnews.org

@vcvpaiva dados melhoram muito quando usamos a ultima OWN-PT com FreeLing. De 52% de mismatch entre Freeling e humanos passamos para 38%. Not bad.

Agora precisamos decidir se este experimento que começou apenas como tentativa de sugerir palavras para OWN-PT serve para alguma discussão que daria continuidade ao trabalho

http://arademaker.github.io/bibliography/stil-2015.html

arademaker avatar Apr 13 '16 02:04 arademaker

@rafaelbetatester também podemos tentar saber da lista das sugestões, quais verbos não temos na OWN-PT ainda , em nenhum synset.

arademaker avatar Apr 13 '16 20:04 arademaker

recall dos casos de -1

> table(data$V1,data$V2)

        0    1    2    3    4    5    6    7    8    9   10   11
  -1 1413  370  139   55   31   14    1    0    2    7    0    0
  0     0  836  295  175  210   49   54   15    5    8    2    0
  1     0  168  147   88   61   67   13    4    0    0    0    0
  2     0  112  116   77   18   19   17    0    4    0    2    1
  3     0   81   69   28    8    9    1    0    0    3    2    0
  4     0   64   38    8    6    3    0    0    1    0    0    0
  5     0   79   21    4    2    4    1    0    0    0    0    0
  6     0   73    6    3    4    1    1    0    0    0    0    0
  7     0   30    4    2    1    3    0    0    0    0    0    0
  8     0   14   13    2    0    0    2    0    0    0    0    0
  9     0   12    2    1    2    0    0    0    0    0    0    0
  10    0    3    6    0    0    0    0    0    0    0    0    0
  11    0    9    4    0    0    0    0    0    0    0    0    0
  12    0    1    1    0    0    0    0    0    0    0    0    0
  13    0    7    0    0    0    0    0    0    0    0    0    0
  14    0    4    1    0    0    0    0    0    0    0    0    0
  15    0    5    0    0    0    0    0    0    0    0    0    0
  16    0    0    1    0    0    0    0    0    0    0    0    0
  17    0    0    1    0    0    0    0    0    0    0    0    0
  18    0    1    0    0    0    0    0    0    0    0    0    0
  19    0    5    0    0    0    0    0    0    0    0    0    0
  20    0    2    0    0    0    0    0    0    0    0    0    0

Nas linhas o número de synsets onde houve concordância, lembrando que a linha -1 significa que o Freeling não acetou o synset escolhido pelo humano. A segunda linha é quando humano e freeling sugeriram o mesmo synset, logo faz sentido neste caso a segunda coluna ser 0.

As colunas indicam o número de synsets (hyper) comuns para cada caso. Para os casos de -1, temos um recall de 43% se olharmos para o hyper comum.

cstnews> (* 1.0 (/ (+ 370 139 55 31 14 1 0 2 7 0 0) 1413))
0.438075

arademaker avatar Apr 14 '16 14:04 arademaker

arquivos relacionados no commit own-pt/wordnet-editor@a48542e1

arademaker avatar Apr 14 '16 16:04 arademaker

Ainda tendo problemas pra entender essa tabela: o que significa a posicao (-1, 1)=370 ? da' pra produzir a lista pra gente ver o que esta' acontencendo?

vcvpaiva avatar Apr 14 '16 21:04 vcvpaiva

tbem nao entendi bem a tabela. entendo a valeria quanto a "travar luta" = lutar, mas a frase é "foram travadas lutas", daí que concordo com lutar, só não acho que seja uma decisão óbvia e unânime (porque temos, em PT, o travar com sentido de "começar"). Mas foi a decisão deles: anotaram como lutar: http://wnpt.brlcloud.com/wn/synset?id=01090335-v. E, se essa for a posição, o que fazemos com o "luta"? lutar luta ou o synset é atribuído aos 3 tokens (foram travadas lutas)?

claudiafreitas avatar Apr 14 '16 21:04 claudiafreitas

5358 sugestões de verbos coletadas podemos ver a lista desses 5358 verbos no infinitivo, por favor?

vcvpaiva avatar Apr 16 '16 14:04 vcvpaiva

(-1,1) = 370. São 370 casos onde a marcação do verbo pelos humanos e freeling não concordaram (-1), mas quando olhamos na hierarquia hypernym temos 1 pai comum entre pelo menos um dos synsets escolhidos por freeling e pelo synset escolhido pelo humano.

arademaker avatar Apr 16 '16 14:04 arademaker

Sobre a lista, o link já foi colocado acima, repetindo:

https://raw.githubusercontent.com/own-pt/wordnet-editor/master/data/cstnews-verb-suggestions.txt

arademaker avatar Apr 16 '16 14:04 arademaker

this is not what I am asking. I'm asking for a list, deduped, of infinitive forms of the verbs. to see if they all at least exist in OWN-P. at least the following should not be there: (:humman-suggestion "2556126" :form "apóie" :lemma "apóie" :tag "NCFS000" :synset-list "") (:humman-suggestion "540235" :form "se" :lemma "se" :tag "PP3CN00" :synset-list "")

vcvpaiva avatar Apr 16 '16 16:04 vcvpaiva

Sugestões já incorporadas pelo @fcbr na interface:

http://wnpt.brlcloud.com/wn/search-activities?sf=&so=&term=&start=0&fq_provenance=cst.csv

Basta votar agora!

arademaker avatar Apr 16 '16 19:04 arademaker

Votar nessa lista so' vai causar mais erros e ruido na OWN-PT. isso 'e porque, como todo mundo sabe, on verbos mais frequentes de qq lingua sao os mais polissemicos.(algumas d)as sugestoes sao de adicionar esses verbos (os auxiliares ser, estar, ter, haver, fazer, ir, dar) a synsets mais especificos. isso 'e uma coisa muito errada. alem disso a lista contem erros crassos como mais de 20 vezes o verbo "se". a lista de infinitivos, corretos e deduped vai no attachment. tem so' 331 verbos e pode ser usada em conjunto com os cst.cst da interface cst-verbs.txt a sugestao 'e tentar achar os verbos que nao sao super comuns e votar nesses somente.

vcvpaiva avatar Apr 19 '16 13:04 vcvpaiva

erros? ruídos? Basta votar negativo, são sugestões apenas. Sim, podíamos ter tentado melhorar as sugestões, sempre é possível, mas queria dar um fim neste issue. editar na mão a lista não resolve, perdemos a capacidade de avaliar a qualidade do método + corpus usado. Erros podem ter sido introduzidos por freeling (lematização) ou mesmo já estarem no corpus. Os verbos auxiliares também concordo deveriam ter sido tirados, mas também podem contar como sugestões ruins. Não entendi última frase.

a sugestao 'e tentar achar os verbos que nao sao super comuns e votar nesses somente.

arademaker avatar Apr 19 '16 17:04 arademaker

entendo a reclamação da Valéria pq tem muitas sugestões e muitas ruins. Qual a urgência de votar nestas 900 sugestões?

livyreal avatar Apr 19 '16 19:04 livyreal

@rafaelbetatester para fechar este issue faltaram apenas os substantivos nos diretórios noun. Vamos repetir o processo para eles?

arademaker avatar Apr 20 '16 12:04 arademaker

@livyreal nenhuma prioridade. Do ponto de vista do issue, terminamos aqui com as sugestões submetidas no sistema. Entendo que poderíamos ter aplicado um ou outro filtro adicional, mas o custo de refazer o processo e retirar as sugestões é mais alto do que simplemente votarmos contra elas. Alem disso, ficamos com estatísticas mais apuradas.

arademaker avatar Apr 20 '16 12:04 arademaker