Python3, 33行代码搞了一个聊天机器人, 这下再也不怕没人说话了。

举报
Carl_奕然 发表于 2023/08/28 18:53:59 2023/08/28
【摘要】 没想到,33行代码搞了一个聊天机器人,YYDS。

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,
小鱼:那这个可以有。

海胆.jpg


小云:确定可以有是吧。
小鱼:那必须的。
小云:那就好办了, 鱼哥,写一个聊天机器人的教程。
小鱼:那吃几个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



其余安装方式,可以参照这两篇:

  • 《Python3,选择Python自动安装第三方库,从此跟pip说拜拜!!》
  • 《Python3:我低调的只用一行代码,就导入Python所有库!》


2.4 示例


2.4.1 创建聊天机器人


代码示例

# -*- coding:utf-8 -*-
# @Time   : 2023-08-15
# @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-08-15
# @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库,实现聊天机器人。

但是,这里,没有体现训练的内容,

也别着急, 小鱼会在下一篇安排上。

我是小鱼:

  • CSDN 博客专家;
  • 阿里云 专家博主;
  • 51CTO博客专家;
  • 51认证讲师等;
  • 认证金牌面试官;
  • 职场面试及培训规划师;
  • 多个国内主流技术社区的认证专家博主;
  • 多款主流产品(阿里云等)测评一、二等奖获得者;

关注我,带你学习更多更专业更前言的Python技术。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。