Algum bom banco de dados de sobrenomes?
Pergunta
Estou tentando gerar alguns dados de teste de banco de dados, especificamente colunas de tabelas contendo nomes de pessoas.A fim de obter uma boa indicação de quão bem a indexação funciona em relação às pesquisas baseadas em nomes, desejo chegar o mais próximo possível dos nomes do mundo real e sua verdadeira distribuição de frequência, por exemplo,muitos nomes diferentes com frequências distribuídas em alguma distribuição de lei de potência.
Idealmente, estou procurando um arquivo de dados disponível gratuitamente com nomes seguidos por um único valor de frequência (ou, equivalentemente, uma probabilidade) por nome.
Nomes baseados em anglo-saxões seriam adequados, embora nomes de outras culturas também sejam úteis.
Solução
Encontrei alguns dados do censo dos EUA que atendem aos requisitos.A única ressalva é que ele lista apenas nomes que ocorrem pelo menos 100 vezes ...
Encontrado nesta entrada de blog que também mostra a curva de distribuição da lei de potência
Além disso, você pode obter uma amostra da lista usando a seleção da roda de roleta, por exemplo,(não testado)
struct NameEntry
{
public string _name;
public int _frequency;
}
int _frequencyTotal; // Precalculate this.
public string SampleName(NameEntry[] nameEntryArr, Random rng)
{
// Throw the roulette ball.
int throwValue = rng.NextDouble() * frequencyTotal;
int accumulator = 0.0;
for(int i=0; i<nameEntryArr.Length; i++)
{
accumulator += nameEntryArr[i]._frequency;
if(throwValue <= accumulator) {
return nameEntryArr[i]._name;
}
}
// If we get here then we have an array of zero fequencies.
throw new ApplicationException("Invalid operation. No non-zero frequencies to select.");
}
Outras dicas
A Oxford University fornece listas de palavras em seu site de FTP público como arquivos .gz compactados em ftp://ftp.ox.ac.uk/pub/wordlists/names/ .
Você também pode verificar o projeto jFairy.É escrito em Java e produz dados falsos (como nomes de exemplo). http://codearte.github.io/jfairy/
Fairy fairy = Fairy.create();
Person person = fairy.person();
System.out.println(person.firstName()); // Chloe
System.out.println(person.lastName()); // Barker
System.out.println(person.fullName()); // Chloe Barker