データベース テスト データ、特に人の名前を含むテーブル列を生成しようとしています。名前ベースの検索に関して索引付けがどのように機能するかを示す良い指標を得るために、現実世界の名前とその真の頻度分布にできるだけ近づけたいと考えています。
理想的には、名前の後に名前ごとに 1 つの頻度値 (または同等の確率) が続く、自由に利用できるデータ ファイルを探しています。
アングロサクソン系の名前でも問題ありませんが、他の文化に由来する名前も役に立ちます。
要件に適合する米国の国勢調査データをいくつか見つけました。唯一の注意点は、少なくとも 100 回出現する名前のみをリストすることです...
べき乗則分布曲線も示すこのブログエントリで見つけました
これに加えて、ルーレット ホイールの選択を使用してリストからサンプリングできます。たとえば (テストされていません)。
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.");
}
オックスフォード大学は、ftp: //ftp.ox.ac.uk/pub/wordlists/names/の圧縮された .gz ファイルとして、公開 FTP サイトで単語リストを提供しています 。