9

RDFLib 3.0でいくつかの大きなグラフを解析しようとしていますが、最初のグラフを処理し、2番目のグラフで停止するようです(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
4

1 に答える 1

10

それらの RDF ファイルのトリプルはいくつですか? 私はテストrdflibしましたが、運が良ければ、数十 ktriple を超えて拡張することはできません。何百万ものトリプルを含むファイルでは、実際にうまく機能するわけではありません。

そこにある最高のパーサーはrapperRedland Librariesのものです。私の最初のアドバイスは、使用せずに使用するRDF/XMLことですntriples。Ntriples は、RDF/XML よりも軽量な形式です。以下を使用して、RDF/XML から ntriples に変換できますrapper

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

かなり大きなファイル (数ギガバイト) をレッドランド ライブラリで問題なく解析しました。

最終的に、大きなデータセットを処理する場合、データをスケーラブルなトリプル ストアにアサートする必要があるかもしれません。私が通常使用するのは4storeです。4store は内部で redland を使用して RDF ファイルを解析します。長期的には、スケーラブルなトリプルストアを目指すことが、あなたがしなければならないことだと思います. これにより、SPARQLを使用してデータをクエリし、SPARQL/Updateを使用してトリプルを挿入および削除できます。

于 2011-04-15T15:47:39.543 に答える