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

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

  • 1
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于seq2seq模型的聊天机器人开发环境的搭建可以分为几个主要步骤。 首先,需要安装Python,建议使用Python 3.x版本。Python是一种常用的编程语言,它有着广泛的库和框架支持,非常适合进行机器学习和自然语言处理任务。 接下来,安装TensorFlow库。TensorFlow是一种流行的深度学习框架,提供了各种用于构建和训练神经网络的工具和函数。可以通过在终端窗口运行"pip install tensorflow"命令来安装TensorFlow。 然后,安装额外的依赖库,如NumPy和NLTK。NumPy是一种用于数值计算的Python库,常用于处理矩阵和向量运算。可以使用"pip install numpy"命令安装。NLTK(自然语言工具包)是一个强大的自然语言处理库,提供了丰富的语言处理功能和数据集。可以使用"pip install nltk"命令安装。 接下来,需要准备训练数据集。可以使用开放的聊天数据集,如Cornell Movie-Dialogs Corpus或Twitter Chat Corpus。这些数据集包含了人与人之间的对话文本,作为聊天机器人的输入输出对。 然后,准备将数据集进行预处理。这包括对文本进行分词、去除特殊字符和标点符号、构建词汇表等。可以使用NLTK库中的函数和方法来实现这些预处理步骤。 接下来,开始构建seq2seq模型。可以使用TensorFlow的高级API——Keras来构建模型。可以使用Embedding层将文本数据转化为向量表示,使用LSTM层来建模序列数据,使用Dense层进行输出。还可以添加一些额外的层和损失函数来提升模型性能。 最后,进行模型的训练和评估。可以使用预处理后的数据集来训练模型,使用交叉熵或其他损失函数进行训练。可以使用一部分数据作为验证集来进行模型的评估和调优。 通过以上步骤,就可以搭建基于seq2seq模型的聊天机器人开发环境。可以通过增加数据量、调整模型架构、调整超参数等方法来进一步优化和改进聊天机器人的性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值