TalkOP海道-海贼王论坛-海贼王中文网-航海王论坛-中国最大的海贼王论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

一键登录:

搜索
查看: 5000| 回复: 85

[资料整理] 【技术向】你问我答---用知识图谱打开海贼王(二)

  [复制链接]
  • TA的每日心情
    开心
    2020-8-6 10:05
  • 签到天数: 156 天

    [LV.7]常住居民III

    4

    主题

    88

    帖子

    515

    积分

    海贼

    Rank: 4

    积分
    515
    发表于 2020-5-6 22:23 | 显示全部楼层 |阅读模式

    马上注册,结交更多好友,享用更多功能,让你轻松玩转最有爱的海贼王论坛。

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    本帖最后由 bulb 于 2020-5-6 22:27 编辑

    ****TalkOP海贼王分析区****
    地址:http://bbs.talkop.com/forum-fenxi-1.html
    作者ID:41536
    首发日期:2020.05.06
    *********转载请保留*********




    各位大家好,好久不见,离上次本系列的更新内容已经过了近三个月(鸽了快三个月),有些遗忘的同学可以可以进入下面回顾一下(P.S. 可视化的网页在之前的基础上又更新了一波,包括人物头像,关系展示等,会在文章末尾部分另外说明)
    【技术向】海贼王实体关系可视化---用知识图谱打开海贼王(一)
    地址:http://bbs.talkop.com/thread-121506-1-1.html


    今天是第二篇:你问我答
    主要是给大家带来和介绍一个快速查询各个角色信息的工具,效果大概如下图所示
    wechat-kbqa-demo.jpg
    相关代码部分在:https://github.com/mrbulb/ONEPIECE-KG/tree/master/vivirecard-KB_query
    项目地址:https://github.com/mrbulb/ONEPIECE-KG


    入门版
    首先需要关注下面的公众号,接着就可以使用查询功能
    qrcode_for_gh_33abcfd9e8ac_344.jpg

    目前查询一共支持以下几种的问题,
    * 对于生日/英文名/血型/星座/霸气/身高的查询
    * 谁出生在哪里/出生在某个地方的有谁
    例如
    雷利的身高是多少?
    罗杰的血型是啥
    路飞有什么霸气
    谁出生在风车村?

    kbqa_demo1.png
    当超出这些问题,或者后台系统不知道答案之后,就会回答:I can't understand. 或I don't know.
    kbqa_demo2.png





    高级版
    上面的入门版是基于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
    fuseki-install1.jpg


    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 /talkop-vivre-card
    命令行输入和输出如下图所示;
    fuseki-install2.jpg

    5. 使用浏览器打开 Fuseki Web 用户界面,地址为 http://localhost:3030/
    fuseki-install3.jpg


    3. 导入知识图谱
    知识图谱数据可以从本帖附件,或者右边的链接中获取:https://github.com/mrbulb/ONEPIECE-KG/blob/master/vivirecard-KB_query/data/talkop_vivre_card/ntriples_talkop_vivre_card.nt
    整个导入的步骤如下
    • 在下图所示的 Fuseki 用户界面中单击【 add data】按钮,向数据集/talkop-vivre-card 中

    1.jpg
    添加数据,转到如下图所示的页面,单击【select files…】 按钮,浏览到 ntriples_talkop_vivre_card.nt文件并将其选中,单击【upload now】将文件上传;
    2.jpg
    如文件上传成功,则显示如下图所示的界面。

    3.jpg

    2. 验证是否导入成功
    (1) 点击 info 选项后点击 count triples in all graphs,若导入成功则会输出三元组数量
    4.jpg
    5.jpg

    (2) 点击 query 选项后,运行下面查询语句,若导入成功则会输出查询结果
    SELECT ?subject ?predicate ?object
    WHERE {
      ?subject ?predicate ?object
    }
    LIMIT 25

    7.jpg 6.jpg



    4. 使用SPARQL语言查询
    关于SPARQL语言的介绍和入门可以参考:https://zhuanlan.zhihu.com/p/32703794
    下面我们给出一些例子来展现一下它的效果
    SPARQL查询示例
    1. 查询某个角色的全部属性
    PREFIX : <http://kg.course/talkop-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/talkop-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/talkop-vivre-card/>
    select ?s ?p ?o ?value where {
        ?s :名称 ?o .
        ?s :血型 ?value .
        filter regex(str(?o), '路飞')
    }


    4. 各个血型人数的统计
    PREFIX : <http://kg.course/talkop-vivre-card/>
    SELECT DISTINCT ?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/talkop-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" , "【费舍·泰格/Fisher Tiger】" , "S型RH-" ,
    ":0798" , "【洛克/Rock】" , "S型RH-" ,
    ":0799" , "【斯科奇/Scotch】" , "S型RH-" ,
    ":0902" , "【德林杰/Dellinger】" , "S型RH-" ,
    ":0987" , "【文斯莫克·勇治/Vinsmoke Yonji】" , "S型RH-" ,
    ":0997" , "【夏洛特·普拉琳涅/Charlotte Praline】" , "S型RH-" ,
    ":1013" , "【文斯莫克·伊治/Vinsmoke Ichiji】" , "S型RH-" ,
    ":1014" , "【文斯莫克·尼治/Vinsmoke Niji】" , "S型RH-" ,
    ":0005" , "【山治/Sanji】" , "S型RH阴性" ,

    6. 根据生命卡信息得到时间线

    PREFIX : <http://kg.course/talkop-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(STRBEFORE(str(?p), "年前") AS ?domain)
      BIND(STRAFTER(str(?domain), "http://kg.course/talkop-vivre-card/") AS ?domain2)
      BIND(xsd:integer(STRAFTER(str(?domain), "http://kg.course/talkop-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"   "【蒙布朗·诺兰度/Mont Blanc Noland】"   "400年前"     漂流到加亚岛,将岛屿从“树热”中拯救出来(*“四百年前”为估算)
    "0318"   "【蒙布朗·诺兰度/Mont Blanc Noland】"   "400年前"     第三次出海前往“伟大航路”(*“四百年前”为估算)
    "0318"   "【蒙布朗·诺兰度/Mont Blanc Noland】"   "400年前"     返回卢布尼尔王国,将“黄金乡”报告给国王(*“四百年前”为估算)
    "0318"   "【蒙布朗·诺兰度/Mont Blanc Noland】"   "400年前"     造访格林比特,拯救咚塔塔一族(*“四百年前”为估算)

    7. 查询各个人物资料中,所有和罗杰相关的历史事件信息
    PREFIX : <http://kg.course/talkop-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年前"      "观看哥尔·D·罗杰的处刑"
    "【波特卡斯•D•艾斯/Portgas D Ace】"      "22年前"      作为罗杰和露玖的孩子而出生

    8. 获取所有可供查询的属性名(predicate)
    PREFIX : <http://kg.course/talkop-vivre-card/>
    SELECT DISTINCT ?p WHERE {
        ?s ?p ?o .
    }
    结果
    "p"
    "0年前"
    "中文名"
    "出身地"
    "初登场"
    "名称"
    "名言"

    以上所有的代码可以在右边的链接获取https://paste.ubuntu.com/p/x5w5wvTQSZ/

    看到这里有很多人可能会有疑问,这里的很多事情,貌似用excel的功能也能完成,那么使用SPARQL的优势在于哪里?
    的确我们这边构建的关系知识图谱是属于比较低层级的,大多数都是实体和属性之间的联系,但实际上很多属性其实应该被当做实体对待,因为他们自己也有很多的关联信息。
    例如路飞出生在风车村,风车村在我们目前的知识图谱中是一个简单的属性,但实际上这也可以被当做一个实体,风车村的所属国家是哥亚王国,所属海域是东海。
    只利用普通的excel表格式的查询,很难捕捉各个实体背后的关系,但利用SPARQL语句,就能以非常优雅的方式来将这些知识联系起来,从中抽取信息。
    待后续整个知识图谱构建完成后,采用SPARQL语言查询的方式就能发挥更大的力量。

    感谢
    本次技术的开发参考的是SimmerChanweizhixiaoyi的项目实践,感谢他们的无私分享
    https://github.com/SimmerChan/KG-demo-for-movie
    https://github.com/weizhixiaoyi/DouBan-KGQA

    更新信息
    我们对之前可视化关系图谱做了一些的更新,目前选择每个阶段时还会展示对应角色的头像和关系名,帮助你快速回忆起相关角色和情节,详情可访问:https://mrbulb.github.io/ONEPIECE-KG
    同时在上述的微信服务号中回复"关系图谱",也能够获取相应访问连接
    viz.jpg




    评分

    参与人数 1威望 +1 贝里 +20 收起 理由
    鹰目 + 1 + 20 精华

    查看全部评分

    欢迎访问TalkOP海贼王论坛!让我们一起努力,打造最有爱的海贼王交流平台! (TalkOP海贼王分析讨论QQ群号:54786756,请务必按照提示要求加群!IPAD等系统登陆可能看不到群提示,请更换系统查看) 另外有日语翻译能力且跟上漫画进度的伙伴请注明来意联系鹰目QQ:99284174,一起来汉化海贼王的各类周边吧。
    回复

    使用道具 举报

  • TA的每日心情
    流汗
    2020-8-6 07:52
  • 签到天数: 1533 天

    [LV.Master]伴坛终老

    3738

    主题

    1万

    帖子

    5万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    59078

    2018年度OP王组织奖2019年度OP王组织奖2020年度OP王组织奖罗杰的草帽烧烧果实桶装可乐罗的纹身奇迹的樱花梅利号管理员的尚方宝剑娜美的风车     第一剑豪的野望萨波的梦想

    发表于 2020-5-6 22:26 | 显示全部楼层
    楼主 论坛原则上是禁止所有非论坛公众号出现在帖子里的 但是你的技术含量确实很高,你看能不能这样处理 在公众号奥哈拉的全知之树的名字前加上TalkOP论坛

    这样就两全其美啦~~
    收起回复
  • TA的每日心情
    开心
    2020-8-6 10:05
  • 签到天数: 156 天

    [LV.7]常住居民III

    4

    主题

    88

    帖子

    515

    积分

    海贼

    Rank: 4

    积分
    515
    发表于 2020-5-6 22:28 | 显示全部楼层
    鹰目 发表于 2020-5-6 22:26
    楼主 论坛原则上是禁止所有非论坛公众号出现在帖子里的 但是你的技术含量确实很高,你看能不能这样处理 在 ...

    诶,好的,不知道有这个规定来着,我更改一下
    收起回复
    欢迎访问TalkOP海贼王论坛!让我们一起努力,打造最有爱的海贼王交流平台! (TalkOP海贼王分析讨论QQ群号:54786756,请务必按照提示要求加群!IPAD等系统登陆可能看不到群提示,请更换系统查看) 另外有日语翻译能力且跟上漫画进度的伙伴请注明来意联系鹰目QQ:99284174,一起来汉化海贼王的各类周边吧。

    该用户从未签到

    135

    主题

    609

    帖子

    1053

    积分

    超新星

    Rank: 5Rank: 5

    积分
    1053
    发表于 2020-5-6 22:40 来自手机 | 显示全部楼层
    论坛早晚要取代B站,成为我学习文化的新场所
    收起回复
    欢迎访问TalkOP海贼王论坛!让我们一起努力,打造最有爱的海贼王交流平台! (TalkOP海贼王分析讨论QQ群号:54786756,请务必按照提示要求加群!IPAD等系统登陆可能看不到群提示,请更换系统查看) 另外有日语翻译能力且跟上漫画进度的伙伴请注明来意联系鹰目QQ:99284174,一起来汉化海贼王的各类周边吧。
  • TA的每日心情
    开心
    2020-8-6 10:05
  • 签到天数: 156 天

    [LV.7]常住居民III

    4

    主题

    88

    帖子

    515

    积分

    海贼

    Rank: 4

    积分
    515
    发表于 2020-5-6 22:41 | 显示全部楼层
    鹰目 发表于 2020-5-6 22:26
    楼主 论坛原则上是禁止所有非论坛公众号出现在帖子里的 但是你的技术含量确实很高,你看能不能这样处理 在 ...

    已经改好啦,不过腾讯那边需要7个工作日的审核
    收起回复
    欢迎访问TalkOP海贼王论坛!让我们一起努力,打造最有爱的海贼王交流平台! (TalkOP海贼王分析讨论QQ群号:54786756,请务必按照提示要求加群!IPAD等系统登陆可能看不到群提示,请更换系统查看) 另外有日语翻译能力且跟上漫画进度的伙伴请注明来意联系鹰目QQ:99284174,一起来汉化海贼王的各类周边吧。
  • TA的每日心情
    冷漠
    2020-8-1 16:33
  • 签到天数: 238 天

    [LV.7]常住居民III

    4

    主题

    975

    帖子

    2376

    积分

    超新星

    Rank: 5Rank: 5

    积分
    2376

    2019年度OP王铜奖

    发表于 2020-5-6 23:04 来自手机 | 显示全部楼层
    太硬核了
    收起回复
    欢迎访问TalkOP海贼王论坛!让我们一起努力,打造最有爱的海贼王交流平台! (TalkOP海贼王分析讨论QQ群号:54786756,请务必按照提示要求加群!IPAD等系统登陆可能看不到群提示,请更换系统查看) 另外有日语翻译能力且跟上漫画进度的伙伴请注明来意联系鹰目QQ:99284174,一起来汉化海贼王的各类周边吧。
    回复

    使用道具 举报

  • TA的每日心情
    吃惊
    2020-7-21 18:02
  • 签到天数: 82 天

    [LV.6]常住居民II

    1

    主题

    123

    帖子

    439

    积分

    海贼

    Rank: 4

    积分
    439
    发表于 2020-5-6 23:05 | 显示全部楼层
    太强了orz,技术大佬
    收起回复
    欢迎访问TalkOP海贼王论坛!让我们一起努力,打造最有爱的海贼王交流平台! (TalkOP海贼王分析讨论QQ群号:54786756,请务必按照提示要求加群!IPAD等系统登陆可能看不到群提示,请更换系统查看) 另外有日语翻译能力且跟上漫画进度的伙伴请注明来意联系鹰目QQ:99284174,一起来汉化海贼王的各类周边吧。
  • TA的每日心情
    开心
    2020-8-6 00:03
  • 签到天数: 112 天

    [LV.6]常住居民II

    11

    主题

    442

    帖子

    847

    积分

    海贼

    Rank: 4

    积分
    847
    发表于 2020-5-6 23:09 来自手机 | 显示全部楼层
    跪了,大佬真厉害,但是dbq我看到有代码就头疼哈哈哈
    收起回复
    欢迎访问TalkOP海贼王论坛!让我们一起努力,打造最有爱的海贼王交流平台! (TalkOP海贼王分析讨论QQ群号:54786756,请务必按照提示要求加群!IPAD等系统登陆可能看不到群提示,请更换系统查看) 另外有日语翻译能力且跟上漫画进度的伙伴请注明来意联系鹰目QQ:99284174,一起来汉化海贼王的各类周边吧。
  • TA的每日心情
    冷漠
    2020-8-6 00:02
  • 签到天数: 173 天

    [LV.7]常住居民III

    49

    主题

    1478

    帖子

    2218

    积分

    超新星

    萨博的妹妹粉

    Rank: 5Rank: 5

    积分
    2218

    贝尔梅尔的橘子

    发表于 2020-5-6 23:13 | 显示全部楼层
    罗拉的呆毛 发表于 2020-5-6 22:40
    论坛早晚要取代B站,成为我学习文化的新场所
    头像怎么改的?
    收起回复
  • TA的每日心情
    开心
    2020-8-6 11:06
  • 签到天数: 77 天

    [LV.6]常住居民II

    1

    主题

    125

    帖子

    252

    积分

    海贼

    Rank: 4

    积分
    252
    发表于 2020-5-6 23:25 | 显示全部楼层
    大佬上次发的知识图谱我现在才刚玩明白,这又来个更硬核的,区区文字已经表达不了我的膜拜了
    收起回复
    虽無刀,胜有刀
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    APP下载|新手|活动|导航|Archiver|手机版|小黑屋|TalkOP海道-海贼王论坛-海贼王中文网-航海王论坛-中国最大的海贼王论坛 ( 苏ICP备14043047号-1 )

    JS of wanmeiff.com and vcpic.com Please keep this copyright information, respect of, thank you!JS of wanmeiff.com and vcpic.com Please keep this copyright information, respect of, thank you!

    GMT+8, 2020-8-6 17:34 , Processed in 0.105973 second(s), 38 queries , MemCache On.

    Powered by Discuz! X3.4

    © 2001-2019

    快速回复 返回顶部 返回列表