阅读 4020

「我的名字是我爸爸用代码算出来的!」

我家的小屁屁再过不久就要出生啦!现在除了准备各种宝宝用品,我们还有一个任务就是起名。

起名这件事挺难的,要好听,不落俗套,还要讲究风水,最好再有个诗经楚辞的出处。

作为程序员的爸比决定自己写一个程序来生成宝宝的名字,可以根据风水和诗词生成一系列名字,在缩小选择范围的同时又可以有足够多的名字供我们选择。

以后别人问我家宝宝名字是怎么来的,宝宝就可以说「我的名字是我爸爸用代码算出来的!」

起名风水

我不是一个迷信的人,风水相关的东西我觉得都是图一乐。依据风水起名主要是起到缩小选择范围的作用,再就是图个心安,希望宝宝健康快乐成长。

既然要做,抱着程序员严谨的态度,就要对风水起名进行一些研究。

生辰八字

根据宝宝出生的时辰,转换成对应的五行,看看是缺了哪一种,用名字去补。

比如五行缺「金」,名字里面就用带金字旁的字来补。

更具体的我也没有深入研究了,因为用生辰来起名的前提是知道宝宝的出生时间。如果想在宝宝出生前把名字取好,我们可以了解一下「五格剖象法」。

五格剖象法

五格剖象法,也叫三才五格,是比较流行的一种取名法,也是很多起名打分应用的依据。它将名字的笔画数拆分为天格、地格、人格、外格、总格。

五格各自包含的意义如下:

天格为根 - 天格乃祖先留下来的,为父母运势,其数理对个人影响不大。

人格为苗 - 又称「主运」,是整个姓名的中心点,人一生的命运之好坏主要由此格推断。

地格为花 - 又称为「前运」,主 38 岁以前,主管人中年以前的活动力。

外格为叶 - 主管命运之灵力,一般指贵人或外来助力。为一个人外界和谐与否,可由此格看出。

总格为果 - 主中年至晚年的命运,又称后运,主 38 岁以后。

它们计算方法是这样的:

天格:姓的笔画数 + 1

人格:姓的笔画数 + 名第一字的笔画数

地格:名字的笔画数相加

总格:姓名笔画数的总和

外格:总格 - 人格 + 1 

这里的笔画数是按康熙字典里的笔画,也就是要按繁体字计算。此外还有一些部首会影响笔画数计算:

(1)“氵”三点水算四画。如:清、洁等;(2)“扌”手旁算四画。如挑、拨等;(3)“月”算肉旁六画。如服、肪、脉等;(4)“艹”算六画。如英、苹、蓉等;(5)“辶”算七画。如达、迈、迅、过等;(6)左“阝”算八画,阳、阴、陈、陆等;(7)右“卩”算七画,如即、邓、邝等;(8)“王”算五画,如琬、珀、玫、瑰等;(9)礻(示),以示字计为五画;(10)衤(衣),以衣字计为六画;(11)“犭”算四画。如狄、猛、独等;(12)忄(心),竖心旁,以心字计为四画;(13)名字中有“一、二、三、四、五、六、七、八、九、十”的字要分别按1、2、3、4、5、6、7、8、9、10画。

最后算出来的五格笔画数,被划分为吉、半吉、凶三组:

属于吉的数字:1、3、5、8、11、13、15、16、21、23、24、25、29、31、32、33、35、37、38、39、41、45、47、48、52、57、63、65、67、68、81

属于半吉的数字:6、7、17、18、27、30、40、51、52、55、61、75

属于凶的数字:2、4、9、10、12、14、19、20、22、26、28、34、36、42、43、44、46、49、50、53、54、56、58、59、60、62、64、66、69、70、71、72、73、74、76、77、78、79、80

老爸给我厚厚两本起名学的书,其实总结出来就是上面这些内容了。

有了这些就可以开始写代码了,程序第一步要执行的,就是根据姓氏,计算出五格都是吉的名字笔画组合。但这样算出来的组合会比较多,于是我又用「三才配置」进行了一次过滤。

三才配置

五行
数字1‧23‧45‧67‧89‧0

将天格、地格、人格个位数按照上面的规则转为五行,得到的就是三才配置。

五行的相生相克关系如下:

木生火 火生土 土生金 金生水 水生木

木克土 土克水 水克火 火克金 金克木

我在程序中是根据三才配置凶吉表进行过滤的。经过三才五格的计算后,我们得到了适合的名字笔画数组合。接下来就是生成名字了。

女诗经,男楚辞,文论语,武周易

起名自古有「女诗经,男楚辞,文论语,武周易」之说,我也希望给宝宝起一个好听有诗意的名字。

在 Github 上找到了这几部作品的库,根据笔画数组合,在诗句里提取出对应的字。

但感觉这几部作品的数据量还不太够,我还增加了海量的唐诗宋词,但也由于唐诗宋词数据量大,生成名字的时间会比较久。

最后根据人名库,过滤掉一些明显不合适的名字,就完成啦。

查看名字配置和来源

写完起名程序之后,我又做了根据名字,查看三才五格配置以及名字来源的功能。

所以除了用来起名,大家也可以用它来看一下自己的名字在哪部诗集里被提到,三才五格配置看看就好了。

程序是开源的,下面说一下它怎么用。

使用方法

项目地址:github.com/NanBox/PiPi…

1. 安装第三方库

安装简繁体转换库 OpenCC:

pip install opencc
复制代码

2. 配置参数

打开 config.py,进行参数配置:

# 选择词库
# 0: "默认", 1: "诗经", 2: "楚辞", 3: "论语",
# 4: "周易", 5: "唐诗", 6: "宋诗", 7: "宋词"
name_source = 0

# 姓,仅支持单姓
last_name = "张"

# 不想要的字,结果中不会出现这些字
dislike_words = list("")

# 最小笔画数
min_stroke_count = 3

# 最大笔画数
max_stroke_count = 25

# 允许使用中吉,开启后将生成包含中吉配置的名字,生成的名字会更多
allow_general = False

# 是否筛选名字,仅输出名字库中存在的名字,可以过滤明显不合适的名字
name_validate = True

# 是否筛选性别,男/女,空则不筛选,仅当开启名字筛选时有效
gender = ""

##########################################################

# 填入姓名,查看三才五格配置,仅支持单姓复名
# 如果要起名,请保持该值为空
check_name = ""

# 是否显示名字来源
check_name_resource = True
复制代码

3. 运行查看结果

运行 main.py 后,结果会生成在 name.text 文件,比如:

张哲维    男  哲  维  10 14 「哲」人之愚,亦「維」斯戾。無競「維」人,四方其訓之。有覺德行,四國順之。
张家宁    男  家  宁  10 14 有飶其香。邦「家」之光。有椒其馨,胡考之「寧」。匪且有且,匪今斯今,振古如茲。
张怀元    男  怀  元  20 4  翩彼飛鴞,集於泮林。食我桑黮,「懷」我好音。憬彼淮夷,來獻其琛。「元」龜象齒,大賂南金。
张恒寿    男  恒  寿  10 14 如月之「恆」,如日之升。如南山之「壽」,不騫不崩。如松柏之茂,無不爾或承。
复制代码

可以将结果粘贴在 Excel 表格,根据字或笔画进行筛选。

如果是查看名字配置和来源,结果会直接打印出来,比如:

周杰伦

周杰倫 8 8 10

天格  9
人格  16  大吉
地格  18  大吉
总格  26  凶
外格  11  大吉

三才  水土金 中吉

唐诗 自蜀奉册命往朔方途中呈韦左相文部房尚书门下崔侍郎 贾至
谁谓三「杰」才,功业独殊「伦」。

宋诗 答赵温甫见谢茶瓯韵 彭汝砺
朅来东江欲学古,喜听英「杰」参吾「伦」。
复制代码

感谢

感谢以下优秀的开源库,让我能够很方便的获取和处理名字:

最后

最后再说明一下,这个项目的目的是帮助我们给宝宝起名。如果查看名字配置发现不是很好也没关系,就是图一乐。

无论是起名还是查看配置,目前仅支持单姓复名的名字,也就是一个字的姓和两个字的名。如果考虑复姓或者单名,算法会有些不一样。但主要是个人没有这个需求,所以就没做。如果大家有这个需求以后会考虑加上。以后还会考虑增加生辰八字的计算。

欢迎大家来提 issue,喜欢的话可以点个 star。

最后祝所有宝宝都健康快乐成长!

项目地址:github.com/NanBox/PiPi…