Skip to content
从无到有构建一个电影知识图谱,并基于该KG,开发一个简易的KBQA程序。
Python
Branch: master
Clone or download
Latest commit 5bf72ff May 16, 2019
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
data upload data Dec 27, 2017
kg_demo_movie Delete jena_sparql_endpoint.pyc Jun 20, 2018
NLP&KG群二维码.png QRcode May 15, 2019
README.md Update README.md May 15, 2019
catalog-v001.xml kbqa demo Jan 28, 2018
fuseki_conf.ttl Adjust configuration and add setup instructions Sep 5, 2018
kg_demo_movie.nt upload rdf and mapping file Jan 2, 2018
kg_demo_movie_mapping.ttl upload rdf and mapping file Jan 2, 2018
ontology.ttl Adjust configuration and add setup instructions Sep 5, 2018
requirements.txt Add python library dependency Sep 5, 2018
rules.ttl

README.md

上手教程

如果对相关概念不是很了解,建议可以先看看该代码配套的知乎专栏系列文章。

环境配置

  1. Python版本为2.7,采用3.0版本请自行修改源码中编码相关代码。
  2. 安装python虚拟环境virtualenv venv
  3. 切换至虚拟环境source venv/bin/activate
  4. 安装依赖pip install -r requirements.txt
  5. 安装jena和fuseki(尽量下载3.7之前的版本,否则会出现配置文件不兼容的情况,也可以自行修改配置文件)。OS X系统可用brew安装,如下所示。
    brew install jena fuseki

准备数据

有两种方法。

  1. 事先将三元组数据导入tdb

    tdbloader --loc tdb kg_demo_movie.nt
  2. 略过此步。等服务器启动后在管理后台上传数据。

运行服务器

fuseki-server --config fuseki_conf.ttl

问题集锦

  1. 启动服务器时报以下错误
    #model_inf was aborted because of NodeTableThrift/Write
    

    推测原因

    InfModel里baseModel和content属性两者不兼容。
    <#model_inf> a ja:InfModel ;
        ja:baseModel <#tdbGraph> ;
        # ja:content
    

    解决

    注释掉其中的一项。例如,将content注释掉,等服务器启动后,再上传本体文件。

目录结构

Data文件夹

包含ER图模型文件和创建数据库、表,插入所有数据的sql文件。用户可以直接使用sql文件导入数据到mysql中。

kg_demo_movie文件夹

  • crawler中的movie_crawler用于从The Movie DB下载数据,用户需要自己去网站注册账号,申请API KEY。在脚本中填入自己的API KEY,填写mysql相关参数即可运行。用户需要额外下载的包:requests和pymysql。tradition2simple用于将繁体字转为简体字(声明一下,我找不到该文件的出处了,我是从网上找到的解决方案,如果有用户知道该作者,麻烦告知,我会备注)。
  • KB_query文件夹包含的是完成整个问答demo流程所需要的脚本。
    • "external_dict"包含的是人名和电影名两个外部词典。csv文件是从mysql-workbench导出的,按照jieba外部词典的格式,我们将csv转为对应的txt。
    • "word_tagging",定义Word类的结构(即我们在REfO中使用的对象);定义"Tagger"类来初始化词典,并实现自然语言到Word对象的方法。
    • "jena_sparql_endpoint",用于完成与Fuseki的交互。
    • "question2sparql",将自然语言转为对应的SPARQL查询。
    • "question_temp",定义SPARQL模板和匹配规则。
    • "query_main",main函数。在运行"query_main"之前,读者需要启动Fuseki服务。

ontology.owl

通过protege构建的本体,用户可以直接用protege打开,查看或修改。

kg_demo_movie_mapping.ttl

根据d2rq mapping language编辑的映射文件,将数据库中的数据映射到我们构建的本体上。

kg_demo_movie.nt

利用d2rq,根据mapping文件,由Mysql数据库转换得到的RDF数据。

fuseki_conf.ttl

fuseki server配置文件,指定推理引擎,本体文件路径,规则文件路径,TDB路径等

rules.ttl

规则文件,用于基于规则的推理。

兴趣群

建了一个QQ群,给大家提供一个交流的渠道。由于各种原因,我可能无法及时回答大家的问题;同时,个人的力量是渺小的,我对各位遇到的问题也不一定都了解,因此希望大家通过这个群能解决自己遇到的问题。群主题不局限于KG,也包括NLP的一些话题。

image

You can’t perform that action at this time.