利用圖靈機器人爲公衆號添加智能問答,知識庫功能

1.緒論

訂閱號很早就有了,我最近閒了無事就像探索探索能夠怎麼玩。首先聯想到就是微軟小冰智能問答系統,還有很早時候有一個公衆號提供了,根據c、c++函數名返回API具體用法的功能。那麼這兩個相似的功能如何實現呢。html

這裏寫圖片描述

2.接入智能問答系統

首先我的須要申請一個公衆號,接着在圖靈機器人的官網:http://www.tuling123.com/
註冊一個號,選擇添加微信公衆號,直接掃碼關聯,ok,智能問答系統接入成功!python

這裏寫圖片描述

其實這個呢,是圖靈機器人獲取了微信的第三方接口,替你管理了微信號的消息回覆功能,而且提供了下面的基本功能:其實比較簡單,一些複雜的問題好比:給我訂個到上海的機票,直接會回覆去哪網的連接。相信這是圖靈機器人的主要賺錢點,哈哈。c++

這裏寫圖片描述

3.實現計算機專業英語辭典

那麼相似提供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

這裏寫圖片描述

而後導入圖靈機器人的知識庫:

這裏寫圖片描述

而後咱們的訂閱號就能夠自動識別啦,那些查詢的功能和詞典大同小異,我想應該也是這麼實現的吧。

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

相關文章
相關標籤/搜索