Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

decompose the problem of #8 in smaller components #15

Closed
leoalenc opened this issue Jul 5, 2021 · 44 comments
Closed

decompose the problem of #8 in smaller components #15

leoalenc opened this issue Jul 5, 2021 · 44 comments
Assignees
Labels
enhancement New feature or request

Comments

@leoalenc
Copy link
Contributor

leoalenc commented Jul 5, 2021

@arademaker e @analununes, decomponho o problema de #8, seguindo, em linhas gerais, o que fiz no conversor referido em #2, tratado no artigo submetido ao número especial da LREC, nas seguintes etapas:

  1. Transformar letter sets de my-irules.tdl em expressões regulares.
  2. Transformar em pares de expressões regulares cada par (suff1 suff2) da lista de pares de sufixos de my-irules.tdl.
  3. Construir dicionário SUFFIX-TYPE -> lista de pares, com cada par no formato (SUFF1, SUFF2), onde SUFF1 e SUFF2 são expressões regulares.
  4. Construir função que substitua SUFF1 por SUFF2.
  5. Construir função isRegular(lema, forma, regra), que retorna verdadeiro se a forma é a forma regular do lema para a regra especificada, conforme 3 e 4, falso do contrário. Por exemplo, extinguido é a forma regular do particípio passado do lema extinguir segundo a regra past-part-suffix de my-irules.tdl, porque obtemos extinguido substituindo SUFF1 por SUFF2 em extinguir, conforme 3:
past-part-suffix :=
; (partir partido) (puir puído) (seguir seguido) (vender vendido) (doar doado)
%suffix (!lir !lido) (!kuir !kuído) (!quir !quido) (er ido) (ar ado)
past-part-lex-rule. 

Os argumentos da função is_regular são dados pelo MorphoBr. Em MorphoBr/src/SimplifyEntries,py, implementei a função build_lemma_dict, que constrói dicionário (lemma,pos) -> [(form, feats)], ou seja, atribui a cada par (lemma,pos) do MorphoBr uma lista de pares (form, feats). Para ("extinguir","V"), um desses pares será ("extinguido",["PTPST","M","SG"]). No MorphoBr, temos:

grep -Ph "\textinguir\+V\+PTPST" ~/MorphoBr/verbs/verbs-a*.dict

extinguida extinguir+V+PTPST+F+SG
extinguidas extinguir+V+PTPST+F+PL
extinguido extinguir+V+PTPST+M+SG
extinguidos extinguir+V+PTPST+M+PL
extinta extinguir+V+PTPST+F+SG
extintas extinguir+V+PTPST+F+PL
extinto extinguir+V+PTPST+M+SG
extintos extinguir+V+PTPST+M+PL

No momento, como ressaltei em comentário a uma issue anterior, modelei apenas o particípio passado que não se flexiona.
A lista de features ["PTPST","M","SG"] permite associar essa forma à regra past-part-suffix. Para tanto, precisamos ter um mapping de features sobre as regras de my-irules.tdl.

  1. Construir função que classifique as formas de um lema em regulares e irregulares, utilizando 5. Essa função retorna um dicionário que atribui a cada lema, para cada regra de my-irules.tdl que se aplique a esse lema, duas listas: a lista de formas regulares (imagino que possa conter uma única forma ou ser vazia) e a lista de formas irregulares (uma ou várias formas ou vazia). No caso de extinguir, a forma regular do particípio passado é extinguido, extinto é irregular, pois não pode ser gerado pela regra past-part-suffix.
  2. Construir função que, a partir da saída de 6, construa a tabela de exceções my-irregs.tab . Para extinguir, como expliquei antes, devemos ter:
extinguido PAST-PART-SUFFIX extinguir
extinto PAST-PART-SUFFIX extinguir

Um verbo como atacar não tem entrada em my-irregs.tab para a regra past-part-suffix, pois a sua única forma de particípio passado é regular. Um verbo como fazer, pelo contrário, só tem uma forma irregular, devendo ter a seguinte entrada:

feito PAST-PART-SUFFIX fazer

@leoalenc
Copy link
Contributor Author

leoalenc commented Jul 9, 2021

@analununes e @arademaker, normalmente, as regras flexionais do arquivo my-irules.tdl produzem apenas uma forma para cada verbo. No entanto, podemos ter mais de uma forma regular em alguns casos, como, por exemplo, na primeira pessoa do plural do pretérito perfeito do indicativo. Por exemplo, para comprar, podemos ter tanto compramos quanto comprámos, ver http://www.portaldalinguaportuguesa.org/index.php?action=lemma&lemma=81213. Por outro lado, mais de uma forma irregular também é possível.
Acho que essa informação é importante para o algoritmo de conversão.

@arademaker
Copy link
Contributor

@leoalenc os lemas também precisam ser inseridos como entradas lexicais certo? No my-base-lexicon.tdl correto?

@leoalenc
Copy link
Contributor Author

leoalenc commented Jul 9, 2021

@leoalenc os lemas também precisam ser inseridos como entradas lexicais certo? No my-base-lexicon.tdl correto?

@arademaker, sim, os lemas precisam ser transformados em entradas lexicais, que podem ficar em diferentes arquivos, desde que sejam mencionados no script que carrega a gramática, no caso, lkb/my-script. No entanto, essa tarefa ultrapassa em muito o trabalho da Ana, uma vez que envolve a classificação dos verbos conforme a tipologia apresentada noutra questão, tipologia essa baseada na valência verbal. Eu estava pensando exatamente nessa classificação para ser o tema do artigo que eu e você vamos elaborar. Para que a Ana possa testar, na gramática, o algoritmo de preenchimento da tabela de exceções (que pode conter também formas regulares quando estas coexistem com formas irregulares), podemos criar entradas de fantasia tratando todos os verbos como intransitivos, colocando essas entradas fantasiosas em arquivos separados, tendo o cuidado de utilizar o comando especial para léxicos de grande volume, ver script. Fiquei curioso agora pra saber quanto tempo o sistema vai levar para analisar umas 800.000 sentenças, que acho que é a quantidade de verbos conjugados do recurso lexical (o modo imperativo não será contemplado agora).

@analununes
Copy link

@arademaker e @leoalenc , neste commit acredito ter produzido a tabela. No arquivo irregs.txt, as linhas ímpares contém as formas encontradas no MorphoBr e as linhas pares contém as formas produzidas pelas regras (posso inverter a ordem ou fazer outras alterações se quiserem) .
Como era esperado, para extinguir temos:

extinto	past-part-suffix	extinguir
extinguido	past-part-suffix	extinguir

Para fazer:

feito	past-part-suffix	fazer
fazido	past-part-suffix	fazer

@leoalenc
Copy link
Contributor Author

leoalenc commented Jul 24, 2021

@analununes , os exemplos estão corretos. O sistema exige que a coluna do meio seja em caixa alta. Por outro lado, é recomendável que a forma regular ocorra primeiro.
Você pode testar melhor com os exemplos de verbos que eu coloquei nos comentários do arquivo my-irules.tdl.

@leoalenc
Copy link
Contributor Author

leoalenc commented Jul 24, 2021

@analununes, não encontrei a forma fazido no MorphoBr. Só tenho escutado essa forma na fala de crianças que ainda estão aprendendo português.

@analununes
Copy link

. O sistema exige que a coluna do meio seja em caixa alta. Por outro lado, é recomendável que a forma regular ocorra primeiro.

@leoalenc, ok! Vou corrigir o formato.

@analununes, não encontrei a forma fazido no MorphoBr. Só tenho escutado essa forma na fala de crianças que ainda estão aprendendo português

A forma fazido foi produzida pela regra, substituindo o sufixo 1 pelo sufixo 2. Para entrarem na tabela as formas regulares devem existir no MorphoBr? Achei que bastava serem produzidas pela regra.

@leoalenc
Copy link
Contributor Author

leoalenc commented Jul 24, 2021

. O sistema exige que a coluna do meio seja em caixa alta. Por outro lado, é recomendável que a forma regular ocorra primeiro.

@leoalenc, ok! Vou corrigir o formato.

@analununes, não encontrei a forma fazido no MorphoBr. Só tenho escutado essa forma na fala de crianças que ainda estão aprendendo português

A forma fazido foi produzida pela regra, substituindo o sufixo 1 pelo sufixo 2. Para entrarem na tabela as formas regulares devem existir no MorphoBr? Achei que bastava serem produzidas pela regra.

@analununes, só pode entrar na tabela o que estiver no MorphoBr! A tarefa do algoritmo é exatamente classificar as formas do recurso em regulares e irregulares, de modo a preencher a tabela.

@analununes
Copy link

A tarefa do algoritmo é exatamente classificar as formas do recurso em regulares e irregulares, de modo a preencher a tabela.

@leoalenc , ahh verdade, eu deveria ter percebido antes, desculpe. Agora, neste commit, corrigi o formato e temos apenas as formas que existem no MorphoBr:

extinguido	PAST-PART-SUFFIX	extinguir
extinto	PAST-PART-SUFFIX	extinguir
fez	PERF-IND-3SG-SUFFIX	fazer
feito	PAST-PART-SUFFIX	fazer
faço	PRES-IND-1SG-SUFFIX	fazer

@leoalenc
Copy link
Contributor Author

A tarefa do algoritmo é exatamente classificar as formas do recurso em regulares e irregulares, de modo a preencher a tabela.

@leoalenc , ahh verdade, eu deveria ter percebido antes, desculpe. Agora, neste commit, corrigi o formato e temos apenas as formas que existem no MorphoBr:

extinguido	PAST-PART-SUFFIX	extinguir
extinto	PAST-PART-SUFFIX	extinguir
fez	PERF-IND-3SG-SUFFIX	fazer
feito	PAST-PART-SUFFIX	fazer
faço	PRES-IND-1SG-SUFFIX	fazer

@analununes, parece muito bom. Parabéns! Poderia gerar arquivo maior para eu dar uma olhada? Sugiro você utilizar uma amostra com as conjugações dos seguintes verbos: ver, ser, estar, ter, haver, ir, vir, poder, fazer e trazer.

@arademaker
Copy link
Contributor

@analununes, não encontrei a forma fazido no MorphoBr. Só tenho escutado essa forma na fala de crianças que ainda estão aprendendo português.

Correto que apenas as formas presentes no MorphoBr devem ser incluídas, mas não seria a geração desta forma fazido um caso de over geração indevida das regras da gramática?

@leoalenc
Copy link
Contributor Author

@analununes, não encontrei a forma fazido no MorphoBr. Só tenho escutado essa forma na fala de crianças que ainda estão aprendendo português.

Correto que apenas as formas presentes no MorphoBr devem ser incluídas, mas não seria a geração desta forma fazido um caso de over geração indevida das regras da gramática?

@arademaker, excelente pergunta. Na morfologia, temos uma lógica um pouco diferente da sintaxe. As regras de flexão da língua portuguesa forçosamente geram formas como fazido, que são, por definição, regulares, uma vez que a regra é o particípio passado da segunda conjugação formar-se por meio da terminação ido, por exemplo, a partir de vender, obtemos vendido. É por isso que crianças que ainda não concluíram o aprendizado da língua materna produzem formas como fazido, trazo etc. Isso demonstra que já aprenderam a morfologia da língua, o que ainda precisam aprender são as exceções. Veja, por exemplo, este estudo. O que distingue o léxico em relação aos demais componentes da gramática é constituir-se de exceções às regras da morfologia e da sintaxe. Alguém já afirmou que o léxico é o repositório de idiossincrasias da língua. Desse modo, a existência de uma forma irregular como feito bloqueia a geração da forma regular fazido. No caso de extinguir, esse bloqueio não ocorre, pelo fato de a forma regular ser também corrente.
É interessante que, nas línguas do mundo, comumente formas regulares acabam desbancando formas irregulares, que caem em desuso, provavelmente por ação das crianças que estão aprendendo a língua. Por exemplo, em alemão, o pretérito imperfeito de fragen 'perguntar' ainda era frug no início do séc. XX, hoje se usa apenas a forma regular fragte, formada pelo acréscimo de te ao radical. Há exemplos análogos em português e inglês de que agora não estou me lembrando. Talvez seja o caso de dreamt e dreamed em inglês, com a diferença de que ambas as formas são usadas. Veja o livro da Ann sobre o tratamento desses casos, que é exatamente como estamos fazendo na PorGram, incluindo as duas formas em irregs.tab quando ambas são usadas (utilizando o MorphoBr como modelo do léxico).

@analununes
Copy link

@analununes, parece muito bom. Parabéns! Poderia gerar arquivo maior para eu dar uma olhada? Sugiro você utilizar uma amostra com as conjugações dos seguintes verbos: ver, ser, estar, ter, haver, ir, vir, poder, fazer e trazer.

@leoalenc, obrigada!! Aqui está a amostra:
amostra-irregs.txt
Lembrando que o arquivo completo está aqui.

@leoalenc
Copy link
Contributor Author

leoalenc commented Jul 28, 2021

@analununes, parece muito bom. Parabéns! Poderia gerar arquivo maior para eu dar uma olhada? Sugiro você utilizar uma amostra com as conjugações dos seguintes verbos: ver, ser, estar, ter, haver, ir, vir, poder, fazer e trazer.

@leoalenc, obrigada!! Aqui está a amostra:
amostra-irregs.txt
Lembrando que o arquivo completo está aqui.

@analununes, vou fazer até amanhã de manhã uma checagem exaustiva da amostra, mas posso adiantar que já detectei dois problemas. As formas assinaladas abaixo com "--" são regulares e, portanto, não deveriam constar na tabela:

--trazer FUT-SUBJ-3SG-SUFFIX trazer
trouxer FUT-SUBJ-3SG-SUFFIX trazer
--trazer FUT-SUBJ-1SG-SUFFIX trazer
trouxer FUT-SUBJ-1SG-SUFFIX trazer
--trazemos PERF-IND-1PL-SUFFIX trazer
trouxemos PERF-IND-1PL-SUFFIX trazer
--trazemos PERF-IND-1PL-SUFFIX trazer (repetição da antepenúltima entrada)

Talvez esses erros decorram das formas trazê e trazemo dados pelo MorphoBr como alternativas, o que, como discutimos hoje com @arademaker, devem ser excluídas do recurso. No entanto, não encontrei na sua amostra trazê como realização de FUT-SUBJ-3SG-SUFFIX, apenas o seguinte:

trazer INFL-INF-3SG-SUFFIX trazer
trazê INFL-INF-3SG-SUFFIX trazer
trazer INFL-INF-1SG-SUFFIX trazer
trazê INFL-INF-1SG-SUFFIX trazer

Pode rodar de novo o algoritmo sem as formas espúrias do MorphoBr? Mas precisamos primeiro chegar a um consenso sobre as formas que devem ser eliminadas do MorphoBr.

@arademaker
Copy link
Contributor

@analununes vc pode tentar explicar os casos acima? Se precisar de ajuda podemos falar amanhã.

@leoalenc
Copy link
Contributor Author

@analununes, complementando comentário acima, na morfologia flexional, temos a seguinte regra:

fut-subj-1sg-suffix :=
%suffix (!er !er)
fut-subj-1sg-lex-rule. 

A classe de caracteres !e tem a seguinte definição:

%(letter-set (!e aei))

Desse modo, dado o lema trazer, obtemos pela regra a forma trazer para o fut-subj-1sg.

@arademaker
Copy link
Contributor

É interessante que, nas línguas do mundo, comumente formas regulares acabam desbancando formas irregulares, que caem em desuso, provavelmente por ação das crianças que estão aprendendo a língua.

@leoalenc, obrigado pela explicação acima, mas fiquei curioso: o que explica a existência das formas irregulares então?

@leoalenc
Copy link
Contributor Author

leoalenc commented Jul 29, 2021

@analununes afirmou:

Não entendi porque está errado, "trazer" não é a forma regular de "trouxer"? Achei que na tabela deveriam ser inclusas as formas regulares dos verbos irregulares

Não, nada disso. A tabela inclui apenas as formas irregulares, independentemente do tipo de verbo, incluindo apenas formas regulares quando coexistem como alternativas a formas irregulares. Verbo irregular não significa que todas as suas formas sejam irregulares, mas apenas que algumas formas não são geradas pelas regras flexionais. Daí a necessidade de incluir as formas que não são geradas na tabela de exceções. Até um verbo como “ser” possui formas regulares.
As formas regulares do verbo “ser”, irregular por excelência, por serem geradas na morfologia, não precisam ser listadas na tabela de exceções. Agora sei porque o seu arquivo ficou muito grande com mais 500.000 formas! Eu esperava algo com no máximo 10.000 formas. O princípio de engenharia da gramática que o sistema está adotando é exatamente este: reduzir o tamanho de memória ocupado pela gramática!

@leoalenc
Copy link
Contributor Author

leoalenc commented Jul 29, 2021

@analununes afirmou:

trazer não é forma alternativa de trouxer? Estou confusa agora

Não, não é. No MorphoBr, temos para o subjuntivo futuro de trazer:

grep -Ph "\ttrazer\+V\+SBJF\+" verbs-a*.dict

trouxer trazer+V+SBJF+1+SG
trouxer trazer+V+SBJF+3+SG
trouxerdes trazer+V+SBJF+2+PL
trouxerem trazer+V+SBJF+3+PL
trouxeres trazer+V+SBJF+2+SG
trouxermos trazer+V+SBJF+1+PL

No infinitivo, temos:

grep -Ph "\ttrazer\+V\+INF\+?" verbs-a*.dict

trazer trazer+V+INF
trazer trazer+V+INF+1+SG
trazer trazer+V+INF+3+SG
trazerde trazer+V+INF+2+PL
trazerdes trazer+V+INF+2+PL
trazere trazer+V+INF+2+SG
trazerem trazer+V+INF+3+PL
trazeres trazer+V+INF+2+SG
trazermo trazer+V+INF+1+PL
trazermos trazer+V+INF+1+PL
trazê trazer+V+INF
trazê trazer+V+INF+1+SG
trazê trazer+V+INF+3+SG

Desse modo, um algoritmo que está classificando as formas do MorphoBr, utilizando como critério as regras de my-irules.tdl, com o objetivo de atribuir os labels regular e irregular, deveria apresentar os seguintes resultados:

trazer trazer+V+INF+1+SG regular
trazer trazer+V+INF+3+SG regular
trazerde trazer+V+INF+2+PL irregular
trazerdes trazer+V+INF+2+PL regular
trazere trazer+V+INF+2+SG irregular
trazerem trazer+V+INF+3+PL regular
trazeres trazer+V+INF+2+SG regular
trazermo trazer+V+INF+1+PL irregular
trazermos trazer+V+INF+1+PL regular
trazê trazer+V+INF irregular
trazê trazer+V+INF+1+SG irregular
trazê trazer+V+INF+3+SG irregular

Como vimos em LR-POR/MorphoBr#104 (comment), as formas tratadas como irregulares acima nem deveriam fazer parte do MorphoBr. Mas incluí aqui apenas para exemplificar a natureza da tarefa do algoritmo.
Para o subjuntivo futuro, o resultado da classificação deveria ser este:

trouxer trazer+V+SBJF+1+SG irregular
trouxer trazer+V+SBJF+3+SG irregular
trouxerdes trazer+V+SBJF+2+PL irregular
trouxerem trazer+V+SBJF+3+PL irregular
trouxeres trazer+V+SBJF+2+SG irregular
trouxermos trazer+V+SBJF+1+PL irregular

@analununes
Copy link

@analununes afirmou:

trazer não é forma alternativa de trouxer? Estou confusa agora

Não, não é. No MorphoBr, temos para o subjuntivo futuro de trazer:

grep -Ph "\ttrazer\+V\+SBJF\+" verbs-a*.dict

trouxer trazer+V+SBJF+1+SG
trouxer trazer+V+SBJF+3+SG
trouxerdes trazer+V+SBJF+2+PL
trouxerem trazer+V+SBJF+3+PL
trouxeres trazer+V+SBJF+2+SG
trouxermos trazer+V+SBJF+1+PL

No infinitivo, temos:

grep -Ph "\ttrazer\+V\+INF\+?" verbs-a*.dict

trazer trazer+V+INF
trazer trazer+V+INF+1+SG
trazer trazer+V+INF+3+SG
trazerde trazer+V+INF+2+PL
trazerdes trazer+V+INF+2+PL
trazere trazer+V+INF+2+SG
trazerem trazer+V+INF+3+PL
trazeres trazer+V+INF+2+SG
trazermo trazer+V+INF+1+PL
trazermos trazer+V+INF+1+PL
trazê trazer+V+INF
trazê trazer+V+INF+1+SG
trazê trazer+V+INF+3+SG

Desse modo, um algoritmo que está classificando as formas do MorphoBr, utilizando como critério as regras de my-irules.tdl, com o objetivo de atribuir os labels regular e irregular, deveria apresentar os seguintes resultados:

trazer trazer+V+INF+1+SG regular
trazer trazer+V+INF+3+SG regular
trazerde trazer+V+INF+2+PL irregular
trazerdes trazer+V+INF+2+PL regular
trazere trazer+V+INF+2+SG irregular
trazerem trazer+V+INF+3+PL regular
trazeres trazer+V+INF+2+SG regular
trazermo trazer+V+INF+1+PL irregular
trazermos trazer+V+INF+1+PL regular
trazê trazer+V+INF irregular
trazê trazer+V+INF+1+SG irregular
trazê trazer+V+INF+3+SG irregular

Como vimos em LR-POR/MorphoBr#104 (comment), as formas tratadas como irregulares acima nem deveriam fazer parte do MorphoBr. Mas incluí aqui apenas para exemplificar a natureza da tarefa do algoritmo.
Para o subjuntivo futuro, o resultado da classificação deveria ser este:

trouxer trazer+V+SBJF+1+SG irregular
trouxer trazer+V+SBJF+3+SG irregular
trouxerdes trazer+V+SBJF+2+PL irregular
trouxerem trazer+V+SBJF+3+PL irregular
trouxeres trazer+V+SBJF+2+SG irregular
trouxermos trazer+V+SBJF+1+PL irregular

agora entendi! Obrigada! Vou corrigir o algoritmo.

@leoalenc
Copy link
Contributor Author

leoalenc commented Jul 29, 2021

Não, não é

Como posso saber quando é ou não? Ainda não está claro para mim.

@analununes, expliquei aqui. Sugiro reler o meu artigo conjunto com @arademaker submetido ao LREC e reler os passos do algoritmo acima.
Veja:

%(letter-set (!e aei))

fut-subj-1sg-suffix :=
%suffix (!er !er)
fut-subj-1sg-lex-rule.

Aplicando essa regra ao lema trazer, obtemos trazer. A forma do MorphoBr, contudo, é trouxer:

trouxer trazer+V+SBJF+1+SG

Portanto, a forma do MorphoBr é irregular, porque discrepa do que seria a forma regular pelas regras. Logo, na tabela de exceções, devemos ter apenas:

trouxer FUT-SUBJ-1SG-SUFFIX trazer

Esta linha que você incluiu está errada, porque a forma em questão inexiste do MorphoBr:

trazer FUT-SUBJ-1SG-SUFFIX trazer

Acredito que está embutida na noção de uma tarefa de classificação, aplicada no caso às formas do MorphoBr, que não criamos formas, apenas rotulamos as formas existentes no recurso, atribuindo um dos dois rótulos regular e irregular. @arademaker, acho que a natureza da tarefa está clara, ou não?

@leoalenc
Copy link
Contributor Author

leoalenc commented Jul 29, 2021

agora entendi! Obrigada! Vou corrigir o algoritmo.

Ótimo, @analununes! Acabamos sobrepondo nossos comentários. Mesmo assim, leia o que escrevi enquanto você respondia: #15 (comment)

@analununes
Copy link

agora entendi! Obrigada! Vou corrigir o algoritmo.

Ótimo, @analununes! Acabamos sobrepondo nossos comentários. Mesmo assim, leia o que escrevi enquanto você respondia: #15 (comment)

Antes meu raciocínio era: deve ser incluída a forma regular se a forma foi produzida pela regra e se ela existe no MorphoBr (olhando apenas a forma, sem conferir as tags/regra) . Por isso demorei tanto para entender, mas agora está bem claro!

@leoalenc
Copy link
Contributor Author

Antes meu raciocínio era: deve ser incluída a forma regular se a forma foi produzida pela regra e se ela existe no MorphoBr (olhando apenas a forma, sem conferir as tags/regra) . Por isso demorei tanto para entender, mas agora está bem claro!

Excelente. É por isso, @analununes, que um dos passos do algoritmo que propus acima contém exatamente esta especificação:

Os argumentos da função is_regular são dados pelo MorphoBr. Em MorphoBr/src/SimplifyEntries,py, implementei a função build_lemma_dict, que constrói dicionário (lemma,pos) -> [(form, feats)], ou seja, atribui a cada par (lemma,pos) do MorphoBr uma lista de pares (form, feats). Para ("extinguir","V"), um desses pares será ("extinguido",["PTPST","M","SG"]).

Ou seja, o objeto da classificação não são formas isoladas, mas pares do tipo ("trazer", ["INF","1","SG"]) e ("trouxer", ["SBJF","1","SG']), que o algoritmo, aplicando as regras infl-inf-3sg-suffix e fut-subj-1sg-suffix ao lema trazer, deverá classificar como regular e irregular, respectivamente.

@analununes
Copy link

@leoalenc, corrigi o algoritmo, aqui está a nova amostra:
amostra-irregs.txt

@leoalenc
Copy link
Contributor Author

leoalenc commented Jul 30, 2021

@leoalenc, corrigi o algoritmo, aqui está a nova amostra:

amostra-irregs.txt

@analununes, obrigado, vou dar uma olhada até amanhã.

@leoalenc
Copy link
Contributor Author

@analununes e @arademaker, o algoritmo parece muito bom, dada a amostra que analisei. Parabenizo a @analununes. No entanto, detectei problemas que parecem decorrer de erros sistemáticos do MorphoBr que contabilizam milhares de formas. Trata-se do problema referido aqui. Precisamos resolver essas duas issues, que, na verdade, constituem uma só, antes de rodar o algoritmo de construção da tabela de exceções. Só então vou poder saber se o algoritmo está, de fato, funcionando para a amostra dada. @analununes, você poderia produzir versão do MorphoBr sem essas formas espúrias? Atribui a você a issue.

@analununes
Copy link

@leoalenc, obrigada! Vou trabalhar nessa issue!

@arademaker
Copy link
Contributor

Legal, obrigado Leonel por revisar o resultado do algoritmo da @analununes. Ainda tenho que revisar com ela a organização do código.

@analununes
Copy link

@arademaker e @leoalenc, aqui está a amostra:
amostra-irregs.txt
O arquivo completo está aqui.

@leoalenc
Copy link
Contributor Author

leoalenc commented Aug 4, 2021

@arademaker e @leoalenc, aqui está a amostra:
amostra-irregs.txt
O arquivo completo está aqui.

@analununes e @arademaker, detectei estes problemas:

-*veiste PERF-IND-2SG-SUFFIX vir
-?podias IMPF-IND-2SG-SUFFIX poder
--fá PRES-IND-3SG-SUFFIX fazer
--fê PERF-IND-3SG-SUFFIX fazer
--fi PERF-IND-1SG-SUFFIX fazer
--trá PRES-IND-3SG-SUFFIX trazer

Os dois primeiros erros sugerem a possibilidade de algum problema no algoritmo, porque não encontrei, na amostra que @analununes enviou, a forma vieste vir+V+PRF+2+SG, que é irregular. Vejam LR-POR/MorphoBr#106, onde explico que veiste constitui erro ortográfico.
O caso de podias é interessante. Não esperava encontrar essa forma na lista de exceções, porque o IMPF-IND-2SG-SUFFIX de um verbo regular como vender é vendias. Erro meu de modelagem em my-irules.tdl? Erro do algoritmo da @analununes? Estou curioso.
As demais formas são espúrias, a serem removidas do MorphoBr. Trata-se de um caso de verbo com clítico que não previ naquelas minhas regras de LR-POR/MorphoBr#104. O algoritmo da @analununes corretamente identificou essa formas como irregulares.

@leoalenc
Copy link
Contributor Author

leoalenc commented Aug 4, 2021

@arademaker e @analununes, o caso da forma podias, referido acima, deve-se a erro meu. Esqueci de formular a regra de impf-ind-2sg-suffix para a terceira conjugação.

@analununes
Copy link

Os dois primeiros erros sugerem a possibilidade de algum problema no algoritmo, porque não encontrei, na amostra que @analununes enviou, a forma vieste vir+V+PRF+2+SG, que é irregular. Vejam LR-POR/MorphoBr#106, onde explico que veiste constitui erro ortográfico.

@leoalenc, para a segunda regra

Sejam (forma1,feats1) e (forma2,feats2) de um dado lema, onde feats1==feats2 e feats1 termina em 2+SG e forma1 != forma2, eliminar a forma duplicada que não termina em s

um dos if confere se a forma1 termina em s, caso não termine, é considerada como erro, se terminar, a forma2 é considerada como erro, por isso "vieste" foi identificado como erro por essa regra. Imagino que com as correções de 106 o algoritmo não a classifique mais como erro.

@leoalenc
Copy link
Contributor Author

leoalenc commented Aug 5, 2021

um dos if confere se a forma1 termina em s, caso não termine, é considerada como erro, se terminar,

@analununes , acho que não está correto classificar a forma1 como erro simplesmente por não terminar em esse, Sem saber se a segunda forma termina ou não em esse. A condição a ser verificada primeiro seria se uma das formas termina em esse. Caso as duas formas não terminem em esse, deveriam ser agrupadas num relatório próprio.

a forma2 é considerada como erro, por isso "vieste" foi identificado como erro por essa regra. Imagino que com as correções de 106 o algoritmo não a classifique mais como erro.

@analununes
Copy link

um dos if confere se a forma1 termina em s, caso não termine, é considerada como erro, se terminar,

@analununes , acho que não está correto classificar a forma1 como erro simplesmente por não terminar em esse, Sem saber se a segunda forma termina ou não em esse. A condição a ser verificada primeiro seria se uma das formas termina em esse. Caso as duas formas não terminem em esse, deveriam ser agrupadas num relatório próprio.

a forma2 é considerada como erro, por isso "vieste" foi identificado como erro por essa regra. Imagino que com as correções de 106 o algoritmo não a classifique mais como erro.

@leoalenc, consegui agrupar as formas da regra 2 que não terminam em s em um relatório próprio:
regra2-sem-s.txt

Resultados do algoritmo após reformular a regra 2:
erros.txt
nao-encontradas.txt

@leoalenc
Copy link
Contributor Author

um dos if confere se a forma1 termina em s, caso não termine, é considerada como erro, se terminar,

@analununes , acho que não está correto classificar a forma1 como erro simplesmente por não terminar em esse, Sem saber se a segunda forma termina ou não em esse. A condição a ser verificada primeiro seria se uma das formas termina em esse. Caso as duas formas não terminem em esse, deveriam ser agrupadas num relatório próprio.

a forma2 é considerada como erro, por isso "vieste" foi identificado como erro por essa regra. Imagino que com as correções de 106 o algoritmo não a classifique mais como erro.

@leoalenc, consegui agrupar as formas da regra 2 que não terminam em s em um relatório próprio:
regra2-sem-s.txt

Resultados do algoritmo após reformular a regra 2:
erros.txt
nao-encontradas.txt

@arademaker e @analununes, eu não esperava encontrar na lista de erros.txt formas no imperativo da segunda pessoa do singular, uma vez que a regra 1 de LR-POR/MorphoBr#104 (comment) reza:

Se +IMP+ não é parte das features de uma forma de um dado lema de verbo, eliminar a forma se a primeira ou a segunda pessoa do plural não terminar em s.

grep -E "\+IMP\+2\+SG" erros.txt | wc -l

11310

$ grep -E "\+IMP\+2\+SG" erros-02.txt | head

ababalha ababalhar+V+IMP+2+SG
ababosa ababosar+V+IMP+2+SG
abacela abacelar+V+IMP+2+SG
abacina abacinar+V+IMP+2+SG
abada abadar+V+IMP+2+SG
abaderna abadernar+V+IMP+2+SG
abadessa abadessar+V+IMP+2+SG
abadia abadiar+V+IMP+2+SG
abaeta abaetar+V+IMP+2+SG
abafa abafar+V+IMP+2+SG

Essas formas não constituem erros, uma vez que o imperativo afirmativo se forma pela supressão do s da segunda pessoa do singular do presente do indicativo. Estas duas formas estão corretas, a segunda sendo a do imperativo negativo:

grep -Ph "\tabafar\+V\+IMP\+2\+SG" verbs-a*.dict

abafa abafar+V+IMP+2+SG
abafes abafar+V+IMP+2+SG

Vejo agora que faltou no meu esboço de algoritmo deixar claro que a regra 2 está no escopo do if da regra 1, pelo que nenhuma forma no imperativo é alvo da regra 2. @analununes, pode consertar o algoritmo e gerar novos arquivos de saída?

@analununes
Copy link

@leoalenc, corrigi o algoritmo e escrevi em LR-POR/MorphoBr/issues/104 referenciando seu comentário para não confundirmos as issues.

@arademaker
Copy link
Contributor

@analununes , vc pode colocar um link aqui para o código que implementou as regras do @leoalenc ?

@analununes
Copy link

@analununes , vc pode colocar um link aqui para o código que implementou as regras do @leoalenc ?

@arademaker, claro! Está aqui.

@analununes
Copy link

@leoalenc e @arademaker, produzi nova versão da tabela de irregulares, está aqui.
Essa nova versão foi produzida com os arquivos do branch issue-104 do MorphoBr. Ainda falta eliminar as entradas marcadas no arquivo regra-2-sem-s-erros.txt e corrigir as entradas de sufixo -asseis.

@arademaker
Copy link
Contributor

Só temos que tomar cuidado para não nos enrolarmos com estes issues em diferentes repositórios mas relacionados.

@leoalenc
Copy link
Contributor Author

@leoalenc e @arademaker, produzi nova versão da tabela de irregulares, está aqui.

Essa nova versão foi produzida com os arquivos do branch issue-104 do MorphoBr. Ainda falta eliminar as entradas marcadas no arquivo regra-2-sem-s-erros.txt e corrigir as entradas de sufixo -asseis.

@analununes , você pode me dar uma estimativa de quando é que poderá corrigir aquelas formas em asseis do imperfeito do subjuntivo segunda pessoa do plural? É só acentuar, ásseis. Eu precisaria, então, de uma nova tabela. Estou vendo aqui que não dá pra mandar o artigo com os dados da tabela atual, pq essas formas estão claramente erradas. Com isso, o número de formas irregulares ficou altamente inflacionado.

@arademaker
Copy link
Contributor

@analununes vc ainda não respondeu a pergunta do @leoalenc

@analununes
Copy link

@analununes vc ainda não respondeu a pergunta do @leoalenc

@arademaker, as formas em asseis foram corrigidas no dia da submissão do artigo para STIL, na correria para a entrega devo ter esquecido de responder, desculpe.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

3 participants