生成随机名称
项目描述
根据美国人口普查数据或您提供的文件生成随机名称。
基本用法
使用censusname最简单的方法是使用generate方法。它根据2000年人口普查中的姓和名分布生成名称。它有一半的概率提供来自female或male列表的姓氏。
import censusname
censusname.generate()
'Jane Smith'
或者,在命令行中运行
python -m censusname
使用name_format参数可以最简单地自定义Censusname。它接受一个包含两个格式化键的字符串:'given'和'surname'(格式应类似于Python的str.format内建函数)。
import censusname
# Generate first names
censusname.generate(nameformat='{given}')
'Linda'
# Generate names in last, first format
censusname.generate(nameformat='{surname}, {given')
'Nguyen, Pamela'
方法和对象
generate
生成随机名称。下面详细说明有效参数。
Censusname
在Censusname对象的默认实例上调用generate方法。Censusname是模块的核心,可以通过自定义格式和自定义名称列表创建实例。
关键字参数:nameformat,namefiles,max_frequencies,formatters,capitalize。
from censusname import Censusname
last_first = Censusname(nameformat='{surname}, {given}')
last_first.generate()
'Lashley, Emily'
Censusname.generate
C = Censusname()
C.generate()
'Michael Fox'
# Add the same middle initial to all names
C.generate(nameformat='{given} J. {surname}')
'Michael J. Fox'
名字的每一部分都是一个关键字参数。默认数据集包括按男女分开的给定名字文件。可以指示模块始终使用某个特定文件。
C.generate(given='female')
'Caroline Dippold'
由于 nameformat 的参数传递给了 Str.format,因此可以使用任何字符串格式化选项,如填充。
C.generate(nameformat='{given:10}', given='male')
'Charles '
在 censusname 中,默认数据集提供全部大写的名字,并且 censusname 将它们改为标题大小写。可以通过 capitalize 参数关闭此功能,该参数适用于 Censusname 和 Censusname.generate。
C.generate(capitalize=False)
'WES REAVES'
# or, create your own Censusname object
from censusname import Censusname
C = Censusname(capitalize=False)
C.generate()
'JOSE PETRIE'
是的,capitalize=False 导致名字大写有点奇怪。false 省略了 str.capitalize,因此原始数据中的默认大写格式得以显示,恰好是全部大写。您可以自定义模块的任意重新格式化方法。请继续阅读!
高级
您可以将自己的名字文件传递给 Censusname 以生成具有任意格式的名字。对于名字的每个部分,可以使用不同的文件集。如果您有按时间、地理或其他变量分解的名字数据,这将很有用。默认情况下,1990年的男性和女性名字数据与2000年的姓氏数据合并。
文件必须有两个字段:name 和 cumulative_frequency。默认情况下,该软件包期望逗号分隔的文件,但您可以通过 csv.DictReader 参数传递参数 csv_args。
cumulative_frequency 字段应根据升序频率计算,并且应在 0 到某个最大值之间 - 请参阅下面对 max_frequencies 的讨论。
默认情况下,名字生成器查看男性和女性名字的单独列表。您可以指定任意分组的名字列表。假设您有两个西班牙省份的名字分布数据。在西班牙,使用两个姓氏:父姓和母姓,所以您有四个姓氏文件,以及男性和女性名字的一般文件。
my_files = {
'given': {
'male': 'given-male.txt',
'female': 'given-female.txt'
},
'paternal': {
'sevilla': 'paternal-sevilla.txt',
'toledo': 'paternal-toledo.txt'
},
'maternal': {
'sevilla': 'maternal-sevilla.txt',
'toledo': 'maternal-toledo.txt'
}
}
# Perhaps you want to specify arguments to csv.DictReader, which will be reading the files
my_csv_args = {
# Any arguments that can be passed to DictReader
}
美国人口普查的名字文件不包含每个名字,只包含约 90% 的人口。考虑到这一点,random_name 可以接受 max_frequencies 参数来给出这些最大值。我们用字典指定这些最大值,其键是文件名。如果您提供了自定义文件但没有 max_frequencies,则将使用 100。 (最大频率为默认文件硬编码。)
# These are made-up numbers. Perhaps you prefer percentages:
maximums = {
'given-male.txt': 89.7,
'maternal-sevilla.txt': 90.4,
# etc
}
# Or, you have a file where frequencies go from 0 to 1:
maximums = {
'given-male.txt': 0.897,
'maternal-sevilla.txt': 0.904,
# etc
}
此外,我们希望在名字中使用标准连词
my_format = '{given} {paternal} y {maternal}'
使用这些示例生成名字
from censusname import Censusname
espana_nombre = Censusname(nameformat=my_format, namefiles=my_files, max_frequencies=maximums, csv_args=my_csv_args)
# Generate a name of the format 'Given Paternal y Maternal'
espana_nombre.generate()
'Luis de Góngora y Argote'
# Use a different format:
espana_nombre.generate(nameformat='{given} {paternal} de {maternal}')
'Pedro López de Ayala'
# Pick a name from the Sevilla files:
espana_nombre.generate(maternal='sevilla', paternal='sevilla')
# Pick a female name from the Toledo files:
# Note that any of the keys in my_files can be used as keyword arguments. The values should be keys from the respective dictionary.
espana_nombre.generate(given='female', maternal='toledo', paternal='toledo')
# By default, names are capitalized (title case).
# Generate a name using given capitalization in the files:
espana_nombre.generate(capitalize=False)
# By default, there's an equal probability of producing a name with a part from the Sevilla or Toledo lists.
# You have to do a little extra to weight that probability.
# Specify an 75% chance of a sevilla name, 25% chance of a toledo name:
province = random.choice(['sevilla'] * 3 + ['toledo'])
espana_nombre.generate(paternal=province, maternal=province)
示例:中间名字
使用内置数据通过随机选择第一个或最后一个名字来伪造中间名字
import censusname
namefiles = censusname.NAMEFILES
# Add a middle name entry to the name files
namefiles['middle'] = {
'last': censusname.SURNAME2000,
'female': censusname.FEMALEFIRST1990,
'male': censusname.MALEFIRST1990
}
middlenames = censusname.Censusname(namefiles, censusname.MAX_FREQUENCIES, '{given} {middle} {surname}')
# Generate a name in the format "given, middle, surname"
# However, this might return unlikely names
middlenames.generate()
'John Mary Smith'
# Generated name will have a male first name and either a male given name or a surname as a middle name
middlenames.generate(given='male', middle=['male', 'last'])
'Charles Michael Brescia'
# Generated name will have a female first name and either a female given name or a surname as a middle name
middlenames.generate(given='female', middle=['female', 'last'])
'Mildred Hoang Hutton'
格式化器
您可以在返回之前对名字的每一部分运行任意的重新格式化方法。默认情况下,该软件包包括一个姓氏格式化器,该格式化器尝试智能地格式化原始名字,如 OHALLORAN(到 O’Halloran)。
您可以使用字典指定格式化器,该字典针对名字的每一部分。格式化器应是一系列方法。
my_formatters = {
'given': [lambda x: x[::-1]], # reverse a string
'surname': [lambda x: "De " + x],
}
cn = Censusname(formatters=my_formatters)
cn.generate()
'ekiM De Morgan'
可以添加到 Censusname.generate 的附加格式化器,它们将在对象中包含的任何格式化器之后运行。
more_formatters = {
'given': [lambda x: x.replace('a', 'b')]
}
cn.generate(formatters=more_formatters)
'nbhtbN De Scardino'
请注意,向 censusname 传递格式化器参数将排除默认姓氏格式化器。尽管如此,保留它也很容易。
import censusname
my_formatters = {
'surname': [censusname.formatters.recapitalize_surnames, custom_fuction]
}
censusname-0.2.2.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 305f40af9e7738e3c3ddb85da16cdaccb09cd5a7f307242519eb6f3ff71f3673 |
|
MD5 | 01e99735f2bb2d2edce9a3634bc69e9f |
|
BLAKE2b-256 | d6257f37fb96480f2780ab069ff5f4c64ed322124a79d5b312a8cf2e94daec3a |
censusname-0.2.2-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | d1d1c27ec8840348a90411e186320181d80ba457e25d20cf9107b75607f8aa67 |
|
MD5 | fba4331d3e0437a1f30a64af4c192c3c |
|
BLAKE2b-256 | 267bf8121aa0d6700ffd9760b0b963a07ba69194418b25649d6f02828eac37e9 |