【小沐学NLP】Python实现聊天机器人(ChatterBot,集成web服务) 您所在的位置:网站首页 python聊天机器人程序代码 【小沐学NLP】Python实现聊天机器人(ChatterBot,集成web服务)

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

2024-06-28 13:21| 来源: 网络整理| 查看: 265

🍺NLP开发系列相关文章编写如下🍺:1🎈【小沐学NLP】Python实现词云图🎈2🎈【小沐学NLP】Python实现图片文字识别🎈3🎈【小沐学NLP】Python实现中文、英文分词🎈4🎈【小沐学NLP】Python实现聊天机器人(ELIZA))🎈5🎈【小沐学NLP】Python实现聊天机器人(ALICE)🎈6🎈【小沐学NLP】Python实现聊天机器人(微软Azure)🎈7🎈【小沐学NLP】Python实现聊天机器人(微软小冰)🎈8🎈【小沐学NLP】Python实现聊天机器人(钉钉机器人)🎈9🎈【小沐学NLP】Python实现聊天机器人(微信机器人)🎈10🎈【小沐学NLP】Python实现聊天机器人(Selenium、七嘴八舌)🎈11🎈【小沐学NLP】Python实现聊天机器人(若干在线聊天机器人)🎈12🎈【小沐学NLP】Python实现聊天机器人(ChatterBot,代码示例)🎈13🎈【小沐学NLP】Python实现聊天机器人(ChatterBot,集成前端页面)🎈14🎈【小沐学NLP】Python实现聊天机器人(ChatterBot,集成web服务)🎈

文章目录 1、简介1.1 flask1.2 django1.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 '''My Bot '''

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



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有