微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用RDFLib解析大型数据集?

如何解决如何使用RDFLib解析大型数据集?

| 我正在尝试使用RDFLib 3.0解析几张大图,显然它处理了第一个,第二个就死了(MemoryError)...看起来不再支持MysqL作为存储了,请您提出一种以某种方式解析那些图的方法
Traceback (most recent call last):
  File \"names.py\",line 152,in <module>
    main()
  File \"names.py\",line 91,in main
    locals()[graphname].parse(filename,format=\"nt\")
  File \"/usr/local/lib/python2.6/dist-packages/rdflib-3.0.0-py2.6.egg/rdflib/graph.py\",line 938,in parse
    location=location,file=file,data=data,**args)
  File \"/usr/local/lib/python2.6/dist-packages/rdflib-3.0.0-py2.6.egg/rdflib/graph.py\",line 757,in parse
    parser.parse(source,self,**args)
  File \"/usr/local/lib/python2.6/dist-packages/rdflib-3.0.0-py2.6.egg/rdflib/plugins/parsers/nt.py\",line 24,in parse
    parser.parse(f)
  File \"/usr/local/lib/python2.6/dist-packages/rdflib-3.0.0-py2.6.egg/rdflib/plugins/parsers/ntriples.py\",line 124,in parse
    self.line = self.readline()
  File \"/usr/local/lib/python2.6/dist-packages/rdflib-3.0.0-py2.6.egg/rdflib/plugins/parsers/ntriples.py\",line 151,in readline
    m = r_line.match(self.buffer)
MemoryError
    

解决方法

这些RDF文件上有多少个三元组?我已经测试了
rdflib
,如果您很幸运,它的缩放比例不会超过几十个三倍。对于具有数百万个三元组的文件,它实际上无法很好地执行。 最好的解析器是Redland Libraries中的
rapper
。我的第一个建议是不要使用
RDF/XML
,而是使用
ntriples
。 Ntriples是一种比RDF / XML更轻的格式。您可以使用
rapper
从RDF / XML转换为ntriples:
rapper -i rdfxml -o ntriples YOUR_FILE.rdf > YOUR_FILE.ntriples
如果您喜欢Python,则可以使用Redland python绑定:
import RDF
parser=RDF.Parser(name=\"ntriples\")
model=RDF.Model()
stream=parser.parse_into_model(model,\"file://file_path\",\"http://your_base_uri.org\")
for triple in model:
    print triple.subject,triple.predicate,triple.object
我已经用redland库解析了相当大的文件(几个千兆字节),没有问题。 最终,如果您要处理大型数据集,则可能需要将数据声明到可伸缩的三重存储中,我通常使用的是4store。 4store内部使用redland解析RDF文件。从长远来看,我认为,要做可扩展的三重存储是您要做的。有了它,您将能够使用SPARQL查询数据,并使用SPARQL / Update来插入和删除三元组。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。