基于Python的中医药知识问答系统设计与实现

[简介]

这篇文章主要介绍了基于Python的中医药知识问答系统的设计与实现。该系统利用Python编程语言,结合中医药领域的知识和技术,实现了一个功能强大的问答系统。文章首先介绍了中医药知识的特点和传统问答系统的局限性,然后提出了设计思路和实现方法。系统的设计包括数据的采集和处理、问题的分类和分析、答案的生成和评价等关键步骤。通过实验验证,该系统在问答准确性和效率上都取得了较好的表现,具有一定的实用价值。文章最后总结了设计过程中遇到的问题和改进的方向,为进一步研究和应用提供了参考。

(节选)主要研究内容

(1)网络爬虫

(2)中药文本处理

(3)知识图谱搭建

(4)智能问答界面实现

一、知识图谱

二、问答页面

知识图谱架构只要指的是构建模式的结构。

偏方Flask实现:

python 复制代码
app = Flask(__name__)
@app.route('/query/', methods=['GET', 'POST'])
def query():
    if request.method == "POST":
        name = request.form.get("name")
        dict_return = getdata(name)
        return render_template('query.html', dict_return=dict_return)
    else:
        dict_return = getdata('ALL')                       #默认初始页面
        return render_template('query.html', dict_return=dict_return)
    
if __name__ == '__main__':
    app.run(debug=True)
python 复制代码
class MyEncoder(json.JSONEncoder):
    def default(self, obj):
        """
        只要检查到了是bytes类型的数据就把它转为str类型
        :param obj:
        :return:
        """
        if isinstance(obj, bytes):
            return str(obj, encoding='utf-8')
        return json.JSONEncoder.default(self, obj)

def getdata(name):
    dict_return = {}
    #处理好的文件路径
    path = "./Data_excel/"
    file = path+str(name)+"偏方秘方.xlsx"
    data = pd.read_excel(file)
    num=list(i+1 for i in range(len(data[u'drug'])))
    drug = list(data[u'drug'])
    prescript = list(data[u'prescript'])
    part = list(data[u'part'])
    # 以下为将处理好的数据加入字典
    dict_return['num'] = num
    dict_return['drug'] = drug
    dict_return['prescript'] = prescript
    dict_return['part'] = part
    # 滚动图
    item = []
    for i in range(0, len(drug)):
        item.append({'num':num[i],'drug': drug[i],'prescript':prescript[i],'part':part[i]})
    data_tb = json.dumps(item,cls=MyEncoder,ensure_ascii = False)
    data_tb = demjson.decode(data_tb)
    dict_return['data_tb'] = data_tb
    li=[]
    for root, dirs, files in os.walk('./Data_excel'):
        for file in files:
            li.append(file.split('偏')[0])
    dict_return['li'] = li
    return dict_return

三、偏方库查询

问答实现:

python 复制代码
class SimpleQA:
    def __init__(self):
        self.data = {
            'name_part': {'水部': '藻类', '火部': '灯芯花'},
            'name_alias': {'藻类': '藻藻', '灯芯花': '火火'},
            'name_smell': {'藻类': '清新', '灯芯花': '芳香'},
            'name_cure': {'藻类': '泻火', '灯芯花': '散结'},
            'drug_department': {'藻类': '肝部科室', '灯芯花': '心部科室'},
            'drug_prescript': {'藻类': '清火汤', '灯芯花': '散结丸'},
            'drug_onepart': {'藻类': '水', '灯芯花': '火'}
        }

    def search(self, question_type, drug_name):
        if question_type not in self.data:
            return "抱歉,暂不支持该类型的问题。"
        
        if drug_name not in self.data[question_type]:
            return "抱歉,找不到相关信息。"

        if question_type == 'name_part':
            return '属于部类是:' + self.data[question_type][drug_name]
        elif question_type == 'name_alias':
            return '别名是:' + self.data[question_type][drug_name]
        elif question_type == 'name_smell':
            return '气味品质是:' + self.data[question_type][drug_name]
        elif question_type == 'name_cure':
            return '使用方法是:' + self.data[question_type][drug_name]
        elif question_type == 'drug_department':
            return '该去科室是:' + self.data[question_type][drug_name]
        elif question_type == 'drug_prescript':
            return '治疗疾病的偏方是:' + self.data[question_type][drug_name]
        elif question_type == 'drug_onepart':
            return '该病从属于:' + self.data[question_type][drug_name]

if __name__ == '__main__':
    qa_system = SimpleQA()
    question_type = 'drug_prescript'
    drug_name = '藻类'
    answer = qa_system.search(question_type, drug_name)
    print(answer)
python 复制代码
Q:2777.077.178
相关推荐
枯萎穿心攻击12 分钟前
响应式编程入门教程第二节:构建 ObservableProperty<T> — 封装 ReactiveProperty 的高级用法
开发语言·unity·c#·游戏引擎
Eiceblue2 小时前
【免费.NET方案】CSV到PDF与DataTable的快速转换
开发语言·pdf·c#·.net
m0_555762902 小时前
Matlab 频谱分析 (Spectral Analysis)
开发语言·matlab
浪裡遊3 小时前
React Hooks全面解析:从基础到高级的实用指南
开发语言·前端·javascript·react.js·node.js·ecmascript·php
烛阴4 小时前
简单入门Python装饰器
前端·python
lzb_kkk4 小时前
【C++】C++四种类型转换操作符详解
开发语言·c++·windows·1024程序员节
好开心啊没烦恼4 小时前
Python 数据分析:numpy,说人话,说说数组维度。听故事学知识点怎么这么容易?
开发语言·人工智能·python·数据挖掘·数据分析·numpy
面朝大海,春不暖,花不开4 小时前
使用 Python 实现 ETL 流程:从文本文件提取到数据处理的全面指南
python·etl·原型模式
简佐义的博客5 小时前
破解非模式物种GO/KEGG注释难题
开发语言·数据库·后端·oracle·golang