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

9

我正在尝试使用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

你在这些文件中有多少个三元组?它们有多大? - Manuel Salvadores
1个回答

10
这些RDF文件中有多少个三元组?我已经测试了rdflib,它的规模不会超过几万个三元组-如果你很幸运的话。对于包含数百万个三元组的文件,它表现得并不好。
最好的解析器是来自Redland Librariesrapper。我的第一个建议是不要使用RDF/XML,而是选择ntriples。ntriples是比RDF/XML更轻的格式。您可以使用rapper从RDF / XML转换为ntriples: rapper -i rdfxml -o ntriples YOUR_FILE.rdf > YOUR_FILE.ntriples 如果您喜欢Python,可以使用Redland python bindings
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库解析了相当大的文件(几个GB),没有任何问题。

如果你处理大型数据集,最终可能需要将数据断言到可扩展的三元存储库中,我通常使用的是4store。 4store内部使用redland解析RDF文件。从长远来看,我认为,选择可扩展的三元存储库是你必须要做的。通过它,您将能够使用SPARQL查询您的数据,并使用SPARQL/Update插入和删除三元组。


谢谢回复,我正在使用ntriples,但也想使用alignments(在映射上有置信度值真的很酷,是否可能在ntriples中实现?)。不确定条目数量,但每个文件的大小约为1GB(现在共8个文件,但可能增加到100个)。现在可能会开始迁移到4store + Redland... - user52028778
ntriples中的对齐?如果它们可以在RDF中表示,那么它们也可以在ntriples中表示。是的,针对您提到的文件数量和大小...一定要选择4store。您可以在http://groups.google.com/group/4store-support找到有价值的帮助。 - Manuel Salvadores
4store听起来比我想象的要复杂一些,我只是想在我的笔记本电脑上运行它,用于我正在进行的学生项目。有可能只考虑三元组的子集,你知道仅使用Redland的最大能力是什么吗? - user52028778
你可以使用Redland存储。使用SQLite或SleepyCat作为RDBMS后端,但是...我自己没有尝试过。我不能确定它的可扩展性。无论如何,我认为对于这么多数据来说,笔记本电脑都无法与任何三元存储一起扩展。您可能需要将数据分区到不同的KB中。 - Manuel Salvadores
@msalvadores,你能看一下这个问题吗?(http://stackoverflow.com/questions/42493215/parse-rdf-file-python) - StuartDTO

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接