Python Lark und XML

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Kirikkayis
User
Beiträge: 85
Registriert: Freitag 18. Januar 2019, 08:02

Hallo Zusammen,

wie ihr sicherlich schon aus dem Betreff entnehmen könnt habe ich eine frage bezüglich Python Lark und XML.

Ich würde gerne ein Einheitliches Parsing Skript schreiben, mit Lark kann ich Grammatiken definieren und als Baum ausgeben, genau das was ich möchte.

Jetzt habe ich im Internet etwas nachgeforscht und bin leider auf keine gescheite Doku bzw. Anleitung gekommen.

Habt ihr irgendwelche Ideen wie ich mithilfe von Lark eine XML Datei Parsen kann?
(ggf. Sogar beispiel Codes)

Würde mich über eine Rückmeldung sehr freuen.

Mit freundlichen Grüßen
Benutzeravatar
sparrow
User
Beiträge: 4165
Registriert: Freitag 17. April 2009, 10:28

Warum willst du dir denn einen eigenen Parser schreiben, wenn es so etwas wie Beautiful Soup gibt?
Kirikkayis
User
Beiträge: 85
Registriert: Freitag 18. Januar 2019, 08:02

Hey,
vielen dank für eine Alternative :)

Ich habe mich für Lark entschieden weil ich damit gleich einen Baum darstellen kann und theoretisch alles mögliche Parsen kann.
Ich kann ja mit Lark mithilfe von BNF eigene Grammatiken definieren und somit nicht nur XML parsen.

Mein Ziel ist es eigentlich mit Lark Grammatiken für JSON / XML / Textdateien zu definieren dann habe ich alles beisamen.

Ich hoffe ich konnte mein Anliegen beschreiben und hoffe auf weitere Vorschläge :)
Sirius3
User
Beiträge: 17712
Registriert: Sonntag 21. Oktober 2012, 17:20

@sparrow: Beautiful Soup ist für HTML und das ist nochmal deutlich komplexer zu parsen, als XML.

@Kirikkayis: was fehlt Dir am Tutorial, was bei Lark dabei ist? Dass jemand Lark für XML benutzt ist kaum vorstellbar und das Beispiel für JSON ist auch nur ein Beispiel, weil das auch niemand mit Lark machen würde. Wenn Du also XML parsen willst, mußt Du selbst einen Parser definieren. Dafür gibt es die Spezifikation https://www.w3.org/TR/xml/ , die schon in BNF-Form vorliegt.
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich kenne lark nicht. Aber ich halte dein Vorhaben für fehlgeleitet. XML zu Parsen ist komplex. Da geht es nicht nur um ein paar BNF-Klauseln. Die Unterstützung verschiedener encodings, namensräume, cdata sections, entities etc machen das alles andere als trivial. Zusätzlich dazu können XML Dokumente sehr groß werden. Dann sind die klassischen Baumstrukturen nicht mehr im Speicher repräsentierbar.

Wenn das ein Lernexperiment ist - alles ok. Produktiv hat so etwas nichts verloren.
Kirikkayis
User
Beiträge: 85
Registriert: Freitag 18. Januar 2019, 08:02

Hey,

danke für die ganzen Rückmeldungen.
Wie @__deets___ schon sagte bzw. vermutete handelt es sich hier um ein Projekt (Praxisprojekt).

Leider komme ich nur überhaupt nicht weiter.

Folgende XML datei habe ich :

Code: Alles auswählen

<?xml version="1.0"?>
<data>
    <country name="Liechtenstein">
        <rank>1</rank>
        <year>2008</year>
        <gdppc>141100</gdppc>
        <kapa name= "Kappa1"/>
        <neighbor name="Austria" direction="E"/>
        <neighbor name="Switzerland" direction="W"/>
    </country>
    <country name="Singapore">
        <rank>4</rank>
        <year>2011</year>
        <gdppc>59900</gdppc>
        <kapa name="Kappa2"/>
        <neighbor name="Malaysia" direction="N"/>
    </country>
    <country name="Panama">
        <rank>68</rank>
        <year>2011</year>
        <gdppc>13600</gdppc>
        <kapa name= "Kappa3"/>
        <neighbor name="Costa Rica" direction="W"/>
        <neighbor name="Colombia" direction="E"/>
    </country>
</data>
nun soll ich mit lark eine grammatik definieren die z.B. alle "year"´s anzeigt.
Sirius3
User
Beiträge: 17712
Registriert: Sonntag 21. Oktober 2012, 17:20

Lark ist nicht zum Anzeigen da, sondern zum Parsen. An welcher Stelle kommst Du nicht weiter? Was hast Du schon versucht? Wie weit hast Du die Grammatik aus dem von mir verlinkten Dokument schon umbesetzt?
Benutzeravatar
__blackjack__
User
Beiträge: 13006
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Kirikkayis: Kannst Du noch mal die Aufgabenstellung/das Ziel *genau* definieren? Das klingt nämlich extrem sinnlos etwas selbst zu programmieren was es schon fertig in der Standardbibliothek gibt und das dermassen *umfangreich* ist. Niemand der bei Verstand ist schreibt einen eigenen XML-Parser um XML zu verarbeiten.

Die Jahre bekommt man beispielsweise ganz einfach so:

Code: Alles auswählen

In [451]: from xml.etree import ElementTree as etree

In [452]: root = etree.fromstring(source)

In [453]: [node.text for node in root.iter('year')]
Out[453]: ['2008', '2011', '2011']
Und für JSON gibt es mit dem `json`-Modul auch schon etwas fertiges in der Python-Standardbibliothek. Hier könnte ich mir einen eigenen Parser als Projekt schon eher vorstellen, aber im Gegensatz zu einem XML-Parser ist ein JSON-Parser dann vielleicht sogar ein bisschen zu simpel. Welcher Zeitrahmen ist denn für das Projekt vorgesehen?
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Antworten