好的名字包含父母對寶寶美好寄托,程序只是根據壹些規則去生成名字,由於NLP、語料等的限制,程序生成的名字只能作為參考,質量肯定達不到寶媽寶爸鉆研推敲的水平,所以不用妄想全自動化生產,還是老老實實動腦比較好。
Github
/clg456852/Baby_name
程序使用Python編寫,版本2.7。程序只考慮了的雙字名字。
依賴庫:
由於涉及到爬蟲,如果在公司跑的話,需要設置代理。同時在 /DevNetTempVisit.aspx 申請訪問外網權限。
。
前面說了,壹個好的名字,最重要的是包含父母對寶寶美好寄托。
在此之上,盡量滿足意、音、形,同時中國文化的八字也是壹個考慮選項。
意: 名字最重要的屬性,如希望寶寶開心取“樂”、“欣”字等,個人覺得如果,如果第二個字是動詞的話,或者名字是形容詞,更能獲得好的寓意,如“懷樂“、”欣然“。
音: 如果名字其中的壹個字的韻母與姓氏發音類似,則名字讀起來會比較平滑,但不能兩個都是,可能會比較繞口,同時最後壹個字最好是舌根音,讀起來短促有力。
形: 如果姓氏是上下結構,那麽名字的其他字不宜再用相同結構。
八字: 八字平衡是最好的,通過八字的異類和同類來確定八字的喜用神。其中用神用來平衡八字,而喜神是生成用神的屬性。
由上面的分析,程序的實現方案為:從語料(古典詩詞)中獲取詞匯,分析詞匯的意、音、八字、五格,給出最靠譜的若幹的作為選擇。
我整理的語料有:詩經、楚辭、唐詩300首、宋詞300首、論語、全唐宋詞等,有壹些已經與處理過了,以‘corpus’開頭。從語料中獲取語句,根據壹定的規則組詞、分詞,獲取滿足目標函數的名詞作為潛在的名字。
這裏目標函數我沒有考慮名字的形,是因為這個屬性屬於景上添花的類型,寶媽寶爸可以挑選過程自行決定。
計算名字的八字、五格,我是用爬蟲提交表單 /Naming/Default.aspx?Tag=4 ,再分析返回結果。所以短時間密集發送表單,可能會被服務器封IP,需要大量爬取的話最好建個代理池。
為了滿足上面的需求,采用壹些現有的第三方包來實現部分功能。
其中:
snowNLP可以分析詞語的詞性、聲母、情感分析。
jieba可以對現有的語料進行分詞。
zhconv用來將繁體語料轉成簡體版本。
bs4用來分析爬蟲爬到的結果。
threadpool利用多線程來加速爬蟲請求。
運行create_name腳本,可從語料中組詞並提交表單到姓名打分網。
如果已經有名字可以直接運行name_score_post腳本,還還有其他壹些是用做輔助工具的腳本。
程序最主要的腳本有兩個:‘create_name.py’ 和 ’name_score_post.py’。
從語料中組詞,挑選滿足目標函數的詞,輸出到目標文件中。
默認從楚辭裏組詞,可以自行選擇其他語料,全唐宋詞規模太大,不推薦。
組詞規則: 在句首、句尾、句間挑選字來組詞,子句內用jieba分詞去取的句內的詞。
目標函數: 基於snowNLP實現,用來挑選正向的、詞性、發聲滿足特定規則的詞匯。
讀取目標文件,利用爬蟲獲取姓名在&網站&的分析結果,獲取姓名的文化印象、八字、五格方面的得分,輸出Excel表格以供參考。
理想很豐滿,現實很骨感。
目前使用的NLP與用來爬分析結果的網站,均沒有表現得很“智能”,所以生成的結果可用率不高,像“無父”、“無母”這種詞都能取得很高的分……
不過以更佛系的態度看,生成的結果有壹些還是能夠給寶媽寶爸壹些啟發的。還是那句話,名字是父母給寶寶的壹份禮物,還是更積極地參與進去比較好,這份經歷本身也是甜蜜美麗的財產。