介绍:目前市面上的大多数聊天机器人(如图灵机器人)仍是基于规则来人为添加语料(尤其是专业问题)。 作者在工作过程中发现专业问题语料数量庞大,人为去添加关键词耗时耗力。因此,这里向大家介绍本人 批量提取每句Question关键词并批量逐行写入文件的方法,供大家参考使用。 备注:经过事前测试,发现jieba.analyse.extract_tags()方法能较好的适用于专业词汇抽取, 因此本文首选其作为提取关键词的方法。代码如下。 import osimport jiebaimport jieba.analyseimport csv#设置工作环境为chuli文件夹内os.chdir("C://Users//dicey//desktop//chuli")#rough.csv为3万8千行待处理Questionrough = 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<=30: key_words = jieba.analyse.extract_tags(''.join(row), topK=3, withWeight=False, allowPOS=()) keys.writerow(key_words) elif 30 <=50: key_words = jieba.analyse.extract_tags(''.join(row), topK=4, withWeight=False, allowPOS=()) keys.writerow(key_words) elif 50 <=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文件中,顺序能正常匹配。
部分展示如下图: