Python RDF知识库查询
来源:互联网 发布:阿里云liux开端口命令 编辑:程序博客网 时间:2024/06/08 05:49
本文知识库查询使用SPARQL;
SPARQL (SPARQL Protocol and RDF Query Language),是为RDF开发的一种查询语言和数据获取协议,它是为W3C所开发的RDF数据模型所定义,但是可以用于任何可以用RDF来表示的信息资源。
其语法格式如下:
SELECT ?Predicate ?Object where {http://baike.com/resource/华南师大?Predicate ?Object}
但是其返回的是三元组的形式,并不适合直接阅读,需要通过预处理。这里将《Python 将json格式文件转存为RDF格式文件》保存的RDF文件进行测试,代码如下:
# -*- coding: utf-8 -*-import rdflibimport reg1 = rdflib.Graph()g1.parse("data.rdf", format="xml")while 1: print "please input the three words that you want,Subject,Predicate,Object;ues ',' to split them,ues '' if you don't know:" try: Subject, Predicate, Object = input() data = ['', '', ''] if Subject != '' and Predicate == '' and Object == '': # only search Subject q = "select ?Predicate ?Object where { <http://baike.com/resource/" + \ Subject + "> ?Predicate ?Object}" data[0] = Subject # .encode('gbk') x1 = g1.query(q) if len(list(x1)) > 20: leng = 20 else: leng = len(list(x1)) for i in range(leng): s = str(list(x1)[i]).decode('unicode_escape') txt = re.findall(r'resource/.*?\'', s) data[1] = txt[0][9:-1] data[2] = txt[1][9:-1] print data[0], data[1], data[2] elif Subject == '' and Predicate != '' and Object == '': # only search Predicate q = "select ?Subject ?Object where {?Subject <http://baike.com/resource/" + \ Predicate + "> ?Object}" data[1] = Predicate # .encode('gbk') x1 = g1.query(q) if len(list(x1)) > 20: leng = 20 else: leng = len(list(x1)) for i in range(leng): s = str(list(x1)[i]).decode('unicode_escape') txt = re.findall(r'resource/.*?\'', s) data[0] = txt[0][9:-1] data[2] = txt[1][9:-1] print data[0], data[1], data[2] elif Subject == '' and Predicate == '' and Object != '': # only search Object q = "select ?Subject ?Predicate where {?Subject ?Predicate <http://baike.com/resource/" + Object + ">}" data[2] = Object # .encode('gbk') x1 = g1.query(q) if len(list(x1)) > 20: leng = 20 else: leng = len(list(x1)) for i in range(leng): s = str(list(x1)[i]).decode('unicode_escape') txt = re.findall(r'resource/.*?\'', s) data[0] = txt[0][9:-1] data[1] = txt[1][9:-1] print data[0], data[1], data[2] elif Subject != '' and Predicate != '' and Object == '': # search Subject and Predicate q = "select ?Object where {<http://baike.com/resource/" + Subject + ">\ <http://baike.com/resource/" + Predicate + "> ?Object}" data[0] = Subject # .encode('gbk') data[1] = Predicate # .encode('gbk') x1 = g1.query(q) if len(list(x1)) > 20: leng = 20 else: leng = len(list(x1)) for i in range(leng): s = str(list(x1)[i]).decode('unicode_escape') txt = re.findall(r'resource/.*?\'', s) data[2] = txt[0][9:-1] print data[0], data[1], data[2] elif Subject != '' and Predicate == '' and Object != '': # search Subject and Object q = "select ?Predicate where {<http://baike.com/resource/" + Subject + "> ?Predicate \ <http://baike.com/resource/" + Object + ">}" data[0] = Subject # .encode('gbk') data[2] = Object # .encode('gbk') x1 = g1.query(q) if len(list(x1)) > 20: leng = 20 else: leng = len(list(x1)) for i in range(leng): s = str(list(x1)[i]).decode('unicode_escape') txt = re.findall(r'resource/.*?\'', s) data[1] = txt[0][9:-1] print data[0], data[1], data[2] elif Subject == '' and Predicate != '' and Object != '': # search Predicate and Object q = "select ?Subject where { ?Subject <http://baike.com/resource/" + Predicate + ">\ <http://baike.com/resource/" + Object + ">}" data[1] = Predicate # .encode('gbk') data[2] = Object # .encode('gbk') x1 = g1.query(q) if len(list(x1)) > 20: leng = 20 else: leng = len(list(x1)) for i in range(leng): s = str(list(x1)[i]).decode('unicode_escape') txt = re.findall(r'resource/.*?\'', s) data[0] = txt[0][9:-1] print data[0], data[1], data[2] elif Subject != '' and Predicate != '' and Object != '': # search all q = "select ?Predicate ?Object where { <http://baike.com/resource/" + \ Subject + "> ?Predicate ?Object}" data[0] = Subject # .encode('gbk') x1 = g1.query(q) if len(list(x1)) > 20: leng = 20 else: leng = len(list(x1)) for i in range(leng): s = str(list(x1)[i]).decode('unicode_escape') txt = re.findall(r'resource/.*?\'', s) data[1] = txt[0][9:-1] data[2] = txt[1][9:-1] print data[0], data[1], data[2] else: break except: pass
考虑到当数据量很大时,把所有匹配的结果显示出来太花时间,就只显示查询到的前20条
测试结果:
输入是三元组的任意一个或者任意两个或者全部,以逗号分割,当输入格式错误时pass
测试数据及程序:点击下载
0 0
- Python RDF知识库查询
- 使用 SPARQL 查询 RDF
- 使用 SPARQL 查询 RDF
- Sparql查询RDF
- RDF查询技术
- RDF存储查询技术
- RDF自然语言查询技术
- RDF关键词查询技术
- RDF数据查询语言SPARQL
- 使用自然语言查询知识库
- Python 知识库,不错!
- python知识库 Orz
- RDF
- RDF
- rdf
- RDF
- 使用Jena ARQ API 查询RDF图
- RDF数据查询语言SPARQL:初步
- [LeetCode]236. Lowest Common Ancestor of a Binary Tree
- 字符串移位问题
- MySQL语句操作(⊙)
- 1.多线程,同步锁的简单概要
- 数据分析师:告诉你如何迅速成为一名数据分析师?
- Python RDF知识库查询
- python——函数——匿名函数
- Android(6)Broadcast Receiver总结
- 菜鸟AngularJS学习之路 【第二天】。(事件绑定指令 循环输出 控制器嵌套)
- 从 Chrome 源码看浏览器如何 layout 布局
- python——偏函数
- java菜鸟的回炉之旅之九---switch语句和while循环、do while循环
- Hadoop网盘具体实现(二)
- 前端小白进阶Day4-结合盒子模型发布一张卡片