基于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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 大数据开发主要做什么?

    大数据开发主要做什么?写在前面本文隶属于专栏《100个问题搞定大数据理论体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!本专栏目录结构和文献引用请见100个问题搞定大数据理论体系解答一个大数据平台架构通常如图所示,大数据开发涵盖了图中从下到上各层的实现,其中主要的部分是采集层、储存层、计算层、模型层和接口层,核心部分是储存层和计算层。各层中功能模块的技术实现会根据实际业务场景不同而有所变化,但仍然是围绕着储存数据和数值计算这两大核心功能来进行的。因此,大数据开发的作用主要集中在以

    2022年6月4日
    38
  • 蓝桥杯单片机NE555编程

    蓝桥杯单片机NE555编程

    2021年11月12日
    49
  • python爬虫总是爬不到数据,你需要解决反爬虫了

    python爬虫总是爬不到数据,你需要解决反爬虫了

    2021年11月10日
    94
  • 【spring】注解方式的bean管理

    【spring】注解方式的bean管理【spring】注解方式的bean管理

    2022年4月25日
    33
  • DrawCall_draw a drawing

    DrawCall_draw a drawing关于unity优化,DrawCall肯定占了比较重要的一部分,下面我们就简单了解一下什么是Drawcall。什么是DrawCall?在电脑运行层面理解:rawcall是CPU对底层图形绘制接口的调用命令GPU执行渲染操作,渲染流程采用流水线实现,CPU和GPU并行工作,它们之间通过命令缓冲区连接,CPU向其中发送渲染命令,GPU接收并执行对应的渲染命令。这里drawcall影响绘制的原因主要是因为每次绘制时,CPU都需要调用drawcall而每个drawcall都需要很多准备工作,检测渲染状态、提交

    2022年9月19日
    0
  • LINUX+APACHE+MYSQL+PHP+SVN+SVNMANAGER编译安装配置

    LINUX+APACHE+MYSQL+PHP+SVN+SVNMANAGER编译安装配置

    2021年8月13日
    53

发表回复

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

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