【持续更新】【NLP项目】【自然语言处理】智能聊天机器人——“有问必答”【Chatbot】第2章、《模式一:问候模式》

智能聊天机器人——“有问必答”

【注】该项目已开源,开源地址为:链接,代码更新可能不及时。

第2章、《模式一:问候模式》

主窗体的布局如下图所示:

在这里插入图片描述

共九种功能模式,最下方为关闭窗口按钮。

点击问候模式按钮,进入问候模式:

在这里插入图片描述
下方为聊天窗口,点击发送按钮发送消息给聊天机器人。

示例问题:

1、My name is John.

2、我的名字是balabala。

3、Hi/Hello/Hey.

4、你好。

5、How are you?

6、你怎么样?

7、What is your name?

8、你的名字是什么?

9、歪比巴布

模块相关python代码

"""
greeting_bot_gui.py
问候模式的聊天机器人实现 Chatbot implementation in greeting mode
使用图形用户接口 Using the Graphical User Interface
作者:李 奕辰 Author: Yichen Li
"""
from PyQt5 import QtGui

# 导入相关模块 Import related modules
from common_trans_pairs import *
from nltk.chat.util import Chat, reflections
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QLabel, QTextEdit, QPushButton

# Greeting Mode 问候模式
# Define some pairs of input patterns and responses 定义一些输入问答对
pairs_greeting = [
    # 1、用户(“我”)的名字
    [
        r"(.*)[Mm]y [Nn]ame [Ii]s(.*)",  # 适配短语my name is(我的名字是)
        ["Hello %1, how can I assist you today?"]
    ],
    [
        "(.*)" + s_my + s_name + "(.*)",  # 适配短语my name is(我的名字是)
        ["您好,今天我可以为您提供什么帮助?"]
    ],
    # 2、你好
    [
        r"[Hh]i|[Hh]ello|[Hh]ey(.*)",  # 适配单词Hi, Hello, Hey
        ["Hello!", "Hi there!", "Hey! How can I help you?"]
    ],
    [
        s_hello + "(.*)",  # 适配单词Hi, Hello, Hey
        ["你好。", "别来无恙。", "嘿!我能帮你什么忙吗?"]
    ],
    # 3、(你)怎么样
    [
        r"(.*)[Hh]ow [Aa]re [Yy]ou(.*)?",  # 提取'how are you'(你怎么样),适配大小写习惯
        [
            "I'm just a bunch of python code, but thanks for asking!\n",
            "Doing well, how about you?\n"
        ]
    ],
    [
        "(.*)" + s_how + "(.*)",  # 提取'how are you'(你怎么样),适配大小写习惯
        [
             "我只是一堆python代码,但还是感谢您的询问!",
             "还好吧,你呢?"]
    ],
    # 4、用户询问chatbot名字
    [
        r"(.*)[Yy]our [Nn]ame(.*)",  # 提取词组 your name(你的名字)
        ["I am a chatbot created using NLTK!\n"]
    ],
    # TODO: 中文输入的问题?(已解决)
    [
        "(.*)" + s_your + "(.*)" + s_name + "(.*)",
        ["我是使用 NLTK 创建的聊天机器人。"]
    ],
    # 5、戴夫问好
    [
        s_dave,
        ["歪比巴布,ruarourou"]
    ],
    # 6、退出操作
    [
        r"quit",
        ["Bye! Take care.", "Goodbye!"]
    ],
    [
        s_quit,
        ["再见,保重。", "回见。"]
    ],
    # 7、其它输入
    [
        r"(.*)",
        ["I'm not sure I understand what you mean. Can you rephrase that?\n"
         "我不太明白你的意思。你能重新表述一下吗?"]
    ],
]

# Create a greeting chatbot instance 问候模式聊天机器人实例
chatbot_G = Chat(pairs_greeting, reflections)


class ChatbotApp_G(QWidget):
    def __init__(self):
        super().__init__()
        # 字体设置
        font = QtGui.QFont()
        font.setFamily("Arial")  # 括号里可以设置成自己想要的其它字体
        font.setPointSize(18)  # 括号里的数字可以设置成自己想要的字体大小
        self.setWindowTitle("Chatbot(Greeting Mode) 【问候模式】")
        self.setGeometry(100, 100, 400, 300)
        # self.setFont()
        # self.font().Bold()
        self.layout = QVBoxLayout()
        self.setFont(font)
        self.chat_area = QTextEdit(self)
        self.chat_area.setReadOnly(True)
        self.chat_area.setText(
            "In greeting mode, I can have a simple conversation with you, including greetings, small talk, etc.\n"
            "在问候模式下,我可以和你进行简单的对话,包括问候、寒喧等等。\n")
        self.layout.addWidget(self.chat_area)

        self.input_area = QTextEdit(self)
        self.layout.addWidget(self.input_area)

        self.send_button = QPushButton("Send 发送", self)
        self.send_button.clicked.connect(self.send_message)
        self.layout.addWidget(self.send_button)

        self.setLayout(self.layout)

    def send_message(self):
        user_input = self.input_area.toPlainText().strip()
        if user_input:
            self.chat_area.append("You (用户): " + user_input)
            response = chatbot_G.respond(user_input)
            self.chat_area.append("Greeting Bot (问候模式聊天机器人): " + response)
            self.input_area.clear()


# if __name__ == "__main__":
def greeting_bot_start():
    app = QApplication(sys.argv)
    window = ChatbotApp_G()
    window.show()
    sys.exit(app.exec_())

在后续实践中发现,以下这个文件其实是多余的,但统一起见,使用这种翻译对的方法:

"""
文件名:common_trans_pairs.py
定义了一些常见翻译对 Some common translation pairs are defined
均使用utf-8编码 All use utf-8 encoding
作者:李 奕辰 Author: Yichen Li
"""


s_name = "名字"
s_name.encode('utf-8')

s_quit = "退出"
s_quit.encode('utf-8')

s_my = "我的"
s_my.encode('utf-8')

s_your = "你的"
s_your.encode('utf-8')

s_you = "你"
s_you.encode('utf-8')

s_hello = "你好"
s_hello.encode('utf-8')

s_how = "怎么样"
s_how.encode('utf-8')

s_tell = "讲"
s_tell.encode('utf-8')

s_joke = "笑话"
s_joke.encode('utf-8')

s_interesting = "有趣的"
s_interesting.encode('utf-8')

s_scary = "恐怖的"
s_scary.encode('utf-8')

s_story = "故事"
s_story.encode('utf-8')

s_dave = "歪比巴布"
s_dave.encode('utf-8')

s_con = "概念"
s_con.encode('utf-8')

s_fun = "职能"
s_fun.encode('utf-8')

s_char = "特性"
s_char.encode('utf-8')

s_theo = "理论"
s_theo.encode('utf-8')

s_ggcf = "改革春风吹满地"
s_ggcf.encode('utf-8')

s_dec = "决策"
s_dec.encode('utf-8')

s_met = "方法"
s_met.encode('utf-8')

s_plan = "计划"
s_plan.encode('utf-8')

s_for = "公式"
s_for.encode('utf-8')

s_func = "函数"
s_func.encode('utf-8')

s_org = "组织"
s_org.encode('utf-8')

s_str = "结构"
s_str.encode('utf-8')

s_lead = "领导"
s_lead.encode('utf-8')

s_use = "作用"
s_use.encode('utf-8')

s_mean = "含义"
s_mean.encode('utf-8')

s_mic = "微观"
s_mic.encode('utf-8')

s_mac = "宏观"
s_mic.encode('utf-8')

s_debt = "负债"
s_debt.encode('utf-8')

s_bus = "业务"
s_bus.encode('utf-8')

s_type = "风格类型"
s_type.encode('utf-8')

s_acc = "会计"
s_acc.encode('utf-8')

s_heart = "失恋"
s_heart.encode('utf-8')

s_comf = "安慰"
s_comf.encode('utf-8')

s_beau = "美丽的"
s_beau.encode('utf-8')

s_sentence = "句子"
s_sentence.encode('utf-8')


(持续更新中)

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

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

相关文章

@RestController 源码解读:解决 Web 开发中 REST 服务的疑难杂症

目录 一、RestContrller注解 1.1 查看底层源码 1.2 AliasFor注解说明 1.2.1 注解别名 1.2.2 元数据别名 1.3 value() 方法的作用 一、RestContrller注解 1.1 查看底层源码 首先编写如下内容: RestController public class TestController {} 按住 Ctrl &am…

【Android】轮播图——Banner

引言 Banner轮播图是一种在网页和移动应用界面设计中常见的元素,主要用于在一个固定的区域内自动或手动切换一系列图片,以展示不同的内容或信息。这个控件在软件当中经常看到,商品促销、热门歌单、头像新闻等等。它不同于ViewPgaer在于无需手…

游戏引擎学习第一天

视频参考: https://www.bilibili.com/video/BV1zGDCYHErA/ 创建一个保存项目的路径 VS的安装略过,个人自行百度 1. vs 创建第一个CMAKE的窗口项目 game.cpp 修改如下的代码 到https://learn.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-winmain 去…

ArcGIS软件之“计算面积几何”地图制作

目录 一、消防站的泰森多边形ex12二、人口调查的泰森多边形三、人口调查的泰森多边形属性设置四、计算面积几何,用于求密度五、求密度六、给“现有中学”属性 R1赋值七、“现有中学”设置多环缓存区 并为它赋值八、“土地使用”为不同的功能区赋值九、三个图层相交十…

Rust @绑定(Rust@绑定)(在模式匹配的同时将值绑定到变量)

文章目录 Rust中的绑定基础概念示例:基本模式匹配 绑定的使用示例:范围匹配并绑定变量 深入探索绑定的好处示例:复杂数据结构中的应用 总结 附加 Rust中的绑定 Rust 语言以其强类型系统和内存安全的特性著称。在进行模式匹配时,R…

使用EasyExcel实现导出excel文件时生成多级下拉选

前言 公司有个需求本来只涉及到两个下拉选项&#xff0c;后面就想能不能实现多个下拉选&#xff0c;当然我这里说的多个下拉选是联动的&#xff0c;比如省、地市、区县这种。 实现步骤 1、添加EasyExcel的Maven依赖 <dependency><groupId>com.alibaba</group…

海量小文件挑战下的CephFS:优化策略与实践探索

文章目录 1.背景2.基本概念2.1 CephFS IO流程2.2 Ceph-FUSE 3. 问题3.1 问题源起3.2 理论分析3.3 原因排查3.3.1 Ceph-FUSE日志分析3.3.2 提出猜想3.3.3 代码验证3.3.3.1 MDS端3.3.3.2 Ceph-FUSE端 3.4 小结 1.背景 随着大数据、人工智能技术的蓬勃发展&#xff0c;人类对于算…

编写一个脚本实现参数的远程主机网络探测python test_ip.py 192.168.0.10~192.168.0.100(sys模块)

""" 编写一个脚本实现参数的远程主机网络探测python test_ip.py 192.168.0.10~192.168.0.100 """ #导入模块 #读取起始IP&#xff0c;结束IP import sys start_ip sys.argv[1] end_ip sys.argv[2] # print(start_ip,end_ip)##########组装数据…

lvgl: 示例入门

目录 1. A very simple hello world label 2. A button with a label and react on click event 3. Create styles from scratch for buttons 4. Create a slider and write its value on a label 1. A very simple hello world label void _lv_example_get_started_1(void) …

Redis2:Redis数据结构介绍、通用命令、String类型、Key的层级格式

欢迎来到“雪碧聊技术”CSDN博客&#xff01; 在这里&#xff0c;您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者&#xff0c;还是具有一定经验的开发者&#xff0c;相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导&#xff0c;我将…

云计算基础

声明 学习视频来自B站UP主泷羽sec,如涉及侵权马上删除文章 笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负 目录 一、云架构介绍 二、云服务 三、云分类 四、共享责任模型 五、云架构 六、云架构设计 七、集…

【超级详细】基于Zynq FPGA对雷龙SD NAND的测试

目录 一、SD NAND特征1.1 SD卡简介1.2 SD卡Block图 二、SD卡样片三、Zynq测试平台搭建3.1 测试流程3.2 SOC搭建 一、SD NAND特征 1.1 SD卡简介 雷龙的SD NAND有很多型号&#xff0c;在测试中使用的是CSNP4GCR01-AMW与CSNP32GCR01-AOW。芯片是基于NAND FLASH和 SD控制器实现的…

python中常见的8种数据结构之一列表

列表是Python中最常见的数据结构之一。它是一种有序的集合&#xff0c;可以包含不同类型的数据。 以下是列表的一些特点和常见操作&#xff1a; 1. 定义列表&#xff1a;可以使用方括号&#xff08;[]&#xff09;来定义一个空列表&#xff0c;也可以在方括号中添加元素来初始…

Python 在PDF中绘制形状(线条、矩形、椭圆形等)

在PDF中绘制图形可以增强文档的视觉效果。通过添加不同类型的形状&#xff0c;如实线、虚线、矩形、圆形等&#xff0c;可以使文档更加生动有趣&#xff0c;提高读者的阅读兴趣。这对于制作报告、演示文稿或是教材特别有用。本文将通过以下几个示例介绍如何使用Python 在PDF中绘…

AndroidStudio-滚动视图ScrollView

滚动视图 滚动视图有两种: 1.ScrollView&#xff0c;它是垂直方向的滚动视图;垂直方向滚动时&#xff0c;layout_width属性值设置为match_parent&#xff0c;layout_height属性值设置为wrap_content。 例如&#xff1a; &#xff08;1&#xff09;XML文件中: <?xml ve…

【后端速成Vue】computed计算属性

前言&#xff1a; 本期将会介绍 Vue 中的计算属性&#xff0c;他和 methods 方法又会有什么区别呢&#xff1f;在这里都会给你一一讲解。 篮球哥找工作专属IT岗位内部推荐&#xff1a; 专属内推链接&#xff1a;内推通道 1、computed计算属性 概念&#xff1a; 基于现有的数据…

mysql 配置文件 my.cnf 增加 lower_case_table_names = 1 服务启动不了的原因

原因&#xff1a;在MySQL8.0之后的版本&#xff0c;只允许在数据库初始化时指定&#xff0c;之后不允许修改了 mysql 配置文件 my.cnf 增加 lower_case_table_names 1 服务启动不了 报错信息&#xff1a;Job for mysqld.service failed because the control process exited …

优化时钟网络之时钟偏移

Note&#xff1a;文章内容以Xilinx 7系列FPGA进行讲解 1、基本介绍 所谓时钟偏移&#xff08;Clock Skew&#xff09;&#xff0c;是指在同步时序电路中&#xff0c;同一个时钟信号到达各个寄存器时钟端口的时间不一致的现象。如下图所示&#xff1a; 时钟从源端到达寄存器FF1的…

npm镜像的常用操作

查看当前配置的 npm 镜像 npm config get registry切换官方镜像 npm config set registry https://registry.npmjs.org/切换淘宝镜像(推荐) npm config set registry https://registry.npmmirror.com/切换腾讯云镜像 npm config set registry http://mirrors.cloud.tencent…

Notepad++ 最新官网中文版在线下载 附文本编辑器安装与基础使用教程

Notepad &#xff08;记事本&#xff09;是一个简单的文本编辑器&#xff0c;预装在所有版本的 Microsoft Windows 操作系统中。它的主要功能是创建、编辑和存储纯文本文件&#xff0c;通常以 .txt 格式保存。Notepad 的设计旨在提供一个轻量级的文本处理工具&#xff0c;适合快…