iT邦幫忙

第 12 屆 iT 邦幫忙鐵人賽

DAY 17
0
IoT

育兒也要智慧系列 第 17

Day 17 : 小獺獺命名法

幫孩子取個好名字

古早取名經常會參考姓名學,

最常見的就是採用筆畫來計算五行總格,

坊間看到的書籍每一本也都有各自不同的說法,

而筆者也有自己一套取名字的方法,

因為是為了女兒命名所以我稱之為 小獺獺命名法

這個方法結合了傳統與現代方法,

並且搭配 Line Bot 輔助來得到最佳化的名字。

小獺獺命名法

前言

因為爸媽雙方平時工作忙碌,孩子命名迫在眉睫,需要使用一個有效率且不失根據的方式進行孩子的命名,因媽媽對於文字敏感度高,而爸爸平常是程式設計師,因此需要設計一套可以結合爸媽雙方優點的流程命名方法。

方法

小獺獺命名法分為五個階段,分別為字庫篩選、自動產生、初步篩選、評分篩選、多元篩選完成小獺獺命名,此方法是一種結合傳統命名、資訊技術與科學分析的新方式,可以有效解決孩子命名的問題,以下將依序進行流程說明。

第一階段 - 字庫篩選

一個好的名字是由二至三個字組成,需要先找尋相關良好的文字作為基礎,才能夠組合出一個好的名字,而自古以來的文字最容易取得的管道是字典,因此本方法是根據兩個方向進行整理。首先是具備全方位文字內容的國語字典,幾乎所有的文字與相關字義都可以在國語字典內找到,因為媽媽對於文字的敏感度較高,從字典來查找會是一個比較好的方式。另一個方向是成語字典,相較於國語字典的單個字方式,成語字典更注重於字與字之間的組合,相同的文字根據順序位置可能產生不同的含意,因此藉由成語的輔助可以找尋到更適合用來組合的文字基礎。

第二階段 - 自動產生

近年來因為食衣住行的開銷逐步提升,爸媽雙方都需要工作來維持家庭收入,也因此造就了許多的雙薪家庭,而在時間的壓力下要快速的命名,這時候就需要借助爸爸的軟實力。本方法首先建立了一隻 Line 的社群聊天機器人,透過程式語言的幫助,能夠有效率的產生數筆推薦的文字組合,不但可以提供爸媽參考,還能夠發揮腦力激盪的效果,藉此激發出更多優良的文字組合,為後續的流程奠定了大量的基礎。

第三階段 - 初步篩選

由高效率的程式產生的文字組合,不免會較生硬無情感的情形發生,因此人工篩選是必要的過程,如此一來才能讓電腦程式擁有人的溫度,而為了加快人工篩選的速度,本方法在聊天機器人加入了各種指令,可快速將選擇的文字組合加入資料庫,因此爸媽可以在任何有網路的地方隨時把握時間進行命名的動作,不但節省時間還能利用時間。

第四階段 - 評分篩選

在經過前面三個階段,由爸媽各別紀錄了數筆良好的命名後,為了滿足爸媽各自的喜好,又不發生爭執傷和氣,需要提供一套公平的方法來解決問題。因此本方法提出使用統計的方式,由兩次的評分計算加總,最後根據總分來篩選出適當數量的結果以提供後續流程使用,如此一來雙方就能和平且公平的完成篩選。

第五階段 - 多元篩選

在過去,長輩依循傳統命名,希望念起來好聽又聽起來有意思,甚至需要進行卜卦的傳統儀式來完成最終的命名。因此本方法結合傳統的限制條件搭配科學的資訊條件,以總分、綽號、易讀性、吉凶、獨特性等為依據來進行詳細的統計與分析,藉此提供爸媽一套最佳的參考資料用來做最後的命名決定。

結果

在本命名方法中,我們採取了國語字典與成語字典的方式,共蒐集了 138 個文字。透過 Line Bot 每次自動隨機產生 10 種組合,最終得到了 1800 組資料進行篩選。手動過濾了有人性情感的詞彙後,由爸媽各自挑選喜愛的或是自創的 56 個組合。為達成爸媽雙方的共識,經過評分的結果取 6 分以上之組合共篩選了 21 組名字。再一次根據總分、綽號、易讀性、吉凶、獨特性等因素,由爸媽各自保留較佳的組合,最終得到了 1 組結果,因此 小獺獺 的名字就此誕生。

Line Bot 實作

前情提要了筆者所提出的方法後,

再來就是建立可以輔助這項方法的姓名紀錄工具,

首先是記錄文字的部分可以很簡單的透過寫入文字檔來紀錄即可,

然後再透過 Line Bot 回傳提示訊息,

function newword() {
    fs.writeFileSync('words.text', names, {
        encoding: 'utf8', flag: 'a'
    });

    return `已加入新字 ${names.split('').join('、')}`
}

再設定另一個對話語法用來隨機產生 10 筆名字組合,

function draw() {
    const words = fs.readFileSync('words.text', 'utf8').split('');
    const len = 10;
    let i = 0;
    let result = [];
    for (i = 0; i < words.length; i++) {
        const r = parseInt(Math.random() * words.length, 10);
        if (i != r) {
            const temp = words[i];
            words[i] = words[r];
            words[r] = temp;
        }
    }
    
    for(i = 0; i < len; i++) {
        result.push(`${words[i]}${words[i+len]}`);
    }

    return result.join("、");
};

最後覺得不錯的名字就記錄起來,

function write(names) {
    fs.writeFileSync('names.text', `${names.join('\n')}\n`, {
        encoding: 'utf8', flag: 'a'
    });
    return `已記錄 ${names.join('、')}`;
}

以上就是一個 Line Bot 實用化的應用,

筆者就是透過這樣的方式給孩子取名字,

由於此方法兼具隨機與個人喜好來半自動產生,

因此可以得到雙方意外都喜歡卻又想不到的名字,

就像最佳化方法一樣可以跳脫既定思維到達另一個巔峰,

最後祝各位能夠替孩子取到一個滿意的好名字。

每日一曬

https://ithelp.ithome.com.tw/upload/images/20201002/20107175FTB6dvDRVU.jpg


上一篇
Day 16 : 第一支機器人
下一篇
Day 18 : 寶寶影像監控
系列文
育兒也要智慧30

尚未有邦友留言

立即登入留言