生成随机名称

censusname的Python项目详细描述


根据美国人口普查数据或您 提供。

基本用途

使用censusname的最简单方法是使用generate方法。它 根据2000年的姓和名分布生成名称 人口普查。它有50/50的机会提供 femalemale列表。

importcensusnamecensusname.generate()'Jane Smith'

或者,在命令行上运行:

python -m censusname

自定义censusname的最简单方法是使用name_格式 参数它接受具有两个格式键的字符串:“给定”和 “姓氏”(从python的 str.format 内置)。

importcensusname# Generate first namescensusname.generate(nameformat='{given}')'Linda'# Generate names in last, first formatcensusname.generate(nameformat='{surname}, {given')'Nguyen, Pamela'

方法和对象

generate

生成随机名称。有关有效参数的详细信息,请参见下文。

Censusname

Censusname对象。Censusname是模块的核心,并且 可以使用自定义格式和自定义列表创建实例 名字。

关键字参数:nameformatnamefilesmax_frequenciesformatterscapitalize

fromcensusnameimportCensusnamelast_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 namesC.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将它们更改为标题大小写。可以用 大写参数,对CensusnameCensusname.generate

C.generate(capitalize=False)'WES REAVES'# or, create your own Censusname objectfromcensusnameimportCensusnameC=Censusname(capitalize=False)C.generate()'JOSE PETRIE'

是的,capitalize=False产生大写有点奇怪 名字。错误的省略 str.capitalize, 因此,原始数据的默认大小写将通过 碰巧都是大写的。您可以任意自定义模块 重新格式化方法。继续读!

高级

您可以将自己的名称文件传递给Censusname以生成名称 带有任意格式。对于名称的每个部分,不同的集合 可以使用个文件。如果名称数据已损坏,则这可能很有用 按时间、地理或任何其他变量下降。默认情况下,男性和 1990年的女性姓氏数据与1990年的姓氏数据相结合 2000年。

文件必须有两个字段:namecumulative_frequency。由 默认情况下,包需要逗号分隔的文件,购买时可以传入 csv.DictReader参数为参数csv_args

cumulative_frequency字段的计算应基于 升序频率,应该是介于0到一些之间的数字 最大值-参见下面的{TT11} $的讨论。

默认情况下,名称生成器查看男性和 女性名字。可以为任意名称分组指定列表。 假设您有西班牙两个省的名称分布数据。在 西班牙有两个姓氏:父姓和母姓 共有四个姓氏档案,以及男性和 女性名字。

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 filesmy_csv_args={# Any arguments that can be passed to DictReader}

美国的人口普查档案并没有包含所有的名字,只有那些 覆盖了大约90%的人口。有鉴于此,random_name 可以使用一个^ {t11} $参数来给出这些最大值。我们 用关键字为文件名的字典指定这些最大值。 如果您提供自定义文件但没有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}'

使用以下示例生成名称:

fromcensusnameimportCensusnameespana_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)

示例:中间名

使用内置数据通过随机选择 名字或姓氏:

importcensusnamenamefiles=censusname.NAMEFILES# Add a middle name entry to the name filesnamefiles['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 namesmiddlenames.generate()'John Mary Smith'# Generated name will have a male first name and either a male given name or a surname as a middle namemiddlenames.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 namemiddlenames.generate(given='female',middle=['female','last'])'Mildred Hoang Hutton'

格式化程序

可以指定在每个部件上运行的任意重新格式化方法。 在他们被归还之前。默认情况下,包包括 尝试智能格式化原始名称的姓氏格式化程序,如 奥哈洛兰(对奥哈洛兰)。

您可以使用dict指定格式化程序,该dict针对名称的每个部分。 格式化程序应该是方法列表。

my_formatters={'given':[lambdax:x[::-1]],# reverse a string'surname':[lambdax:"De "+x],}cn=Censusname(formatters=my_formatters)cn.generate()'ekiM De Morgan'

可以将其他格式化程序添加到Censusname.generate,它们将 除了对象中包含的任何格式化程序之外,还将运行。

more_formatters={'given':[lambdax:x.replace('a','b')]}cn.generate(formatters=more_formatters)'nbhtbN De Scardino'

请注意,将格式化程序参数传递给censusname将排除 默认的姓氏格式化程序。不过,保存起来很容易:

importcensusnamemy_formatters={'surname':[censusname.formatters.recapitalize_surnames,custom_fuction]}

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Slick2D鼠标单击在Windows 10中不起作用   java在多线程中使用titan graph的最佳实践是什么?   java以编程方式访问清单。主类MF   安卓区分对JavaSpring后端的web和本机应用程序请求   java StringTemplate getInstanceOf返回null   java InvalidDataAccessApiUsageException:未找到线程绑定请求:   编码在Java中只对查询键和参数进行url编码的最佳方法是什么?   java如何使用mavenjarplugin从自定义jar文件中排除METAINF文件夹   Java:引发异常后程序未崩溃   安卓如何通过文件名找到/res/raw文件夹中文件的资源id?   html Selenium Java与HTML5的拖放   java是否可以在不同的对象中使用单个输入?   java谷歌应用引擎cron作业后端   java如何将列表项的信息传递给新的列表活动?   java是否可以要求junit在进行测试之前运行一个命令?   在异常中提供附加信息的java可持续方法?   java可编辑JComboBox:使用快捷方式启动操作时获取当前值   java运行时错误“名称错误:applicationarbre/Main”   继承java如何获取超类方法来修改子类字段