2011-04-15 10 views
6

Estoy tratando de analizar varios gráficos grandes con rdflib 3.0, al parecer Maneja primero y muere en el segundo (MemoryError) ... parece que MySQL no es compatible como almacén de más, puede usted por favor sugerir una manera de analizar alguna manera ¿aquellos?cómo analizar grandes conjuntos de datos utilizando RDFLib?

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 
+0

¿Cuántos triples tiene en esos archivos? y qué tan grandes son? –

Respuesta

8

¿Cuántos triples en esos archivos RDF? Probé rdflib y no escalará mucho más que algunas decenas de klips, si tiene suerte. De ninguna manera realmente funciona bien para archivos con millones de triples.

El mejor analizador disponible es rapper de Redland Libraries. Mi primer consejo es no usar RDF/XML e ir por ntriples. Ntriples es un formato más ligero que RDF/XML. Puede transformarse de RDF/XML para N-Triples usando rapper:

rapper -i rdfxml -o ntriples YOUR_FILE.rdf > YOUR_FILE.ntriples

Si te gusta Python puede utilizar los 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 

He analizados archivos bastante grandes (un par de gigabyes) con bibliotecas de redland sin problema.

Eventualmente, si está manejando grandes conjuntos de datos, puede que necesite afirmar sus datos en una tienda triple escalable, la que normalmente uso es 4store. 4store usa internamente redland para analizar archivos RDF. A largo plazo, creo que optar por una tienda triple escalable es lo que debes hacer. Y con él podrás usar SPARQL para consultar tus datos y SPARQL/Update para insertar y eliminar triples.

+0

Gracias por responder, estoy usando ntriples, pero también quería usar alineaciones (Sería genial tener valores de confianza en las asignaciones, ¿es posible tenerlas en ntriples?). No estoy seguro sobre el número de entradas pero el tamaño es de alrededor de 1Gb cada archivo (por ahora 8 archivos en total, pero puede crecer hasta 100). Probablemente ahora empiece a migrar a 4store + Redland ... – user52028778

+0

Alineaciones en ntriples? si pueden expresarse en RDF, también se pueden expresar en ntriples. Y sí, por la cantidad de archivos y tamaños que mencionas ... definitivamente elige 4store. Encontrará valiosa ayuda en http://groups.google.com/group/4store-support –

+0

4store suena un poco más complejo de lo que pensaba, sólo quería ejecutarlo en mi ordenador portátil para proyecto de los estudiantes que estoy trabajando . Existe la posibilidad de considerar solo un subconjunto de los triples, ¿sabes cuáles son las capacidades máximas de usar Redland solo sin 4store? – user52028778

Cuestiones relacionadas