基于jena的知识推理机复现

知识推理机复现

因csdn语法支持与github不太一样,欢迎访问本文github版:https://github.com/JimXiongGM/KnowledgeBasedSearch/blob/master/知识推理机复现.md

目录

本文复现基于jena的知识推理机,并把详细过程整理如下。遇到的主要问题是jena版本更新后有一些配置变化。

主要参考资料是原文(by simmerchan)资料

将如下文件放入/root/xiazai/。点击可进入文件下载页面。

  1. KG-demo-for-movie-master.zip
  2. d2rq-0.8.1.tar.gz
  3. mysql-connector-java-5.1.47.tar.gz
  4. apache-jena-3.12.0.tar.gz
  5. apache-jena-fuseki-3.12.0.tar.gz

mysql 8.0准备

安装部分参见MySQL8.0环境搭建

cd /root/xiazai;
unzip KG-demo-for-movie-master.zip;
# 移动到该路径,否则报错 The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
cp ./KG-demo-for-movie-master/data/kg_demo_movie.sql /var/lib/mysql-files/;
mysql -u root -p
输入密码

进入mysql shell

create database kg_demo_movie;
use kg_demo_movie;
source /var/lib/mysql-files/kg_demo_movie.sql;
-- 查看结果
show databases;
exit

数据准备完成。

d2rq工具安装与使用

这是一个自动将关系型数据库转为三元组的工具,只需要下载安装包和mysql的connector。运行如下命令即可。

注意,这里使用mysql5.0+的jar包,而不是使用8.0+的,否则会报错。

另外,kg_demo_movie_mapping.ttl中的连接密码需要自行修改。本文直接使用原作者提供的ttl文件。

# 需要java version >= 1.5
java -version;
cd /root/xiazai;
tar -zxvf d2rq-0.8.1.tar.gz -C /opt;
tar -zvxf mysql-connector-java-5.1.47.tar.gz;
cp mysql-connector-java-5.1.47/mysql-connector-java-5.1.47-bin.jar /opt/d2rq-0.8.1/lib/;

cd /opt/d2rq-0.8.1;
# 注意! 需要自行修改mysql连接密码
cp /root/xiazai/KG-demo-for-movie-master/kg_demo_movie_mapping.ttl ./
# 备忘:使用自带的工具生成.ttl文件
# ./generate-mapping -u root -p root -o test.ttl --verbose jdbc:mysql:///fzzk_use?useUnicode=true&characterEncoding=utf8&useSSL=false
./dump-rdf -o kg_demo_movie.nt kg_demo_movie_mapping.ttl;
# 测试
nohup ./d2r-server kg_demo_movie_mapping.ttl &
./d2r-query kg_demo_movie_mapping.ttl "SELECT * { ?s <http://www.kgdemo.com#hasActedIn> ?o } LIMIT 10";

有趣的是,该工具提供了SPARQL查询的webUI,打开http://master:2020/snorql即可使用。

Apache jena + jena-fuseki

cd /root/xiazai;
tar -zxvf apache-jena-3.12.0.tar.gz -C /opt/;
tar -zxvf apache-jena-fuseki-3.12.0.tar.gz -C /opt/;

# 使用jena将nt文件载入
cd /opt/apache-jena-3.12.0;
mkdir -p /data/jena/kg_demo_movie_database/;
./bin/tdbloader --loc=/data/jena/kg_demo_movie_database /opt/d2rq-0.8.1/kg_demo_movie.nt;

# 初始化jena-fuseki
cd /opt/apache-jena-fuseki-3.12.0/;
./fuseki-server
# ctrl+z  运行后会自动创建run文件夹
# 开启远程连接权限
sed -i 's/= localhostFilter/= anon/g' ./run/shiro.ini;

# 重点。更新原作者的配置文件
# 值得注意的是,这里不需要原作者从protege中导出的owl文件
echo '@prefix fuseki:  <http://jena.apache.org/fuseki#> .
@prefix rdf:     <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs:    <http://www.w3.org/2000/01/rdf-schema#> .
@prefix tdb:     <http://jena.hpl.hp.com/2008/tdb#> .
@prefix ja:      <http://jena.hpl.hp.com/2005/11/Assembler#> .
@prefix :        <#> .

<#service1>  rdf:type fuseki:Service ;
    fuseki:name                       "kg_demo" ;       # http://host:port/tdb
    fuseki:serviceQuery               "sparql" ;    # SPARQL query service
    fuseki:serviceQuery               "query" ;    # SPARQL query service (alt name)
    fuseki:serviceUpdate              "update" ;   # SPARQL update service
    fuseki:serviceUpload              "upload" ;   # Non-SPARQL upload service
    fuseki:serviceReadWriteGraphStore "data" ;     # SPARQL Graph store protocol (read and write)
    # A separate read-only graph store endpoint:
    fuseki:serviceReadGraphStore      "get" ;      # SPARQL Graph store protocol (read only)
    fuseki:dataset           <#dataset> ;
    .

<#dataset> rdf:type ja:RDFDataset ;
    ja:defaultGraph <#modelInf> ;
    .

<#modelInf> rdf:type ja:InfModel ;
    ja:reasoner [
        ja:reasonerURL <http://jena.hpl.hp.com/2003/GenericRuleReasoner>;
        # ubuntu
        ja:rulesFrom <file:///opt/apache-jena-fuseki-3.12.0/run/databases/rules.ttl>;
    ];
    ja:baseModel <#g> ;
    .

<#g> rdf:type tdb:GraphTDB ;
    # ubuntu
    tdb:location "/data/jena/kg_demo_movie_database" ;
    tdb:unionDefaultGraph true ;' > ./run/configuration/fuseki_conf.ttl

# 重点。更新原作者的推理文件
echo '@prefix : <http://www.kgdemo.com#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .

[ruleComedian: (?p :hasActedIn ?m), (?m :hasGenre ?g), (?g :genreName "喜剧") -> (?p rdf:type :Comedian)]
[ruleInverse: (?p :hasActedIn ?m) -> (?m :hasActor ?p)]
' > ./run/databases/rules.ttl;

# 直接启动即可,无需带参数
./fuseki-server
# 后台启动
# nohup ./fuseki-server >> /logs/jena_fuseki.log &

打开http://localhost:3030,输入命令查询喜剧演员

PREFIX : <http://www.kgdemo.com#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

SELECT ?n WHERE {
?x rdf:type :Comedian.
?x :personName ?n.
}
limit 10
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值