LR-POR/tools

duplicação de entradas regulares na tabela de irregulares

analununes opened this issue · 7 comments

Em MorphoBr/issues/111 @leoalenc disse:

assentado PAST-PART-SUFFIX assentar
assente PAST-PART-SUFFIX assentar
assentado PAST-PART-SUFFIX assentar
assento PAST-PART-SUFFIX assentar

Estou estranhando a repetição de assentado. Isso não deveria ocorrer, mesmo se admitirmos que assento é um particípio válido. Problema de desenho do algoritmo?

por favor, tentar explicar o problema e propor solução, documentando, antes de implementar.

por favor, tentar explicar o problema e propor solução, documentando, antes de implementar.

@arademaker, o problema:

@arademaker, para cada forma, o algoritmo classifica como regular ou irregular e produz a saída correspondente. No caso acima, quando assente foi analisado a saída produzida foi:

assentado PAST-PART-SUFFIX assentar
assente PAST-PART-SUFFIX assentar

que corresponde à forma regular e à forma irregular e individualmente está certo.

A saída produzida para a forma assento também está individualmente certa, forma regular e forma irregular:

assentado PAST-PART-SUFFIX assentar
assento PAST-PART-SUFFIX assentar

O problema é que a entrada regular assentado PAST-PART-SUFFIX assentar deveria ocorrer apenas uma vez na tabela, ou seja, as duas saídas juntas deveriam ser:

assentado PAST-PART-SUFFIX assentar
assente PAST-PART-SUFFIX assentar
assento PAST-PART-SUFFIX assentar

Acredito que isso possa ser resolvido adicionando um filtro de entradas únicas à tabela de irregulares.

Não entendi

que corresponde à forma regular e à forma regular e individualmente está certo.

Além disso, filtrar a saída removendo repetições é jogar a sugeria para debaixo do tapete né? Não seria melhor achar a fonte do problema?

Finalmente vc disse

No caso acima, quando assente foi analisado

O que significa isso? Na primeira versão do código vc recebia entradas do MorphoBr, agrupava por lemma e tentava classificar entre verbos regulares e irregulares. O que seria analisar a forma flexionada "assente"?

Não entendi

que corresponde à forma regular e à forma regular e individualmente está certo.

Além disso, filtrar a saída removendo repetições é jogar a sugeria para debaixo do tapete né? Não seria melhor achar a fonte do problema?

Finalmente vc disse

No caso acima, quando assente foi analisado

O que significa isso? Na primeira versão do código vc recebia entradas do MorphoBr, agrupava por lemma e tentava classificar entre verbos regulares e irregulares. O que seria analisar a forma flexionada "assente"?

@analununes, concordo com @arademaker, acho que adicionar filtro não fica muito legal. Acho que o problema pode ser resolvido procedendo como sugeri lá no início: agrupar todas as formas associadas a um lema, ou seja, construir uma estrutura do tipo dicionário com o lema como chave e uma lista de pares (forma,features) como valor.

No commit d942169 apliquei a função nub na saída de cada grupo de formas associadas a um lema para remover as possíveis entradas duplicadas.

concatMap
((\k morpho (x,ys) -> nub $ concatMap (aux x k morpho) (sortOn snd $ sortOn fst ys))
m (M.fromList xs)) xs

Bom vc seguiu fazendo o filtro no final do processo, diferente do que falamos nos comentários anteriores né?

Bom vc seguiu fazendo o filtro no final do processo, diferente do que falamos nos comentários anteriores né?

@arademaker, as saídas já estavam agrupadas por lema, que era a sugestão do @leoalenc. Fiz o filtro logo depois de gerar as saídas de cada grupo, não seria possível fazer de outra maneira sem modificar muito o algoritmo, alterando a função isRegular, o que me parece desnecessário. Como dito no artigo, ao aplicar a função isRegular a uma entrada existem três saídas possíveis, uma delas inclui a forma regular, isso não depende das saídas das outras formas.