Skip to content
Peter edited this page Nov 4, 2017 · 6 revisions

Lembretes

Cuidado com a análise de prefixos

"Prefixos" das flexões de gênero, dos radicais ou das raízes das palavras, no conjunto de nomes. O principal uso seria na detecção dos nomes formados pela contração de outros nomes.

Exemplos de nomes formados por contração: "ANA + ALICE" = "ANALICE", "MARIA + ANA" = "MARIANA".

Para referência empírica é necessário Criar primeiro tabela de nomes compostos confirmados (requer aplicação de algoritmo aos dados do IBGE). Com pesquisa de raíz talvez seja mais fácil abordar a busca de contrações. Raiz de ANA é AN, busca com concat('AN','ALICE')='ALICE'... Com as raízes dos mais populares (Ana, Maria, José, Pedro, etc.) é possível fazer esse tipo de busca.

Nota: ainda é subjetivo se nomes como REGIANA forem considerados contrações... Visto que "REGIN" (e não "REGI") é que seria raiz de "REGINA", de forma que não se produz "REGIANA" com essa raiz (se produz REGINANA que não existe nem tem REGIANA como homófono).

Raízes ou radicais de nomes: "MARI" como radical de "MARIO" e "MARIA", "REGIN" como radical de REGINA e REGINALDO... Uso do LIKE no SQL mostra que é inviável, exeto se definir limite superior, ou abordar apenas casos com raízes mais longas. Outra opção seria listar radicais comuns na tabela de gr-semanticos.csv.

raiz,nome_grsemantico
an,ANA
an,ANE
an,ANITA
an,ANNA
mari,MARI
mari,MARIA
mari,MARIAH
mari,MARIO
regian,REGIANE
regian,REGIANNE
regin,REGINA
regin,REGINALDO
regin,REGINALDA

Regex (regular expression) das raízes populares encontradas: /^(AN|MARI|REGIN)/. Algoritmo baseado na Regex, pseudo-SQL:

WITH t1 AS ( 
  SELECT nome, replace(regex,nome) AS resto, match(nome) as raiz 
  FROM nomes 
  WHERE regex(nome)
)  SELECT DISTINCT t1.nome as nome_formado, t1.raiz, n.nome 
   FROM nomes n INNER JOIN t1 ON t1.resto=n.nome

Performance e benchmarks

Rever

Clone this wiki locally