Fehlertoleranter Parser

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
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

Hi

Ich habe eine Liste von Servern, die leider immer anders aussieht.
Für jeden Server stehen verschiedene Parameter auf einzelnen Zeilen, im Stil von key=value.
Jedoch ist das Trennzeichen manchmal ein Doppelpunkt oder die Keys heisst nicht immer genau gleich, oder als value ist anstatt ein Wert z.B. mehrere Werte mit Komma getrennt oder sogar user1 ===> user10 für 10 user.

Mit welchen Tools löst man so etwas am einfachsten/schönsten?
Mit regulären Ausdrücken, split und co oder einem richtigen Parser?

Was gibt es sonst für Tools für eigentlich human readable Data :)

Hab jetzt mit split und co angefangen, jedoch wird das Aufwendig und ich bekomm das Gefühl, dass etwas anderes einfacher wäre.

Gruss
Benutzeravatar
keppla
User
Beiträge: 483
Registriert: Montag 31. Oktober 2005, 00:12

rayo hat geschrieben:Mit welchen Tools löst man so etwas am einfachsten/schönsten?
Mit regulären Ausdrücken, split und co oder einem richtigen Parser?
Das hängt davon ab, was "üblicherweise" kommt. Unabhängig von python hab ich durch meine Arbeit häufiger ähnliche Probleme kennengelernt, und mein Fazit ist: es ist ein Kampf gegen Windmühlen. Entweder, man hat ein wohldefiniertes Format, dann kann man klar sagen, ob re, split, etc das richtige ist, oder man hat kein solches, dann muss man Strenggenommen bei jeder neuen Sendung überprüfen, ob das neue Format mit deinen Vermutungen übereinstimmt, also: du hast jedesmal handarbeit und die Automatisierung ist überflüssig.
Das Problem ist hier eher nicht-informatischer Natur: Wenn du diese Daten bekommen kannst, hat doch irgendjemand scheinbar ein Interesse an der Veröffentlichung. Wenn der ein Interesse hat, sollte er auch ein Interesse daran haben, dass die Daten verstanden werden können, und somit ein Format definieren können.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Meine Idee, mal aus der Hüfte geschossen: einen monadic combinator parser, Pysec. Könnte natürlich auch totaler Overkill sein, aber einen Parser aus mehreren kleineren Parsern zusammenzusetzen ist sicherlich angenehm.

Oder du kannst auch einfach in einem handgeschriebenen Parser ausreichend viele möglichst Fehlertolerante Reguläre ausdrücke verwenden und dann gegebenfalls noch einen zusätzlichen Lauf der weitere Reparaturen ausführt.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

Ich möchte hier mal Pyparsing in dem Raum schmeißen.

Das Ding ist ja absolut geil! :D
Schaut euch einfach die Doku und die Beispiele an, das Teil ist schwer zu beschreiben.
Benutzeravatar
keppla
User
Beiträge: 483
Registriert: Montag 31. Oktober 2005, 00:12

Ernsthaft: es bringt nichts, das von hinten anzufangen.

Laut deiner Aussage kann man sich weder darauf verlassen, dass die Keys einen festen Namen haben, noch darauf, dass der Trenner fest ist, noch dass die Values das sind, wonach sie aussehen.

Schreib doch erst mal (in BNF oder so) auf, was du parsen willst, sobald du das Widerspruchsfrei hinbekommst kann man entscheiden, welche Technologie da die beste ist, oder ob es nicht einfacher ist, einen Studenten zum Listenabtippen zu bezahlen.
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

So wie es von allen klingt, bleib ich da wohl bei der split und co sache, da ich da am meisten "Logik" einbauen kann was nun die aktuelle Zeile wirklich bedeutet.

Ich denke ich werde es so machen, dass ich für die aktuelle Liste das mal erstelle und wenn er bei einem Eintrag fehlschlägt mir eine Mail schickt und ich dann mein Script erweitern kann damit auch das Format geht. So krieg ich dann hoffentlich mal die meisten Formate durch den Parser.

Danke schonmal für die aufgelisteten Tools.

Gruss
Benutzeravatar
keppla
User
Beiträge: 483
Registriert: Montag 31. Oktober 2005, 00:12

rayo hat geschrieben:Ich denke ich werde es so machen, dass ich für die aktuelle Liste das mal erstelle und wenn er bei einem Eintrag fehlschlägt mir eine Mail schickt
Kannst du denn feststellen, obs schiefgeht? Aus deinem Beispiel: kannst du erkennen, dass der wert user10 falsch, und stattdessen 10 user gemeint ist?
Offensichtliche Syntaxfehler halte ich gar nicht mal so für ein Problem wie mehrdeutigkeiten.
Ist
"key=<value>" "key" "=<" "value>"
oder "key" "=" "<value>"?
Antworten