NLP--聊天机器人(一)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lyf52010/article/details/86616519

升级II:

光是会BB还是不行,得有知识体系!才能解决用户的问题。

我们可以用各种数据库,建立起一套体系,然后通过搜索的方式,来查找答案。

比如,最简单的就是Python自己的graph数据结构来搭建一个“地图”。

依据这个地图,我们可以清楚的找寻从一个地方到另一个地方的路径,

然后作为回答,反馈给用户。

In [17]:

# 建立一个基于目标行业的database
# 比如 这里我们用python自带的graph
graph = {'上海': ['苏州', '常州'],
         '苏州': ['常州', '镇江'],
         '常州': ['镇江'],
         '镇江': ['常州'],
         '盐城': ['南通'],
         '南通': ['常州']}

# 明确如何找到从A到B的路径
def find_path(start, end, path=[]):
    path = path + [start]
    if start == end:
        return path
    if start not in graph:
        return None
    for node in graph[start]:
        if node not in path:
            newpath = find_path(node, end, path)
            if newpath: return newpath
    return None

In [20]:

print(find_path('上海', "镇江"))
['上海', '苏州', '常州', '镇江']

同样的构建知识图谱的玩法,

也可以使用一些Logic Programming,比如上个世纪学AI的同学都会学的Prolog。

或者比如,python版本的prolog:PyKE。

他们可以构建一种复杂的逻辑网络,让你方便提取信息,

而不至于需要你亲手code所有的信息:

son_of(bruce, thomas, norma)
son_of(fred_a, thomas, norma)
son_of(tim, thomas, norma)
daughter_of(vicki, thomas, norma)
daughter_of(jill, thomas, norma)



升级III:

任何行业,都分个前端后端。

AI也不例外。

我们这里讲的算法,都是后端跑的。

那么, 为了做一个靠谱的前端,很多项目往往也需要一个简单易用,靠谱的前端。

比如,这里,利用Google的API,写一个类似钢铁侠Tony的语音小秘书Jarvis:

我们先来看一个最简单的说话版本。

利用gTTs(Google Text-to-Speech API), 把文本转化为音频。

In [4]:

from gtts import gTTS
import os
tts = gTTS(text='您好,我是您的私人助手,我叫小辣椒', lang='zh-tw')
tts.save("hello.mp3")
os.system("mpg321 hello.mp3")

Out[4]:

0

同理,

有了文本到语音的功能,

我们还可以运用Google API读出Jarvis的回复:

(注意:这里需要你的机器安装几个库 SpeechRecognition, PyAudio 和 PySpeech)

In [2]:

import speech_recognition as sr
from time import ctime
import time
import os
from gtts import gTTS
import sys
 
# 讲出来AI的话
def speak(audioString):
    print(audioString)
    tts = gTTS(text=audioString, lang='en')
    tts.save("audio.mp3")
    os.system("mpg321 audio.mp3")

# 录下来你讲的话
def recordAudio():
    # 用麦克风记录下你的话
    r = sr.Recognizer()
    with sr.Microphone() as source:
        audio = r.listen(source)
 
    # 用Google API转化音频
    data = ""
    try:
        data = r.recognize_google(audio)
        print("You said: " + data)
    except sr.UnknownValueError:
        print("Google Speech Recognition could not understand audio")
    except sr.RequestError as e:
        print("Could not request results from Google Speech Recognition service; {0}".format(e))
 
    return data

# 自带的对话技能(rules)
def jarvis():
    
    while True:
        
        data = recordAudio()

        if "how are you" in data:
            speak("I am fine")

        if "what time is it" in data:
            speak(ctime())

        if "where is" in data:
            data = data.split(" ")
            location = data[2]
            speak("Hold on Tony, I will show you where " + location + " is.")
            os.system("open -a Safari https://www.google.com/maps/place/" + location + "/&")

        if "bye" in data:
            speak("bye bye")
            break

# 初始化
time.sleep(2)
speak("Hi Tony, what can I do for you?")

# 跑起
jarvis()

***************************************************************************************************************************************

猜你喜欢

转载自blog.csdn.net/lyf52010/article/details/86616519
今日推荐