LR-POR / tools

Tools for checking the compatibility between a lexical resource and a treebank
BSD 3-Clause "New" or "Revised" License
2 stars 0 forks source link

Simplificação das entradas de N e A #5

Closed leoalenc closed 3 years ago

leoalenc commented 3 years ago

@arademaker e @analununes, ao meu ver, a simplificação das entradas de N e A envolve casos como estes :

alegre alegre+N+F+SG alegre alegre+N+M+SG alegres alegre+N+F+PL alegres alegre+N+M+PL ===> alegre alegre+N+SG alegres alegre+N+PL

simples simples+N+F+PL simples simples+N+F+SG simples simples+N+M+PL simples simples+N+M+SG ===> simples simples+N

A mesma coisa para a categoria A. Ou seja:

simples simples+A+F+PL simples simples+A+F+SG simples simples+A+M+PL simples simples+A+M+SG ===> simples simples+A

No entanto, a simplificação deixa intactos casos como:

simplesinha simples+N+DIM+F+SG simplesinhas simples+N+DIM+F+PL simplesinho simples+N+DIM+M+SG simplesinhos simples+N+DIM+M+PL

simplicíssima simples+A+SUPER+F+SG simplicíssimas simples+A+SUPER+F+PL simplicíssimo simples+A+SUPER+M+SG simplicíssimos simples+A+SUPER+M+PL

simplérrima simples+A+SUPER+F+SG simplérrimas simples+A+SUPER+F+PL simplérrimo simples+A+SUPER+M+SG simplérrimos simples+A+SUPER+M+PL

simplíssima simples+A+SUPER+F+SG simplíssimas simples+A+SUPER+F+PL simplíssimo simples+A+SUPER+M+SG simplíssimos simples+A+SUPER+M+PL

simplesinha simples+A+DIM+F+SG simplesinhas simples+A+DIM+F+PL simplesinho simples+A+DIM+M+SG simplesinhos simples+A+DIM+M+PL

Ou seja, a simplificação afeta as tags de gênero e número. O que me ocorreu para executar essa tarefa foi o seguinte: 1) agrupar as entradas que compartilham mesmo lema e categoria, por ex.:

simples simples+A+F+PL simples simples+A+F+SG simples simples+A+M+PL simples simples+A+M+SG simplicíssima simples+A+SUPER+F+SG simplicíssimas simples+A+SUPER+F+PL simplicíssimo simples+A+SUPER+M+SG simplicíssimos simples+A+SUPER+M+PL simplérrima simples+A+SUPER+F+SG simplérrimas simples+A+SUPER+F+PL simplérrimo simples+A+SUPER+M+SG simplérrimos simples+A+SUPER+M+PL etc.

2) agrupar as formas idênticas em cada um desses grupos:

simples simples+A+F+PL simples simples+A+F+SG simples simples+A+M+PL simples simples+A+M+SG

3) realizar interseção entre as tags de 2). No exemplo, obtemos: simples simples+A

arademaker commented 3 years ago

@leoalenc super claro agora... obrigado. @analununes vamos então chamar de simplificação a tarefa de agrupar entradas do morpho-br logo após ler os arquivos. Note que podemos fazer isso por subdiretório do morpho-br. depois dela, na memória termos um dicionário de form -> [feature-structures] para então processar um arquivo CoNLL-U.

arademaker commented 3 years ago

De fato, embora o issue tenha sido colocado aqui, refere-se a algo que será implementado no Haskell. Certo @analununes ?

analununes commented 3 years ago

@arademaker, certo!

leoalenc commented 3 years ago

@leoalenc super claro agora... obrigado. @analununes vamos então chamar de simplificação a tarefa de agrupar entradas do morpho-br logo após ler os arquivos. Note que podemos fazer isso por subdiretório do morpho-br. depois dela, na memória termos um dicionário de form -> [feature-structures] para então processar um arquivo CoNLL-U.

@arademaker e @analununes, acabei implementando em Python essa minha ideia de simplificação, de modo a testá-la. Vejam o commit. Parece que funciona, embora a saída ainda precise de formatação.

leoalenc commented 3 years ago

@arademaker e @analununes, resultados neste commit.

analununes commented 3 years ago

@leoalenc implementei sua ideia de simplificação em Haskell aqui, também parece funcionar. Fiz alguns testes:

`*MorphoBr M T> adj <- readD "../MorphoBr/adjectives"

*MorphoBr M T> M.lookup (T.pack "simples") adj Just ["simples+A"]

*MorphoBr M T> M.lookup (T.pack "leal") adj Just ["leal+A+SG"]

*MorphoBr M T> M.lookup (T.pack "bonito") adj Just ["bonito+A+M+SG"]`

leoalenc commented 3 years ago

@leoalenc implementei sua ideia de simplificação em Haskell aqui, também parece funcionar. Fiz alguns testes:

`*MorphoBr M T> adj <- readD "../MorphoBr/adjectives"

*MorphoBr M T> M.lookup (T.pack "simples") adj Just ["simples+A"]

*MorphoBr M T> M.lookup (T.pack "leal") adj Just ["leal+A+SG"]

*MorphoBr M T> M.lookup (T.pack "bonito") adj Just ["bonito+A+M+SG"]`

@analununes, parece muito bom! Vou aplicar meu script em Python sobre todos os adjetivos e substantivos do MorphoBr e, então, você poderá comparar os resultados.

leoalenc commented 3 years ago

@arademaker e @analununes, apliquei meu script sobre todo o MorphoBr, ver https://github.com/LR-POR/MorphoBr/issues/67. Talvez fosse interessante comparar esses resultados, incluindo as forma na pasta diminutives, com o resultado do programa em Haskell. A propósito, @arademaker, talvez fosse interessante migrar esse meu script de simplificação para a pasta tools do MorphoBr. Ou deixar mesmo aqui junto com o outro script de unificação, pois este repositório poderá em breve ser tornado público.

leoalenc commented 3 years ago

@arademaker e @analununes, dei uma olhada no código em Haskell. Parece bem enxuto e elegante! Infelizmente, Haskell tem estado na minha lista de linguagens de programação a aprender faz anos, como exemplo do paradigma funcional, mas nunca tive tempo. O máximo que fiz foi aprender recentemente Grammatical Framework, derivada de Haskell...

analununes commented 3 years ago

@leoalenc, posso comparar os resultados. Se estiver tudo certo vou começar a etapa de serialização da estrutura em um arquivo json.

arademaker commented 3 years ago

Bom @analununes , acho que @leoalenc já passou vc e muito. Ele já fez em Python a leitura do morpho-br então agora melhor seguirmos a partir do que ele ja fez. Temos urgência para artigo sair no final do mês... demorou, ele fez.

Sim, @leoalenc, nunca gostei de Python. Usava Lisp, mas atualmente reconheço em Haskell uma boa oportunidade por vários aspectos. No longo prazo queremos usar Haskell, mas agora está confuso estarmos usando dois repositórios diferentes...

Sobre

A propósito, @arademaker, talvez fosse interessante migrar esse meu script de simplificação para a pasta tools do MorphoBr. Ou deixar mesmo aqui junto com o outro script de unificação, pois este repositório poderá em breve ser tornado público.

Eu acho realmente melhor migrarmos os códigos para o morpho-br.

arademaker commented 3 years ago

Quem está fazendo o que agora?

analununes commented 3 years ago

@arademaker, como disse acima, eu estou fazendo uma função para comparar os resultados obtidos pelo @leoalenc com os que eu obtive. Você quer que eu faça outra coisa?

arademaker commented 3 years ago

Sim! acho que o mais urgente agora é terminarmos o script de analise de um ou mais conllu via unificações com morphobr já em memória. Combinamos então os códigos do Leonel...

analununes commented 3 years ago

@arademaker e @leoalenc, neste commit implementei a simplificação. Comparando os resultados produzidos por esse script e estes resultados encontrei 500 diferenças:

Os arquivos produzidos pelo script do commit citado acima estão corrigidos em relação a essas diferenças.

leoalenc commented 3 years ago

@arademaker e @leoalenc, neste commit implementei a simplificação. Comparando os resultados produzidos por esse script e estes resultados encontrei 500 diferenças:

  • 492 se tratavam do separador "+" no final das tags

@analununes, sim, esse problema fora corrigido neste commit. Parte dos outros erros deveram-se a que o script foi aplicado nos arquivos separados, como observara @arademaker.

  • 4 DIM como última tag (ordem diferente)
  • 2 SUPER como última tag (ordem diferente)

@analununes, meu script ainda está com esse problema. Vou corrigir, é um exercício de programação para mim... Por outro lado, a comparação entre as duas implementações serve como ferramenta de teste.

 grep -Ec "\+(DIM|AUG|SUPER)$" nouns/simplified-nouns.dict adjectives/simplified-adjectives.dict 
nouns/simplified-nouns.dict:20
adjectives/simplified-adjectives.dict:2
  • 2 causadas por "cimbráveis" não ter sido simplificado, provavelmente porque as entradas estavam em arquivos diferentes

@analununes , resolvido agora.

Os arquivos produzidos pelo script do commit citado acima estão corrigidos em relação a essas diferenças.

analununes commented 3 years ago

@analununes, sim, esse problema fora corrigido neste commit. Parte dos outros erros deveram-se a que o script foi aplicado nos arquivos separados, como observara @arademaker.

@leoalenc, desculpe, eu tinha comparado com os arquivos que estavam aqui

leoalenc commented 3 years ago

@analununes, sim, esse problema fora corrigido neste commit. Parte dos outros erros deveram-se a que o script foi aplicado nos arquivos separados, como observara @arademaker.

@leoalenc, desculpe, eu tinha comparado com os arquivos que estavam aqui

@analununes , corrigi meu script neste commit, ver novos arquivos enviados por e-mail.

analununes commented 3 years ago

@leoalenc, tudo certo! :smiley:

arademaker commented 3 years ago

vou fechar este issue. O https://github.com/LR-POR/MorphoBr/issues/67 é o issue que deveria ser usado para esta discussão. O código final que usamos agora para recriar o branch issue-67 e fazer o PR para o master do Morpho-Br é o Haskell. Vide https://github.com/LR-POR/MorphoBr/pull/89