訂閱號很早就有了,我最近閒了無事就像探索探索能夠怎麼玩。首先聯想到就是微軟小冰智能問答系統,還有很早時候有一個公衆號提供了,根據c、c++函數名返回API具體用法的功能。那麼這兩個相似的功能如何實現呢。html
首先我的須要申請一個公衆號,接着在圖靈機器人的官網:http://www.tuling123.com/
註冊一個號,選擇添加微信公衆號,直接掃碼關聯,ok,智能問答系統接入成功!python
其實這個呢,是圖靈機器人獲取了微信的第三方接口,替你管理了微信號的消息回覆功能,而且提供了下面的基本功能:其實比較簡單,一些複雜的問題好比:給我訂個到上海的機票,直接會回覆去哪網的連接。相信這是圖靈機器人的主要賺錢點,哈哈。c++
那麼相似提供c、c++ API 查詢的功能是如何實現的呢?對於一個智能問答系統,API查詢的功能其實能夠抽象成一問一答的形式來作,因爲暫時沒有這方面的語料庫,對於咱們的公衆號來講,哪種功能比較相似呢?我想到了添加一個計算機專業英語的英譯漢詞典正則表達式
首先咱們來看看,圖靈機器人提供的知識庫模板:微信
很好理解,其實就是兩列文本,第一列爲問題,好比你叫什麼,第二列爲答案。
這樣的文本格式和詞典也很好對應。因而咱們上網找到一個txt格式的計算機專業英語基礎英譯漢詞典:markdown
觀察發現,前面是英文後面是漢語釋義,很好弄,python正則匹配一下,區分出英文和漢字出現的位置,完後寫到xls格式的文件中對應的單詞和釋義就行了:結構以下(問題對應單詞,答案對應釋義)app
問題 | 答案 |
---|---|
單詞 | 釋義 |
**另一個須要注意的點就是文件編碼,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') #保存 '''
處理好的文件:ui
而後導入圖靈機器人的知識庫:
而後咱們的訂閱號就能夠自動識別啦,那些查詢的功能和詞典大同小異,我想應該也是這麼實現的吧。
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