1.緒論
訂閱號很早就有了,我最近閑了無事就像探索探索可以怎么玩。首先聯想到就是微軟小冰智能問答系統,還有很早時候有一個公眾號提供了,根據c、c++函數名返回API具體用法的功能。那么這兩個類似的功能如何實現呢。
2.接入智能問答系統
首先個人需要申請一個公眾號,接着在圖靈機器人的官網:http://www.tuling123.com/
注冊一個號,選擇添加微信公眾號,直接掃碼關聯,ok,智能問答系統接入成功!
其實這個呢,是圖靈機器人獲取了微信的第三方接口,替你管理了微信號的消息回復功能,並且提供了下面的基本功能:其實比較簡單,一些復雜的問題比如:給我訂個到上海的機票,直接會回復去哪網的鏈接。相信這是圖靈機器人的主要賺錢點,哈哈。
3.實現計算機專業英語辭典
那么類似提供c、c++ API 查詢的功能是如何實現的呢?對於一個智能問答系統,API查詢的功能其實可以抽象成一問一答的形式來做,由於暫時沒有這方面的語料庫,對於我們的公眾號來說,哪一種功能比較類似呢?我想到了添加一個計算機專業英語的英譯漢詞典
首先我們來看看,圖靈機器人提供的知識庫模板:
很好理解,其實就是兩列文本,第一列為問題,比如你叫什么,第二列為答案。
這樣的文本格式和詞典也很好對應。於是我們上網找到一個txt格式的計算機專業英語基礎英譯漢詞典:
觀察發現,前面是英文后面是漢語釋義,很好弄,python正則匹配一下,區分出英文和漢字出現的位置,完后寫到xls格式的文件中對應的單詞和釋義就好了:結構如下(問題對應單詞,答案對應釋義)
問題 | 答案 |
---|---|
單詞 | 釋義 |
**另外一個需要注意的點就是文件編碼,python默認都是utf-8的。
所以一般咱們txt這塊處理中文都是得用gbk系列的(比如gb2312),在python中處理的時候都轉換成unicode統一搞**
python代碼如下:主要使用了可以操作excel文件的xlwt庫,和正則表達式庫re
# -*- coding: utf-8 -*-
""" Spyder Editor write data to xls,2016.7.24 主要實現將一些其他格式的數據轉化成,圖靈機器人可以識別的xls格式數據 """
import os
import xlwt
import re
knowledge = []
def set_style(name,height,bold = False):
style = xlwt.XFStyle() #初始化樣式
font = xlwt.Font() #為樣式創建字體
font.name = name
font.bold = bold
font.color_index = 4
font.height = height
style.font = font
return style
def write_excel(knowledge):
#創建xls工作薄
workbook = xlwt.Workbook(encoding = 'utf-8')
#創建sheet
data_sheet = workbook.add_sheet('first')
for i in range(len(knowledge)):
data_sheet.write(i,0,knowledge[i][0])
data_sheet.write(i,1,knowledge[i][1])
#保存文件
workbook.save('answer.xls')
print "successful write!"
x=xlwt.Workbook()
s1=x.add_sheet('sheet1')
if __name__ == '__main__':
info = open("know.txt")
print "中文"
#a = info.readlines()
#print a
for line in info:
line = line.decode('GB2312').encode('utf-8')
#print line 這塊也可以整行進行拆分
# letter_str = re.findall(r'([a-zA-Z]+)',line,re.MULTILINE)
#hanzi_str = re.findall(r"([\x80-\xff]+)", line,re.MULTILINE)
#找到第一個出現漢字字符的位置,進行截斷,分成兩部分,分別寫到兩列中
hanstr = ''
yingstr = ''
index = 0
for i in line:
an = re.match(r"([\x80-\xff]+)", i)#判斷一下是中文
if an:
break
else:
index = index +1
yingstr = line[0:index]
hanstr = line[index:len(line)]
print index
print hanstr
str = [yingstr,hanstr]
knowledge.append(str)
write_excel(knowledge)
''' 下面使用庫xlwt進行操作excel文件的一些代碼,希望大家有空能夠用到 style1=xlwt.XFStyle() #樣式類 style1.font.colour_index=30 #字體顏色前景色為紅 style1.font.bold=True #粗體 style1.pattern.pattern=1 #填充solid style1.pattern.pattern_fore_colour=2 #填充顏色紅色 style2=xlwt.easyxf('font:italic on;pattern:pattern solid,fore-colour yellow') #快速生成樣式 #參數字符串格式: #"class1:key1 value1,key2 value2;class2:k1 v1,k2 v2;" s1.write(0,0,"Hello",style1)#寫入字符串 s1.write(1,0,True,style2)#寫入真值 s1.write(2,0,3.1415926);s1.write(2,1,-5);s1.write(2,2,xlwt.Formula("2*A3*ABS(B3)")); #使用公式計算 s1.write(3,0,'right',xlwt.easyxf("align:horiz right")) #調整對齊方式 x.save('example.xls') #保存 '''
處理好的文件:
然后導入圖靈機器人的知識庫:
然后我們的訂閱號就可以自動識別啦,那些查詢的功能和詞典大同小異,我想應該也是這么實現的吧。
4.實現效果
參考:(主要是編碼轉換和正則表達式)
http://bbs.csdn.net/topics/100172542
(正則表達式中漢語范圍出自上面帖子的六樓,網上搜到的[\u4e00-\u9fa5]這個不是很好使,還請大牛指點一二)
http://blog.chinaunix.net/uid-21633169-id-4396998.html
xlwt使用介紹:
http://blog.csdn.net/wangkai_123456/article/details/50457284