zoukankan      html  css  js  c++  java
  • 简单构建基于RDF和SPARQL的KBQA(知识图谱问答系统)

    本文主要通过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文件(同一级),backendJena​的Fuseki 模块,​运行第4步后在本地监听(http://localhost:3030/),如图:

     

    4cd backend/apache-jena-fuseki-3.5.0windows下启动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

  • 相关阅读:
    在Node.js环境下使用npm命令安装OpenLayers6.4.3时,提示错误“rollbackFailedOptional: verb npm-session”的解决办法
    Windows7-64环境中部署OpenLayers6.4.3详细步骤
    Navicat 导出csv数据乱码如何处理?
    Win10 如何右键新建.md文件
    关于loading加载的问题
    X度文库越来越不要脸了!
    Layui date 插件 闪烁 无法选择
    每日识字
    如何生成项目目录结构
    小米招聘 hiring
  • 原文地址:https://www.cnblogs.com/whiterock/p/9522821.html
Copyright © 2011-2022 走看看