F056 知识图谱飞机问答系统

文章结尾部分有CSDN官方提供的学长 联系方式名片

文章结尾部分有CSDN官方提供的学长 联系方式名片

关注B站,有好处! 关注B站,私信获取! 麦麦大数据
本系统是一个使用vue+flask+neo4j+mysql实现的知识图谱问答系统,前端使用了vue2+vuetify框架来实现知识图谱可视化、飞机知识库、飞机知识问答;此外还包含了登录注册、个人信息修改的功能,系统的后端使用flask架构,将飞机知识图谱存储neo4j中,mysql主要存储系统用户信息。系统包含如下几个部分:第一个部分是数据导入部分,包含了excel数据导入neo4j的内容,先通过pandas读取excel内容,通过py2neo构建节点信息,然后再构建图谱的关系信息。

视频

F056飞机知识图谱问答系统演示

架构图

功能模块图

1 概述

  • 整体系统采用前后端分离架构,前端为Vue工程,后端为Flask工程由python编写;

2 图谱的构建

  • 数据通过 Excel 导入到 Neo4j 中。系统首先通过 pandas 读取 Excel 数据,并通过 py2neo 构建节点和关系。
  • 然后,通过图数据库的关系建模,将图谱数据导入到 Neo4j 中,供后续的问答和查询使用。

3 图谱可视化

1. 前端(D3.js 可视化 + 交互功能)

前端部分主要使用 D3.js 进行图谱的渲染和交互,包括放大、缩小、节点点击等操作。还可以根据不同类型(飞机型号、生产商、事故航班等)进行筛选和模糊查询。



图谱渲染与交互设计

  • 加载数据: 当用户查询问题时,前端通过 Axios 请求后端 API,后端查询 Neo4j 图数据库并返回图谱数据(节点和关系)。这些数据将被用来绘制图谱。
  • 图谱绘制: 使用 D3.js 进行图谱的绘制。每个节点代表一个实体(如飞机型号、生产商、事故航班等),节点之间的关系通过连线表示。
  • 模糊查询: 用户可以输入关键词进行模糊查询,D3.js 会动态更新图谱,突出显示与关键词相关的节点和关系。
  • 放大与缩小: 使用 D3.js 提供的缩放功能 (d3.zoom()) 实现图谱的放大、缩小和拖动功能。
  • 节点交互: 用户点击某个节点时,D3.js 会触发相应的交互效果。例如,点击飞机型号时,右侧会展示该飞机的详细信息(如照片、属性等)。

交互效果与菜单展示

  • 点击节点: 用户点击节点时,前端会发送 API 请求(例如,通过 Axios)向后端请求该节点的详细属性(如机型、生产商、事故信息等)。后端根据节点信息查询 Neo4j,返回相应的属性数据。
  • 展示右侧菜单: 根据用户点击的节点类型,前端更新右侧的菜单信息,展示节点的属性。比如:
    • 飞机型号: 显示飞机的照片、长度、翼展、巡航速度、升限等属性。
    • 生产商: 显示生产商的名称、国家、成立时间、生产的飞机型号等信息。
    • 事故航班: 显示航班的基本信息、日期、事故原因等。前端的菜单可以通过 DOM 更新(例如使用 React/Vue 等框架)来动态渲染这些信息。

4 问答功能




整体流程:

  1. 用户输入问题

    • 用户通过前端界面输入自然语言问题。例如,"某型号飞机的xxx属性?"。
    • 前端捕获用户输入并通过 Axios 发送请求到后端。
  2. 前端通过 Axios 发送请求

    • Axios 发起 HTTP 请求(如 POST)到后端 Flask API,传递用户输入的问题。
    • 请求携带的参数通常包括问题的文本。
  3. 后端接收请求并进行 Aho-Corasick 算法预处理

    • 后端 Flask 路由接收到用户的问题后,开始进行预处理,核心是通过 Aho-Corasick 算法 提取关键词。
    • Aho-Corasick 算法的作用是通过多模式字符串匹配技术,从用户的问题中识别出预定义的特征词(例如,飞机型号、飞机属性、飞机类型、生产商等关键词)。

    Aho-Corasick 推理过程的详细步骤

    步骤 1:特征词加载与模型初始化

    • 系统在初始化时加载一组预定义的特征词,这些特征词包括常见的飞机相关实体(如"飞机类型"、"生产商"、"飞机型号"等),以及问题类型的标签(如"长度"、"事故"、"生产"等)。
    • 这些特征词被组织成一个多模式匹配树(AC自动机),用于高效匹配用户输入中的关键词。

    步骤 2:问题类型分类与特征词匹配

    • 在用户输入问题后,后端首先用 Aho-Corasick 算法匹配用户输入中的所有特征词。例如,如果用户输入"某型号飞机的发动机性能如何?",系统会检测到特征词"飞机型号"和"长度"。
    • 根据匹配到的特征词,系统进一步判断问题的类型。问题的类型分类可以通过一些预定义的规则进行,比如:
      • 如果问题包含"长度"关键词,则推测为关于长度的属性查询;
      • 如果问题包含"翼展"关键词,则推测为与翼展相关的属性查询;
      • 如果问题包含"生产"等关键词,则推测为询问飞机生产商对应生产机型的关系查询。
    • 分类结果和特征词将作为下一步构建图谱查询的依据。

    步骤 3:构建图谱查询语句

    • 根据问题类型的分类结果,系统会构建相应的 Cypher 查询语句 ,以便在 Neo4j 图数据库中查询相关信息。

      • 例如,假设用户查询"某型号飞机的长度",系统将生成类似以下的 Cypher 查询:

      sql = ["MATCH (m:飞机) where m.name = '{0}' return m.name, m.长度".format(i) for i in entities

      • 如果问题涉及多个实体和关系,查询语句会变得更复杂,可能会涉及多个节点和关系。
      • 系统将根据提取的关键词和问题分类来动态构建这些查询语句。
  4. 后端执行图谱查询并获取数据

    • 后端使用 py2neo 库与 Neo4j 图数据库交互,执行生成的 Cypher 查询。
    • Neo4j 图数据库根据查询返回匹配的节点和关系数据(例如,飞机的某些参数、飞机发生的事故等)。
  5. 处理查询结果并封装答案

    • 返回的图数据通常是一个包含节点属性的集合。后端会对返回的数据进行进一步处理,整理成用户易于理解的回答。
      • 例如,返回的性能数据可能是多个字段(如波音公司生产了多个飞机机型等),系统会根据问题的上下文对这些数据进行整合和美化。
      • 如果查询涉及多个节点和关系,系统可能需要对结果进行排序、筛选和过滤,以确保返回的信息符合用户的意图。
      • 此外,后端还可以根据返回的数据做一些额外的推理或补充,如推荐相关信息、给出解释或展示图片等。
  6. 前端展示查询结果

    • 后端将最终的回答结果返回给前端,通常是 JSON 格式的数据,包含查询结果、文本答案等信息。
    • 前端接收到数据后,将其格式化为用户友好的形式并展示在页面上。例如,展示问题的详细答案,或者在图谱中高亮相关节点和关系。

Aho-Corasick 算法的详细步骤

1. 特征词加载和模型初始化

  • 加载一个包含所有飞机领域关键词的字典,如"飞机型号","生产商","事故","飞机类型"等。
  • 使用 Aho-Corasick 算法构建一个自动机(trie树结构),每个节点表示一个字符。然后通过构建失配指针(fail pointer)和输出指针来加速匹配过程。

2. 问题匹配

  • 对用户输入的文本,算法通过在树结构中快速匹配输入的字符串,找出所有可能的关键词。
  • 对于每个匹配到的特征词,系统可以记录下其在问题中的位置,并根据这些匹配到的特征词进行问题分类。

3. 问题分类

  • 根据匹配到的特征词,判断问题的类型。例如,如果匹配到"长度"类的特征词,问题就被分类为长度相关问题;如果匹配到"生产"相关的词汇,则分类为生产商和机型查询。
  • 问题类型的分类有助于后续构建更加精准的图谱查询语句。

4. 生成图谱查询

  • 通过分析问题中的关键词和问题类型,构建 Cypher 查询语言语句。系统根据问题的意图动态调整查询内容(例如,查询性能相关的属性,还是查询部件和系统的关系)。
  • 对于涉及多个实体和关系的复杂问题,系统生成多级查询,结合图数据库的强大查询能力。

5. 封装和美化结果

  • 返回的数据通常是图数据库节点和关系的属性,系统根据用户问题进行格式化。例如,将性能参数整理成一段清晰的文本描述,或通过图形化展示推力、油耗等数据。
  • 系统还可以根据上下文做出解释和补充,增强用户体验。

5 飞机知识库查询

为了提供便捷的飞机信息查询服务,系统设计了一个直观、易用的飞机机型查询功能 。通过这个功能,用户可以快速查找到系统内所有飞机机型的详细信息。每个飞机机型都以卡片形式 展示,卡片设计简洁、美观,同时提供丰富的飞机属性信息,帮助用户更好地了解每种机型的特性。

1. 飞机卡片展示

每种飞机机型的信息都以一个卡片的形式展示,卡片设计突出视觉美感,同时确保信息清晰易读。具体展示内容如下:

  • 示例图片:卡片上方展示的是飞机的高清示例图片,帮助用户直观地了解飞机的外观。图片清晰、精美,增强了页面的可视化效果。
  • 飞机型号:卡片的下方会显示飞机的具体型号,方便用户快速识别。
  • 飞机类型:标明飞机的类型,如"窄体"或"宽体",让用户了解该飞机的座舱布局和用途。
  • 其他关键属性 :除了型号和类型,卡片还展示了飞机的一些核心属性,如:
    • 飞机长度:标明飞机的总长度。
    • 翼展:显示飞机的翼展,便于用户了解飞机的飞行性能。
    • 生产商:显示飞机的生产商信息,如波音、空客等。

此外,每个卡片下方还提供了一个"查看详细属性"按钮,用户点击该按钮后可以查看该飞机的所有详细属性信息,包括但不限于飞行性能、机内配置等。

2. 分页展示

为了保持页面简洁和提高加载速度,每页显示4个飞机卡片。通过分页功能,用户可以方便地浏览更多的飞机机型。页面底部提供分页按钮,用户可以点击"上一页"或"下一页"来切换不同的飞机列表页面,快速浏览系统内的所有飞机机型。

3. 搜索功能

在页面的上方,提供了一个搜索输入框,用户可以在其中输入关键词进行模糊搜索。通过输入飞机型号、生产商、飞机类型等相关关键词,系统将自动筛选出匹配的飞机机型。搜索功能帮助用户迅速定位到自己感兴趣的飞机信息,提升了查询效率。

4. 用户体验与交互设计

  • 视觉美感:每个飞机卡片都经过精心设计,确保信息清晰、布局合理,同时视觉效果美观、现代。飞机的图片展示和文字信息之间的配合使得整个页面既有功能性,又具有视觉吸引力。
  • 分页与导航:分页功能清晰易用,用户可以方便地浏览飞机机型信息,不会因为信息过多而感到困惑。分页按钮的位置设计合理,操作简单直观。
  • 搜索功能:搜索框支持模糊匹配,用户可以根据自己的需求输入关键字,系统会自动过滤出相关的飞机信息,极大提升了查询的效率。

6 个人信息修改

  • 修改头像:可以上传自己想要的头像进行个性化设置
  • 修改信息:修改个人信息如姓名、身份证号、年龄等
  • 修改密码:若用户先更要修改密码,用户可以通过手机号码重置密码。

7 登录与注册

系统提供了一个简洁而安全的登录与注册功能,旨在为用户提供顺畅的操作体验。在同一个页面内,通过切换卡片的方式,用户可以选择进行登录或注册操作。以下是对系统登录与注册功能的详细描述:

1. 登录功能

登录功能是用户进入系统的第一步,用户需提供有效的用户名和密码。系统会验证输入的凭据,确保用户身份的正确性。具体流程如下:

  • 界面设计:登录功能在一个卡片中实现,卡片内包含两个输入框:一个用于输入用户名,另一个用于输入密码。用户点击"登录"按钮后,系统会将输入的数据提交给后端进行验证。
  • 后端验证:系统会向后端发送用户名和密码信息。后端会查询数据库,检查用户名是否存在,并核对密码是否正确。如果用户名或密码错误,系统会返回相应的错误提示信息,如"用户名或密码错误,请重新输入"。
  • 登录成功 :若用户名和密码验证成功,用户将被自动重定向到系统主页,进入系统的主界面。

2. 注册功能

注册功能允许新用户创建账户。通过输入用户名、昵称和密码,用户可以完成注册流程。系统会检查用户名是否已被其他用户注册,以确保每个用户名的唯一性。具体流程如下:

  • 界面设计:与登录页面类似,注册功能也在同一张卡片内实现,用户可以通过切换标签从登录切换到注册界面。注册页面包含三个输入框:用户名、昵称和密码,用户填写完这些信息后,点击"注册"按钮提交。
  • 后端验证:在用户提交注册信息后,系统会向后端发送请求,后端会检查用户名是否已经存在于数据库中。如果用户名已存在,系统将返回提示信息,告知用户该用户名已被注册,无法继续注册。如果用户名未被占用,系统会将新用户的信息存入数据库,完成注册。
  • 注册成功:注册成功后,系统会返回"注册成功"的提示,并允许用户直接跳转到登录页面,用户可以用刚刚注册的用户名和密码登录系统。
  • 错误处理 :如果用户输入的密码不符合强度要求,系统会提示用户密码过于简单,需要更复杂的密码。所有字段都将进行必要的验证,确保信息的完整性和安全性。

3. 切换功能

登录和注册功能在同一个页面内通过切换卡片的方式实现。用户可以根据自己的需求,方便地在登录和注册界面之间切换。切换操作简洁直观,系统提供了清晰的视觉反馈,用户在卡片之间切换时,界面会平滑过渡。

4. 动图效果

为了提升用户体验,登录与注册页面上都将展示一张与系统主题相关的动图。动图不仅增加了页面的互动感,还能帮助用户更好地理解系统的特色和主题。动图将在页面加载时显示,并且在用户切换界面时始终保持一致,形成统一的视觉效果。

8 技术说明

8.1 前端部分

前端部分基于 Vue2Vuetify 开发,同时使用 D3.js 实现知识图谱的可视化展示。具体的技术栈和实现如下:

  • Vue2:Vue.js 是一个渐进式的 JavaScript 框架,用于构建用户界面。在这个系统中,Vue2 用于组织前端的组件,提供响应式的数据绑定和组件化开发,确保前端界面的可维护性和扩展性。
  • Vuetify:Vuetify 是一个基于 Material Design 的 Vue.js UI 框架,它提供了大量的现成组件,可以帮助我们快速构建现代化的、响应式的用户界面。在这个系统中,Vuetify 用于构建登录、注册、个人信息管理、图谱可视化等各种 UI 组件。
  • D3.js:D3.js 是一个强大的 JavaScript 数据可视化库,用于创建复杂的动态和交互式图表。在本系统中,D3.js 用于展示飞机知识图谱的可视化。通过 D3.js,我们可以将 Neo4j 中的数据节点和关系转换成图形化的元素,并为用户提供交互式的图谱浏览体验。例如,用户可以点击图谱中的节点查看详细信息,放大缩小图谱,拖拽图谱中的元素等。
  • Axios:Axios 是一个基于 Promise 的 HTTP 库,用于前端与后端之间的数据交互。通过 Axios,前端可以发送异步请求(如 GET、POST 等)到后端的 RESTful API,获取或提交数据。Axios 在系统中用于实现前端与后端之间的通信,传输用户查询的问答请求、用户注册与登录信息等。

8.2 后端部分

后端使用 Flask 框架开发,提供 RESTful API 来支持前端的交互,并处理与数据库和知识图谱相关的各种操作。详细实现如下:

  • Flask:Flask 是一个轻量级的 Python Web 框架,适合构建简单且灵活的 Web 应用。Flask 为后端提供了路由、请求处理、会话管理、模板渲染等基本功能。在这个系统中,Flask 用于构建 RESTful API,接收前端的 HTTP 请求并返回响应。
  • SQLAlchemy:SQLAlchemy 是一个 Python 的 ORM(对象关系映射)库,用于简化对关系型数据库(如 MySQL)的操作。在系统中,SQLAlchemy 用于与 MySQL 数据库进行交互,存储和查询用户信息以及与飞机知识相关的静态数据(如飞机型号、飞机类型、长度、尾翼、油箱容量等参数等)。它通过 SQLAlchemy 的模型定义,使得数据库操作更加简洁、易于维护。
  • Aho-Corasick 算法:Aho-Corasick 是一种高效的字符串匹配算法,常用于多模式匹配。在本系统中,Aho-Corasick 算法用于处理用户的自然语言查询,通过高效的模式匹配技术,快速找出用户查询中的关键词,并结合图谱数据进行回答。特别适用于快速回答多种模式的查询请求。
  • py2neo :py2neo 是一个 Python 客户端库,用于与 Neo4j 图数据库进行交互。在系统中,py2neo 用于将用户查询映射到 Neo4j 图数据库的查询操作,提取与查询相关的图谱数据,并返回给前端。在问答环节,用户查询的问题会被转化为图谱查询,系统通过 py2neo 发起查询请求,利用图谱关系推理出答案。
  • Neo4j :Neo4j 是一个图数据库,专门设计用于处理图形数据。图数据库使用节点(Node)和关系(Relationship)来表示和存储数据之间的关联。系统将飞机领域的知识存储在 Neo4j 中,包含了飞机型号、部件、系统、性能参数等节点,以及这些节点之间的关系(例如,飞机型号与发动机的关联)。Neo4j 提供了强大的图查询语言 Cypher,用于高效地查询节点间的复杂关系。后端通过 py2neo 库与 Neo4j 进行数据交互。

8.3 数据库部分

系统使用了两种数据库:MySQLNeo4j

  • MySQL:MySQL 是一个关系型数据库,广泛用于存储结构化数据。在系统中,MySQL 用于存储与用户相关的信息(如用户名、密码、个人资料等)以及飞机知识库中一些静态的信息,如飞机型号、技术规格、历史数据等。这些信息通常以表格形式存储,方便进行 CRUD 操作。SQLAlchemy 用于简化对 MySQL 的操作,使得开发者能够通过 Python 对数据库进行操作。
  • Neo4j:Neo4j 是一个图数据库,主要用于存储飞机相关的知识图谱。知识图谱中的实体(如飞机型号、发动机、部件等)被建模为节点,实体之间的关系(如"使用""属于"等)则被建模为边。Neo4j 适合存储复杂的关系数据,并且支持高效的图查询。在系统中,Neo4j 用于存储和管理飞机领域的知识,并支持基于图的推理和查询。

文章结尾部分有CSDN官方提供的学长 联系方式名片

文章结尾部分有CSDN官方提供的学长 联系方式名片

关注B站,有好处! 关注B站,私信获取! 麦麦大数据

相关推荐
NAGNIP10 小时前
一文搞懂深度学习中的通用逼近定理!
人工智能·算法·面试
冬奇Lab11 小时前
一天一个开源项目(第36篇):EverMemOS - 跨 LLM 与平台的长时记忆 OS,让 Agent 会记忆更会推理
人工智能·开源·资讯
冬奇Lab11 小时前
OpenClaw 源码深度解析(一):Gateway——为什么需要一个"中枢"
人工智能·开源·源码阅读
AngelPP15 小时前
OpenClaw 架构深度解析:如何把 AI 助手搬到你的个人设备上
人工智能
宅小年15 小时前
Claude Code 换成了Kimi K2.5后,我再也回不去了
人工智能·ai编程·claude
九狼15 小时前
Flutter URL Scheme 跨平台跳转
人工智能·flutter·github
ZFSS16 小时前
Kimi Chat Completion API 申请及使用
前端·人工智能
天翼云开发者社区17 小时前
春节复工福利就位!天翼云息壤2500万Tokens免费送,全品类大模型一键畅玩!
人工智能·算力服务·息壤
知识浅谈17 小时前
教你如何用 Gemini 将课本图片一键转为精美 PPT
人工智能
Ray Liang17 小时前
被低估的量化版模型,小身材也能干大事
人工智能·ai·ai助手·mindx