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

🍺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???
如果您需要相关功能的代码定制化开发,可以留言私信作者;(✿◡‿◡)
感谢各位大佬童鞋们的支持!( ´ ▽´ )ノ ( ´ ▽´)っ!!!
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu搭建VPN服务

PPTD协议 此协议据说安全级别不高&#xff0c;苹果系统已经不支持&#xff0c;但windows依然支持 1.安装,root账号登录服务器 apt-get update apt-get install pptpd 2.配置主机ip及连接主机的设备所分配ip池,客户端分配的内网ip段。 vim /etc/pptpd.conf 将以下两行注释去…

【计算机视觉】最强 Zero-Shot 视觉应用:Grounding DINO + Segment Anything + Stable Diffusion

文章目录 一、前言二、功能介绍2.1 功能一2.2 功能二2.3 其他有趣的功能 三、总结 一、前言 用 Midjourney 花一个小时做的项目 logo 图&#xff1a; 解释一下 logo 的含义&#xff1a;一只坐在地上的马赛克风格的熊。 坐在地面上是因为 ground 有地面的含义&#xff0c;然后分…

redi缓存使用

1、缓存的特征 第一个特征&#xff1a;在一个层次化的系统中&#xff0c;缓存一定是一个快速子系统&#xff0c;数据存在缓存中时&#xff0c;能避免每次从慢速子系统中存取数据。 第二个特征&#xff1a;缓存系统的容量大小总是小于后端慢速系统的&#xff0c;不可能把所有数…

R实践——paleobioDB详解(paleobiology database)

paleobioDB详解&#xff08;paleobiology database&#xff09; PBDB初步认识paleobioDB一个简单的例子 所有函数详解1. pbdb_collection描述用法参数细节值例子 2. pbdb_collections描述用法参数值例子 3. pbdb_collections_geo描述用法参数值例子 4. pbdb_interval描述用法参…

Oracle 体系结构

文章目录 Oracle体系结构Oracle的内存结构Oracle的进程结构服务器进程后台进程可选后台进程 物理存储结构逻辑存储结构 概念&#xff1a; Oracle server由Oracle instance和Oracle database组成&#xff0c;Oracle instance由后台进程和共享内存组成&#xff0c;Oracle的实例包…

层次分析法及找工作问题实战

学习知识要实时简单回顾&#xff0c;我把学习的层次分析法简单梳理一下&#xff0c;方便入门与复习。 AHP 层次分析法&#xff08;Analytic Hierarchy Process&#xff0c;简称 AHP&#xff09;是对一些较为复杂、较为模糊的问题作出决策的简易方法&#xff0c;它特别适用于那…

认识监听器(Listener)

监听器是什么&#xff1f; 监听器&#xff08;Listener&#xff09;是一种运行在后台的程序&#xff0c;它主要用于监控某些事件在系统中的发生&#xff0c;并且根据这些事件做一些特定的处理。在Web应用程序中&#xff0c;监听器可以观察ServletContext、HttpSession以及Serv…

vue项目为例解决element ui 时间选择器 picker使用样式穿透不起作用问题

今天在开发中 需要修改时间选择器弹出的这个组件的样式 但这个东西比较坑爹 首先 不能影响其他组件 就是其他组件用了时间选择器 不能受到我们写的样式的影响 那么 就只好穿透了 但你会发现 这东西是作用与body下的 就很坑 穿透我试了挺久的 不起作用 但官方文档有提供给我们一…

体验 gpt4free

体验 gpt4free 什么是 gpt4free效果演示安装 ffmpeg启动 gpt4free访问 gpt4free gui其他 什么是 gpt4free GPT4Free 是一个由 xtekky 创建的基于 OpenAI GPT-4 和 GPT-3.5 的 API。它可以向用户提供类似于 OpenAI GPT-3 的功能&#xff0c;如文本生成、问答、翻译等。 GPT4Fre…

UE5.1.1 C++ 从0开始 (1.人物移动)

开个天坑&#xff0c;UE5.1.1的移动代码做了一个大更新&#xff0c;对于我这种万年蓝图然后正在转C的人来说可以说是个挑战也可以说是个更方便我去工作的一个点。同时斯坦福大学的那个教程的开头几个章节就不适用了&#xff0c;对于学习UE5.1.1的同学来说。所以我这里会尽量每天…

c# 数据保存为PDF(二) (Aspose pdf篇)

文章目录 前言关于Aspose PDF使用Aspose.Pdf常用的命名空间和类库1 创建简单的PDF文档2 美化PDF样式2.1 创建测试数据2.2 项目头部样式2.3 全部代码 小结附录参考 前言 项目中需要将数据导出存为PDF格式&#xff0c;试了一下Aspose组件&#xff0c;仅以此记录一下使用感受。 …

为什么半导体FAB生产线需要EAP系统?

在半导体制造中&#xff0c;设备自动化系统EAP&#xff08;Equipment Automation Program&#xff09;是不可或缺的重要软件&#xff0c;它是连接MES、RMS、APC、FDC等上层系统和设备层的桥梁&#xff0c;用于管控生产线上的所有机台&#xff0c;并实现设备运行的自动化。 作为…

团队密码管理器Passbolt的安装

老苏下载了吴恩达联手 OpenAI 推出的 Prompt for developer 课程&#xff0c;总长度大概在一个半小时左右&#xff0c;可以让我们学习正确的 ChatGPT Prompt 工程 虽然课程对话是英文&#xff0c;但有中文字幕&#xff0c;课程地址&#xff1a;https://www.aliyundrive.com/s/…

Redux 学习系列(一) —— 基础概念入门篇

简介 Redux 是一个可预测的 JavaScript 应用状态管理容器&#xff0c;也可以说是一个应用数据流框架。 作用 Redux 主要是用作应用状态的管理。它抽离所有组件的状态&#xff0c;构造一个中心化的单独常量状态树&#xff08;对象&#xff09;来保存这一整个应用的状态。这棵…

java 学习日记

今天先搞题目 给你一个points 数组&#xff0c;表示 2D 平面上的一些点&#xff0c;其中 points[i] [xi, yi] 。 连接点 [xi, yi] 和点 [xj, yj] 的费用为它们之间的 曼哈顿距离 &#xff1a;|xi - xj| |yi - yj| &#xff0c;其中 |val| 表示 val 的绝对值。 请你返回将所…

TikTok选品要怎样才能选到爆品?!

对于做TikTok的商家而言&#xff0c;选品是非常重要的&#xff0c;因为一个产品爆了之后能带动其他产品的销量&#xff0c;那我们要如何有效的选品呢&#xff1f; 一、多平台选品逻辑 首先要知道一个点&#xff0c;在独立站爆的品也会在亚马逊爆&#xff0c;而TikTok已经成为一…

4D成像雷达风口,谁在快速崛起?

4D成像雷达正进入规模量产落地的关键窗口期。 高工智能汽车注意到&#xff0c;毫米波雷达的发展某种程度上可以分为两个阶段&#xff1a;第一个阶段&#xff0c;传统毫米波雷达时代&#xff0c;市场基本被博世、大陆、安波福等国际Tier1巨头把持&#xff0c;市场格局长期稳固&…

PyTorch数据加载工具:高效处理常见数据集的利器

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️ &#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…

SpringBoot中策略模式+工厂模式业务实例(接口传参-枚举类查询策略映射关系-执行不同策略)规避大量if-else

场景 设计模式-策略模式在Java中的使用示例&#xff1a; 设计模式-策略模式在Java中的使用示例_java 策略模式示例_霸道流氓气质的博客-CSDN博客 上面讲了策略模式在Java中的使用示例。 下面看一个在SpringBoot中的实际使用示例。 业务场景: 有多个煤矿&#xff0c;信号灯…

智安网络|网络安全威胁越来越多,教你如何全方面应对

随着互联网的普及和发展&#xff0c;各大网站已经成为人们获取信息和交流的主要平台。然而&#xff0c;随着网络攻击和恶意软件的威胁不断增加&#xff0c;网站经常成为攻击者的目标。因此&#xff0c;在建立和维护网站系统时&#xff0c;必须采取强大的安全措施。 一、网站系…