赞
踩
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、数据组织
①. 基本构想
通过浏览公报发现:
基于上述几点,我将知识图谱的构建以年份为中心展开,将各个目录、指标等等实体作为知识图谱的结点。结点与结点之间相连接的关系称为结构关系(详细见下文),那么将每个年份结点到各个指标和地区的关系称为值关系(详细见下文)。
将结构和值两种关系拆开:
假设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构建,采用前后端分离的方式。问答界面较为简洁。但可实现以下功能:
源码文件预览
朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/363412
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。