🍺NLP开发系列相关文章编写如下🍺:
- 🎈【NLP开发】Python实现词云图🎈
- 🎈【NLP开发】Python实现图片文字识别🎈
- 🎈【NLP开发】Python实现中文、英文分词🎈
- 🎈【NLP开发】Python实现聊天机器人(ELIZA))🎈
- 🎈【NLP开发】Python实现聊天机器人(ALICE)🎈
- 🎈【NLP开发】Python实现聊天机器人(ChatterBot,代码示例)🎈
- 🎈【NLP开发】Python实现聊天机器人(ChatterBot,集成前端页面)🎈
- 🎈【NLP开发】Python实现聊天机器人(ChatterBot,集成web服务)🎈
- 🎈【NLP开发】Python实现聊天机器人(微软Azure)🎈
- 🎈【NLP开发】Python实现聊天机器人(微软小冰)🎈
- 🎈【NLP开发】Python实现聊天机器人(钉钉机器人)🎈
- 🎈【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???
如果您需要相关功能的代码定制化开发,可以留言私信作者;
(✿◡‿◡)
感谢各位大佬童鞋们的支持!
( ´ ▽´ )ノ ( ´ ▽´)っ!!!