2011-04-15 7 views
6

J'essaye d'analyser plusieurs gros graphiques avec RDFLib 3.0, apparemment il gère le premier et meurt sur le second (MemoryError) ... on dirait que MySQL n'est plus supporté en magasin, pouvez-vous suggérer un moyen d'analyser en quelque sorte ceux?comment analyser de grands ensembles de données en utilisant 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

Combien de triplets avez-vous dans ces fichiers? et comment ils sont gros? –

Répondre

8

Combien de triplets sur ces fichiers RDF? J'ai testé rdflib et il ne sera pas beaucoup plus loin que quelques dizaines de ktriples - si vous êtes chanceux. Pas moyen que cela fonctionne vraiment bien pour les fichiers avec des millions de triplets. Le meilleur analyseur est rapper de Redland Libraries Mon premier conseil est de ne pas utiliser RDF/XML et aller pour ntriples. Ntriples est un format plus léger que RDF/XML. Vous pouvez transformer de RDF/XML à ntriples en utilisant rapper:

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

Si vous aimez Python vous pouvez utiliser les 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 

J'analysables des fichiers assez gros (couple de gigabyes) avec bibliothèques Redland sans problème. Par la suite, si vous manipulez de grands ensembles de données, vous devrez peut-être faire valoir vos données dans un triple magasin évolutif, celui que j'utilise habituellement est 4store. 4store utilise en interne redland pour analyser les fichiers RDF. À long terme, je pense que ce que vous aurez à faire, c'est un triple magasin évolutif. Et avec lui, vous serez en mesure d'utiliser SPARQL pour interroger vos données et SPARQL/Update pour insérer et supprimer des triplets.

+0

Merci pour la réponse, j'utilise ntriples, mais je voulais aussi utiliser les alignements (il serait vraiment cool d'avoir des valeurs de confiance sur les mappings, est-il possible de les avoir dans les ntriples?). Je ne suis pas sûr du nombre d'entrées mais la taille est d'environ 1Gb chaque fichier (pour maintenant 8 fichiers au total, mais peut aller jusqu'à 100). Probablement maintenant je vais commencer à migrer vers 4store + Redland ... – user52028778

+0

Alignements dans ntriples? si elles peuvent être exprimées en RDF, elles peuvent aussi être exprimées en ntriples. Et oui, pour le nombre de fichiers et de tailles que vous mentionnez ... optez pour 4store. Vous trouverez une aide précieuse sur http://groups.google.com/group/4store-support –

+0

4store semble un peu plus complexe que je ne le pensais, je voulais juste le lancer sur mon ordinateur portable pour le projet étudiant sur lequel je travaille . Il y a une chance de ne considérer que le sous-ensemble des triplets, savez-vous quelles sont les capacités maximales d'utilisation de Redland uniquement sans 4store? – user52028778

Questions connexes