每个人在生活中都会遇到一件大事,在它出现之前他们不会在意,但是一旦来了,他们就会发现它是极其重要的,并且需要在短时间内完成做出的重大决定是给刚出生的婴儿取什么名字。因为孩子出生后两周内需要取名(需要办理出生证),估计很多人和我一样,一开始很慌张。后来才知道不是随便的事,怎么想都不合适,于是到处查字典,上网,看唐诗宋词,诗经,甚至武侠小说。然而想了很久的名字,却经常遭到家人的反对,比如不顺畅,同名同口音的亲戚等等问题,于是就陷入了一个反复的寻找和否定的循环,越来越乱。每个人的一生都会遇到一件事,在它发生之前他们不会在意,但是一旦来了,就会发现它极其重要,需要在短时间内做出一个重大的决定,那就是给他们刚出生的婴儿起个名字。因为孩子出生后两周内需要取名(需要办理出生证),估计很多人和我一样,一开始很慌张。后来才知道不是随便的事,怎么想都不合适,于是到处查字典,上网,看唐诗宋词,诗经,甚至武侠小说。然而想了很久的名字,却经常遭到家人的反对,比如不顺畅,同名同口音的亲戚等等问题,于是就陷入了一个反复的寻找和否定的循环,越来越乱。于是我们又回到网上各种搜索,在网上找到了很多诸如《男孩好听的宝宝名字大全》之类的文章。并且有相当多的网站或应用程序用于测试名称。输入名称可以给出八个字符或五个格子的分数。这些网站或APP的名字很少,或者字数有限等不能满足我们的需求,或者开始收费,直到***才找到有用的。于是想做这样一个程序:主要功能是提供批名参考,结合宝宝生辰八字算出来;名字库我可以自己扩充,比如我在网上搜到一批诗经好听的名字,想看效果的可以加进去用;可以限制名字中的字词使用,比如有的家谱有限制,本辈是“郭”,名字中必须有“郭”字;名字列表可以给出一个分数,方便倒序后从高分到低分看名字;这样,你就可以得到一个符合你孩子出生日期、你的家谱限制、你的喜好的名字列表,并且这个列表已经给出了分数供参考,并以此为基础,我们可以一一琢磨找到我们喜欢的名字。当然,如果你有新的想法,可以随时将新的名字添加到字典中重新计算。程序代码结构代码介绍:/chinese-name-score代码根目录/chinese-name-score/main代码目录/chinese-name-score/main/dicts字典文件目录/chinese-name-score/main/dicts/names_boys_double.txt字典文件,双字名男名/chinese-name-score/main/dicts/names_boys_single.txt字典文件,单字名男名/chinese-name-score/main/dicts/names_girls_single.txt字典文件,girls/chinese-name-score/main/dicts/names_grils_double.txt字典文件的双字名,girls单字名/chinese-name-score/main/outputs输出数据目录/chinese-name-score/main/outputs/names_girls_source_wxy.txt输出示例文件/chinese-name-score/main/scripts一些预处理字典文件的脚本/chinese-name-score/main/scripts/unique_file_lines.py设置字典文件并编辑字典中的名字重新加载并删除空行/chinese-name-score/main/sys_config.py系统conf程序的配置,包括爬取获取目标网址,字典文件路径/chinese-name-score/main/user_config.py程序的用户配置,包括设置年月日时分,/chinese-name-score/main/get_name_score.py程序的性别等。代码使用方法:如果没有修饰符,找到字典文件names_boys_double.txt和names_grils_double.txt,可以在这里找到添加一些你找到的名字的列表,按行拆分并添加到***中;如果有符合条件的词,查找字典文件names_boys_single.txt和names_girls_single.txt,在这里添加你喜欢的单字列表,分行添加到***中;打开user_config.py,进行配置,配置项见下一节;运行脚本get_name_score.py在outputs目录下,查看自己的输出文件,可以复制到Excel,进行排序等操作;程序配置入口程序配置如下:Python123456789101112131415161718192021222324252627282930#coding:GB18030"""这里写配置"""setting={}#限定符,如果配置了值,则使用分词词典,否则使用多分词词典setting["limit_world"]="country"#姓氏设置["name_prefix"]="李"#性别,取值为男或女setting["sex"]="male"#省份设置["area_province"]="北京"#城市设置["area_region"]="海淀"#出生公历calendaryearsetting['year']="2017"#公历出生月份setting['month']="1"#公历出生日setting['day']="11"#公历出生时辰setting['hour']="11"#公历出生分钟setting['minute']="11"#结果输出文件名setting['output_fname']="names_girls_source_xxx.txt"根据配置项setting["limit_world"],系统自动判断使用单字词典还是多字词典:如果设置了此项,比如等于“国”,那么程序会结合所有的单个字符进入名称进行计算,例如国豪和好国的名字都会被计算;如果不设置此项并保留空字符串,则程序将只读取th*_double.txt的双词词典程序原理这是一个简单的爬虫可以打开http://life.httpcn.com/xingming.asp网站查看,这是一个POST表单,填写需要的参数,点击提交,会打开一个结果页面,结果页面底部包含星座得分和五分。如果想要得到分数,需要做两件事,一是爬虫自动提交表单得到结果页面;另一种是从结果页面中提取分数;首先,很简单,urllib2可以实现(代码在/chinese-name-score/main/get_name_score.py):Python123post_data=urllib.urlencode(params)req=urllib2.urlopen(sys_config.REQUEST_URL,post_data)content=req.read()其中params是一个参数dict,使用这种方式POST提交数据,然后从content中获取结果数据。params的参数设置如下:python1234567891011121314151617181920212223params={}#日期类型,0表示公历,1表示农历params['data_type']="0"params['year']="%s"%str(user_config.setting["year"])params['month']="%s"%str(user_config.setting[“月”])params['day']="%s"%str(user_config.setting["day"])params['hour']="%s"%str(user_config.setting["hour"])params['minute']="%s"%str(user_config.setting["minute"])params['pid']="%s"%str(user_config.setting["area_province"])params['cid']="%s"%str(user_config.setting["area_region"])#五个元素优先,0表示自动解析,1表示自定义神params['wxxy']="0"params['xing']="%s"%(user_config.setting["name_prefix"])params['ming']=name_postfix#表示女性,如果user_config.setting为1则表示男性["sex"]=="male":params['sex']="1"else:params['sex']="0"params['act']="提交"params['isbz']="1"第二件事就是从网页中提取需要的分数,我们可以使用BeautifulSoup4来实现,它的语法也很简单:Python12345678910111213soup=BeautifulSoup(content,'html.parser',from_encoding="GB18030")full_name=get_full_name(name_postfix)#printsoup.find(string=re.compile(u"Namefive-gridscore"))fornodeinsoup.find_all("div",class_="chaxun_b"):node_cont=node.get_text()ifu'namefive-gridscore'innode_cont:name_wuge=node.find(string=re.compile(u"namefive-gridscore"))result_data['wuge_score']=name_wuge.next_sibling.b.get_text()ifu'baziscore'innode_cont:name_wuge=node.find(string=re.compile(u"八字分数"))result_data['bazi_score']=name_wuge.next_sibling.b.get_text()通过该方法解析HTML,提取八字五格的分数运行结果示例1234567891011121/1287李国金姓名八字分=61.5姓名五字分=78.6总分=140.12/1287李国铁姓名八字分=61名字五字分=89.7总分=150.73/1287李国靖名字分=21五字分=81.6总分=102.64/1287李民国名字分=21名字五字分=90.3总分=111.35/1287李柔国姓名分=64姓名五字分=78.3总分=142.36/1287李国靖姓名八字分=21姓名五字分=89.8总分=110.87/1287李国弟姓名八字分=22名字五字分=87.2总分=109.28/1287李国登八字分=21名字五字分=81.6总分=102.69/1287李略国名字八字分=21名字五字分=83.7总分=104.710/1287李国田名字八字分=21名字五格分=总分81.6分数=102.611/1287李国田名字八字分=22名字五格分=83.7总分=105.712/1287李国田名字八字分=22名字五格分=93.7总分=115.7有了这些分数,我们可以对它们进行排序,这是一个非常有用的参考。友情提醒,分数与很多因素有关,比如出生时间、限制字、限制字笔划等因素。这些条件决定了一些名字不会得到高分。不要受这个影响,找出分数比较高的就可以了;目前该程序只能抓取一个网站的内容。地址为http://life.httpcn.com/xingming.asp此榜单仅供参考。我读过一些文章。历史上很多名人的评价很低,但都取得了很大的成就,名字确实有一定的影响力,但有时朗朗上口才是最好的;从这个列表中选出一个名字后,可以在百度、人人网等上查一下,以防某些负数的人同名,或者这个名字的人太多;八字谱是中国传承的,五字谱是日本人的近代发明。有时候也可以试试西方的星座命名法,奇怪的是八字和五分的分数不一样。网站评分差异很大,说明这个东西仅供参考;本文代码已上传至github:https://github.com/peiss/chinese-name-score本文地址:http://www.crazyant.net/2076.html,转载请注明出处转载。
