Parse große RDF in Python

Ich möchte eine sehr große (ca. 200MB) RDF-Datei in Python parsen. Soll ich mit Saxophon oder einer anderen Bibliothek arbeiten? Ich würde schätzen einige sehr grundlegende Code, den ich auf bauen kann, sagen, um ein Tag abzurufen.

Danke im Voraus.

5 Solutions collect form web for “Parse große RDF in Python”

Wenn du auf der Suche nach schneller Aufführung bist, dann würde ich dir empfehlen, Raptor mit den Redland Python Bindungen zu benutzen. Die Leistung von Raptor, geschrieben in C, ist viel besser als RDFLib. Und du kannst die Pythonbindungen verwenden, falls du nicht mit C umgehen willst.

Ein weiterer Rat zur Verbesserung der Leistung, vergessen Sie das Parsing RDF / XML, gehen Sie mit anderen Geschmack von RDF wie Turtle oder NTriples . Besonders das Parsen von ntriples ist viel schneller als das Analysieren von RDF / XML. Dies liegt daran, dass die ntriples-Syntax einfacher ist.

Sie können Ihre RDF / XML in ntriples mit Rapper, ein Werkzeug, das mit Raptor kommt:

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

Die ntriples-Datei enthält Triple wie:

 <s1> <p> <o> . <s2> <p2> "literal" . 

Und Parser neigen dazu, sehr effizient behandeln diese Struktur. Darüber hinaus ist Speicher weise effizienter als RDF / XML, weil, wie Sie sehen können, diese Datenstruktur kleiner ist.

Der Code unten ist ein einfaches Beispiel mit den redland python Bindungen:

 import RDF parser=RDF.Parser(name="ntriples") #as name for parser you can use ntriples, turtle, rdfxml, ... 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 

Der Basis-URI ist der vorangestellte URI, falls Sie relative URIs in Ihrem RDF-Dokument verwenden. Sie können die Dokumentation über die Python Redland Bindungen API hier überprüfen

Wenn Sie sich nicht viel über die Leistung interessieren, dann verwenden Sie RDFLib , es ist einfach und einfach zu bedienen.

Ich sehe den Vorschlag, dass du rdflib ausprobierst. Es ist schön und schnell Prototyping, und die BerkeleyDB Backend-Shop Skalen ziemlich gut in die Millionen von Triples, wenn Sie nicht wollen, um die gesamte Grafik in den Speicher zu laden.

 import rdflib graph = rdflib.Graph("Sleepycat") graph.open("store", create=True) graph.parse("big.rdf") # print out all the triples in the graph for subject, predicate, object in graph: print subject, predicate, object 

In meiner Erfahrung ist SAX für die Leistung großartig, aber es ist ein Schmerz zu schreiben. Wenn ich keine Probleme habe, neige ich dazu, die Programmierung damit zu vermeiden.

"Sehr groß" ist abhängig vom RAM der Maschine. Angenommen, Ihr Computer hat über 1 GB Speicher, lxml , pyxml oder eine andere Bibliothek e wird gut für 200 MB Dateien.

Nicht sicher, ob Saxophon die beste Lösung ist, aber IBM scheint zu denken, dass es für leistungsstarke XML-Parsing mit Python funktioniert: http://www.ibm.com/developerworks/xml/library/x-hiperfparse/ . Ihr Beispiel RDF zaubert dein in der Größe (200MB gegen 1.9GB), also sollte ihre Lösung für Sie arbeiten.

Die Beispiele dieses Artikels beginnen ziemlich einfach und holen schnell ab.

Für die RDF-Verarbeitung in Python, verwenden Sie eine RDF-Bibliothek wie RDFLib . Wenn du auch einen Triplestore brauchst, sind auch schwerere Lösungen verfügbar, kann aber hier nicht nötig sein ( PySesame , neo4jrdf mit neo4jpy ).

Bevor Sie Ihren eigenen SAX-Parser für RDF schreiben, schauen Sie sich rdfxml.py an :

 import rdfxml data = open('data.rdf', 'r').read() rdfxml.parseRDF(data) 
  • Python XML-Parsing von der Website
  • Ersetzen Sie numerische Zeichenreferenzen im XML-Dokument mit Python
  • XML-Download von einer URL
  • Leere Liste von ElementTree findall zurückgegeben
  • Extrahieren von Tag-Informationen mit beautifulsoup und python
  • Python Minidom XML parsing punktierte Quad / verschachtelte Kinder
  • Muss XML-Dateien als Stream mit BeautifulSoup in Python lesen
  • Parse SGML mit offenen Arbitrary Tags in Python 3
  • Python - Parsing einer Datei, die mehrere XML-Teile enthält
  • QWebException: "'KeinType' Objekt ist bei der Auswertung nicht aufrufbar
  • Lesen von XML mit Python Minidom und Iteration über jeden Knoten
  • Python ist die beste Programmiersprache der Welt.