如何用python的自然语言处理打造自己的智能机器人

一、基本流程

我们可以参照以下流程进行智能机器人的程序设计工作,

(1)利用已有的数据对 TfidfVectorizer 模型进行训练

(2)利用训练好的TF-IDF模型进行训练数据data0和真实数据data1的TFIDF值求解

(3)通过余弦相似度进行两者的比较找到data1和data0中的所有值的相似值

(4)取出相似值结果中最相似值的索引,并将该索引对应的答复输出即可

参考代码:

import numpy as np
import jieba
from sklearn.feature_extraction.text import TfidfVectorizer

# 车机的命令与回复数组
from sklearn.metrics.pairwise import cosine_similarity

command=[['请打开车窗','好的,车窗已打开'],
         ['我要听陈奕迅的歌','为你播放富士山下'],
         ['我好热','已为你把温度调到25度'],
         ['帮我打电话给小猪猪','已帮你拨小猪猪的电话'],
         ['现在几点钟','现在是早上10点'],
         ['我要导航到中华广场','高德地图已打开'],
         ['明天天气怎么样','明天天晴']
        ]

# 利用 jieba 转换命令格式
def getWords():
    comm=np.array(command)
    list=[jieba.lcut(sentence) for sentence in comm[:,0]]
    words=[' '.join(word) for word in list]
    return words

#获取输入命令的分词
def getInputWords():
    # 把输入命令转化为数组格式
    sentence = jieba.lcut(inputCommand)
    words = ' '.join(sentence)
    list = []
    list.insert(0, words)
    return list

# 训练 TfidfVectorizer 模型
def getModel():
    words=getWords()
    vectorizer=TfidfVectorizer()
    model=vectorizer.fit(words)
    return model

# 计算 consine 余弦相似度
def consine():    # 获取训练好的 TfidfVectorizer 模型
    model=getModel()
    # 获取车机命令的 TF-IDF 向量
    data0=model.transform(getWords()).toarray().reshape(len(command),-1)
    # 获取输入命令的 TF-IDF 向量
    data1=model.transform(getInputWords()).toarray().reshape(1,-1)
    # 余弦相似度对比
    result=cosine_similarity(data0,data1)
    print('相似度对比:\n{0}'.format(result))
    return result

if __name__=='__main__':
    inputCommand=input('您请说:')
    # 获取余弦相似度
    result=np.array(consine())
    # 获取相似度最高的命令 index
    argmax=result.argmax()
    # 读取命令回复
    data=command[argmax][1]
    print('命令:{0}\n回复:{1}'.format(inputCommand,data))

你可能感兴趣的:(机器学习,NLP自然语言处理,机器人,数据挖掘,自然语言处理)