知识图谱构建之数据集分析

概要
知识图谱是近些年比较热门的一项技术,能够应用于人工智能的多个领域。笔者近期项目是有关知识图谱项目的,也是第一次接触,特将自己学习的内容做个分析。
我们知道原始知识图谱数据集一般是一些rdf、ttl、owl、json等格式的数据。在存储知识图谱前我们需要将有用的内容从中抽取出来。查询语句使用SPARQL。

自己构建一个简单的RDF文件

import rdflib

def creat():
    g = rdflib.Graph()
    has_border_with = rdflib.URIRef('http://www.example.org/has_border_with')
    located_in = rdflib.URIRef('http://www.example.org/located_in')
    
    germany = rdflib.URIRef('http://www.example.org/germany')
    france = rdflib.URIRef('http://www.example.org/france')
    mongolia = rdflib.URIRef('http://www.example.org/mongolia')
    china = rdflib.URIRef('http://www.example.org/china')

    europa = rdflib.URIRef('http://example.org/europa')
    asia = rdflib.URIRef('http://example.org/asia')

    g.add((germany,has_border_with,france))
    g.add((china, has_border_with, mongolia))
    g.add((germany, located_in, europa))
    g.add((france, located_in, europa))
    g.add((china, located_in, asia))
    g.add((mongolia, located_in, asia))

    g.serialize("g.rdf")


def query():
    g = rdflib.Graph()
    g.parse("g.rdf",format='xml')
    

if __name__ == "__main__":
    creat()

RDF文件简单查询
RDF里的内容都是一些有一定语义的三元组。我们可以通过SPARQL抽取出其中的主语、谓语、宾语。

def query():
    g = rdflib.Graph()
    g.parse("g.rdf", format="xml")
    ################################
    # <a,?,?>
    q = "select ?relation ?part where { ?s ?relation ?part}"
    x = g.query(q)
    t = list(x) ##### 二维
    # print(t[0][0])
    # http://www.example.org/has_border_with
    # print(t[0][1])
    # http://www.example.org/part1
    print(len(t))  #没有,则=0
    print(t[0])
    # <?,b,?>
    q = "select ?country ?part where {?country <http://www.example.org/located_in> ?part}"
    x = g.query(q)
    t = list(x)
    print(len(t))
    print(t[0])
    # <?,?,c>
    q = "select ?country ?relation where {?country ?relation ?part}"
    x = g.query(q)
    t = list(x)
    print(len(t))
    print(t[0])
    ################################
    # <a,b,?>
    q = "select ?part where {<http://www.example.org/China> <http://www.example.org/located_in> ?part}"
    x = g.query(q)
    t = list(x) ######二维: n*1
    print(len(t))
    # print(t[0][0])
    # http://www.example.org/part1
    print(t[0])
    # <a,?,c>
    # <?,a,b>

if __name__ == "__main__":
    query()

Turtle文件读取

import rdflib


g = rdflib.Graph()
g.parse('163musichyhot.ttl',format='ttl')
# 无条件查询
q = "select ?s ?p ?o where{?s ?p ?o}"
x = g.query(q)
print(len(x))
t = list(x)
for i in t:
    print("*******一条陈述******")
    print("主语:",i[0])
    print('谓语:',i[1])
    print('宾语: ',i[2])

在这里插入图片描述

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值