如何用脚本生成随机中文名

wen 实用脚本 3

本文目录导读:

如何用脚本生成随机中文名

  1. 简单实现(常用字)
  2. 更实用的版本(字数可变、男女名倾向)
  3. 进阶:利用 Unicode 中文字段(无需内置词库)
  4. 推荐:使用成熟库(faker)

下面是一个使用 Python 脚本生成随机中文名的示例,它适用于生成简短、常见的姓名(姓 + 1 或 2 个字的姓名)。

简单实现(常用字)

import random
# 常见姓氏(百家姓前一部分)
surnames = [
    "赵", "钱", "孙", "李", "周", "吴", "郑", "王", "冯", "陈", "褚", "卫",
    "蒋", "沈", "韩", "杨", "朱", "秦", "尤", "许", "何", "吕", "施", "张",
    "孔", "曹", "严", "华", "金", "魏", "陶", "姜", "戚", "谢", "邹", "喻",
    "柏", "水", "窦", "章", "苏", "潘", "葛", "范", "彭", "郎", "鲁", "韦",
    "昌", "马", "苗", "凤", "花", "方", "俞", "任", "袁", "柳", "酆", "鲍",
    "史", "唐", "费", "廉", "岑", "薛", "雷", "贺", "倪", "汤", "滕", "殷",
    "罗", "毕", "郝", "邬", "安", "常", "乐", "于", "时", "傅", "皮", "卞",
    "齐", "康", "伍", "余", "元", "卜", "顾", "孟", "平", "黄", "和", "穆"
]
# 常见名字用字(多为中性、美好寓意)
given_names_pool = [
    "伟", "芳", "娜", "敏", "静", "丽", "强", "磊", "军", "洋",
    "勇", "艳", "杰", "娟", "涛", "明", "超", "秀", "霞", "平",
    "刚", "桂", "英", "华", "慧", "玉", "秀", "文", "辉", "玲",
    "婷", "宇", "鑫", "琳", "浩", "雪", "悦", "轩", "睿", "涵",
    "彤", "琪", "霖", "思", "瑶", "欣", "瑶", "晨", "辰", "希",
    "俊", "美", "毅", "力", "志", "洁", "冰", "波", "涛", "博"
]
def random_name():
    surname = random.choice(surnames)
    # 随机决定名字是单字还是双字(各占50%概率)
    if random.random() < 0.5:
        given = random.choice(given_names_pool)
    else:
        given = random.choice(given_names_pool) + random.choice(given_names_pool)
    return surname + given
# 生成10个测试
for _ in range(10):
    print(random_name())

运行效果示例(每次不同):

王俊
李雪瑶
陈强
张伟
刘浩宇
杨芳
赵明
孙玲
周文轩
吴磊

更实用的版本(字数可变、男女名倾向)

import random
surnames = [
    "赵", "钱", "孙", "李", "周", "吴", "郑", "王", "冯", "陈", "褚", "卫",
    "蒋", "沈", "韩", "杨", "朱", "秦", "尤", "许", "何", "吕", "施", "张",
    "孔", "曹", "严", "华", "金", "魏", "陶", "姜", "戚", "谢", "邹", "喻"
]
# 男性名字常用字
male_given = ["伟", "强", "磊", "军", "勇", "杰", "涛", "明", "超", "辉",
              "刚", "毅", "俊", "博", "浩", "宇", "轩", "睿", "晨", "辰"]
# 女性名字常用字
female_given = ["芳", "娜", "敏", "静", "丽", "艳", "娟", "秀", "霞", "玲",
                "婷", "琳", "雪", "悦", "涵", "彤", "琪", "瑶", "欣", "思"]
def random_name(gender=None):
    """
    :param gender: 'male' 或 'female', 不指定则随机性别
    """
    surname = random.choice(surnames)
    if gender is None:
        gender = random.choice(['male', 'female'])
    pool = male_given if gender == 'male' else female_given
    # 随机名长:1或2个字 (80%双字,20%单字)
    if random.random() < 0.2:
        given = random.choice(pool)
    else:
        given = random.choice(pool) + random.choice(pool)
    return surname + given, gender
# 生成5个男性名
print("男性名:")
for _ in range(5):
    name, _ = random_name('male')
    print(name)
# 生成5个女性名
print("\n女性名:")
for _ in range(5):
    name, _ = random_name('female')
    print(name)

特点

  • 区分性别用字库
  • 双字名占80%,单字名占20%(可调整比例)

进阶:利用 Unicode 中文字段(无需内置词库)

如果不想要固定的姓名字库,可以利用 Unicode 中常用汉字范围(如 4E00-9FFF)中的一部分作为姓氏/名字,但这会产生一些生僻字(可能不像真实人名)。

import random
def random_hanzi(count=1):
    """从U+4E00到U+9FA5的常用汉字中随机取count个字"""
    code_points = [random.randint(0x4E00, 0x9FA5) for _ in range(count)]
    return ''.join(chr(cp) for cp in code_points)
def random_name_unicode():
    surname = random_hanzi(1)
    name_len = random.randint(1, 2)
    given = random_hanzi(name_len)
    return surname + given
for _ in range(5):
    print(random_name_unicode())

注意:这种方法不保证每个字都是常见姓名字,可能会有“忄”“丿”等较少用于人名的汉字,更适合游戏角色或随机测试数据生成。


推荐:使用成熟库(faker)

如果你希望生成更像真人的随机中文名,可以使用 Python 的第三方库 faker,它内置了当地文化数据:

pip install faker
from faker import Faker
fake = Faker('zh_CN')
for _ in range(5):
    print(fake.name())

faker 内部使用了真实的中文姓名分布数据,生成的姓名质量最高(真实感强、无生僻错误字)。

  • 最简便:faker 库。
  • 最可控:自己维护姓名字典 + 随机逻辑(如示例1、2)。
  • 最随机但质量低:Unicode 随机取值(示例3)。

根据你的需求(生成游戏ID、测试数据、还是接近真人的中文名)选择合适的方案。

抱歉,评论功能暂时关闭!