使用张量表示两个RDF三元组。如何使用Python编程这个建模过程?
关于用张量表示两个RDF三元组的问题 情景: A用于表示有关资源、格式(主语、谓语、宾语)的简单语句 假设我有两个谓词,一个是play_for,另一个是race_for,每个谓词包含n个三元组,如下所示: 第一谓词:play_for;n个三元组: (雷·艾伦,为波士顿凯尔特人队效力),(科比·布莱恩特,为湖人队效力)。。。 简而言之,(A_i,play For,T_i)For i=1到n 第二谓词:race_for;n个三元组: (波士顿凯尔特人队,争夺NBA总冠军),(湖人队,争夺NBA总冠军)。。。 简言之,(T_i,比赛,NBA)i=1到n 张量表示是对2n三元组建模的一种方法。 我正在研究使用张量分解来发现数据集的潜在语义结构。第一步是用张量表示数据集 张量条目X_ijk=1表示存在一个关系(第i个实体、第k个谓词、第j个实体)。否则,对于不存在和未知的关系,条目将设置为零。例如,这2n个三元组可以用张量建模为:使用张量表示两个RDF三元组。如何使用Python编程这个建模过程?,python,string,rdf,triples,Python,String,Rdf,Triples,关于用张量表示两个RDF三元组的问题 情景: A用于表示有关资源、格式(主语、谓语、宾语)的简单语句 假设我有两个谓词,一个是play_for,另一个是race_for,每个谓词包含n个三元组,如下所示: 第一谓词:play_for;n个三元组: (雷·艾伦,为波士顿凯尔特人队效力),(科比·布莱恩特,为湖人队效力)。。。 简而言之,(A_i,play For,T_i)For i=1到n 第二谓词:race_for;n个三元组: (波士顿凯尔特人队,争夺NBA总冠军),(湖人队,争夺NBA总冠军
One slice: (A_i, play for, T_i)
A1, A2,...,An, T1, T2,...,Tn, NBA
A1 0 0 0 1 0 0 0
A2 0 0 0 0 1 0 0
:
An 0 0 0 0 0 1 0
T1 0 0 0 0 0 0 0
T2 0 0 0 0 0 0 0
:
Tn 0 0 0 0 0 0 0
NBA 0 0 0 0 0 0 0
The other slice: (T_i, race for, NBA)
A1, A2,...,An, T1, T2,...,Tn, NBA
A1 0 0 0 0 0 0 0
A2 0 0 0 0 0 0 0
:
An 0 0 0 0 0 0 0
T1 0 0 0 0 0 0 1
T2 0 0 0 0 0 0 1
:
Tn 0 0 0 0 0 0 1
NBA 0 0 0 0 0 0 0
假设RDF三元组存储在“test.txt”中。我的问题是如何使用Python编程这个建模过程
以下是我的想法:
最困难的是如何得到与张量中非零位置相对应的RDF三重坐标。
首先,这里是一个包含所有实体的列表:
T = ['A1',...,'An','T1',...'Tn','NBA']
对于数据集中的每个RDF三元组(主语i、谓语k、宾语j),都有一个坐标(i、j、k)来描述X_ijk=1在张量中的位置。例如,现有RDF三元组(a_i,play For,T_i)的坐标是(5,1,13),这意味着在第一个切片矩阵中X(5,13)=1。然而,我不知道如何得到这个坐标。我应该用字典来存储三元组吗
我对Python不太熟悉,我已经尝试过获得解决方案,但我不知道如何解决它。任何帮助都将不胜感激
编辑:为了简洁易懂,我删除了对RDF的描述 解决你的问题的可能性很大,但你的问题中有更大的矛盾心理。更精确地描述它,展示你想要得到什么,为什么,展示你迄今为止所做的尝试 与其解释什么是rdf,不如解释为什么需要n阶张量,以及为什么另一种表示法不适合你的需要
如果你需要张量运算,使用张量是有意义的。如果是的话,你应该研究一下,如果不是的话,你应该考虑另一个解决方案。如果希望保留创建对象的顺序,则词典可能不是您要查找的。也许您正在寻找的是OrderedDict from collections(python>=2.7)。但是,也许从集合中命名为tuple也可以做到这一点。pythons用于rdf的最佳库工具是一个rdflib图,它有一个
lst = myGraph.subject_objects(MyNS.race_for)
# which is just syntactic sugar for:
lst = myGraph.triples((None,MyNS.race_for,None))
第二种语法也可以在其他语言(如Java jena等)的其他库中找到
在scipy中,您应该调用sparse并将其用于稀疏二进制数组
查看numpy包,了解将从triples查询返回的主题和对象“分解”的最佳方法。应该很简单。在中有用于此功能的库,但我猜您将拥有大型稀疏矩阵,并且使用此模块会更好。我曾尝试使用rdflib和pandas来解决此问题,但我失败了,谢谢所有这些。这让我想起了HDT it工具。你应该通过看屏幕来了解这种关系