一、开发环境

  • Windows 10 x64

  • Python 3.7

  • Neo4j community 3.5.20

二、项目运行

1、确保安装所需依赖

  pip install -r requirements.txt

注:python-Levenshtein 如果安装不成功,则可以下载对其进行离线安装。

2、构建知识图谱

修改const.py文件中连接数据库使用的URI,USERNAME和PASSWORD的值。然后执行:

  python build_cakg.py

运行大约需要2~5分钟。

3、可以使用两种方式运行:

①. 运行命令行端

  python run_cmd.py

普通问题的回答以字符串的形式给出;带有图表的回答,图表会被渲染至results文件夹中。

②. 运行web端(效果图见下文)

  python run_web.py

带有图表的回答和普通回答一样会被渲染至web页面中,同时也被保存至本地results文件夹中。

注1:最好使用谷歌浏览器(Google Chrome);

注2:生成图表的文件夹地址可以在const.py中更改CHART_RENDER_DIR。

4、have fun!

三、项目简介

1、项目结构

---------------------------------------  root|------data/                        # 数据存放|------dicts/                # 存放特征词(运行build_cakg.py后自动生成)|------question/             # 存放问句中的疑问词|------reference/            # 存放指代词|------tail/                 # 存放尾词(后缀词)|------data.json             # 从年报中组织出的数据|------raw.7z                # 11-19年的年报|------demo/                        # 以jupyter-notebook的形式给出了各种问题类型的演示和说明|------doc/                         # 存放有关readme的文件|------lib/                         # 函数库|------results/                     # 存放某些问题生成的图表(会自动生成)|------test/                        # 存放一些单元测试|------web/                         # web app......|------answer_search.py             # 回答组织器|------build_cakg.py                # 构建知识图谱|------chatbot.py                   # 自动问答器|------const.py                     # 常量|------question_classifier.py       # 分类器|------question_parser.py           # 解析器......

2、数据组织

①. 基本构想

通过浏览公报发现:

  • 每一年所涉及的目录大差不差,有时多有时少,或者只是改个名字;

  • 目录中涉及的指标每年都有一定的变动,而且某些指标里面嵌套指标,还有些指标中给出了各地区的组成值;

  • 指标的值有数值类型,也有字符串类型,有的有单位,有些则没有,而且有些单位在某些年份还不同。

  • 插播一条广告:需要开通正版PyCharm的可以联系我,56元一年,正版授权激活,官网可查有效期,有需要的加我微信:poxiaozhiai6,备注:904。

基于上述几点,我将知识图谱的构建以年份为中心展开,将各个目录、指标等等实体作为知识图谱的结点。结点与结点之间相连接的关系称为结构关系(详细见下文),那么将每个年份结点到各个指标和地区的关系称为值关系(详细见下文)。

将结构和值两种关系拆开:

  • 从结构关系来看,不用一个年度录入一个年度的所有指标,每个年度中肯定有重复指标,这样避免了数据冗余。若每年的指标位置基本不变,则上述做法直接可行,但实际上指标出现的位置可能每年都飘忽不定,所以若直接按上述做法会出现这种情况:

假设2012年指标C1包含指标A、B,指标C2包含指标C;2013年指标C1包含指标A,指标C2包含指标B、C;

则其结构关系为:

其中橙色的边是2012年特有的,蓝色的则是2013年特有的,而黑色的是它们共有的。但在知识图谱中这些边没有颜色之分,是按上图整个结构存储的,这就造成了一个父子结构关系错乱的问题,比如:我要查找13年指标C1包含的所有指标,则A和B都会被返回,而实际上B不应该被返回。

为了解决上述问题,并且不增加任何额外的关系,我为每个关系引入了一个生命周期属性life。这个属性运用了掩码的思想,每个年份维护自己的掩码(运行构建知识图谱脚本时会被自动生成),在遇到上述问题时,拿来和关系中的life做与运算,若结果不为0,就说明此年份包含此指标,反之则不含。

  • 从值关系来看,问题中也是直接给出年份和指标名称,这样也方便查询。

部分结点间的关系如下图:(橙色为年份,棕色为目录,蓝色为指标)

部分结点间的关系如下图:(橙色为年份,棕色为目录,蓝色为指标,红色为地区/机场/公司集团,下同)

②. 知识图谱实体类型

③. 知识图谱实体关系类型

④. 知识图谱属性类型

3、问题预处理

主要指年份和指标两个角度的预处理,此部分详见lib/complement.py。

①. 年份角度 对问题中的年份进行替换,方便特征词识别,例:

   11年 -> 2011年两千一十一年 -> 2011年11-15年 -> 2011年,2012年,2013年,2014年,2015年13到15年 -> 2013年,2014年,2015年13年比前年 -> 2013年比2011年15年比大大前年 -> 2015年比2011年16年比3年前 -> 2016年比2013年16年与前三年相比 -> 2016年与2015年,2014年,2013年相比......

②. 指标角度 对问题中的指标名进行替换,避免因错字漏字而特征词识别不成功。通过Levenshetin算法实现对指标名的模糊查询。例:

   游客周转量 -> 旅客周转量......

4、问题分类

问题的分类是基于特征词的分类,使用ahocorasick算法。

下表给出的是各种问题的类型,更详细的内容请参见项目demo中的demo1~4.ipynb。

5、Web APP

web端使用Flask构建,采用前后端分离的方式。问答界面较为简洁。但可实现以下功能:

  • 回答带有的图表可以直接渲染至页面;

  • 回答中某些关键词以tooltips的形式进行了解释说明(关键词取自年报的注释部分)。

四、源码下载

链接: https://pan.baidu.com/s/1VktPRnduqbjT4rzyTV6sgA?pwd=ihj1 
提取码: ihj1

Python基于民航业知识图谱的自动问答系统(附源码)相关推荐

  1. Python基于人脸识别的考勤系统(附源码)

    原文链接:https://blog.csdn.net/weixin_39653948/article/details/89291751 1. 项目简介 本项目使用Python3.6编写,Qt Desi ...

  2. 基于Python+Neo4j+民航数据 ,我搭建了一个知识图谱的自动问答系统

    最近耗时一周,我基于Python+Neo4j ,搭建了一个民航业知识图谱的自动问答系统. 文章目录 环境 运行 1.项目结构 2.数据组织 3.问题预处理 4.问题分类 5.Web APP 源码&am ...

  3. mysql实现知识图谱_基于电影知识图谱的智能问答系统学习记录

    学习了"谓之小一"大佬的基于电影知识图谱的智能问答系统,做个记录.地址如下:https://github.com/weizhixiaoyi/DouBan-KGQA 一.知识图谱构建 ...

  4. Python基于OpenCV的图像去雾算法[完整源码&部署教程]

    1.图片识别 2.视频展示 [项目分享]Python基于OpenCV的图像去雾算法[完整源码&部署教程]_哔哩哔哩_bilibili 3.算法原理 图像增强算法常见于对图像的亮度.对比度.饱和 ...

  5. Python基于OpenCV监控老鼠蟑螂检测系统[完整源码&部署教程]

    1.视频演示: [项目分享]Python基于OpenCV监控老鼠蟑螂检测系统[完整源码&部署教程]_哔哩哔哩_bilibili 2.图片演示: 3.明厨亮灶: 餐饮企业的厨房卫生状况一直饱受消 ...

  6. TransE,知识图谱嵌入(KGE)源码阅读(一)

    TransE,知识图谱嵌入(KGE)源码阅读(一) Paper: Antoine Bordes等人在2013年发表于NIPS上的文章 Paper Understanding:TransE,知识图谱嵌入 ...

  7. python撩人的代码,老师教已毕业的学生,用Python代码每天不定时撩女友,附源码文件...

    原本就是学生会主席,在学校如此优秀的他,毕业参加工作,依然展现出好强的一面. 每天认真的工作,即使在工作之余也要用来给自己充电,所以难免会忽略女友,不够关心,免不了发脾气,甚至是争吵. 有一天,曾经大 ...

  8. Python毕设-【课堂人脸签到系统】附源码课件/Python练手项目/Python毕业设计

    Python毕设-[课堂人脸签到系统]附源码课件/允许白嫖 文章目录 Python毕设-[课堂人脸签到系统]附源码课件/允许白嫖 系统简介 一.本课题拟解决的问题 二.系统技术栈 三.开发工具 四.数 ...

  9. python程序员专用壁纸_程序员炫技必备:用Python生成马赛克画!(文末附源码)...

    原标题:程序员炫技必备:用Python生成马赛克画!(文末附源码) 源 | Python与数据分析文 | 强哥 大家知道马赛克画是什么吗?不是动作片里的马赛克哦~~ 马赛克画是一张由小图拼成的大图,本 ...

最新文章

  1. python【蓝桥杯vip练习题库】ADV-298 和谐宿舍2(DP)
  2. Zedboard学习(六):XADC读取数据
  3. 读书笔记之《程序员必读的职业规划书》
  4. IDEA写vue项目出现红色波浪线警告如何解决??
  5. 支付宝的个人捐赠功能
  6. jquery设置表单元素只读_jquery设置元素readonly和disabled(checkbox只读)
  7. 逆天的GPT-2居然还能写代码(但OpenAI却被无情吐槽)
  8. php设置编程,php – 以编程方式设置基本图像
  9. ObjectContext的ApplyPropertyChanges()方法不能更新导航属性的解决办法
  10. 【从C到C++学习笔记】引用/const引用/引用传递/引用作为函数返回值/引用和指针的区别
  11. 怎么画人像_画动画+耍杂技怎么玩?日本小哥串烧后居然爆火网络
  12. autocad型源代码_总结一下可以研究的CAD源代码
  13. php.ini文件中的 session.save_path是个坑爹的玩意!
  14. ISSCC 2017论文导读 Session 14 Deep Learning Processors,A 2.9TOPS/W Deep Convolutional Neural Network
  15. 运用递归来画谢尔宾斯基三角形
  16. php 生成小程序码
  17. 凯思面试经历转置一个string
  18. 计算10光年是多少米java_1光年是多少米,9.46×10^15米(最快的火箭需飞108000年)...
  19. 极客时间和极客学院_极客需要告诉我们的父母有关安全可靠地在线购物的信息
  20. MATLAB 2019 快速入门教程(官方手册翻译)(1/4)

热门文章

  1. Android 常见面试问题
  2. 亚马逊AI炒掉900名员工:这个时代正在惩罚混日子的人
  3. 真爱空间网络办公OA
  4. 泳道图和流程图的区别
  5. 2020年起重机司机(限桥式起重机)考试技巧及起重机司机(限桥式起重机)实操考试视频
  6. cvcvtcolor_cvCvtColor实现色彩空间转换
  7. vite搭建完整项目
  8. UnityShdaer笔记第二课笔记-贴花
  9. 杭电acm2014——青年歌手大奖赛_评委会打分(C语言)
  10. hmac java_java 创建 HMAC 签名