介紹:目前市面上的大多數聊天機器人(如圖靈機器人)仍是基於規則來人為添加語料(尤其是專業問題)。
作者在工作過程中發現專業問題語料數量龐大,人為去添加關鍵詞耗時耗力。因此,這里向大家介紹本人
批量提取每句Question關鍵詞並批量逐行寫入文件的方法,供大家參考使用。
備注:經過事前測試,發現jieba.analyse.extract_tags()方法能較好的適用於專業詞匯抽取,
因此本文首選其作為提取關鍵詞的方法。代碼如下。
import os import jieba import jieba.analyse import csv #設置工作環境為chuli文件夾內 os.chdir("C://Users//dicey//desktop//chuli") #rough.csv為3萬8千行待處理Question rough = csv.reader(open("rough.csv",'r',encoding='utf-8')) # r表示以讀的方式打開文件 #把每句Question提取出的關鍵詞逐行寫入keys.csv文件 keys = csv.writer(open("keys.csv",'w',encoding='utf-8')) #w表示以寫的方式打開文件 #檢查rough.csv文件的 #直接打印row會顯示每句為一個數組的二元數組 #使用''.join(row)打印會顯示每句各占一行的字符串 for row in rough: print(''.join(row))
打印效果如下圖。
開始正餐:
# 根據每句Question的字符數長度不同,分成以下5種情況
# 當字符數小於等於15時,提取關鍵詞topK=2,也就是提取兩個關鍵詞。其余以此類推。 # keys為csv.writer這個類的一個對象,調用.writerow()這個方法,把得到的關鍵詞(以逗號分隔)逐行寫入keys.csv文件
# 當Question字數已經超過100時,不論多長,也只最多提取6個關鍵詞
for row in rough: if len(''.join(row))<= 15: key_words = jieba.analyse.extract_tags(''.join(row), topK=2,withWeight=False, allowPOS=()) ## ''.join(row)目的在於把數組型元素row轉換成字符串 keys.writerow(key_words) elif 15<len(''.join(row))<=30: key_words = jieba.analyse.extract_tags(''.join(row), topK=3, withWeight=False, allowPOS=()) keys.writerow(key_words) elif 30<len(''.join(row))<=50: key_words = jieba.analyse.extract_tags(''.join(row), topK=4, withWeight=False, allowPOS=()) keys.writerow(key_words) elif 50<len(''.join(row))<=100: key_words = jieba.analyse.extract_tags(''.join(row), topK=5, withWeight=False, allowPOS=()) keys.writerow(key_words) else: key_words = jieba.analyse.extract_tags(''.join(row), topK=6, withWeight=False, allowPOS=()) keys.writerow(key_words)
## 最后關閉以上兩個csv文件
(open('rough.csv','r',encoding='utf-8')).close
(open('keys.csv','w',encoding='utf-8')).close
## 這里(open('rough.csv','r',encoding='utf-8')).close略顯臃腫,
## 推薦事先用變量來承接:roughfile = open('rough.csv','r',encoding='utf-8'),
## keysfile = open('keys.csv','w',encoding='utf-8')
## 之后需關閉文件即可寫成roughfile.close(),keysfile.close()
最后把keys.csv文件中的字段在EXCEL中稍作處理即可生成如下以空格隔開的關鍵詞列表,復制粘貼到原Question文件中,順序能正常匹配。
部分展示如下圖: