[简介]
这篇文章主要介绍了基于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