大家好,又见面了,我是你们的朋友全栈君。
知识推理机复现
因csdn语法支持与github不太一样,欢迎访问本文github版:https://github.com/JimXiongGM/KnowledgeBasedSearch/blob/master/知识推理机复现.md
目录
本文复现基于jena的知识推理机
,并把详细过程整理如下。遇到的主要问题是jena版本更新后有一些配置变化。
主要参考资料是原文(by simmerchan)和资料
将如下文件放入/root/xiazai/
。点击可进入文件下载页面。
KG-demo-for-movie-master.zip
d2rq-0.8.1.tar.gz
mysql-connector-java-5.1.47.tar.gz
apache-jena-3.12.0.tar.gz
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
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/142992.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...