【Python自然语言处理+tkinter图形化界面】实现智能医疗客服问答机器人实战(附源码、数据集、演示 超详细)

news2024/11/24 6:35:30

需要源码和数据集请点赞关注收藏后评论区留言私信~~~

一、问答智能客服简介

QA问答是Question-and-Answer的缩写,根据用户提出的问题检索答案,并用用户可以理解的自然语言回答用户,问答型客服注重一问一答处理,侧重知识的推理。

从应用领域视角,可将问答系统分为限定域问答系统和开放域问答系统。

根据支持问答系统产生答案的文档库、知识库,以及实现的技术分类,可分为自然语言的数据库问答系统、对话式问答系统、阅读理解系统、基于常用问题集的问答系统、基于知识库的问答系统等。

智能问答客服功能架构

典型的问答系统包含问题输入 问题理解 信息检索 信息抽取 答案排序 答案生成和结果输出等,首先由用户提出问题,检索操作通过在知识库中查询得到相关信息,并依据特定规则从提取到的信息中抽取相应的候选答案特征向量,最后筛选候选答案结果输出给用户 

 智能问答客服框架

1: 问题处理 问题处理流程识别问题中包含的信息,判断问题的主题信息和主题范畴归属,比如是属于一般类问题还是属于特定主题类问题,然后提取与主题相关的关键信息,比如人物信息、地点信息和时间信息等。

2 :问题映射 根据用户咨询的问题,进行问题映射消除歧义。通过字符串相似度匹配和同义词表等解决映射问题,根据需要执行拆分和合并操作。

3 :查询构建 通过对输入问题进行处理,将问题转化为计算机可以理解的查询语言,然后查询知识图谱或者数据库,通过检索获得相应备选答案。

4 :知识推理 根据问题属性进行推理,问题基本属性如果属于知识图谱或者数据库中的已知定义信息,则可以从知识图谱或者数据库中查找,直接返回答案。如果问题属性是未定义类问题,则需要通过机器算法推理生成答案。

5: 消岐排序 根据知识图谱中查询返回的一个或者多个备选答案,结合问题属性进行消歧处理和优先级排序,输出最佳答案。

二、智能医疗客服问答实战

定制性智能客服程序一般需要实现选择语料库,去除噪声信息后 根据算法对预料进行训练,最后提供人机接口问答对话,基于互联网获得的医学语料库,并通过余弦相似度基本原理,设计并开发以下问答型智能医疗客服应用程序

项目结构如下 

效果展示 

下面是csv文件中定义的一些病例

预先定义好的欢迎语句 

 

 

运行chatrobot文件  弹出以下窗口 输出问题后点击提交咨询即可  

 

对于语料库中没有的问题会自动推断给出答案(通常不太准确) 

 

 

 三、代码

部分代码如下 全部代码和数据集请点赞关注收藏后评论区留言私信

# -*- coding:utf-8 -*-
from fuzzywuzzy import fuzz
import sys
import jieba
import csv
import pickle
print(sys.getdefaultencoding())

import logging
from fuzzywuzzy import fuzz
import math
from scipy import sparse
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfTransformer
from scipy.sparse import lil_matrix
from sklearn.naive_bayes import MultinomialNB
import warnings
from tkinter import *
import time
import difflib
from collections import Counter
import numpy as np


filename = 'label.csv'

def tokenization(filename):


    corpus = []
    label = []
    question = []
    answer = []
    with open(filename, 'r', encoding="utf-8") as f:
        data_corpus = csv.reader(f)
        next(data_corpus)
        for words in data_corpus:
            word = jieba.cut(words[1])
            tmp = ''
            for x in word:
                tmp += x
            corpus.append(tmp)
            question.append(words[1])
            label.append(words[0])
            answer.append(words[2])
    
    with open('corpus.h5','wb') as f:
        pickle.dump(corpus,f)
    with open('label.h5','wb') as f:
        pickle.dump(label,f)
    with open('question.h5', 'wb') as f:
        pickle.dump(question, f)
    with open('answer.h5', 'wb') as f:
        pickle.dump(answer, f)

    return corpus,label,question,answer



def train_model():

    with open('corpus.h5','rb') as f_corpus:
        corpus = pickle.load(f_corpus)

    with open('label.h5','rb') as f_label:
        label = pickle.load(f_label,encoding='bytes')


    vectorizer = CountVectorizer(min_df=1)
    transformer = TfidfTransformer()
    tfidf = transformer.fit_transform(vectorizer.fit_transform(corpus))
    words_frequency = vectorizer.fit_transform(corpus)
    word = vectorizer.get_feature_names()
    saved = tfidf_calculate(vectorizer.vocabulary_,sparse.csc_matrix(words_frequency),len(corpus))
    model = MultinomialNB()
    model.fit(tfidf,label)


    with open('model.h5','wb') as f_model:
        pickle.dump(model,f_model)

    with open('idf.h5','wb') as f_idf:
        pickle.dump(saved,f_idf)

    return model,tfidf,label
    
    
    
    
class tfidf_calculate(object):
    def __init__(self,feature_index,frequency,docs):
        self.feature_index = feature_index
        self.frequency = frequency
        self.docs = docs
        self.len = len(feature_index)

    def key_count(self,input_words):
        keys = jieba.cut(input_words)
        count = {}
        for key in keys:
            num = count.get(key, 0)
            count[key] = num + 1
        return count

    def getTfidf(self,input_words):
        count = self.key_count(input_words)
        result = lil_matrix((1, self.len))
        frequency = sparse.csc_matrix(self.frequency)
        for x in count:
            word = self.feature_index.get(x)
            if word != None and word>=0:
                word_frequency = frequency.getcol(word)
                feature_docs = word_frequency.sum()
                tfidf = count.get(x) * (math.log((self.docs+1) / (feature_docs+1))+1)
                result[0, word] = tfidf
        return result    

if __name__=="__main__":
    tokenization(filename)
    train_model()

创作不易 觉得有帮助请点赞关注收藏~~~

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Yolov5 中添加Network Slimming剪枝--稀疏训练部分

前言:Network Slimming剪枝过程让如下 1. 稀疏化 2. 剪枝 3. 反复迭代这个过程 一、稀疏化: 通过Network Slimming 的核心思想是:添加L1正则来约束BN层系数,从而剪掉那些贡献比较小的通道channel 原理如下:BN层的计算是这样的…

如何理解UML2.5.1(02篇)

为了避免使大家产生畏难情绪,本节先讲一个相对简单又相对普遍的问题。先看UML2.5.1中第13.2.3.5的如下内容: A Behavior shall be the method for no more than one BehavioralFeature, called its specification. 翻译过来就是: 一个行为应该…

[附源码]Python计算机毕业设计SSM家政服务系统(程序+LW)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

2093197-94-3,DBCO-BODIPY FL,二苯并环辛炔-BODIPY FL点击化学染料环辛炔

【中文名称】氟化硼二吡咯二苯并环辛炔,二苯并环辛炔-BODIPY FL 【英文名称】 DBCO-BODIPY FL,BDP FL DBCO 【结 构 式】 【CAS号】2093197-94-3 【分子式】C32H29BF2N4O2 【分子量】550.42 【基团部分】DBCO部分 【纯度标准】95% 【包装规格】5g&#x…

【校招VIP】线上实习 推推 书籍详情模块 产品脑图周最佳

【推推】主要是为校招设计的小说一更新就通知的项目,每个模块都具有亮点和难点,项目表现为手机网站应用,可嵌入小程序或APP中。 恭喜来自 太原理工大学 的 星晚🌟 同学获得本周线上实习【推推】第一期 书籍详情模块 产品脑图设计…

kubernetes编排文件示例

kubernetes编排文件示例 编排文件生成网址:https://www.kubebiz.com/ mysql单机 需要一个配置文件,内容不会就用默认的即可 my.cnf [mysqld]pid-file /var/run/mysqld/mysqld.pid socket /var/run/mysqld/mysqld.sock datadir /var…

Python制作GUI学生管理系统,不会的看这里

前言 嗨喽~大家好呀,这里是魔王呐 ❤ ~! 欢迎观看本篇文章呀~不管你是学生还是工作人 我相信你进来了你就是想实现这个案例的 学会以后,还可以去接一些小小的外包,又是挣钱的一天~ 那么就开始实现吧!python制作GUI 学生管理系…

Curve 块存储应用实践 -- iSCSI

Curve 是云原生计算基金会 (CNCF) Sandbox 项目,是网易数帆发起开源的高性能、易运维、云原生的分布式存储系统。 为了让大家更容易使用以及了解 Curve,我们期望接下来通过系列应用实践文章,以专题的形式向大家展示 Curve。 本篇文章是Curv…

activiti框架搭建及问题记录

activiti应用什么是activitiactiviti配置首先创建项目配置pom依赖配置文件那么审批(流程)怎么创建呢?流程启动任务处理activiti问题分享数据库创建问题activiti事件监听器没有对象的问题什么是activiti activiti是一个业务流程管理的框架&am…

LeetCode中等题之使括号有效的最少添加

题目 只有满足下面几点之一,括号字符串才是有效的: 它是一个空字符串,或者 它可以被写成 AB (A 与 B 连接), 其中 A 和 B 都是有效字符串,或者 它可以被写作 (A),其中 A 是有效字符串。 给定一…

开发工具系列IDEA:配置注释自动生成

一、类、接口、枚举配置&#xff0c;进入idea后&#xff0c;依次打开 File -> Settings -> Editor -> File and Code Templates -> Files /*** FileName: ${NAME}* Author: ${USER}* Date: ${DATE} ${TIME}* Description: ${DESCRIPTION}* History:* <aut…

中国电信移动物联网发展成果与创新实践 ,干货满满

近日&#xff0c;首届移动物联网大会&#xff08;2022&#xff09;&#xff08;以下简称“大会”&#xff09;在江苏省无锡市举办。本次大会由工信部指导&#xff0c;中国信息通信研究院&#xff08;以下简称“中国信通院”&#xff09;、中国通信学会、无锡市人民政府、人民邮…

产品工作流| 项目评估

一、什么是项目评估 根据已有的公开招标书要求&#xff0c;销售侧拿到招标要求&#xff0c;让研发评估项目。 1、需求满足度评估。 2、需求开发项&#xff0c;以及成本评估。 3、总结项目评估。 二、项目评估流程 材料依据&#xff1a; 1、投标材料。 2、项目评估表&#x…

路由器,集线器,交换机,网桥,光猫有啥区别?

网络分层 网线替代了上面的灰色部分&#xff0c;实现物理层互联。 如果想要两台电脑互联成功&#xff0c;还需要确保每一层所需要的步骤都要做到位&#xff0c;这样数据才能确保正确投送并返回。 从数据链路层到物理层&#xff0c;数据会被转为01比特流。 此时需要把比特流传…

【软件测试】小陈她的测试追梦之路,实习开端到测试第一人......

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 小陈&#xff1a;我…

中华黄金·金生态合伙人颁奖典礼在珠海站开幕完美收官!!

11月18-19日在广东珠海举行&#xff0c;近百位合伙人亲临现场&#xff0c;强者能人共聚天下&#xff0c;中华黄金合伙人&#xff0c;强强联手引爆市场&#xff0c;汇聚一堂。 本次活动以“金生态”为主题。CNG金生态是中华黄金集团旗下平台&#xff0c;运用WEB3.0核心技术聚合了…

Flink CDC入门实践--基于 Flink CDC 构建 MySQL 和 Postgres 的 Streaming ETL

文章目录前言1.环境准备2.准备数据2.1 MySQL2.2 postgres3.启动flink和flink sql client3.1启动flink3.2启动flink SQL client4.在flink SQL CLI中使用flink DDL创建表4.1开启checkpoint4.2对于数据库中的表 products, orders, shipments&#xff0c; 使用 Flink SQL CLI 创建对…

iOS开发之iOS15.6之后拉流LFLiveKit,画面模糊及16.1马赛克问题

更新了iOS15.6系统后&#xff0c;发现拉取LFLiveKit进行直播的流&#xff0c;竟然是这样的&#xff1a; 模糊不清&#xff0c;于是思考是什么原因导致的。 1、是不是拉流端出现的问题&#xff1f; 使用安卓拉取iOS的直播流&#xff0c;是同样的效果&#xff0c;又考虑到两端使…

【DL】Windows 10系统下安装TensorRT教程

Windows 10系统下安装TensorRT教程(手把手教程): Windows 10系统下安装TensorRT教程: 1.下载 https://developer.nvidia.com/nvidia-tensorrt-download EA 版本代表抢先体验(在正式发布之前)。 GA 代表通用性。表示稳定版,经过全面测试。 TensorRT、cuda、cudnn各版本…

与目前主流的消费返利平台对比,共享购模式有什么优势呢?

大家好&#xff0c;我是林工&#xff0c;之前几期内容都有介绍过共享购的商业模式&#xff0c;同时大家应该都对消费返利这方面有所了解。今天给大家分享一下整套模式的优劣势。 什么是消费返利&#xff1f;消费返利是互联网常见的一个商业模式&#xff0c;是指互联网平台将自…