基于jena的知识推理机复现「建议收藏」

基于jena的知识推理机复现「建议收藏」知识推理机复现因csdn语法支持与github不太一样,欢迎访问本文github版:https://github.com/JimXiongGM/KnowledgeBasedSearch/blob/master/知识推理机复现.md目录mysql8.0准备d2rq工具安装与使用Apachejena+jena-fuseki本文复现基于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
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/142992.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • vue实现简单的分页功能[通俗易懂]

    vue实现简单的分页功能[通俗易懂]分页其实就是对一组数据分组!而vue又刚好是数据驱动,所以我们只需要关注数据层就行了!分页开始—>变量:data(){return{//假设这是后台传来的数据来源data:[],//所有页面的数据totalPage:[],//每页显示数量pageSize:5,…

    2022年10月1日
  • mysql批量写入数据存储过程_mysql批量保存多大数据

    mysql批量写入数据存储过程_mysql批量保存多大数据一、以下共统计了3种批量插入的方法:1、普通方法:一条一条插入;2、使用拼接语句一次性插入,拼接语句的语法如下:insertintotable(col1,col2,col3)values(’a’,’b‘,’c‘),(’a1’,’b1‘,’c1‘),(’a2‘,’b2‘,’c2′),……对于拼接语句sql有一个长度限制:max_allowed_packet,查看限制最大值:showvariableslike‘%max_allowed_packet%’,使用Navic

    2022年10月6日
  • oracle 11g安装教程_暖气片安装方法图解

    oracle 11g安装教程_暖气片安装方法图解Oracle11G安装图解标签(空格分隔):oracleOracle介绍  OracleDatabase,又名OracleRDBMS,或简称Oracle是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的

    2022年9月21日
  • python3生成随机数_用python随机输出一个区间的随机数

    python3生成随机数_用python随机输出一个区间的随机数#coding:utf-8″””生成随机数”””importrandomimporttimeimportuuidfromhashlibimportmd5__author__=’zheng’defgenerate_rand_id(sstr=None):”””生成一组16进制的随机数,32位:paramsstr::return:”””ti=int(time.time())if…

    2022年9月1日
  • 展现自己的人生智慧作文_才学智慧展现少年风采

    展现自己的人生智慧作文_才学智慧展现少年风采枭将东徙汉代的刘向为了说明“知己者不怨人”的道理,举了个寓言故事:枭(一种猛禽)遇到鸠(一种水鸟)。鸠问它:“你要去哪里?”枭说:“我要搬到东方去住。”鸠问它为什么,枭说:“这里的人都讨厌我的叫声,所以我要搬到东方去。”鸠说:“那你就改一改你的叫声吧,如果你不改的话,你到了东方,东方的人也会讨厌你的。” 心灵哲思 解决问题要从根本上着手,不要只想到换一个环境,只有彻底改变自身的

    2022年8月24日
  • SpringBoot整合RabbitMQ 实现五种消息模型 详细教程

    SpringBoot整合RabbitMQ 实现五种消息模型 详细教程今天说下了消息队列中间件,各种队列性能对比,RabbitMQ队列,交换机(Exchange)以及消息中间件的应用场景,然后带着大家一起实现RabbitMQ的五种消息模型。消息队列中间件消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题实现高性能,高可用,可伸缩和终一致性[架构]使用较多的消息队列有ActiveMQ,RabbitMQ,ZeroMQ,K…

    2022年5月15日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号