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

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库,实现聊天机器人。

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

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

我是小鱼

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

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

猜你喜欢

转载自blog.csdn.net/wuyoudeyuer/article/details/131678776