iT邦幫忙

2021 iThome 鐵人賽

DAY 15
0

今天的主題是介紹如何讀取 CSV (之前從各個網站爬下來的問答集),並將資料轉成後面製作語料庫模型要用的格式。

先複習一下之前爬下來的格式好了,待會我們要做的是以 Q (問題)來製作模型

csv_excel

readwriter

我將 CSV 整理成 4 種格式
完整程式碼: https://gitlab.com/graduate_lab415/nlp/-/blob/master/readwriter.py

  • get_field("Q"): 可以得到 docsdocs_category 用來製作模型。
  • to_dict(): 可以得到 all_dataall_data_category 用來回傳完整問答組合給 API。

四種格式

  1. docs: 全部的 Q
    [
        "如何申請⻑期照顧服務及流程為何?",
        "申請長照服務有什麼條件?"
    ]
    
  2. docs_category: 依 category 分類的 Q
    {
        "1":[
            "如何申請⻑期照顧服務及流程為何?",
            "申請長照服務有什麼條件?"
        ],
        "2":[
            ...
        ]
    }
    
  3. all_data: 完整的問答組合
    [
        {
            'id':'10',
            'Q':'護理之家和老人養護所和老人安養院有何分別?'
            'A':'台灣照顧老人的老人福利機構一般來說分成三個等級:1.安養院:只能照顧生活可以完全自理的長者,亦即是健康的老人家。2.養護所:可以照顧有鼻胃管、尿管或者完全臥床的患者。 唯,不能收有氣切之患者。(年齡限制:須滿60歲以上)3.護理之家:從最重症【鼻胃管、尿管、氣切】到最輕微【只是安養的長者】都能給予全方位的生活及護理照護。(年齡無限制)',
            'url':'https://www.royalnursinghome.com.tw/%e8%ad%b7%e7%90%86%e4%b9%8b%e5%ae%b6/'
        },
        {
            ...
        }
    ]
    
  4. all_data_category: 依 category 分類的問答組合
    {
        "1":[
            {
                'id':'10',
                'Q':'護理之家和老人養護所和老人安養院有何分別?'
                'A':'台灣照顧老人的老人福利機構一般來說分成三個等級:1.安養院:只能照顧生活可以完全自理的長者,亦即是健康的老人家。2.養護所:可以照顧有鼻胃管、尿管或者完全臥床的患者。 唯,不能收有氣切之患者。(年齡限制:須滿60歲以上)3.護理之家:從最重症【鼻胃管、尿管、氣切】到最輕微【只是安養的長者】都能給予全方位的生活及護理照護。(年齡無限制)',
                'url':'https://www.royalnursinghome.com.tw/%e8%ad%b7%e7%90%86%e4%b9%8b%e5%ae%b6/'
            },
            {
                ...
            }
        ],
        "2":[
            {
                ...
            }
        ]
    }
    

main

介紹完資料整理的部分,我們回到主程式吧~
完整程式碼: https://gitlab.com/graduate_lab415/nlp/-/blob/master/main.py

首先我們要確認用來製作模型的資料來源,當 CUT_METHODckipjieba 時,就從 CSV 中讀取資料;若是 test 則會使用下方的測試英文句子當來源。
來源預設是全部的問句或問答組合(docsall_data),若是有輸入分類的編號,則會把相應的資料(docs_category[q_category]all_data_category[q_category])賦值給docsall_data,作為新的資料來源。

"""
CUT_METHOD = test | ckip | jieba
"""
CUT_METHOD = 'ckip'


"""Source"""
q_category = sys.argv[2]
if CUT_METHOD in ["ckip", "jieba"]:
    docs, docs_category = CsvReader().get_field("Q")
    all_data, all_data_category = CsvReader().to_dict()

    """group qa by category and write json to file"""
    if q_category in ['1', '2', '3', '4', '5']:
        docs = docs_category[q_category]
        all_data = all_data_category[q_category]

else:
    docs = [
        "it is a good day, I like to stay here",
        "I am happy to be here",
        "I am bob",
        "it is sunny today",
        "I have a party today",
        "it is a dog and that is a cat",
        "there are dog and cat on the tree",
        "I study hard this morning",
        "today is a good day",
        "tomorrow will be a good day",
        "I like coffee, I like book and I like apple",
        "I do not like it",
        "I am kitty, I like bob",
        "I do not care who like bob, but I like kitty",
        "It is coffee time, bring your cup",
    ]
    all_data = docs

結語

接下來的幾天我們會繼續以這段程式碼延伸,斷詞、加 Label 等前置作業,到後面 TF、IDF、TF-IDF 的建置,一段段講解程式。



上一篇
Day 14 - [語料庫模型] 02-問答組合分類方式
下一篇
Day 16 - [語料庫模型] 04-斷詞工具比較 Jieba vs CKIP
系列文
長照小幫手 - 從 0 開始建置 Chatbot 的筆記 & 走錯路的心得31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言