本文主要通过python实例讲解基于RDF和SPARQL的KBQA系统的构建。该项目可在python2和python3上运行通过。

注:KBQA即是我们通常所说的基于知识图谱的问答系统。这里简单构建的EasyKBQA,数据来源于网络,源码地址看下面补充说明。

目录:

  -流程原理

  -实际过程

  -程序运行

  -补充说明

流程原理:

该问答系统可以解析输入的自然语言问句,主要运用REFO库的"对象正则表达式"匹配得到结果, 进而生成对应 SPARQL 查询语句,再通过API请求后台基于TDB知识谱图数据库的 Apache Jena Fuseki 服务, 得到结果。

实际过程:

1. 预定义 3 ​类共 5 ​个示例问题,​包括:
  ● "谁是苑茵?",
  ● "丁洪奎是谁?",
  ● "苏进木来自哪里?",
  ● "苑茵哪个族的?",
  ● "苑茵是什么民族的人?".
2. 利用结巴分词对中文句子进行分词, ​同时进行词性标注;
3. 将词的文本和词性打包, ​视为"词对象",对应 :class:Word(token,​ ​pos)​;
4. 利用 REfO ​模块对词进行对象级别 (object-level) ​的正则匹配,判断问题属于的​种类​并产生对应的 SPARQL,对应 :class:Rule(condition,​ ​action)​;
5. 如果成功匹配并成功产生 SPARQL ​查询语句, ​立刻请求 Fuseki ​服务并返回结果,打印相关内容;

程序运行:

1、配置第三方库:pip install refo jieba sparqlwrapper

2、安装JAVA JDK1.8,配置好环境变量。

3、项目根目录主要包括backend​​文件夹和test.py文件(同一级),backend是Jena​的Fuseki 模块,​运行第4步后在本地监听(http://localhost:3030/),如图:

4、cd backend/apache-jena-fuseki-3.5.0,windows下启动SPARQL endpoint服务:

fuseki-server.bat --loc=../DB /demo > log.txt 2>&1

对应Linux命令为:

nohup ./fuseki-server --loc=../DB /demo > log.txt 2>&1 &

5、运行根目录代码:python test.py,结果如下图:

补充说明:

1、启动fuseki服务器参数,--loc=../DB设置在线服务数据库位置,参数/demo设置服务器数据集名称(自定义),对应的SPARQL查询地址为:http://localhost:3030/demo/query

2、自然语言问句进行正则匹配的逻辑REfO. ​主要参考根目录下的代码:words.py

3、后续改进可参考: 使用邻接链表表示自然语言问句, 通过遍历有向图或子图匹配方法构造 SPAPQL ​查询语句

代码下载地址:https://download.csdn.net/download/starbaby01/10621927

最新文章

  1. openerp7 时区问题
  2. html标签思维导图
  3. 面向对象的Javascript(4):重载
  4. 图解Android - Zygote, System Server 启动分析
  5. 支付宝也要上"服务号"?斗战微信继续升级
  6. Mybatis 自动从数据库生成entity,mapping,dao接口
  7. hadoop 错误处理机制
  8. HTML contact form with CAPTCHA
  9. C语言的指针使用
  10. 高效使用 Python 可视化工具 Matplotlib
  11. WebClient下载文件
  12. Apache Flume 1.7.0 自定义输入输出
  13. Swift3 获取系统音量和监听系统音量
  14. Android Studio3.0 配置AndroidAnnotation注解框架
  15. 单链表的增、删、改、减(C++)
  16. C#.NET股票历史数据采集,【附18年历史数据和源代码】
  17. PAT——1058. 选择题
  18. Unused port adds a PWM/analog channel to a microcontroller
  19. windows系统共享设置最顺的一次
  20. Vi文本编辑

热门文章

  1. Spring 整合Mybatis dao原始方法
  2. UIButtonType各个类型的解释:
  3. 学习笔记(1)centos7 下安装nginx
  4. WSO2 API Manager 替换mysql作为数据库,解决AuthorizationUtils Could not set authorizations for the root问题
  5. java并发实战:连接池实现
  6. 关于如何去Apple.cn下载Xcode以及模拟器包
  7. Vue中异步组件(结合webpack,转载)
  8. python+selenium webdriver.firefox()方式配置浏览器设置
  9. Java学习笔记二十:Java中的内部类
  10. 在window10平台下安装TensorFlow(only cpu)