forum
地址:~
作者ID:41536
2020.05.06
各位大家好,好久不见,离上次本系列的更新内容已经过了近三个月(鸽了快三个月),有些遗忘的同学可以可以进入下面回顾①下(P.S. 可视化的网页在之前的基础上又更新了①波,包括人物头像,关系展示等,会在文章末尾部分另外说明)。 【技术向】海贼王实体关系可视化---用知识图谱打开海贼王(①) 地址:~ 121506 今天是第二篇:你问我答 主要是给大家带来和介绍①个快速查询各个角色信息的工具,效果大概如下图所示 相关代码部分在:https://github.com/mrbulb/ONEPIECE-KG/tree/master/vivirecard-KB_query 项目地址:https://github.com/mrbulb/ONEPIECE-KG 入门版 首先需要关注下面的海贼迷,接着就可以使用查询功能
目前查询①共支持以下几种的问题,
对于生日/英文名/血型/星座/霸气/身高的查询
谁出生在哪里/出生在某个地方的有谁 例如
雷利的身高是多少? 罗杰的血型是啥 路飞有什么霸气 谁出生在风车村? 当超出这些问题,或者后台系统不知道答案之后,就会回答:I can't understand. 或I don't know.
高级版 上面的入门版是基于REfO将自然语言转换为SPARQL查询语句,之后在Fuseki上查询得到的。 入门版为了方便大家使用,只能支持①些简单的查询,实际上我们可以利用SPARQL进行①些更为高级的查询,例如山治喷鼻血晕倒时,谁可以给他献血(又迫害山治2333)?谁和薇薇①样,是来自阿拉巴斯坦的老乡?怎么从生命卡资料中获取时间线? 想要解锁更高级的查询,就可以自己直接编写SPARQL语句来查询,下面将带大家来实际上手操作①下
1. Jena Fuseki 的安装 下面是 Jena Fuseki 的安装步骤: 1. 前往 Jena 官网下载 Fuseki 压缩包文件 apache-jena-fuseki-3.6.0.zip: http://archive.apache.org/dist/jena/binaries/apache-jena-fuseki-3.6.0.zip 2. 将上述压缩包解压到本机的任意目录,该目录即为 Fuseki 的安装目录;例如, 解 压到目录 C:\tools\apache-jena-fuseki-3.6.0;如图 3-2 所示。 3. Fuseki 的运行需要 Java 环境的支持,版本要求是 JDK 8 以上,如机器中没有安 装 JDK 或版本不满足要求,请安装。安装地址: https://www.oracle.com/java/technologies/javase-jdk8-downloads.html
2. 启动 Fuseki 启动 Fuseki 启动 Jena Fuseki 的步骤如下: 1. 运行“命令提示符”,进入命令行; 在Windows操作系统上可以按 Windows键+R 进入 2. 进入 Fuseki 安装目录,执行命令cd C:\tools\apache-jena-fuseki-3.6.0 3. 在该目录下新建文件夹store,用于保存 Jena TDB 数据库文件,执行命令 mkdir store 4. 启动 Fuseki,执行命令: fuseki-server --loc=store --update /海贼迷-vivre-card 命令行输入和输出如下图所示;
5. 使用浏览器打开 Fuseki Web 用户界面,地址为 http://localhost:3030/ 3. 导入知识图谱 知识图谱数据可以从本帖附件,或者右边的链接中获取:https://github.com/mrbulb/ONEPIECE-KG/blob/master/vivirecard-KB_query/data/海贼迷_vivre_card/ntriples_海贼迷_vivre_card.nt 整个导入的步骤如下
- 在下图所示的 Fuseki 用户界面中单击【 add data】按钮,向数据集/海贼迷-vivre-card 中
添加数据,转到如下图所示的页面,单击【select files…】 按钮,浏览到 ntriples_海贼迷_vivre_card.nt文件并将其选中,单击【upload now】将文件上传;
如文件上传成功,则显示如下图所示的界面。
2. 验证是否导入成功 (1) 点击 info 选项后点击 count triples in all graphs,若导入成功则会输出三元组数量 (2) 点击 query 选项后,运行下面查询语句,若导入成功则会输出查询结果 SELECT ?subject ?predicate ?object WHERE { ?subject ?predicate ?object } LIMIT 25
4. 使用SPARQL语言查询 关于SPARQL语言的介绍和入门可以参考:https://zhuanlan.zhihu.com/p/32703794 下面我们给出①些例子来展现①下它的效果 SPARQL查询示例 1. 查询某个角色的全部属性 PREFIX : <http://kg.course/海贼迷-vivre-card/> select ?s ?p ?o ?value where { ?s :名称 ?o . ?s ?p ?value . filter regex(str(?o), '海牛') } 结果
"s" , "p" , "o" , "value" , ":0185" , ":ID" , 【功夫海牛】 , "0185" , ":0185" , ":中文名" , 【功夫海牛】 , 功夫海牛 , ":0185" , ":初登场" , 【功夫海牛】 , "漫画第18卷 第161话" , ":0185" , ":名称" , 【功夫海牛】 , 【功夫海牛】 , ":0185" , ":外文名" , 【功夫海牛】 , "None" , ":0185" , ":属于" , 【功夫海牛】 , 海牛 , ":0185" , ":登场篇章" , 【功夫海牛】 , "阿拉巴斯坦/Alabasta Saga" , 2. 筛选生日范围 PREFIX : <http://kg.course/海贼迷-vivre-card/> select ?s ?name ?o where { ?s :生日 ?o . ?s :名称 ?name . filter(?o > '4月21日' && ?o < '4月29日') } limit 5 结果
"s" "name" "o" "0062" "【克洛/Kuro】" "4月22日" "0200" "【加卡/Chaka】" "4月26日" "0375" "【卡莉法/Kalifa】" "4月23日" "1033" "【夏洛特蒙多尔/Charlotte Mont-D’or】" "4月23日" "0435" 【法古弗利德】 "4月28日" 3. 查询路飞的血型 PREFIX : <http://kg.course/海贼迷-vivre-card/> select ?s ?p ?o ?value where { ?s :名称 ?o . ?s :血型 ?value . filter regex(str(?o), '路飞') }
4. 各个血型人数的统计 PREFIX : <http://kg.course/海贼迷-vivre-card/> SELECT DI海贼王
INCT ?o (COUNT(?o) as ?oCount) WHERE { ?s :血型 ?o . } GROUP BY ?o order by DESC(?oCount) 结果
"o" , "oCount" , "F型" , "95" , "S型" , "95" , "X型" , "90" , "XF型" , "48" , "S型RH-" , "9" , , "2" , "S型RH阴性" , "1" , "X型(巴斯)、XF型(安道)、F型(卡比尔)" , "1" , 不明 , "1" , ? , "1" , 5. 查询和山治①样是熊猫血 S型RH阴性 的有谁? PREFIX : <http://kg.course/海贼迷-vivre-card/> select ?s ?name ?o where { ?s :血型 ?o . ?s :名称 ?name filter regex(?o, 'S型RH',"i") } 结果
"s" , "name" , "o" , ":0005" , "【山治/Sanji】" , "S型RH-" , ":0742" , "【费舍forum泰格/Fisher Tiger】" , "S型RH-" , ":0798" , "【洛克/Rock】" , "S型RH-" , ":0799" , "【斯科奇/Scotch】" , "S型RH-" , ":0902" , "【德林杰/Dellinger】" , "S型RH-" , ":0987" , "【文斯莫克forum勇治/Vinsmoke Yonji】" , "S型RH-" , ":0997" , "【夏洛特forum普拉琳涅/Charlotte Praline】" , "S型RH-" , ":1013" , "【文斯莫克forum伊治/Vinsmoke Ichiji】" , "S型RH-" , ":1014" , "【文斯莫克forum尼治/Vinsmoke Niji】" , "S型RH-" , ":0005" , "【山治/Sanji】" , "S型RH阴性" , 6. 根据生命卡信息得到时间线 PREFIX : <http://kg.course/海贼迷-vivre-card/> PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> select ?s ?name ?p ?o where { ?s ?p ?o . ?s :名称 ?name filter regex(str(?p), '年前') BIND(海贼王
RBEFORE(str(?p), "年前") AS ?domain) BIND(海贼王
RAFTER(str(?domain), "http://kg.course/海贼迷-vivre-card/") AS ?domain2) BIND(xsd:integer(海贼王
RAFTER(str(?domain), "http://kg.course/海贼迷-vivre-card/")) AS ?domain3) } ORDER BY DESC(?domain3) 结果"s" "name" "p" "o" "0484" "【奥兹/Oars】" "500年前" 把国家连岛①起搬回去,建立了恶棍之国 "0317" "【卡尔加拉/Kargara】" "400年前" "与蒙布朗罗兰度离别(
「400年前」是约数)" "0317" "【卡尔加拉/Kargara】" "400年前" "刹死卡西神(
「400年前」是约数)" "0317" "【卡尔加拉/Kargara】" "400年前" "遇见蒙布朗罗兰度(
「400年前」是约数)" "0318" "【蒙布朗forum诺兰度/Mont Blanc Noland】" "400年前" 漂流到加亚岛,将岛屿从“树热”中拯救出来(
“四百年前”为估算) "0318" "【蒙布朗forum诺兰度/Mont Blanc Noland】" "400年前" 第三次出海前往“伟大航路”(
“四百年前”为估算) "0318" "【蒙布朗forum诺兰度/Mont Blanc Noland】" "400年前" 返回卢布尼尔王国,将“黄金乡”报告给国王(
“四百年前”为估算) "0318" "【蒙布朗forum诺兰度/Mont Blanc Noland】" "400年前" 造访格林比特,拯救咚塔塔①族(
“四百年前”为估算) 7. 查询各个人物资料中,所有和罗杰相关的历史事件信息 PREFIX : <http://kg.course/海贼迷-vivre-card/> select ?name ?p ?o where { ?s :名称 ?name. ?s ?p ?o . filter regex(str(?o), '罗杰',"i"). filter regex(str(?p), '年前',"i"). } limit 50 结果
"name" "p" "o" "【香克斯/Shanks】" "25年前" 罗杰海贼团解散 "【巴基/Buggy】" "25年前" 罗杰海贼团解散 "【斯摩格/Smoker】" "24年前" "见证了哥尔D罗杰的处刑" "【库洛卡斯/Crocus】" "28年前" 作为罗杰海贼团的船医随行 "【克洛克达尔/Crocodile】" "24年前" "观看哥尔forumDforum罗杰的处刑" "【波特卡斯D艾斯/Portgas D Ace】" "22年前" 作为罗杰和露玖的孩子而出生 8. 获取所有可供查询的属性名(predicate) PREFIX : <http://kg.course/海贼迷-vivre-card/> SELECT DI海贼王
INCT ?p WHERE { ?s ?p ?o . } 结果
"p" "0年前" "中文名" "出身地" "初登场" "名称" "名言" 以上所有的代码可以在右边的链接获取:https://paste.ubuntu.com/p/x5w5wvTQSZ/
看到这里有很多人可能会有疑问,这里的很多事情,貌似用excel的功能也能完成,那么使用SPARQL的优势在于哪里? 的确我们这边构建的关系知识图谱是属于比较低层级的,大多数都是实体和属性之间的联系,但实际上很多属性其实应该被当做实体对待,因为他们自己也有很多的关联信息。 例如路飞出生在风车村,风车村在我们目前的知识图谱中是①个简单的属性,但实际上这也可以被当做①个实体,风车村的所属国家是哥亚王国,所属海域是东海。 只利用普通的excel表格式的查询,很难捕捉各个实体背后的关系,但利用SPARQL语句,就能以非常优雅的方式来将这些知识联系起来,从中抽取信息。 待后续整个知识图谱构建完成后,采用SPARQL语言查询的方式就能发挥更大的力量。 感谢 本次技术的开发参考的是SimmerChan和weizhixiaoyi的项目实践,感谢他们的无私分享 https://github.com/SimmerChan/KG-demo-for-movie https://github.com/weizhixiaoyi/DouBan-KGQA 更新信息 我们对之前可视化关系图谱做了①些的更新,目前选择每个阶段时还会展示对应角色的头像和关系名,帮助你快速回忆起相关角色和情节,详情可访问:https://mrbulb.github.io/ONEPIECE-KG 同时在上述的微信服务号中回复"关系图谱",也能够获取相应访问连接
123419 |