栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

将数据库的数据转化为RDF格式的文件

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

将数据库的数据转化为RDF格式的文件

背景

关系型数据库的数据要导入 Neo4j ,找了找网上的插件,写的不是很灵活。

无奈,只能直接写逻辑,将数据读出来然后写成 RDF 的格式。

最终借助 neosemantics 导入到 Neo4j 图数据库。实现将关系型数据库数据导入到图数据库。

以下是主要的逻辑。使用 Python 代码实现的。

原始数据为:
   age  id name school
0   20   4   张三     北大
1   21   6   李四     清华
2   20   5   王五     南大
代码如下:
import pandas as pd

# 数据库数据转化为RDF文件。使用 neosemantics 导入到Neo4j图数据库
data = {'id': [4, 6, 5], 'name': ['张三', '李四', '王五'], 'age': [20, 21, 20], 'school': ['北大', '清华', '南大']}
df = pd.DataFrame(data)
print(df)
table_name = 'person'

src_path = "C:\Users\my\Desktop\NLP\"
input_file = "xxx.rdf"
print(df.index.values.tolist())
print(df.columns.values.tolist())


def arr_to_rdf():
    with open("%s%s" % (src_path, input_file), 'w', encoding='utf-8') as file:
        # 表名标签
        file.write(f"@prefix {table_name}: table_name}#> .")
        file.write('r')
        # 关系标签
        file.write("@prefix relation:  .")
        file.write('r')
        for i in range(df.shape[1]):
            column_name = df.columns.values.tolist()[i]
            file.write(f"@prefix {column_name}: column_name}#> .")
            file.write('r')
        for i in range(df.shape[0]):
            # file.write("%s:%s" % (df.columns[i], df.iloc[i].at['id']))
            for j in range(df.shape[1]):
                file.write("%s:%s" % (df.columns.values.tolist()[j], df.iloc[i, j]))
                file.write('r')

                file.write("relation:name '%s'; a relation:%s ." % (df.iloc[i, j], df.columns.values.tolist()[j]))
                file.write('r')

                file.write("%s:%s" % (table_name, df.iloc[i].at['name']))
                file.write('r')

                file.write("relation:name '%s';" % df.iloc[i].at['name'])
                file.write('r')

                file.write("relation:%s %s:%s ." % (
                    df.columns.values.tolist()[j], df.columns.values.tolist()[j], df.iloc[i, j]))
                file.write('r')


if __name__ == '__main__':
    arr_to_rdf()
形成的文件内容如下:
@prefix person:  .
@prefix relation:  .
@prefix age:  .
@prefix id:  .
@prefix name:  .
@prefix school:  .
age:20
relation:name '20'; a relation:age .
person:张三
relation:name '张三';
relation:age age:20 .
id:4
relation:name '4'; a relation:id .
person:张三
relation:name '张三';
relation:id id:4 .
name:张三
relation:name '张三'; a relation:name .
person:张三
relation:name '张三';
relation:name name:张三 .
school:北大
relation:name '北大'; a relation:school .
person:张三
relation:name '张三';
relation:school school:北大 .
age:21
relation:name '21'; a relation:age .
person:李四
relation:name '李四';
relation:age age:21 .
id:6
relation:name '6'; a relation:id .
person:李四
relation:name '李四';
relation:id id:6 .
name:李四
relation:name '李四'; a relation:name .
person:李四
relation:name '李四';
relation:name name:李四 .
school:清华
relation:name '清华'; a relation:school .
person:李四
relation:name '李四';
relation:school school:清华 .
age:20
relation:name '20'; a relation:age .
person:王五
relation:name '王五';
relation:age age:20 .
id:5
relation:name '5'; a relation:id .
person:王五
relation:name '王五';
relation:id id:5 .
name:王五
relation:name '王五'; a relation:name .
person:王五
relation:name '王五';
relation:name name:王五 .
school:南大
relation:name '南大'; a relation:school .
person:王五
relation:name '王五';
relation:school school:南大 .
注意事项:

name 标签的值必须是字符串

namespace 在使用前,必须先定义

相关内容:

Neo4j导入RDF文件之neosemantics安装

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/950057.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号