使用 csv 文件作为输入创建 RDF 文件

2024-01-09

我需要使用 rdflib 将 csv 文件转换为 rdf,我已经有了读取 csv 的代码,但我不知道如何将其转换为 rdf。

我有以下代码:

import csv
from rdflib.graph import Graph

# Open the input file
with open('data.csv', 'rb') as fcsv:
    g = Graph()
    csvreader = csv.reader(fcsv)
    y = True
    for row in csvreader:
        if y:
            names = row
            y = False
        else:
            for i in range(len(row)):
                 continue
    print(g.serialize(format='xml'))
    fcsv.close()

有人可以解释一下并举个例子吗?


示例 csv 文件

感谢 KRontheWeb,我使用以下示例 csv 文件来回答您的问题:https://github.com/KRontheWeb/csv2rdf-tutorial/blob/master/example.csv https://github.com/KRontheWeb/csv2rdf-tutorial/blob/master/example.csv

"Name";"Address";"Place";"Country";"Age";"Hobby";"Favourite Colour" 
"John";"Dam 52";"Amsterdam";"The Netherlands";"32";"Fishing";"Blue"
"Jenny";"Leidseplein 2";"Amsterdam";"The Netherlands";"12";"Dancing";"Mauve"
"Jill";"52W Street 5";"Amsterdam";"United States of America";"28";"Carpentry";"Cyan"
"Jake";"12E Street 98";"Amsterdam";"United States of America";"42";"Ballet";"Purple"

导入库

import pandas as pd #for handling csv and csv contents
from rdflib import Graph, Literal, RDF, URIRef, Namespace #basic RDF handling
from rdflib.namespace import FOAF , XSD #most common namespaces
import urllib.parse #for parsing strings to URI's

读入csv文件

url='https://raw.githubusercontent.com/KRontheWeb/csv2rdf-tutorial/master/example.csv'
df=pd.read_csv(url,sep=";",quotechar='"')
# df # uncomment to check for contents

定义图“g”和命名空间

g = Graph()
ppl = Namespace('http://example.org/people/')
loc = Namespace('http://mylocations.org/addresses/')
schema = Namespace('http://schema.org/')

创建三元组并将它们添加到图表“g”中

有点密集,但是每个 g.add() 由三部分组成:主语、谓语、宾语。有关更多信息,请查看真正友好的 rdflib 文档,第 1.1.3 节及以上:https://buildmedia.readthedocs.org/media/pdf/rdflib/latest/rdflib.pdf https://buildmedia.readthedocs.org/media/pdf/rdflib/latest/rdflib.pdf

for index, row in df.iterrows():
    g.add((URIRef(ppl+row['Name']), RDF.type, FOAF.Person))
    g.add((URIRef(ppl+row['Name']), URIRef(schema+'name'), Literal(row['Name'], datatype=XSD.string) ))
    g.add((URIRef(ppl+row['Name']), FOAF.age, Literal(row['Age'], datatype=XSD.integer) ))
    g.add((URIRef(ppl+row['Name']), URIRef(schema+'address'), Literal(row['Address'], datatype=XSD.string) ))
    g.add((URIRef(loc+urllib.parse.quote(row['Address'])), URIRef(schema+'name'), Literal(row['Address'], datatype=XSD.string) ))

注意:

  • 我从 rdflib 借用命名空间并自己创建一些;
  • 尽可能定义数据类型是一个很好的做法;
  • 我从地址创建 URI(字符串处理的示例)。

检查结果

print(g.serialize(format='turtle').decode('UTF-8'))

输出的片段:

<http://example.org/people/Jake> a ns2:Person ;
    ns1:address "12E Street 98"^^xsd:string ;
    ns1:name "Jake"^^xsd:string ;
    ns2:age 42 .

将结果保存到磁盘

g.serialize('mycsv2rdf.ttl',format='turtle')
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 csv 文件作为输入创建 RDF 文件 的相关文章

随机推荐