Hallo, ich möchte aus folgendem PDF: https://www.wahl-o-mat.de/bundestagswahl2017/PositionsvergleichBundestagswahl2017 die Daten extrahieren, also welche Partei zu welcher Aussage wie Stellung genommen hat (Zustimmung/Ablehnung/Neutral) Und das halbwegs automatisiert, um a) mir etwas Arbeit zu sparen und b) menschliche Fehler zu vermeiden. Habe bereits mit mehreren Tools probiert, den Inhalt des PDF-Dokuments einfach als Text zu extrahieren. Das hat auch grundsätzlich geklappt, aber leider sind ausgerechnet die eigentlichen Daten (also die Antworten der Parteien) offenbar nicht als Text enthalten, sondern als Symbole/Grafiken, und beim Konvertieren nach reinem Text fielen die dann einfach komplett raus. Hat jemand vielleicht eine hilfreiche Idee, mit was für einer Library (bevorzugt Python) oder Tool ich irgendwie an die gewünschten Daten herankommen bzw. in ein Format konvertieren könnte, dass ich dann irgendwie parsen kann?
:
Bearbeitet durch User
Irgendwas mit OCR, dem beizubringen ist wie Kreuz/Haken/Strich zu erkennen und durch irgendendein "Buchstaben" (oder gleich das passende Unicode Zeichen?) zu ersetzen. Diese Symbole sind immerhin ganz wenige und im Dokument absolut konstant...
Ok-Haken als "_", X und - werden erkannt. Der Text ist manchmal nicht ganz richtig aber man kann ja die jeweiligen Antworten des extrahierten Textzeilen per script zuordnen.
PDFlüsterer schrieb: > Irgendwas mit OCR, dem beizubringen ist wie Kreuz/Haken/Strich zu > erkennen und durch irgendendein "Buchstaben" (oder gleich das passende > Unicode Zeichen?) zu ersetzen. > Diese Symbole sind immerhin ganz wenige und im Dokument absolut > konstant... Hey, clevere Idee! Habe eben mal testweise die erste Seite des Dokuments in eine PNG-Datei umgewandelt, und diese Datei dann per tesseract geOCRt. Ohne tesseract extra zu trainieren kamen da solche Ergebnisse heraus:
1 | 3. Für die Aufnahme von neuen Asylsuchenden soll eine jährliche Obergrenze gelten. — X X X |
2 | 4. Der Ausbau erneuerbarer Energien soll vom Bund dauerhaft finanziell gefördert werden. )( \/ \/ \/ |
3 | 6. BAföG soll generell unabhängig vom Einkommen der Eltern gezahlt werden. )( _ \/ \/ |
4 | 7. Die Videoüberwachung im öffentlichen Raum soll ausgeweitet werden. \/ \/ X X |
5 | 22. In Deutschland geborene und aufgewachsene Kinder ausländischer Eltern sollen weiterhin neben der |
6 | deutschen ihre zweite Staatsangehörigkeit behalten dürfen. _ \/ ‘/ ‘/ |
Die Kreuze, Haken und Striche werden zwar wie man sieht unterschiedlich erkannt, aber damit kann man denke ich trotzdem etwas anfangen. Vielen Dank nochmal für die clevere Idee!
Altenpfleger schrieb: > Ok-Haken als "_", X und - werden erkannt. > Der Text ist manchmal nicht ganz richtig aber man kann ja die jeweiligen > Antworten des extrahierten Textzeilen per script zuordnen. Wow, vielen Dank für die Mühe, die Du Dir gemacht hast! Gehe ich recht in der Annahme, dass Du das auch mit dem OCR-Ansatz gemacht hast? Wenn ja, welches Programm hast Du dafür verwendet? Das die Kreuze bei Dir durchgängig als "X" erkannt werden, gefällt mir schon mal sehr gut. Nur der Umstand, dass Häkchen und Striche als Bindestrich bzw. Underscore erkannt werden, ist mir im ersten Moment nicht so ganz geheuer - tesseract z.B. hat bei mir den Strich im Originaldokument nämlich als genau diese beiden Zeichen erkannt, mal dieses, mal jenes...
Hi Wenn der Haken als \/ erkannt wird, sollte es ein Leichtes sein, diesen 'Text' im ganzen Dokument zu ersetzen. Beim X sehe ich Da eher Probleme :) Bastelst Du an einem WahloMat, bei Dem man mehr als 8 (Alle ?) Parteien gescannt bekommt? ... kann doch nicht sein, daß die Berechnung der Prozente zwar bei 8 Parteien klappt, aber bei Allen nicht möglich scheint ... vll. Mal einen ATtiny drauf ansetzen ... Ok, man könnte auch versuchen, ob nach der Auswahl die Generierung des Ergebnis in einem neuen Tab gestattet wird und man im Vorherigen die Auswahl 'auf die nächsten 8' ändern kann - sehe Da aber schon Murphy lachend am Gangende auf mich warten ... ... ach ja ... erschreckend, wen ich wohl wählen soll ... muß wohl noch 'n paar Mal rumtesten ;) MfG
Altenpfleger schrieb: > Ok-Haken als "_", X und - werden erkannt. > Der Text ist manchmal nicht ganz richtig aber man kann ja die jeweiligen > Antworten des extrahierten Textzeilen per script zuordnen.
1 | $ cat document.txt | \ |
2 | > sed -e 's!B\. !8. !g' -e 's!_\. !9. !g' -e 's!\([123]\)o\. !\10. !g' | \ ##1 |
3 | > sed -e 's/^\([0-9][0-9]*\.\) [^\.!]*[\.!] /\1 /g' | \ ##2 |
4 | > sed -e 's!\. *\([_xX-]\)!. \1!g' -e 's! ! !g' | \ ##3 |
5 | > grep -P '^\d+\. ' ##4 |
6 | 1. _ X X X |
7 | 2. X X _ _ |
8 | 3. - X X X |
9 | 4. X _ _ _ |
10 | 5. _ _ _ _ |
11 | : |
12 | : |
##1 ein paar Ziffern vor den Fragen richtigstellen ##2 den Fragetext entfernen ##3 whitespace normalisieren ##4 nur die nummerierten Fragen beibehalten Die noch fehlende Vorbehandlung um: - Nicht-ASCII-Zeichen zu entfernen/ersetzen - Mehrzeilige Fragen behandeln ...sei dem geneigten Forumsbesucher zur Übung gemaess Steilvorlage ueberlassen Selbstverstaendlich müssen noch die Parteien ueber 8 Seiten korrekt zugeordnet werden. Händisch. :-P
Joachim S. schrieb: > Gehe ich recht in der Annahme, dass Du das auch mit dem OCR-Ansatz > gemacht hast? Wenn ja, welches Programm hast Du dafür verwendet? pdftoppm document.pdf > bild.ppm gocr bild.ppm > text.txt Ich sehe gerade dass bei Fragen mit Umbruch die Antworten fehlen. Ich würde anschliessend den Text der Fragen nochmal separat extrahieren z.B. mit pdftotext -raw document.pdf - Die Zeilen der Anworten mit Umbruch abändern. Danach die als Text extrahierten Frane in der gescannten Version zeilenweise ersetzen. Dann musst du noch die ... ne alles Bullshit das müsste einfacher gehen. Ich habe da noch ne andere Idee... melde mich wieder...
Patrick J. schrieb: > Bastelst Du an einem WahloMat, bei Dem man mehr als 8 (Alle ?) Parteien > gescannt bekommt? Ja, ich spiele mit dem Gedanken einen minimalistischen Wahl-o-Mat-Ersatz zu programmieren, mit ein paar Veränderungen, die mich beim Original-Wahl-o-Mat stören. Die unnötige Beschränkung auf 8 Parteien war für mich in der Tat der konkrete Auslöser (schon die dafür genannte Begründung in der FAQ (https://www.wahl-o-mat.de/bundestagswahl2017/popup_faq.php#qe9) finde ich ein wenig skurril: "Der Wahl-O-Mat ist [..] keine Wahlempfehlung"). Weiterhin hätte ich auch gerne mehr Möglichkeiten, die einzelnen Aussagen zu gewichten. Und den Umstand, dass man mit dem Wahl-o-Mat einer Thomas de Maiziere unterstehenden Behörde detailliert Auskunft darüber erteilt, wie man zu diversen Themen steht, finde ich auch ein wenig problematisch. Den Wahl-o-Mat haben bei der letzten Bundestagswahl immerhin fast 14 Millionen Menschen genutzt - das ist schon ein sehr umfangreicher Datenschatz, den die da ansammeln, und den man potentiell auch durchaus missbrauchen kann.
Funktioniert wie ich mir das vorstellte. Format sieht dann so aus: Textdatei: 1.Zeile: Die Namen der Parteien: NamePartei1,NamePartei2,NamePartei3,NamePartei4 folgende Zeilen: Fragenummer, Fragetext, Antworten Antworten besteht aus 4 Buchstaben, aus der Menge J|N|E eben die Antwortspalten der jeweiligen Parteien. J=Ok-Haken, N=Kreuz also nein, E=Minus enthalten/keine Antwort Das ganze je PDF-Seite. Das kannste dann ja von Python aus auslesen. Ich stell die Daten heute im Laufe des Tages hier rein.
Dateizuordnung habe ich jetzt weggelassen, das musst du pro Seite noch selber machen, die gibt man dann händisch ein, da lohnt sich eine automatische Extrahierung nicht, eintippen geht da schneller. Daten sind jetzt seitenweise extrahiert: Frage inkl. Nummerierung;Antworten Antwortaufbau wie oben
Sollte Parteizuordnung heissen, nicht Dateizuordnung.
Altenpfleger schrieb: > Dateizuordnung habe ich jetzt weggelassen, > das musst du pro Seite noch selber machen, die gibt man dann händisch > ein, da lohnt sich eine automatische Extrahierung nicht, eintippen geht > da schneller. > > Daten sind jetzt seitenweise extrahiert: > Frage inkl. Nummerierung;Antworten > > Antwortaufbau wie oben Ui, vielen Dank, dass Du Dir die ganze Mühe gemacht hast! Ich weiss ja gar nicht, was ich sagen soll... Habe die von Dir bereit gestellten Daten jetzt mal geparst und mit den Namen der Parteien verknüpft. Falls noch Jemand an den Daten interessiert ist: In der Anlage dieses Postings befindet sich eine JSON-Datei, in der alle Fragen (in Original-Reihenfolge) sowie die Antworten aller Parteien aufgelistet sind. Die Antworten der Parteien sind dabei als ein jeweils 38 Zeichen langer String angegeben, der aus den Zeichen "J" (=ja bzw. stimme zu), "N" (=nein, bzw. stimme nicht zu) und "-" (=neutral) besteht.
Ich habe aus dem Ganzen mal eine minimalistische Web-App gemacht - falls es Jemand mal ausprobieren möchte: https://cdn.rawgit.com/oyooyo/wahl-helfer/master/html/wahl-helfer.html?wahl=bundestagswahl2017
Ich habs gerade mal ausprobiert. Super Arbeit! Hast Du was dagegen, wenn der Link weitergegeben wird? Noch ein paar kleine Hinweise: Nochmal eine Übersicht von den Antworten der Parteien wäre auf der Seite ganz geschickt. Ist es eigentlich Absicht, dass die Auswertung immer nach ganz unten scrollt (Firefox 55.0.3)? Das stört etwas, wenn man nochmal an den Antworten schraubt und sich die Veränderung anschauen will.
Danke für Eure Mühen. Kannst Du bitte die ganze Scripterei weglassen und einfach HTML-Seiten verwenden? Bei https://cdn.rawgit.com/oyooyo/wahl-helfer/master/html/wahl-helfer.html#theses-tabpanel https://cdn.rawgit.com/oyooyo/wahl-helfer/master/html/wahl-helfer.html#parties-tabpanel kommt bei mir der selbe Inhalt wie auf den Hauptseite.
lalelu schrieb: > Ich habs gerade mal ausprobiert. Super Arbeit! > Hast Du was dagegen, wenn der Link weitergegeben wird? Nein, natürlich nicht. Würde mich ja vielmehr freuen, wenn das auch andere nützlich finden. > Noch ein paar kleine Hinweise: > Nochmal eine Übersicht von den Antworten der Parteien wäre auf der Seite > ganz geschickt. Das stimmt. Derzeit ist es ja eh noch extrem minimalistisch, und das ist wohl so mit der wichtigste, was man noch hinzufügen sollte. > Ist es eigentlich Absicht, dass die Auswertung immer nach ganz unten > scrollt (Firefox 55.0.3)? Das stört etwas, wenn man nochmal an den > Antworten schraubt und sich die Veränderung anschauen will. Nein, das ist keine Absicht. Kann mir das momentan nur so erklären, dass das daher kommt, weil ich die Auswertungs-Seite komplett neu aufbaue, sobald irgend etwas verändert wird. Ich habe es eben mal probiert, komischerweise kann ich das Problem nicht einmal reproduzieren (hier: Firefox 55.0.2 auf Ubuntu).
Interessierter schrieb: > Danke für Eure Mühen. > Kannst Du bitte die ganze Scripterei weglassen und einfach HTML-Seiten > verwenden? Bei > https://cdn.rawgit.com/oyooyo/wahl-helfer/master/html/wahl-helfer.html#theses-tabpanel > https://cdn.rawgit.com/oyooyo/wahl-helfer/master/html/wahl-helfer.html#parties-tabpanel > kommt bei mir der selbe Inhalt wie auf den Hauptseite. Ich verstehe gerade nicht ganz, was Du genau meinst. Ich habe das Ganze ja ganz bewusst so implementiert, dass keinerlei Daten an's Internet gesendet werden, und die Auswertung komplett auf dem Endgerät des Benutzers passiert - komplett ohne Skripte geht es also eh nicht, sofern ich diese Eigenschaft beibehalten möchte... :-( Auf die Javascripte von jQuery, bootstrap und poppler.js würde ich hingegen liebend gerne verzichten - die werden eh nur benötigt, damit man zwischen den Tabs umschalten kann.
:
Bearbeitet durch User
Patrick J. schrieb: > ... kann doch nicht sein, daß die Berechnung der Prozente zwar bei 8 > Parteien klappt, aber bei Allen nicht möglich scheint ... vll. Mal einen > ATtiny drauf ansetzen ... Ich halte das für ganz sinnvoll so wie es ist, das motiviert dazu sich wenigstens ein bisschen selbst mit den Parteien auseinanderzusetzen, anstatt blind den "Gewinner" in einer vollständigen Liste zu wählen.
wähler schrieb: > Patrick J. schrieb: >> ... kann doch nicht sein, daß die Berechnung der Prozente zwar bei 8 >> Parteien klappt, aber bei Allen nicht möglich scheint ... vll. Mal einen >> ATtiny drauf ansetzen ... > > Ich halte das für ganz sinnvoll so wie es ist, das motiviert dazu sich > wenigstens ein bisschen selbst mit den Parteien auseinanderzusetzen, > anstatt blind den "Gewinner" in einer vollständigen Liste zu wählen. Ich denke, dass in der Praxis die Allerwenigsten tatsächlich blind die Partei wählen würden, die als Gewinner herauskommt, ohne sich zumindest mehr über diese Partei zu informieren. Schon deshalb, weil die meisten der 32 Parteien realistisch betrachtet eh keine Chance haben, die undemokratische 5%-Hürde zu nehmen (die leider wie eine fast unüberwindbare Markteintrittsbarriere verhindert, dass sich neue Parteien etablieren können). Ich persönlich fand den Vergleich aller Parteien schon deshalb interessant, weil SPD & CDU es bei mir tatsächlich geschafft haben, abgeschlagen auf den beiden letzten Plätzen zu landen. Bei stolzen 32 Parteien ist das schon eine gewisse Leistung... ;-)
Joachim S. schrieb: > Schon deshalb, weil die meisten der 32 Parteien realistisch betrachtet > eh keine Chance haben, die undemokratische 5%-Hürde zu nehmen (die > leider wie eine fast unüberwindbare Markteintrittsbarriere verhindert, > dass sich neue Parteien etablieren können). Naja wenn man sich diese Meisten anguckt, verwundert das auch nicht und die brauchts dann auch nicht im Bundestag. Mit dem richtigen Angebot können sich offenbar doch neue Teilnehmer einen Zugang zum Vollversorgungsmarkt öffnen, siehe AfD. Dass deren Einzug zusammen mit der FDP dazu führen wird, dass CDU und SPD in zweistelliger Zahl Mandate verlieren werden und sicher geglaubte Landeslistenpositionen doch nicht mehr so sicher sind, machts die Sache schon wert. Spaßig fände ich noch das mediale Wundenlecken, wenns für Platz 3 reicht.
Interessierter schrieb: > Danke für Eure Mühen. > Kannst Du bitte die ganze Scripterei weglassen und einfach HTML-Seiten > verwenden? Bei > https://cdn.rawgit.com/oyooyo/wahl-helfer/master/html/wahl-helfer.html#theses-tabpanel > https://cdn.rawgit.com/oyooyo/wahl-helfer/master/html/wahl-helfer.html#parties-tabpanel > kommt bei mir der selbe Inhalt wie auf den Hauptseite. Diese Links funktionieren bei mir nicht, die Fragedaten werden nicht geladen. Die von Joachim angegebene Seite funktioniert einwandfrei. Danke dafür ist ein prima Service.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.