Django实现智能问答助手-数据库方式读取标题和答案

[复制链接]
发表于 2025-12-21 10:17:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
扩展


  • 增长问答数据库,通过 Django Admin 添加标题和答案。
  • 实现更复杂的问答逻辑,好比利用天然语言处理处罚(NLP)库。
  • 利用前端框架(如 Bootstrap)增强用户界面
1.注册模子到 Django Admin(admin.py)

在应用目次下的admin.py文件中,注册QuestionAnswer模子,使得可以在 Django Admin 界面中对其举行管理利用,代码如下:
  1. from django.contrib import admin
  2. from. import models
  3. # 注册QuestionAnswer模型,使得可以在 Django Admin 界面中对其进行管理操作
  4. # Django 就知道要在 Admin 后台中显示QuestionAnswer模型,并且可以进行添加、编辑、删除等常规操作了
  5. admin.site.register(models.QuestionAnswer)
复制代码
通过以上代码,Django 就知道要在 Admin 配景中体现QuestionAnswer模子,而且可以举行添加、编辑、删除等通例利用了。
2. 数据库迁移

完成模子界说和注册后,须要举行数据库迁移,让 Django 根据模子创建相应的数据库表结构。打开下令行,进入项目根目次(包罗manage.py文件的目次),依次实行以下下令:
  1. python manage.py makemigrations
  2. python manage.py migrate
复制代码

  • makemigrations下令会根据模子的界说天生迁移文件,它会检测模子的厘革并天生相应的脚本,告诉 Django 要对数据库做哪些改变。
  • migrate下令则是将这些迁移脚本实际应用到数据库中,创建或更新对应的表结构。
3. 美满视图逻辑(大概在views.py中)

之前的视图函数可以进一步优化,比方更好地处理处罚大概出现的错误情况等,以下是优化后的示例(在views.py中):
  1. from django.shortcuts import render
  2. from.models import QuestionAnswer
  3. def home(request):
  4.     if request.method == 'POST':
  5.         user_question = request.POST.get('question')
  6.         if user_question:
  7.             # 这里可以实现简单的匹配逻辑,优化了判断,避免空查询
  8.             answer = QuestionAnswer.objects.filter(question__icontains=user_question).first()
  9.             if answer:
  10.                 response = answer.answer
  11.             else:
  12.                 response = "抱歉,暂时没有找到相关答案哦。"
  13.             return render(request, 'qa/home.html', {'response': response})
  14.         else:
  15.             return render(request, 'qa/home.html', {'response': "请输入有效的问题呀。"})
  16.     return render(request, 'qa/home.html')
复制代码
在这个优化后的视图函数中:

  • 增长了对user_question是否为空的判定,假如为空则返回相应提示,让用户输入有效的标题,增强了用户交互的友爱性。
  • 对于找不到答案的情况,返回了更友爱的提示语句。
4.实现更复杂的问答逻辑,利用天然语言处理处罚(NLP)库

安装须要的库*
起首确保已经安装了 nltk 库,假如没有安装,可以通过以下下令安装:
  1. pip install nltk
复制代码
导入须要的模块和下载干系资源(针对 nltk),views.py文件
  1. from django.shortcuts import render
  2. from.models import QuestionAnswer
  3. import nltk
  4. from nltk.stem import PorterStemmer
  5. from nltk.corpus import stopwords
  6. # 下载nltk所需的停用词资源(只需执行一次,可在项目启动时或首次运行相关代码时)
  7. nltk.download('stopwords')
复制代码
修改后的视图函数 home
  1. def home(request):
  2.     if request.method == 'GET':
  3.         return render(request, 'qa/home.html', {'response': ""})
  4.     if request.method == 'POST':
  5.         user_question = request.POST.get('question')
  6.         if user_question:
  7.             # 进行自然语言处理相关的预处理操作
  8.             stemmer = PorterStemmer()
  9.             stop_words = set(stopwords.words('english'))
  10.             # 对用户问题进行分词、词干提取、停用词去除等预处理
  11.             words = nltk.word_tokenize(user_question)
  12.             words = [stemmer.stem(word) for word in words if word not in stop_words]
  13.             # 重新组合处理后的问题
  14.             processed_question = " ".join(words)
  15.             # 这里可以实现更复杂的匹配逻辑,基于预处理后的问题进行查找
  16.             answer = QuestionAnswer.objects.filter(question__icontains=processed_question).first()
  17.             if answer:
  18.                 response = answer.answer
  19.             else:
  20.                 response = "抱歉,暂时没有找到相关答案哦。"
  21.             return render(request, 'qa/home.html', {'response': response})
  22.         else:
  23.             return render(request, 'qa/home.html', {'response': "请输入有效的问题呀。"})
  24.     return render(request, 'qa/home.html')
复制代码
在上述修改后的代码中:

  • 起首导入了 nltk
    干系的模块用于举行天然语言处理处罚利用,包罗词干提取(PorterStemmer)和获取停用词(stopwords)。
  • 在处理处罚 POST 哀求且用户输入了有效标题后,对用户标题举行了一系列天然语言处理处罚的预处理处罚利用: 先创建了词干提取器
    PorterStemmer 和获取了英语的停用词聚集。
  • 对用户标题举行分词,然后对每个分词举行词干提取并去除停用词,末了重新组合成处理处罚后的标题。
  • 基于处理处罚后的标题在 QuestionAnswer 模子中举行答案的查找匹配,根据是否找到答案来设置相应的 response值并返回给模板举行展示。
5.在数据库中预先输入标题和答案


如许就可以在页面上通过数据库的方式读取标题和答案
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表