2 pontos por GN⁺ 2025-08-04 | Ainda não há comentários. | Compartilhar no WhatsApp
  • A flexão de nomes próprios islandeses muda para quatro formas de acordo com o contexto
  • Foi desenvolvida uma funcionalidade, por meio de uma biblioteca JavaScript orientada por dados, que retorna o caso gramatical apropriado para o nome informado
  • Ao armazenar todos os nomes diretamente, ocorriam aumento de tamanho e problemas de dados faltantes; isso foi resolvido com a estrutura trie e técnicas de compressão
  • Graças à compressão por trie, foi possível inferir automaticamente com base em padrões comuns e alcançar um banco de dados muito pequeno que cobre mais de 80% dos dados
  • Em situações comuns, mostra mais de 74% de precisão, e para o setor público e contextos que exigem alta precisão é oferecida uma versão strict separada

Contexto do problema

  • Ao exibir nomes próprios em interface islandesa, ocorrem dificuldades devido à declinação (declension)
  • Nomes islandeses mudam de forma conforme 4 casos gramaticais, como nominativo, acusativo, dativo e genitivo
  • Como os bancos de dados costumam guardar nomes em forma nominativa, surgem dificuldades quando outro caso é necessário pelo contexto
  • Usar a forma errada pode soar inautêntico ou estranho para nativos

Coleta e limpeza de dados

  • A Islândia disponibiliza os dados da DIM (Database of Icelandic Morphology), mantidos pela Árnastofnun
  • Os dados de flexão de nomes podem ser processados em CSV no Kristín’s Format (K-format)
  • O conjunto completo da DIM tem 7 milhões de linhas e é excessivamente grande, mas foi possível obter dados de flexão para cerca de 3.600 nomes ao filtrar apenas 4.500 nomes próprios oficialmente aprovados
  • É possível construir um array de formas do nominativo ao genitivo para cada nome

Estrutura básica da biblioteca

  • A implementação inicial começou com a função applyCase, que retorna a forma correta a partir do array de variações por caso de nomes
  • Porém, a carga por array simples era grande, com 30kB comprimidos via gzip
  • Havia a limitação de não suportar nomes não incluídos nos dados

Remoção de duplicidade e extração de padrões

  • Extraíram-se prefixos comuns entre as quatro formas de nomes para guardar apenas o conjunto de sufixos (suffix encoding) de cada um, minimizando duplicação
  • Descobriu-se que muitos nomes seguem o mesmo padrão de flexão

Introdução de trie para combinação de padrões

  • Por meio da estrutura de trie (inserção reversa baseada em sufixos), otimizou-se o mapeamento de valores para grupos de nomes com padrões compartilhados
  • Armazena-se a informação de flexão uma vez apenas para padrões comuns de final de nome (name endings), obtendo alta capacidade de previsão para nomes novos

Compressão e otimização da trie

  • Se o valor for igual em cada folha de uma subárvore, atribui-se esse valor ao nó pai e removem-se os filhos para comprimir a árvore
  • Com isso, o número de nós caiu em até 15,4% e o tamanho foi reduzido para 4.01kB
  • Uma segunda compressão, que funde nós-irmãos folha com valores iguais em um único nó, alcançou 3.27kB

Desempenho e generalização da trie

  • Ao inserir um novo nome, torna-se possível a flexão automática baseada em padrões semelhantes
  • Na prática, em nomes desconhecidos foram observados 74% de flexão correta e 26% de erro; no critério de usuários reais, a taxa de erro ficou em apenas 0,34%
  • Quanto maior a regularidade (regularity) e a abrangência (comprehensiveness) dos dados, maior o efeito positivo em precisão de compressão e inferência automática

Biblioteca real e aplicação

  • O resultado final foi lançado como a biblioteca beygla, que usa trie comprimido
  • É oferecida uma versão de tamanho mínimo (4.46kB) e um módulo strict (15kB) personalizado, mais rigoroso e completo
  • O módulo strict para lugares que exigem 100% de precisão, como documentos públicos, e a versão leve para aplicativos web comuns

Conclusão e possibilidade de expansão

  • A compressão de dados de padrões de flexão linguística com trie pode ser aplicada para automatizar nomes próprios, endereços e outros substantivos em outras línguas flexivas, além do islandês
  • A combinação de dados de alta regularidade com compressão em trie é uma estratégia para maximizar a eficiência de dados e desempenho da automação de flexão

Notas de agradecimento

  • No desenvolvimento do beygla, foram feitos feedbacks de vários especialistas e otimizações
  • A compressão adicional da trie reduziu o tamanho de 3.43kB para 3.27kB

Resumo

  • Este é um exemplo de miniaturização e automação do problema de automação da flexão de nomes islandeses por meio de uma estrutura de dados trie baseada em padrões
  • Oferece insights relevantes como exemplo prático de estratégia de tratamento de dados com trade-off adequado entre tamanho e precisão

Ainda não há comentários.

Ainda não há comentários.