openWordnet-PT
openWordnet-PT copied to clipboard
CSTNews : verificar cobertura own-pt
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.
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
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 -
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
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.
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?
@vcvpaiva acho que seus exemplos é o que no artigo (vide primeiro comentário) eles chamam de 'predicado complexo'. Vamos pesquisar os casos no corpus.
@claudiafreitas resultados parciais:
https://raw.githubusercontent.com/own-pt/wordnet-editor/master/cstnews.org
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
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 .
}
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.
@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
@rafaelbetatester também podemos tentar saber da lista das sugestões, quais verbos não temos na OWN-PT ainda , em nenhum synset.
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
arquivos relacionados no commit own-pt/wordnet-editor@a48542e1
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?
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)?
5358 sugestões de verbos coletadas podemos ver a lista desses 5358 verbos no infinitivo, por favor?
(-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.
Sobre a lista, o link já foi colocado acima, repetindo:
https://raw.githubusercontent.com/own-pt/wordnet-editor/master/data/cstnews-verb-suggestions.txt
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 "")
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!
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.
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.
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?
@rafaelbetatester para fechar este issue faltaram apenas os substantivos nos diretórios noun. Vamos repetir o processo para eles?
@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.