Utilisez le robot d'exploration Python pour donner un bon nom à votre enfant

高洛峰
Libérer: 2017-02-20 10:13:24
original
1626 Les gens l'ont consulté

Avant-propos

Je crois que tous les parents l'ont vécu, car il faut choisir un nom dans les deux semaines qui suivent la naissance de l'enfant (il faut demander un acte de naissance) Je suppose que beaucoup de gens sont comme ça. J'étais pareil au début. Même si je pensais qu'il y avait tellement de caractères chinois, je pouvais simplement choisir n'importe quel caractère pour créer un nom. Mais plus tard, j'ai réalisé que c'était vraiment le cas. Ce n'est pas une chose fortuite. Peu importe ce que j'y pensais, j'ai trouvé que c'était inapproprié. J'ai donc regardé dans les dictionnaires, recherché en ligne et la poésie Tang, les paroles de chansons, le Livre des chansons et même les romans d'arts martiaux. Le nom auquel je pense depuis longtemps rencontre souvent les opinions et les objections des membres de ma famille, comme des problèmes tels que la difficulté à prononcer le nom, le même accent que le nom des proches, etc. De cette façon, je tombe dans un cycle de recherche et de déni répétés, et de plus en plus cela devient de plus en plus confus.

Nous sommes donc retournés sur Internet pour chercher à nouveau et avons trouvé de nombreux articles sur Internet tels que "Une liste complète de bons prénoms de bébés garçons". Ces articles donnaient des centaines ou des milliers de noms à la fois. utiliser. Il existe de nombreux sites Web ou applications qui testent les noms. Lorsque vous saisissez un nom, vous pouvez obtenir une note de huit ou cinq caractères. Cette fonction est assez efficace et peut être utilisée comme référence. Cependant, nous devons soit saisir un seul nom. par un pour les tests, ou Ces sites Web ou applications ont très peu de noms, soit ne peuvent pas répondre à nos besoins tels que les mots qualificatifs, soit ils commencent à charger, et à la fin nous n'en trouvons aucun utile.

Je voulais donc créer un programme comme celui-ci :

  1. La fonction principale est de fournir une référence pour les noms de lots, qui sont combinés avec le noms de bébé Il est calculé en fonction de la date de naissance et de l'horoscope

  2. Vous pouvez élargir votre bibliothèque de noms Par exemple, si vous trouvez un lot de bons noms dans le Livre des Chansons sur le. Internet et que vous souhaitez voir comment ils sont, vous pouvez les ajouter et les utiliser

  3. Vous pouvez limiter les caractères utilisés dans le nom. Par exemple, certains arbres généalogiques ont des restrictions si vous le souhaitez. sont actuellement dans la génération avec le caractère "国", le nom doit avoir le caractère "国"

  4. La liste de noms peut recevoir des scores, afin qu'après inversion, vous puissiez regarder aux noms des scores élevés aux scores faibles

De cette façon, vous pouvez en obtenir une copie. Il existe une liste de noms qui correspondent à la date de naissance de votre enfant, à votre arbre généalogique restrictions et vos préférences, et la liste a donné des scores pour référence. Sur cette base, nous pouvons les comprendre un par un pour trouver le nom que nous aimons. Bien sûr, si vous avez de nouvelles idées, vous pouvez à tout moment ajouter de nouveaux noms au vocabulaire et recalculer.

Structure du code du programme

Utilisez le robot dexploration Python pour donner un bon nom à votre enfant

Introduction au code :

  • /chinese-name-score Répertoire racine du code

  • /chinese-name-score/main Répertoire du code

  • /chinese-name - Répertoire du fichier de dictionnaire score/main/dicts

  • /chinese-name-score/main/dicts/names_boys_double.txt Fichier de dictionnaire, noms à deux lettres pour les garçons

  • /chinese-name-score/main/dicts/names_boys_single.txt Fichier de dictionnaire, noms à une seule lettre pour les garçons

  • /chinese-name-score/main/ dicts/names_girls_single. fichier de dictionnaire txt, noms de filles à deux lettres

  • /chinese-name-score/main/dicts/names_grils_double.txt fichier de dictionnaire, noms de filles à une lettre

  • /chinese-name-score/main/outputs Répertoire des données de sortie

  • /chinese-name-score/main/outputs/names_girls_source_wxy.txt Exemple de fichier de sortie

  • /chinese-name-score/main/scripts Quelques scripts pour le prétraitement des fichiers de dictionnaire

  • /chinese-name-score/ main/scripts /unique_file_lines.py Définir le fichier de dictionnaire, supprimer les noms en double et les lignes vides dans le dictionnaire

  • /chinese-name-score/main/sys_config.py Configuration système du programme , y compris l'exploration pour obtenir l'URL cible, le chemin du fichier du dictionnaire

  • /chinese-name-score/main/user_config.py la configuration utilisateur du programme, y compris l'âge, le mois, le jour et l'heure du bébé , sexe et autres paramètres

  • /chinese-name-score/main/get_name_score.py Programme d'entrée en cours

Comment utiliser le code :

  1. S'il n'y a pas de mots qualificatifs, recherchez les fichiers de dictionnaire Names_boys_double.txt et Names_grils_double.txt. Vous pouvez ajouter des listes de noms que vous avez trouvées ici, divisez-les par lignes et ajoutez-les à la fin ;

  2. S'il y a des mots qualifiés, recherchez les fichiers du dictionnaire names_boys_single.txt et names_girls_single.txt, ajoutez une liste de mots simples que vous aimez. à l'avance ici, divisez-les par lignes et ajoutez-les à la fin

  3. Ouvrez user_config.py et configurez-le. Voir la section suivante pour les éléments de configuration

  4. <.>
  5. Exécutez le script get_name_score.py

  6. Dans le répertoire de sorties, affichez vos propres fichiers de sortie, qui peuvent être copiés dans Excel pour le tri et d'autres opérations


Entrée de configuration du programme

La configuration du programme est la suivante :

# coding:GB18030
 
"""
在这里写好配置
"""
 
setting = {}
 
# 限定字,如果配置了该值,则会取用单字字典,否则取用多字字典
setting["limit_world"] = "国"
# 姓
setting["name_prefix"] = "李"
# 性别,取值为 男 或者 女
setting["sex"] = "男"
# 省份
setting["area_province"] = "北京"
# 城市
setting["area_region"] = "海淀"
# 出生的公历年份
setting[&#39;year&#39;] = "2017"
# 出生的公历月份
setting[&#39;month&#39;] = "1"
# 出生的公历日子
setting[&#39;day&#39;] = "11"
# 出生的公历小时
setting[&#39;hour&#39;] = "11"
# 出生的公历分钟
setting[&#39;minute&#39;] = "11"
# 结果产出文件名称
setting[&#39;output_fname&#39;] = "names_girls_source_xxx.txt"
Copier après la connexion

Selon l'élément de configuration

, le système décide automatiquement s'il doit utiliser un dictionnaire à un seul caractère ou un dictionnaire multi-mots : setting[“limit_world”]

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

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

程序的原理

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

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

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

 post_data = urllib.urlencode(params)
 req = urllib2.urlopen(sys_config.REQUEST_URL, post_data)
 content = req.read()
Copier après la connexion

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

params的参数设定如下:

 params = {}
 
 # 日期类型,0表示公历,1表示农历
 params[&#39;data_type&#39;] = "0"
 params[&#39;year&#39;] = "%s" % str(user_config.setting["year"])
 params[&#39;month&#39;] = "%s" % str(user_config.setting["month"])
 params[&#39;day&#39;] = "%s" % str(user_config.setting["day"])
 params[&#39;hour&#39;] = "%s" % str(user_config.setting["hour"])
 params[&#39;minute&#39;] = "%s" % str(user_config.setting["minute"])
 params[&#39;pid&#39;] = "%s" % str(user_config.setting["area_province"])
 params[&#39;cid&#39;] = "%s" % str(user_config.setting["area_region"])
 # 喜用五行,0表示自动分析,1表示自定喜用神
 params[&#39;wxxy&#39;] = "0"
 params[&#39;xing&#39;] = "%s" % (user_config.setting["name_prefix"])
 params[&#39;ming&#39;] = name_postfix
 # 表示女,1表示男
 if user_config.setting["sex"] == "男":
  params[&#39;sex&#39;] = "1"
 else:
  params[&#39;sex&#39;] = "0"
  
 params[&#39;act&#39;] = "submit"
 params[&#39;isbz&#39;] = "1"
Copier après la connexion

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

 soup = BeautifulSoup(content, &#39;html.parser&#39;, from_encoding="GB18030")
 full_name = get_full_name(name_postfix)
 
 # print soup.find(string=re.compile(u"姓名五格评分"))
 for node in soup.find_all("p", class_="chaxun_b"):
  node_cont = node.get_text()
  if u&#39;姓名五格评分&#39; in node_cont:
   name_wuge = node.find(string=re.compile(u"姓名五格评分"))
   result_data[&#39;wuge_score&#39;] = name_wuge.next_sibling.b.get_text()
  
  if u&#39;姓名八字评分&#39; in node_cont:
   name_wuge = node.find(string=re.compile(u"姓名八字评分"))
   result_data[&#39;bazi_score&#39;] = name_wuge.next_sibling.b.get_text()
Copier après la connexion

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

运行结果事例

1/1287 李国锦 姓名八字评分=61.5 姓名五格评分=78.6 总分=140.1
2/1287 李国铁 姓名八字评分=61 姓名五格评分=89.7 总分=150.7
3/1287 李国晶 姓名八字评分=21 姓名五格评分=81.6 总分=102.6
4/1287 李鸣国 姓名八字评分=21 姓名五格评分=90.3 总分=111.3
5/1287 李柔国 姓名八字评分=64 姓名五格评分=78.3 总分=142.3
6/1287 李国经 姓名八字评分=21 姓名五格评分=89.8 总分=110.8
7/1287 李国蒂 姓名八字评分=22 姓名五格评分=87.2 总分=109.2
8/1287 李国登 姓名八字评分=21 姓名五格评分=81.6 总分=102.6
9/1287 李略国 姓名八字评分=21 姓名五格评分=83.7 总分=104.7
10/1287 李国添 姓名八字评分=21 姓名五格评分=81.6 总分=102.6
11/1287 李国天 姓名八字评分=22 姓名五格评分=83.7 总分=105.7
12/1287 李国田 姓名八字评分=22 姓名五格评分=93.7 总分=115.7
Copier après la connexion

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

友情提示

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

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

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

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

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

本文的代码已上传到github 

更多Utilisez le robot dexploration Python pour donner un bon nom à votre enfant相关文章请关注PHP中文网!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal