赞
踩
目录
本文文章链接:python简单的问答系统-CSDN博客
主要源于人们对快速、准确地从海量信息中获取信息的需求。随着互联网的飞速发展,网络上的信息呈现爆炸式增长,用户在面对如此庞大的信息海洋时,往往难以迅速找到所需信息。传统的搜索引擎虽然能够返回与关键词相关的网页,但用户仍需花费大量时间浏览不相关的内容,导致信息检索效率低下。
在这种背景下,问答系统应运而生。问答系统是一种信息检索系统的高级形式,它能够通过自然语言与用户进行交互,直接回答用户用自然语言提出的问题。问答系统的出现,不仅提高了信息检索的效率,还使得信息的获取更加便捷和智能化。
其主要目的是通过自然语言与用户进行交互,快速、准确地回答用户提出的问题。问答系统可以根据用户输入的问题,自动输出答案,无需人工干预,部分问答系统支持语音输入,用户可以通过语音与系统进行交互,这进一步提高了系统的便捷性,实现人机交互的基础。
环境准备:首先,确保你已经安装了Flask。如果没有,可以通过pip来安装:
pip install flask
导入必要的模块
from flask import Flask, request, jsonify, render_template
首先,我们导入了Flask框架,并创建了一个名为app
的Flask应用实例。这里,我们指定了模板文件夹的路径为当前目录(.
),意味着Flask将在当前目录下查找HTML模板文件。Flask应用通过路由函数来处理用户请求。
app = Flask(__name__, template_folder='.')
在这个示例中,我们定义了两个路由函数:index
和get_response
。
1.index路由
- @app.route('/')
- def index():
- return render_template('index.html')
当用户访问应用的根URL(/
)时,index
函数会被调用。这个函数使用render_template
函数来渲染一个名为index.html
的HTML模板,并将其返回给用户。这个模板可能包含一个表单,允许用户输入问题并提交给服务器。
2.get_response路由
当用户通过GET请求访问/get_response
URL时,get_response
函数会被调用。这个函数首先从请求中获取名为question
的查询参数(默认为空字符串),然后调用respond_to_question
函数来生成对应的答案。最后,它使用jsonify
函数将答案包装为一个JSON对象,并返回给客户端。
- @app.route('/get_response', methods=['GET'])
- def get_response():
- question = request.args.get('question', '')
- answer = respond_to_question(question)
- return jsonify({'answer': answer})
我们来一起探讨如何使用Flask框架快速搭建一个简单的问答系统。这个系统基于一个文本文件来存储问题和答案的配对数据,并通过Web界面与用户进行交互。
我们定义了一个名为learning_data_file
的变量,它指向一个名为learning_data.txt
的文本文件。这个文件包含了问题和答案的配对数据,每行一个配对,格式为“问题|答案”。
- learning_data_file = 'learning_data.txt'
-
- def load_learning_data(file_path):
- with open(file_path, 'r', encoding='utf-8') as file:
- lines = file.readlines()
- learning_data = [line.strip() for line in lines]
- return learning_data
-
- learning_data = load_learning_data(learning_data_file)
我们编写了一个名为load_learning_data
的函数,用于读取这个文件并将其内容加载到一个列表中。这个函数使用with
语句打开文件,并逐行读取内容,然后去除每行末尾的换行符或其他空白字符,最后返回处理后的列表。
respond_to_question
函数负责根据用户的问题生成对应的答案。它遍历learning_data
列表中的每个条目,并检查用户的问题是否包含在条目中。如果找到匹配的问题,就使用split('|')[1]
将条目分割成两部分(问题和答案),并返回答案部分。如果在整个列表中都没有找到匹配的问题,函数会返回一个默认的消息:“对不起,我还不能理解这个问题。”
- def respond_to_question(question):
- for data in learning_data:
- if question in data:
- return data.split('|')[1] # 假设数据格式为问题|答案
- return "对不起,我还不能理解这个问题。"
- from flask import Flask, request, jsonify, render_template
-
- app = Flask(__name__, template_folder='.')
-
- # 读取学习数据
- learning_data_file = 'learning_data.txt'
-
- def load_learning_data(file_path):
- with open(file_path, 'r', encoding='utf-8') as file:
- lines = file.readlines()
- learning_data = [line.strip() for line in lines]
- return learning_data
-
- learning_data = load_learning_data(learning_data_file)
-
- # 处理用户请求
- @app.route('/')
- def index():
- return render_template('index.html')
-
- @app.route('/get_response', methods=['GET'])
- def get_response():
- question = request.args.get('question', '')
- answer = respond_to_question(question)
- return jsonify({'answer': answer})
-
- # 根据问题生成回答
- def respond_to_question(question):
- for data in learning_data:
- if question in data:
- return data.split('|')[1] # 假设数据格式为问题|答案
- return "对不起,我还不能理解这个问题。"
-
- if __name__ == '__main__':
- app.run(debug=True)
总结:这个简单的问答系统展示了如何使用Flask框架来创建一个基本的Web应用。它读取一个文本文件中的数据,并根据用户通过HTTP GET请求发送的问题来返回相应的答案。虽然这个系统非常简单,但它为更复杂的Web应用提供了一个很好的起点。你可以根据自己的需求来扩展它,比如添加更多的路由和视图函数、使用数据库来存储数据、添加用户认证等等。
这是一个简单的HTML页面的代码,用于模拟一个问答系统的前端界面。这个HTML页面提供了一个简单的问答系统界面,用户可以在输入框中输入问题,并通过点击按钮发送问题。然而,这个界面仅包含了前端部分,实际的问答逻辑和与后端服务器的通信需要在JavaScript中实现。
- <!DOCTYPE html>
- <html lang="zh-CN">
- <head>
- <meta charset="UTF-8">
- <title>问答系统</title>
- <style>
- body {
- font-family: Arial, sans-serif;
- background-color: #f2f2f2;
- padding: 20px;
- max-width: 600px;
- margin: 0 auto;
- }
- h1 {
- text-align: center;
- color: #333;
- }
- p {
- margin-bottom: 10px;
- }
- input[type="text"] {
- width: calc(100% - 90px);
- padding: 10px;
- font-size: 16px;
- border: 1px solid #ccc;
- border-radius: 4px;
- margin-right: 10px;
- }
- button {
- padding: 10px 20px;
- font-size: 16px;
- background-color: #007bff;
- color: white;
- border: none;
- border-radius: 4px;
- cursor: pointer;
- }
- button:hover {
- background-color: #0056b3;
- }
- #chat-container {
- background-color: #fff;
- border: 1px solid #ccc;
- border-radius: 4px;
- padding: 10px;
- margin-top: 20px;
- max-height: 300px;
- overflow-y: auto;
- }
- #chat-log p {
- margin: 5px 0;
- padding: 5px 10px;
- border-radius: 4px;
- }
- #chat-log p:nth-child(even) {
- background-color: #f2f2f2;
- }
- #chat-log p:nth-child(odd) {
- background-color: #e2e2e2;
- }
- </style>
- </head>
- <body>
- <h1>问答系统</h1>
- <p>请在下方输入您的问题:</p>
- <div>
- <input type="text" id="user_input" placeholder="请输入问题...">
- <button onclick="askQuestion()">发送</button>
- </div>
- <div id="chat-container">
- <div id="chat-log"></div>
- </div>
-
- <script>
- async function askQuestion() {
- const userQuestion = document.getElementById('user_input').value.trim();
- if (userQuestion === '') return;
-
- addToChatLog('你', userQuestion);
-
- try {
- const response = await fetch(`/get_response?question=${encodeURIComponent(userQuestion)}`);
- if (!response.ok) throw new Error('网络请求失败');
- const data = await response.json();
- addToChatLog('机器人', data.answer);
- } catch (error) {
- console.error('获取回复失败:', error.message);
- addToChatLog('机器人', '抱歉,发生了错误。请稍后再试。');
- }
-
- document.getElementById('user_input').value = '';
- }
-
- function addToChatLog(sender, message) {
- const chatLog = document.getElementById('chat-log');
- const chatEntry = document.createElement('p');
- chatEntry.innerHTML = `<strong>${sender}:</strong> ${message}`;
- chatLog.appendChild(chatEntry);
-
- chatLog.scrollTop = chatLog.scrollHeight;
- }
- </script>
- </body>
- </html>
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。