Python制作聊天机器人
- 1、引言
- 2、实战
- 2.1 准备
- 2.2 介绍
- 2.2.1 NLTK
- 2.2.2 ChatterBot
- 2.3 安装
- 2.4 示例
- 2.4.1 创建聊天机器人
- 2.4.2 与用户交互
- 3、总结
1、引言
小屌丝:鱼哥, 看这段代码
from chatterbot import ChatBot
# 创建聊天机器人
chatbot = ChatBot('MyBot')
# 加载语料库
with open('chatterbot.corpus.txt', 'r') as f:
chatbot.train(f.read())
# 获取用户输入
user_input = input("You: ")
# 获取聊天机器人的回答
chatbot_response = chatbot.get_response(user_input)
# 输出聊天机器人的回答
print("Bot: " + chatbot_response)
小鱼:嗯 ,看了。
小屌丝:有啥感受?
小鱼:没啥感受。
小屌丝:那有啥感想?
小鱼:没啥感想。
小屌丝:那有啥想法?
小鱼:没啥想法。
小屌丝:这个可以有。
小鱼:这个… 真没有。
小屌丝:…
小鱼:…
小屌丝:请你吃 ci guo,
小鱼:那这个可以有。
小屌丝:确定可以有是吧。
小鱼:那必须的。
小屌丝:那就好办了, 鱼哥,写一个聊天机器人的教程。
小鱼:那吃几个ci guo?
小屌丝:5个吧。
小鱼:抠搜的。
小屌丝:拉倒吧, 一个 88, 5个可是我这一个月的零花钱。
小鱼:你想啊, 知识是无价,只用5个ci guo,就换一个聊天机器人的教程,多合算。
小屌丝:… 行, 行, 你别说了, 我请。
小鱼:嘿嘿… 嘿嘿…
2、实战
2.1 准备
说到聊天机器人,似乎给我们很高大上,很神秘的技能,
其实,并非这样,
今天,我们就来探究探究,聊天机器人,到底有多简单。
要想实现聊天机器人的功能,首先,我们要借助于2个三方库,即:
- NLTK库:用于自然语言处理,包括分词、分词、词性标注等功能。
- ChatterBot库:用于创建聊天机器人
其次,我们就来分两步:
- 创建聊天机器人
- 实现用户交互
最后,我们就搞起来。
2.2 介绍
2.2.1 NLTK
定义
- NLTK库是一个开源自然语言处理库,包括了分词、分词、词性标注等功能。
- 它是Python自然语言处理的核心库之一,被广泛应用于文本处理、语音识别、机器翻译等领域。
常用函数和类:
- nltk.download():用于下载NLTK库中的数据集和模块。
- nltk.corpus:包含了许多常用语料库,例如Brown语料库、Web of Science语料库等。
- nltk.tokenize:用于对文本进行分词。
- nltk.word_tokenize:对文本进行分词。
- nltk.pos_tag:用于对文本进行词性标注。
- nltk.stem:用于对单词进行词干提取。
- nltk.chat:用于创建聊天机器人。
2.2.2 ChatterBot
定义:
- ChatterBot库是一个基于Python的聊天机器人库,
- 可以用于创建自然语言处理机器人;
常用方法:
- ChatBot:创建聊天机器人的类。
- Train:用于训练聊天机器人的方法。
- get_response:用于获取聊天机器人的回答的方法。
- Corpus:用于加载和训练聊天机器人的语料库。
2.3 安装
知道了库,接下来我们就来安装,老规矩,直接pip安装
pip install nltk
pip install chatterbot
其余安装方式,可以参照这两篇:
2.4 示例
2.4.1 创建聊天机器人
代码示例
# -*- coding:utf-8 -*-
# @Time : 2023-07-12
# @Author : Carl_DJ
'''
实现功能:
创建聊天机器人。
'''
import nltk
from chatterbot import ChatBot
# 加载语料库
nltk.download('stopwords')
nltk.download('punkt')
nltk.download('averaged_perceptron_tagger')
# 创建聊天机器人
chatbot = ChatBot('MyBot')
# 加载语料库
with open('chatterbot.corpus.txt', 'r') as f:
chatbot.train(f.read())
# 定义回答规则
def get_answer(input_string):
# 将输入字符串分成单词
words = input_string.split()
# 取出最常见的单词
most_common_word = nltk.FreqDist(words).most_common(1)[0]
# 检查最常见的单词是否是一个问题
if most_common_word[0] in ['what', 'why', 'how']:
return "I'm not sure. Can you please provide more context?"
# 如果最常见的单词是一个名词,则回答关于该名词的问题
elif most_common_word[0] in ['book', 'movie', 'song', 'artist']:
return f"What's the name of {most_common_word[0]}?"
# 如果最常见的单词是一个动词,则回答如何做该动词
elif most_common_word[0] in ['eat', 'sleep', 'run', 'jump']:
return f"How do you {most_common_word[0]}?"
# 如果最常见的单词不是一个问题或名词,则回答一个随机回答
else:
return "I'm not sure. Can you please provide more context?"
2.4.2 与用户交互
代码示例
# -*- coding:utf-8 -*-
# @Time : 2023-07-12
# @Author : Carl_DJ
'''
实现功能:
实现与用户交互。
'''
import nltk
while True:
# 获取用户输入
user_input = input("You: ")
# 转换用户输入为小写
user_input = user_input.lower()
# 获取聊天机器人的回答
chatbot_response = chatbot.get_response(user_input)
# 将聊天机器人的回答转换为小写
chatbot_response = chatbot_response.lower()
# 输出聊天机器人的回答
print("Bot: " + chatbot_response)
# 检查是否需要退出
if user_input == 'exit':
break
3、总结
看到这里,今天的分享就结束了。
今天主要使用 nltk 和 chatterbot库,实现聊天机器人。
但是,这里,没有体现训练的内容,
也别着急, 小鱼会在下一篇安排上。
我是小鱼:
- 博客专家;
- 阿里云 专家博主;
- 51CTO博客专家;
- 51认证讲师等;
- 认证金牌面试官;
- 职场面试及培训规划师;
- 多个国内主流技术社区的认证专家博主;
- 多款主流产品(阿里云等)测评一、二等奖获得者;
关注我,带你学习更多更专业更前言的Python技术。