如何使用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来插入和删除三元组。     

要回复问题请先登录注册