怎样借助Python爬虫给宝宝起个好名字

640?wx_fmt=gif


Beginning

每个人一生中都会遇到一件事情,在事情出现之前不会关心,但是事情一旦来临就发现它极其重要,并且需要在很短的时间内做出重大决定,那就是给自己的新生宝宝起个名字。


因为要在孩子出生后两周内起个名字(需要办理出生证明了),估计很多人都像我一样,刚开始是很慌乱的,虽然感觉汉字非常的多随便找个字做名字都行,后来才发现真不是随便的事情,怎么想都发现不合适,于是到处翻词典、网上搜、翻唐诗宋词、诗经、甚至武侠小说,然而想了很久得到的名字,往往却受到家属的意见和反对,比如不顺口、和亲戚重名重音等问题,这样就陷入了重复寻找和否定的循环,越来越混乱。



于是我们再次回到网上各种搜索,找到很多网上给出的“男宝宝好听的名字大全”之类的文章,这些文章一下子给出几百上千个名字,看的眼花缭乱没法使用。而有不少的测名字的网站或者APP,输入名字能给出八字或者五格的评分,这样的功能感觉还挺好的能给个参考,然而要么我们需要一个个名字的输入进行测试、要么这些网站或者APP自身的名字很少、要么不能满足我们的需求比如限定字、要么就开始收费,到最后也找不到一个好用的。


于是我想做这么一个程序:


  1. 主要的功能,是给出批量名字提供参考,这些名字是结合宝宝的生辰八字算出来的;

  2. 自己可以扩充名字库,比如网上发现了一批诗经里的好名字,想看看怎么样,添加进去就能用;

  3. 可以限定名字的使用字,比如有的家族谱有限定,当前是“国”字辈,名字中必须有“国”字;

  4. 名字列表可以给出评分,这样倒排后就可以从高分往低分来看名字;


通过这种方式可以得到一份符合自己孩子生辰八字、自己的家谱限制、以及自己喜好的名字列表,并且该列表已经给出了分数用于参考,以此为基准我们可以挨个琢磨找出心仪的名字。当然如果有新的想法,随时可以把新的名字添加到词库里面,进行重新计算。


程序的代码结构



640?wx_fmt=png


代码介绍:


/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 词典文件,女孩的双字名字

/chinese-name-score/main/dicts/names_grils_double.txt 词典文件,女孩的单字名字

/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 程序的系统配置,包含爬取得目标URL、词典文件路径

/chinese-name-score/main/user_config.py 程序的用户配置,包括宝宝的年月日时分性别等设定

/chinese-name-score/main/get_name_score.py 程序的运行入口


使用代码的方法:


1如果没有限定字,就找到词典文件names_boys_double.txt和names_grils_double.txt,可以在这里添加自己找到的一些名字列表,按行分割添加在最后即可;

2如果有限定字,就找到词典文件names_boys_single.txt和names_girls_single.txt,在这里添加自己预先中意的单个字列表,按行分割添加在最后即可;

3打开user_config.py,进行配置,配置项见下一节;

4运行脚本get_name_score.py

5在outputs目录中,查看自己的产出文件,可以复制到Excel,进行排序等操作;


程序的配置入口


程序的配置如下:

640?wx_fmt=png


根据配置项setting[“limit_world”],系统自动来决定选用单字词典还是多字词典:


如果设置了该项,比如等于“国”,那么程序会组合所有的单字为名字用于计算,比如国浩和浩国两个名字都会计算;

如果不设置该项,保持空字符串,则程序只会读取*_double.txt的双字词典


程序的原理


这是一个简单的爬虫。大家可以打开http://life.httpcn.com/xingming.asp网站查看,这是一个POST表单,填写需要的参数,点提交,就会打开一个结果页面,结果页面的最下方包含了八字分数和五格分数。


如果想得到分数,就需要做两件事情,一是爬虫自动提交表单,获取结果页面;二是从结果页面提取分数;


对于第一件事情,很简单,urllib2即可实现(代码在/chinese-name-score/main/get_name_score.py):


640?wx_fmt=png


这里的params是个参数dict,使用这种方式,就进行了POST带数据的提交,然后从content得到了结果数据。


params的参数设定如下:


640?wx_fmt=png


第二件事情,就是从网页中提取需要的分数,我们可以使用BeautifulSoup4来实现,其语法也很简单:


640?wx_fmt=png


通过该方法,就能对HTML解析,提取八字和五格的分数。


运行结果事例


640?wx_fmt=png


有了这些分数,我们就可以进行排序,是一个很实用的参考资料。


友情提示


1、分数跟很多因素有关,比如出生时刻、已经限定的字、限定字的笔画等因素,这些条件决定了有些名字不会分数高,不要受此影响,找出相对分数高的就可以了;

2、目前程序只能抓取一个网站的内容,地址是http://life.httpcn.com/xingming.asp

3、本列表仅供参考,看过一些文章,历史上很多名人伟人,姓名八字评分都非常低但是都建功立业,名字确实会有些影响但有时候朗朗上口就是最好的;

4、从本列表中选取名字之后,可以在百度、人人网等地方查查,以防有些负面的人重名、或者起这个名字的人太多了烂大街;

5、八字分数是中国传承,五格分数是日本人近代发明的,有时候也可以试试西方的星座起名法,并且奇怪的是八字和五个分数不同网站打分相差很大,更说明了这东西只供参考;


本文的代码已上传到github:

https://github.com/peiss/chinese-name-score


来源:

http://www.crazyant.net/2076.html

文章版权归原作者所有,转载仅供学习使用,不用于任何商业用途,如有侵权请留言联系删除,感谢合作。


数据与算法之美

用数据解决不可能


640?wx_fmt=jpeg


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/303322.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CAP-分布式事务的解决方案

CAP 是一个基于 .NET Standard 的 C# 库,它是一种处理分布式事务的解决方案,同样具有 EventBus 的功能,它具有轻量级、易使用、高性能等特点。https://github.com/dotnetcore/CAP在我们构建 SOA 或者 微服务系统的过程中,我们通常…

php 初始二维数组长度,php二维数组排序与默认自然排序的方法介绍

php二维数组排序函数,默认自然排序,即sort排序。这里可以指定按二维数组中的某个值进行多种方法排序,具体看下面的程序注释。 代码如下:/*** function 二维数组自然排序* author www.phpernote.com* param array $array 需要排序的数组(二维)…

做操作系统的公司,为什么不能把系统安全做好?

易用和安全,从来都是一对矛盾,过分考虑方便用户操作,就很容易带来系统隐患。向上兼容也会带来系统的复杂性,复杂的系统漏洞一定多。对微软来说,它的每一个版本,都需要考虑向下兼容,比如Win95是3…

我是怎么用机器学习技术找到女票的

机器学习在我们生活中的用处有多大,就不用我们多说了,大到医疗诊断,小到手机应用,机器学习都应用的风风火火。但是用机器学习帮自己在学校找对象,你听说过吗?最近滑铁卢大学一位叫 Bai Li 的留学生(李白?应是中国同胞…

.Net5 WPF快速入门系列教程

一、概要在工作中大家会遇到需要学习新的技术或者临时被抽调到新的项目当中进行开发。通常这样的情况比较紧急没有那么多的时间去看书学习。所以这里向wpf技术栈的开发者分享一套wpf教程,基于.net5框架进行开发本系列每一期视频长度平均在15分钟左右,并利…

php 重定向数据不丢失,PHP重定向如何实现数据不丢失?

PHP重定向如何实现数据不丢失?首先获取要保存的数据;$data [username > guanhuicoder,redirect_url > ./index.phpemail > guanhuicodercode.com];然后将数据转为JSON字符串,并将其储存在Session中;$data [username &g…

数据“被”覆盖有假象,SQL数据库恢复终极绝招(数据恢复高级技术)

很多数据恢复工程师包括一些数据恢复技术爱好者经常会问同样一个问题:“数据一旦被覆盖了,还能不能恢复呀?我听说国外能恢复被覆盖以后的数据,据说只要是覆盖操作在7次以内,都能恢复出来,国内有没有这种技术…

北大教授郑也夫斗胆谈了7个天大的问题(非常狠,也很现实)

我是一个小人物,今天斗胆谈一个天大的问题——中国教育。中国教育是一个天大的问题,不是说我们有多大的本领把它办得多么好,而是我们居然可以把它办得这样糟,这是一个很沉痛的话题。——北大教授、社会学家郑也夫1不输在起跑线&am…

.NET 6 Preview 3 中 ASP.NET Core 的更新和改进

原文:bit.ly/2Qb56NP作者:Daniel Roth译者:精致码农-王亮.NET 6 预览版 3 现已推出,其中包括许多对新的 ASP.NET Core 改进。以下是本次预览版的新内容:更小的 SignalR、Blazor Server、MessagePack 脚本文件启用 Redi…

php 图片消除锯齿,ps如何消除边缘锯齿

PS消除边缘锯齿的方法:打开图片选择魔棒工具,在窗口中解锁图层然后将鼠标移动到背景区域,左键单击它再按删除键,然后再右键点击人像,选择羽化,将羽化半径设置为4,点击确定后按删除键&#xff0c…

构建根文件系统(2)Busybox init 进程

讲init进程的启动过程从/etc/inittab出发。 内核启动init进程时已经打开/dev/console设备作为控制台,一般情况下Busybox init程序就使用/dev/console, 如果内核启动init进程的同时设置了环境变量CONSOLE或console,则使用环境变量所指定的设备…

C#如何在Windows中操作IIS设置FTP服务器

什么是FTPFTP(File Transfer Protocol)是TCP/IP网络上两台计算机传送文件的协议,使得主机间可以共享文件.可以将 Internet 信息服务 (IIS) 配置为作为 FTP 服务器来运行。 这样,其他计算机便可以连接到服务器并将文件复制到服务器或者从服务器复制文件。…

这是一份编程宝典,请查收!

最近,小编一直在整理有关编程的书籍,有Android、C、Java、PHP、木马、算法等类型的书籍。现在,小编准备将这些资料免费分享给大家!Android应用开发入门教程(经典版)易学CC语言解惑HTML入门教程Java解惑&…

php备份和恢复源码,PHP数据库备份还原类

php代码<?php /*** 数据库备份还原类* author xialeistudio* date 2014-03-17* Class DatabaseTool*/class DatabaseTool{private $handler;private $config array(host > localhost,port > 3306,user > root,password > ,database > test,charset > ut…

2011年Android手机用户购买行为研究报告

http://mobile.51cto.com/hot-292153.htm转载于:https://blog.51cto.com/jueshishenhua/670081

以IP段作为监听地址

在写Socket通讯服务的时候一般需要Listen某个IP地址端口&#xff0c;但这样比较麻烦的就是部署后需要配置相关IP地址信息&#xff1b;虽然可以监听Any所有地址&#xff0c;但这种对于私有的网络服务来说并不安全。为了在发布的时候节省一些配置工作所以才想到以IP段作为监听地址…

支付宝 统一支付 php,支付宝APP支付 统一下单 php服务端 tp5

{$data input(‘post.‘);Loader::import(‘/alipay/aop/AopClient‘,EXTEND_PATH);$aop new \AopClient();$aop->appId config("alipay_app_id");$aop->rsaPrivateKey config(‘alipay_private_key‘);$aop->alipayrsaPublicKey config(‘alipay_publ…

近期资料分享汇总,还不快来看看你漏了哪份没拿?

相信&#xff0c;一直关注着我们的同学们都知道&#xff0c;小思妹分享了好多好多的资料给大家。为了方便新来的同学自取&#xff0c;小思妹又重新整理了一遍&#xff0c;直接点以下标题即可跳转&#xff01;这是我见过的最全的训练数据集&#xff0c;没有之一&#xff01;送你…

WebView 访问 url asset sd 网页

引用&#xff1a;http://www.oschina.net/code/snippet_54100_6227 [代码] [Java]代码 01//打开本包内asset目录下的index.html文件02 03wView.loadUrl(" file:///android_asset/index.html "); 04 05//打开本地sd卡内的index.html文件06 07wView.loadUrl("con…

oracle天数加个随机数,如何给一个表某列加上指定的随机数

如何给一个表某列加上指定的随机数一、原始数据create table #test (name varchar(10),ddate datetime,date1 datetime,date2 datetime)insert into #testselect 张三,2013-09-01,2013-09-01 09:00:00.000,2013-09-01 17:00:00.000 union allselect 张三,2013-09-02,2013-09-0…