【NLP开发】Python实现聊天机器人(ChatterBot,集成web服务)

news2025/4/11 5:46:47

🍺NLP开发系列相关文章编写如下🍺:

  1. 🎈【NLP开发】Python实现词云图🎈
  2. 🎈【NLP开发】Python实现图片文字识别🎈
  3. 🎈【NLP开发】Python实现中文、英文分词🎈
  4. 🎈【NLP开发】Python实现聊天机器人(ELIZA))🎈
  5. 🎈【NLP开发】Python实现聊天机器人(ALICE)🎈
  6. 🎈【NLP开发】Python实现聊天机器人(ChatterBot,代码示例)🎈
  7. 🎈【NLP开发】Python实现聊天机器人(ChatterBot,集成前端页面)🎈
  8. 🎈【NLP开发】Python实现聊天机器人(ChatterBot,集成web服务)🎈
  9. 🎈【NLP开发】Python实现聊天机器人(微软Azure)🎈
  10. 🎈【NLP开发】Python实现聊天机器人(微软小冰)🎈
  11. 🎈【NLP开发】Python实现聊天机器人(钉钉机器人)🎈
  12. 🎈【NLP开发】Python实现聊天机器人(微信机器人)🎈

文章目录

  • 1、简介
    • 1.1 flask
    • 1.2 django
    • 1.3 fastapi
  • 2、web框架
    • 2.1 基于flask的示例
    • 2.2 基于Django的示例
    • 2.3 基于fastapi的示例
  • 结语

1、简介

1.1 flask

Flask诞生于2010年, Armin Ronacher的一个愚人节玩笑。不过现在已经是一个用python语言基于Werkzeug工具箱编写的轻量级web开发框架,它主要面向需求简单,项目周期短的小应用。
在这里插入图片描述
Flask扩展包:

Flask-SQLalchemy:操作数据库;
Flask-migrate:管理迁移数据库;
Flask-Mail:邮件;
Flask-WTF:表单;
Flask-script:插入脚本;
Flask-Login:认证用户状态;
Flask-RESTful:开发REST API的工具;
Flask-Bootstrap:集成前端Twitter Bootstrap框架;
Flask-Moment:本地化日期和时间;

1.2 django

Django 是一个由 Python 编写的一个开放源代码的 Web 应用框架。
在这里插入图片描述

使用 Django,只要很少的代码,Python 的程序开发人员就可以轻松地完成一个正式网站所需要的大部分内容,并进一步开发出全功能的 Web 服务 Django 本身基于 MVC 模型,即 Model(模型)+ View(视图)+ Controller(控制器)设计模式,MVC 模式使后续对程序的修改和扩展简化,并且使程序某一部分的重复利用成为可能。
在这里插入图片描述

  • 简易图:
    在这里插入图片描述
  • 用户操作流程图:
    在这里插入图片描述
    Django 的 MTV 模式本质上和 MVC 是一样的,也是为了各组件间保持松耦合关系,只是定义上有些许不同,Django 的 MTV 分别是指:

M 表示模型(Model):编写程序应有的功能,负责业务对象与数据库的映射(ORM)。
T 表示模板 (Template):负责如何把页面(html)展示给用户。
V 表示视图(View):负责业务逻辑,并在适当时候调用 Model和 Template。

  • 简易图:
    在这里插入图片描述
  • 用户操作流程图:
    在这里插入图片描述

1.3 fastapi

2、web框架

2.1 基于flask的示例

安装:

pip install flask

在这里插入图片描述
导入Flask和ChatterBot库,并创建应用:

from flask import Flask, request, jsonify
from chatterbot import ChatBot
from chatterbot.trainers import ChatterBotCorpusTrainer

app = Flask(__name__)

配置ChatterBot机器人,并进行训练:

bot = ChatBot('My Bot')

trainer = ChatterBotCorpusTrainer(bot)
trainer.train('chatterbot.corpus.english')

创建路由,响应GET请求并返回首页html:

@app.route('/')
def home():
    return '''<h1>My Bot</h1>
    <form method="POST" action="/get">
        <input type="text" name="msg" />
        <input type="submit" value="送出" />
    </form>'''

创建路由,响应POST请求并返回ChatterBot机器人的回答:

@app.route('/get', methods=['POST'])
def chat():
    user_text = request.form['msg']
    bot_text = bot.get_response(user_text)
    return jsonify({"msg": str(bot_text)})

运行Flask应用:

if __name__ == '__main__':
    app.run(debug=True)

在浏览器中输入URL地址,即可访问对应的视图函数和ChatterBot机器人响应用户输入的问答。

完整的测试脚本:

  • app.py:
from flask import Flask, render_template, request
from chatterbot import ChatBot
from chatterbot.trainers import ChatterBotCorpusTrainer

app = Flask(__name__)

english_bot = ChatBot("Chatterbot", storage_adapter="chatterbot.storage.SQLStorageAdapter")
trainer = ChatterBotCorpusTrainer(english_bot)
trainer.train("chatterbot.corpus.english")

@app.route("/")
def home():
    return render_template("index.html")

@app.route("/get")
def get_bot_response():
    userText = request.args.get('msg')
    return str(english_bot.get_response(userText))

if __name__ == "__main__":
    app.run()

在这里插入图片描述

2.2 基于Django的示例

安装:

pip install django

在这里插入图片描述

测试脚本:

错误:ERRORS: ?: (admin.E408) ‘django.contrib.auth.middleware.AuthenticationMiddleware’ must be in MIDDLEW。

解答:
主要是修改官方文档中的settings.py文件。

"""
MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'django.middleware.security.SecurityMiddleware',
)
"""
MIDDLEWARE = [  
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    #'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    # 'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

另外,要配置chatterbot信息。

## 'name'是已经训练好的chatterbot的name。
## 数学公式计算和时间获取要写注释,
## 当没有与输入最匹配的文字输出时,
## chatterbot的逻辑是会输出当前时间的,这样看上去会比较诡异。
CHATTERBOT = {
    'name': 'Ron Obvious',
    'django_app_name': 'django_chatterbot',
    'logic_adapters': [
        'chatterbot.logic.BestMatch',
        #'chatterbot.logic.MathematicalEvaluation',
        #'chatterbot.logic.TimeLogicAdapter',
        
    ]
}
总结一下: 改变的地方有3处 - MIDDLEWARE_CLASSES->MIDDLEWARE - 元组()改成列表[] - 'django.contrib.auth.middleware.SessionAuthenticationMiddleware',在Django新版本中删除 修改完成后 ,需要同步数据库信息:
python manage.py migrate

指定本机端口运行服务:

python manage.py runserver 9000

运行结果:
在这里插入图片描述
在这里插入图片描述
总结:
创建测试django项目:

django-admin startproject mychatbot

在这里插入图片描述
在这里插入图片描述

安装和设置ChatterBot:

pip install chatterbot

修改settings.py文件:

# mychatbot/settings.py
INSTALLED_APPS = [
    # ...
    'chatterbot.ext.django_chatterbot',
]

MIDDLEWARE = [
    # ...
    'chatterbot.ext.django_chatterbot.middleware.ChatBotResponseMiddleware',
]

CHATTERBOT = {
    'name': 'My ChatterBot',
    'logic_adapters': [
        {
            'adapter': 'chatterbot.logic.MathematicalEvaluation',
        },
        {
            'adapter': 'chatterbot.logic.BestMatch',
        }
    ],
    'trainer': 'chatterbot.trainers.ChatterBotCorpusTrainer',
    'training_data': [
        'chatterbot.corpus.english.greetings',
        'chatterbot.corpus.english.conversations'
    ],
}

创建Django app(假设app名为“myapp”):

python manage.py startapp myapp

编写views.py文件的代码:

# myapp/views.py
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
from chatterbot.ext.django_chatterbot import settings
from chatterbot import ChatBot


chatbot = ChatBot(**settings.CHATTERBOT)


@csrf_exempt
def bot(request):
    if request.method == 'POST':
        input_data = request.POST.get('input')
        response_data = chatbot.get_response(input_data).text
        return JsonResponse({'response': response_data})
    else:
        return JsonResponse({'response': 'Error: Invalid request method'})

编写urls.py文件的代码:

# mychatbot/urls.py
from django.conf.urls import url, include


urlpatterns = [
    # ...
    url(r'^myapp/', include('myapp.urls')),
]
# myapp/urls.py
from django.conf.urls import url
from .views import bot


urlpatterns = [
    url(r'^bot/$', bot, name='bot'),
]

运行Django开发服务器:

python manage.py runserver

在浏览器中输入URL地址,即可访问对应的视图函数和ChatterBot机器人响应用户输入的问答。

2.3 基于fastapi的示例

安装FastAPI和ChatterBot:

pip install fastapi chatterbot

导入FastAPI和ChatterBot库:

from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from chatterbot import ChatBot
from chatterbot.trainers import ChatterBotCorpusTrainer

创建FastAPI应用和机器人:

app = FastAPI()

bot = ChatBot('My Bot')

trainer = ChatterBotCorpusTrainer(bot)
trainer.train('chatterbot.corpus.english')

设置CORS中间件,允许跨域请求:

origins=["*"] # 或者通过列表指定允许的域名和端口号

app.add_middleware(
    CORSMiddleware,
    allow_origins=origins,
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)

创建路由,接收GET请求并返回首页:

@app.get('/')
def home():
    return {'msg': 'Welcome to My Bot!'}

创建路由,接收POST请求并返回机器人的回答:

@app.post('/get')
async def chat(msg: str):
    bot_text = bot.get_response(msg)
    return {'msg': str(bot_text)}

运行FastAPI:

if __name__ == '__main__':
    import uvicorn
    uvicorn.run(app, host='0.0.0.0', port=8000)

在浏览器或者接口测试工具中输入URL地址,即可使用ChatterBot机器人响应用户输入的问答。
完整代码如下:

from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from chatterbot import ChatBot
from chatterbot.trainers import ChatterBotCorpusTrainer

app = FastAPI()

bot = ChatBot('My Bot')

trainer = ChatterBotCorpusTrainer(bot)
trainer.train('chatterbot.corpus.english')

origins=["*"] # 或者通过列表指定允许的域名和端口号

app.add_middleware(
    CORSMiddleware,
    allow_origins=origins,
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)

@app.get('/')
def home():
    return {'msg': 'Welcome to My Bot!'}

@app.post('/get')
async def chat(msg: str):
    bot_text = bot.get_response(msg)
    return {'msg': str(bot_text)}

if __name__ == '__main__':
    import uvicorn
    uvicorn.run(app, host='0.0.0.0', port=8000)


结语

如果您觉得该方法或代码有一点点用处,可以给作者点个赞,或打赏杯咖啡;╮( ̄▽ ̄)╭
如果您感觉方法或代码不咋地//(ㄒoㄒ)//,就在评论处留言,作者继续改进;o_O???
如果您需要相关功能的代码定制化开发,可以留言私信作者;(✿◡‿◡)
感谢各位大佬童鞋们的支持!( ´ ▽´ )ノ ( ´ ▽´)っ!!!
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/503214.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

澳大利亚兔灾和——栈?

一.背景 1859年&#xff0c;当一位叫托马斯奥斯汀的农民收到英国老家送来的24只野兔并将它们放归农场的时候&#xff0c;他绝对意想不到&#xff0c;这些看似人畜无害的小兔子&#xff0c;竟为古老的澳洲大陆带来一场巨大的生态破坏。到20世纪初&#xff0c;澳大利亚的兔子数量…

操作系统内存管理(上)——内存管理基础

一、内存的基本知识 1.什么是内存&#xff1f;有什么作用&#xff1f; 内存可存放数据。程序执行前先放到内存才能被CPU处理——缓和CPU和硬盘之间的速度矛盾。 给内存的存储单元编址。如果计算机按字节编址&#xff0c;则每个存储单元大小为1字节。即1B8b&#xff08;8个二进…

智能医院导航导诊系统,门诊地图导航怎么做?

现在很多医院都是综合化大型医院&#xff0c;有很多的科室&#xff0c;院区面积也逐渐扩大&#xff0c;一方面给病患提供了更为全面的医疗资源&#xff0c;另一方面&#xff0c;医院复杂的环境也给病患寻医问诊带来了一定的困扰。电子地图作为大家最喜闻乐见的高效应用形式&…

Python的socket模块及示例

13.2 socket模块 socket由一些对象组成&#xff0c;这些对象提供网络应用程序的跨平台标准。 13.2.1 认识socket模块 socket又称“套接字”&#xff0c;应用程序通常通过“套接字”向网络发出请求或应答网络请求&#xff0c;使主机间或一台计算机上的进程间可以通信。sock…

Android 路由框架ARouter源码解析

作者&#xff1a;小马快跑 我们知道在使用ARouter时&#xff0c;需要在build.config里配置&#xff1a; annotationProcessor com.alibaba:arouter-compiler:1.2.2并且知道annotationProcessor用来声明注解解析器&#xff0c;arouter-compiler用来解析ARouter中的各个注解并自…

代码管理记录(一): 码云Gitee代码提交和维护

文章目录 Gitee介绍登录地址代码提交 Gitee介绍 Gitee 是一个类似于GitHub的代码托管平台&#xff0c;是中国的开源社区和开发者社区。它为开发者提供了基于Git的代码托管、协作、部署、代码质量检测、漏洞扫描、容器镜像等服务&#xff0c;同时也提供了一系列的个人资料和社交…

gitlab使用docker简单快速部署

文章目录 前言一、下载gitlab镜像二、安装步骤1.创建docker-compose文件2. 启动及登陆 三、配置页面总结 前言 GitLab 是一个用于仓库管理系统的开源项目&#xff0c;使用Git作为代码管理工具&#xff0c;并在此基础上搭建起来的web服务。本文主要用来记录如何使用docker快速搭…

c#笔记-类成员

声明类 类可以使用帮助你管理一组相互依赖的数据&#xff0c;来完成某些职责。 类使用class关键字定义&#xff0c;并且必须在所有顶级语句之下。 类的成员只能有声明语句&#xff0c;不能有执行语句。 class Player1 {int Hp;int MaxHp;int Atk;int Def;int Overflow(){if (…

七大排序算法一文通(易懂图解+优化代码)

目录 1.直接插入排序 2.希尔排序 3.选择排序 4.堆排序 5.冒泡排序 6.快速排序 6.1 递归实现——Hoare版 6.2 递归实现——挖坑法 6.3 非递归实现 6.4 优化 7.归并排序 7.1 归并排序——递归实现 7.2 归并排序——非递归实现 8.复杂度以及稳定性 1.直接插入排序 …

一列数到中位数的总距离最小

一列数到中位数的总距离最小 3554.二进制&#xff08;二进制数的加减法-转化为十进制运算再将结果转回二进制3565.完美矩阵1824.钻石收藏家&#xff08;经典双指针&#xff09; 3554.二进制&#xff08;二进制数的加减法-转化为十进制运算再将结果转回二进制 输入样例&#xff…

i春秋 Misc Web 爆破-1

打开链接是PHP源码 代码审计&#xff1a; include "flag.php"; 表示文件中包含flag.php文件&#xff0c;即根目录下存在flag.php $a $_REQUEST[hello]; 命名一个变量a来接收超全局变量$_REQUEST&#xff08;接收表单’hello’数据&#xff0c;请求一个为hello的参…

研发效能系列 - 质量与速度能否兼得?

作者&#xff1a;冬哥 引言 我们的时间&#xff0c;应该是用于提高软件质量&#xff0c;还是专注在发布更有价值的功能&#xff1f;这貌似是软件研发中永恒的话题。 到底什么是质量&#xff1f;质量有什么特质&#xff1f; 质量与速度是什么关系&#xff0c;两者是一个硬币的…

spring.factories 的作用是什么

spring.factories 文件用于在 Spring Boot 项目中配置自动配置项。它包含了一系列 key-value 对,key 是自动配置类的全限定名,value 是这些配置类对应的条件类。Spring Boot 会在启动时扫描 classpath 下的 META-INF/spring.factories 文件,并加载其中定义的自动配置类。这些自…

[IAR][CC2642R1] IDE安装和环境搭建,CC2642的环境配置

文章目录 一、IAR安装&#xff08;1&#xff09;压缩包下载&#xff08;2&#xff09;IAR安装(3) 注册(4) 补丁 二、在IAR中使用CC2642&#xff08;0&#xff09;打开IAR&#xff0c;配置环境。&#xff08;1&#xff09;例程位置&#xff08;2&#xff09;打开例程&#xff08…

4.Redis10大数据类型

Redis10大数据类型 Which 101.String&#xff08;字符串&#xff09;2.List&#xff08;列表&#xff09;3.hash &#xff08;哈希&#xff09;4.Set&#xff08;集合&#xff09;5.zset(sorted set&#xff1a;有序集合)6.Redis GEO &#xff08;地理空间&#xff09;7.HyperL…

金融贷款行业怎么找客户,运营商数据了解过没?

现如今随着信息社会发展的来临&#xff0c;销售市场呈碎片化发展趋向&#xff0c;各个行业为寻找用户&#xff0c;根据网上广告投放线下推广做活动&#xff0c;但效果微乎其微。拓客越来越难&#xff0c;且成本费也越来越高&#xff0c;成为很多公司的烦恼之处。 从被动获取客…

K8S基础理论,核心组件,数据流向详解

目录 第一章.k8s概述 1.1.什么是云原生 1.2.什么是K8S 1.3.K8S的优势 1.4.K8S的功能 1.5.K8S 的特性&#xff1a; 1.6.Kubernetes 集群架构与组件 第二章.K8S的核心组件 2.1.Master 组件 2.2.配置存储中心 2.3.Node 组件 第三章.Kubernetes 核心概念 3.1.Pod 3.2…

【Unity项目实战】手把手教学:飞翔的小鸟(6)添加障碍

承接上一篇&#xff1a;【Unity项目实战】手把手教学&#xff1a;飞翔的小鸟&#xff08;5&#xff09;背景滚动&#xff0c;我们已经让主角在停止不动的情况下&#xff0c;移动背景图&#xff0c;使得主角小鸟像是自己往前移动了一样&#xff0c;接下来我们将继续往下&#xf…

【王道·计算机网络】第二章 物理层

一、通信基础 1. 基本概念 1.1 物理层接口特性 物理层解决如何在连接各种计算机的传输媒体上传输比特流&#xff0c;不指定具体的传输媒体主要任务&#xff1a;确定与传输媒体接口有关的一些特性 → 定义标准接口特性&#xff1a; 机械特性&#xff1a;定义物理连接的特性&a…

区间预测 | MATLAB实现QRDNN深度神经网络分位数回归时间序列区间预测

区间预测 | MATLAB实现QRDNN深度神经网络分位数回归时间序列区间预测 目录 区间预测 | MATLAB实现QRDNN深度神经网络分位数回归时间序列区间预测效果一览基本介绍模型描述程序设计参考资料 效果一览 基本介绍 MATLAB实现QRDNN深度神经网络分位数回归时间序列区间预测。QRDNN模型…