如何用程序給寶寶取名

如何用程序給寶寶取名

寫(xiě)在前面

好的名字包含父母對(duì)寶寶美好寄托脸侥,程序只是根據(jù)一些規(guī)則去生成名字,由于NLP盈厘、語(yǔ)料等的限制睁枕,程序生成的名字只能作為參考,質(zhì)量肯定達(dá)不到寶媽寶爸鉆研推敲的水平沸手,所以不用妄想全自動(dòng)化生產(chǎn)外遇,還是老老實(shí)實(shí)動(dòng)腦比較好。

部分生成結(jié)果

sample_result

關(guān)于程序

Github

https://github.com/clg456852/Baby_name

程序使用Python編寫(xiě)契吉,版本2.7跳仿。程序只考慮了的雙字名字。

依賴庫(kù):

  • jieba
  • snowNLP
  • bs4
  • threadpool
  • zhconv

由于涉及到爬蟲(chóng)捐晶,如果在公司跑的話菲语,需要設(shè)置代理。同時(shí)在 http://auth-proxy.oa.com/DevNetTempVisit.aspx 申請(qǐng)?jiān)L問(wèn)外網(wǎng)權(quán)限惑灵。
山上。

如何取個(gè)好名字

前面說(shuō)了,一個(gè)好的名字英支,最重要的是包含父母對(duì)寶寶美好寄托佩憾。
在此之上,盡量滿足意干花、音妄帘、形,同時(shí)中國(guó)文化的八字也是一個(gè)考慮選項(xiàng)池凄。

意: 名字最重要的屬性抡驼,如希望寶寶開(kāi)心取“樂(lè)”、“欣”字等肿仑,個(gè)人覺(jué)得如果婶恼,如果第二個(gè)字是動(dòng)詞的話桑阶,或者名字是形容詞柏副,更能獲得好的寓意勾邦,如“懷樂(lè)“、”欣然“割择。

音: 如果名字其中的一個(gè)字的韻母與姓氏發(fā)音類(lèi)似眷篇,則名字讀起來(lái)會(huì)比較平滑,但不能兩個(gè)都是荔泳,可能會(huì)比較繞口蕉饼,同時(shí)最后一個(gè)字最好是舌根音,讀起來(lái)短促有力玛歌。

形: 如果姓氏是上下結(jié)構(gòu)昧港,那么名字的其他字不宜再用相同結(jié)構(gòu)。

八字: 八字平衡是最好的支子,通過(guò)八字的異類(lèi)和同類(lèi)來(lái)確定八字的喜用神创肥。其中用神用來(lái)平衡八字,而喜神是生成用神的屬性值朋。

原理

由上面的分析叹侄,程序的實(shí)現(xiàn)方案為:從語(yǔ)料(古典詩(shī)詞)中獲取詞匯,分析詞匯的意昨登、音趾代、八字、五格丰辣,給出最靠譜的若干的作為選擇撒强。

我整理的語(yǔ)料有:詩(shī)經(jīng)、楚辭笙什、唐詩(shī)300首飘哨、宋詞300首、論語(yǔ)得湘、全唐宋詞等杖玲,有一些已經(jīng)與處理過(guò)了,以‘corpus’開(kāi)頭淘正。從語(yǔ)料中獲取語(yǔ)句摆马,根據(jù)一定的規(guī)則組詞、分詞鸿吆,獲取滿足目標(biāo)函數(shù)的名詞作為潛在的名字囤采。

這里目標(biāo)函數(shù)我沒(méi)有考慮名字的形,是因?yàn)檫@個(gè)屬性屬于景上添花的類(lèi)型惩淳,寶媽寶爸可以挑選過(guò)程自行決定蕉毯。

計(jì)算名字的八字乓搬、五格,我是用爬蟲(chóng)提交表單 https://www.meimingteng.com/Naming/Default.aspx?Tag=4 代虾,再分析返回結(jié)果进肯。所以短時(shí)間密集發(fā)送表單,可能會(huì)被服務(wù)器封IP棉磨,需要大量爬取的話最好建個(gè)代理池江掩。

語(yǔ)料 -〉 組詞 -〉詞組分析 -〉獲取寓意、八字得分 -〉排序輸出

為了滿足上面的需求乘瓤,采用一些現(xiàn)有的第三方包來(lái)實(shí)現(xiàn)部分功能环形。

其中:

snowNLP可以分析詞語(yǔ)的詞性、聲母衙傀、情感分析抬吟。

jieba可以對(duì)現(xiàn)有的語(yǔ)料進(jìn)行分詞。

zhconv用來(lái)將繁體語(yǔ)料轉(zhuǎn)成簡(jiǎn)體版本统抬。

bs4用來(lái)分析爬蟲(chóng)爬到的結(jié)果火本。

threadpool利用多線程來(lái)加速爬蟲(chóng)請(qǐng)求。

使用方法

list

運(yùn)行create_name腳本蓄喇,可從語(yǔ)料中組詞并提交表單到姓名打分網(wǎng)发侵。
如果已經(jīng)有名字可以直接運(yùn)行name_score_post腳本,還還有其他一些是用做輔助工具的腳本妆偏。

程序結(jié)構(gòu)

程序最主要的腳本有兩個(gè):‘create_name.py’ 和 ’name_score_post.py’刃鳄。

  • create_name

從語(yǔ)料中組詞,挑選滿足目標(biāo)函數(shù)的詞钱骂,輸出到目標(biāo)文件中叔锐。

默認(rèn)從楚辭里組詞,可以自行選擇其他語(yǔ)料见秽,全唐宋詞規(guī)模太大愉烙,不推薦。

    # 詩(shī)經(jīng)
    # create_name_from(convertZh.shi_jing)
    # 楚辭
    create_name_from(convertZh.chu_ci)
    name_score_post.create_name_excel_from(convertZh.chu_ci)
    # 300 tang
    # create_name_from(convertZh.tang_300_peom)
    # 300 chu
    # create_name_from(convertZh.song_300_verse)
    # quan tang song verse
    # create_name_from(convertZh.all_tang_song_verse)
    # lun_lu
    # create_name_from(convertZh.lun_yu)

組詞規(guī)則: 在句首解取、句尾步责、句間挑選字來(lái)組詞,子句內(nèi)用jieba分詞去取的句內(nèi)的詞禀苦。

def create_names_based_on(text_line):
    clauses = clauses_from_sentence(text_line)
    names = []
    # 子句內(nèi)
    for clause in clauses:
        if len(clause) > 3:
            add_new_name(clause[0] + clause[1], names)
            add_new_name(clause[-2] + clause[-1], names)
            add_new_name(clause[-3] + clause[-1], names)

            seg_list = jieba.cut(clause, cut_all=True)
            for seg in seg_list:
                if len(seg) == 2:
                    add_new_name(seg, names)
                if len(seg) == 4:
                    add_new_name(seg[0] + seg[1], names)
                    add_new_name(seg[-2] + seg[-1], names)
    # 子句間
    if len(clauses) > 1:
        for i in range(len(clauses)):
            if (i + 1) < len(clauses):
                clause_pre = clauses[i]
                clause_post = clauses[i+1]
                add_new_name(clause_pre[-1] + clause_post[-1], names)
                add_new_name(clause_pre[0] + clause_post[0], names)
                idx0 = random.randint(0, len(clause_pre)-1)
                idx1 = random.randint(0, len(clause_post)-1)
                add_new_name(clause_pre[idx0] + clause_post[idx1], names)
            if (i + 2) < len(clauses):
                clause_pre = clauses[i]
                clause_post = clauses[i + 2]
                add_new_name(clause_pre[-1] + clause_post[-1], names)
                add_new_name(clause_pre[0] + clause_post[0], names)
                idx0 = random.randint(0, len(clause_pre)-1)
                idx1 = random.randint(0, len(clause_post)-1)
                add_new_name(clause_pre[idx0] + clause_post[idx1], names)

    names.append(u"\n來(lái)源: " + text_line)
    return names

目標(biāo)函數(shù): 基于snowNLP實(shí)現(xiàn)蔓肯,用來(lái)挑選正向的、詞性振乏、發(fā)聲滿足特定規(guī)則的詞匯蔗包。

s = SnowNLP(n)
if s.sentiments > 0.6:
if s.pinyin:
    for py in s.pinyin:
        if (py.encode('utf-8').endswith(finals_consonant) or py.encode('utf-8').endswith(finals_consonant[-1]))\
                and not py.encode('utf-8').startswith(initial_consonant):
            # Pin Yin
            has_added = True
            postive_targets.write(n.encode('utf-8') + "\n")
            print(n.encode('utf-8') + '\n')
    if s.tags and not has_added:
        for tag in s.tags:
            # 獲取詞性
            if not has_added and ((tag[0] == n[0] and tag[1] == u'v') or tag[1] == u'a'):
                has_added = True
                postive_targets.write(n.encode('utf-8') + "\n")
                print(n.encode('utf-8') + '\n')
            if len(s.tags) > 2:
                assert 0
                                    
  • name_score_post

讀取目標(biāo)文件,利用爬蟲(chóng)獲取姓名在&網(wǎng)站&的分析結(jié)果慧邮,獲取姓名的文化印象调限、八字舟陆、五格方面的得分,輸出Excel表格以供參考耻矮。

def compute_score_of_name(name):
    form['ctl00$ContentPlaceHolder1$InputBasicInfo1$tbMingWords'] = name
    try:
        paramsData = urllib.urlencode(form)
        request = urllib2.Request(url, paramsData)
        # print("HTTP GET")
        response = urllib2.urlopen(request, timeout=20)
        # print("Respone Successfully")
        content = response.read()
    except Exception as e:
        print("Error: " + str(e))
        return None

    soup = BeautifulSoup(content, 'html.parser')

    # print(soup)
    correct_response = False
    for node in soup.find_all("table", class_="naming2"):
        node_content = node.get_text()
        if u"評(píng)分:" in node_content:
            correct_response = True
            score_culture = get_score_of("文化印象", node, soup)
            score_bazi = get_score_of("五行八字", node, soup)
            score_shengxiao = get_score_of("生  肖", node, soup)
            score_wuge = get_score_of("五格數(shù)理", node, soup)
            name_score = {
                            '文化印象': score_culture,
                            '五行八字': score_bazi,
                            '生  肖': score_shengxiao,
                            '五格數(shù)理': score_wuge
                        }
            return name_score
    # TODO: 不能處理的名字
    if not correct_response:
        return None

關(guān)于結(jié)果

理想很豐滿秦躯,現(xiàn)實(shí)很骨感。

目前使用的NLP與用來(lái)爬分析結(jié)果的網(wǎng)站淘钟,均沒(méi)有表現(xiàn)得很“智能”宦赠,所以生成的結(jié)果可用率不高,像“無(wú)父”米母、“無(wú)母”這種詞都能取得很高的分……

不過(guò)以更佛系的態(tài)度看,生成的結(jié)果有一些還是能夠給寶媽寶爸一些啟發(fā)的毡琉。還是那句話铁瞒,名字是父母給寶寶的一份禮物,還是更積極地參與進(jìn)去比較好桅滋,這份經(jīng)歷本身也是甜蜜美麗的財(cái)產(chǎn)慧耍。

致謝

meimingteng
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市丐谋,隨后出現(xiàn)的幾起案子芍碧,更是在濱河造成了極大的恐慌,老刑警劉巖号俐,帶你破解...
    沈念sama閱讀 219,539評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件泌豆,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡吏饿,警方通過(guò)查閱死者的電腦和手機(jī)踪危,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)猪落,“玉大人贞远,你說(shuō)我怎么就攤上這事”考桑” “怎么了蓝仲?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,871評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)官疲。 經(jīng)常有香客問(wèn)我袱结,道長(zhǎng),這世上最難降的妖魔是什么袁余? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,963評(píng)論 1 295
  • 正文 為了忘掉前任擎勘,我火速辦了婚禮萤悴,結(jié)果婚禮上毁靶,老公的妹妹穿的比我還像新娘肋演。我一直安慰自己,他們只是感情好混驰,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,984評(píng)論 6 393
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著宵喂,像睡著了一般蜂莉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上欣硼,一...
    開(kāi)封第一講書(shū)人閱讀 51,763評(píng)論 1 307
  • 那天题翰,我揣著相機(jī)與錄音,去河邊找鬼诈胜。 笑死豹障,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的焦匈。 我是一名探鬼主播血公,決...
    沈念sama閱讀 40,468評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼缓熟!你這毒婦竟也來(lái)了累魔?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤够滑,失蹤者是張志新(化名)和其女友劉穎垦写,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體彰触,經(jīng)...
    沈念sama閱讀 45,850評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡梯投,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,002評(píng)論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了渴析。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片晚伙。...
    茶點(diǎn)故事閱讀 40,144評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖俭茧,靈堂內(nèi)的尸體忽然破棺而出咆疗,到底是詐尸還是另有隱情,我是刑警寧澤母债,帶...
    沈念sama閱讀 35,823評(píng)論 5 346
  • 正文 年R本政府宣布午磁,位于F島的核電站,受9級(jí)特大地震影響毡们,放射性物質(zhì)發(fā)生泄漏迅皇。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,483評(píng)論 3 331
  • 文/蒙蒙 一衙熔、第九天 我趴在偏房一處隱蔽的房頂上張望登颓。 院中可真熱鬧,春花似錦红氯、人聲如沸框咙。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,026評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)喇嘱。三九已至茉贡,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間者铜,已是汗流浹背腔丧。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,150評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留作烟,地道東北人愉粤。 一個(gè)月前我還...
    沈念sama閱讀 48,415評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像俗壹,于是被迫代替她去往敵國(guó)和親科汗。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,092評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • jieba分詞绷雏,學(xué)習(xí),為了全面了解該模塊怖亭,涎显,預(yù)設(shè)學(xué)習(xí)路線:官方文檔——優(yōu)秀博客文章——實(shí)踐學(xué)習(xí) 官方文檔部分 (文...
    竹林徒兒閱讀 4,129評(píng)論 1 12
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)兴猩,斷路器期吓,智...
    卡卡羅2017閱讀 134,672評(píng)論 18 139
  • 感賞兒子周末過(guò)得很愉快,周五晚上和同學(xué)一起看電影吃飯倾芝,看完電影讨勤,同學(xué)的爸爸還把他們送回家。感恩晨另! 感賞兒子周末都按...
    嚕小嚕閱讀 186評(píng)論 3 4
  • 我是一個(gè)偽裝了的人潭千。 我很高興我又找到一個(gè)可以無(wú)所顧慮揮灑自己的空間,但我開(kāi)始擔(dān)心我寫(xiě)著寫(xiě)著又開(kāi)始塑造一個(gè)我不曾遇...
    惑多惑少閱讀 180評(píng)論 0 0
  • 我想擁有超越平凡的力量
    韓灰灰閱讀 137評(píng)論 0 1