nilsmueller.info

Kindle-Notizen automatisch umwandeln (Python)

Seit Jahren bin ich fleißiger Digital-Leser. Ich mag vor allem ich die Möglichkeit, digital zu markieren und mir Notizen zu machen. Die lassen sich schneller weiterverarbeiten und in meinem System archivieren – zumindest theoretisch.

Ich lese meine eBooks auf Amazons Kindle-Plattform, die für Markierungen und Notizen eine Menge Funktionen bietet. Es war aber lange Zeit schwer, diese Notizen aus dem System herauszubekommen und anderweitig mit ihren zu arbeiten. Noch 2014 brauchte es dafür obskure Dateien oder externe Tools. Mittlerweile bietet Amazon aber einen direkten Export an.

Vom Kindle in den Zettelkasten

Ausschnitt aus der exportierten HTML-Datei

Dieser Export folgt aber natürlich der Logik Amazons und nicht meiner. In den letzten Monaten habe ich mir ein eigenes System für Markierungen und Notizen zugelegt. Das hilft mir, das Gelesene auch Jahre später noch nutzen zu können: Ich markiere im Text relativ großzügig und schreibe am Ende jedes Kapitels – oder bei langen Kapiteln zwischendrin – eine kurze Zusammenfassung in eigenen Worten.

Die Exporte von Amazon können das natürlich nicht abbilden. Hier werden alle Markierungen und Notizen fortlaufend angegeben. Meine zusammenfassenden Notizen verschwinden also irgendwo zwischen den großzügigen Markierungen. Wie bekomme ich das also so umgewandelt, dass ich es sinnvoll in meinem Zettelkasten ablegen kann?

Also erstmal überlegt, was für eine Darstellung denn für mein System sinnvoll wäre. Es sollte auf jeden Fall in Markdown formatiert sein und die Notizen sollten kapitelweise organisiert sein. Sie sollten zuerst meine eigenen Zusammenfassungen anzeigen und dann die Zitate, die sich idealerweise verstecken lassen – was mein Texteditor über ein “Einklappen” realisieren kann. Gleichzeitig sollte das System in der Lage sein, die beiden wichtigsten Ausnahmen zu verarbeiten: Notizen zu konkreten Zitaten und Zitate als Zusammenfassung.

Notizen und Markierungen auslesen und umwandeln

Ausschnitt aus einer Notiz

Der Notizbuch-Export auf meinem Kindle schickt mir eine CSV-Datei, die auf den ersten Blick nach einem guten Startpunkt aussieht. Leider fehlt hier die Angabe, zu welchem Kapitel eine Textstelle gehört. Damit ist sie leider für mich unbrauchbar. Also läuft es auf die HTML-Datei hinaus, die der Export in der Android-App generiert. Hier ist der Beginn eines neuen Kapitels entsprechend markiert. Leider ist dieses HTML nicht semantisch, es ist also kein schönes DOM-Parsing möglich. Was bleibt, ist die einfache String-Manipulation und ein paar reguläre Ausdrücke. Das funktioniert zwar, ist aber sehr anfällig für Änderungen im Dateiformat.

Also geht das Skript Zeile für Zeile durch die Datei und liest aus den div-Klassen aus, was für Informationen folgen. Am Anfang der Datei sind das die Metadaten des Buches (also Titel, Autor*in und Erscheinungsjahr). Dann wird nach jedem Sektionstitel eine neue Sektion angelegt und Notizen wie Markierungen getrennt voneinander darin abgelegt. Dabei werden die angesprochenen Ausnahmen über eine simple Syntax abgefangen (s.u.).

Wenn alle Daten ausgelesen sind, werden sie einfach im gewünschten Format ausgegeben. Dabei rücke ich die Zitate ein, damit ich sie in meinem Editor “einfalten” kann. Die weiteren Details habe ich im Code ausführlich dokumentiert.

Dieses System ist insofern praktisch, dass ich beim Lesen und Notizen-Machen im Grunde nichts bedenken muss. Nur wenn ich mal einen Kommentar konkret zu einer Textstelle schreibe und eben nicht als Zusammenfassung, beginne ich diesen Kommentar mit “++”. Und wenn ich die letzte Markierung in meine Zusammenfassungen übernehmen will, verfasse ich einfach einen Kommentar mit “– ” am Anfang.

Hier endlich das Skript zum Download. Es lässt sich einfach lokal nutzen, im Grunde ist es aber egal, wie ihr die Daten in das Skript bekommt, und wie ihr sie am Ende ausgebt. Bei mir ist es Bestandteil meiner ebenfalls sehr zusammengehackten IFTTT-Flask-Automatisierung…

Disclaimer

Für jemanden, der wirklich programmieren und Software entwickeln kann, ist das wahrscheinlich alles sehr übel zusammengefrickelt. Ich habe noch mit QBasic und Turbo Pascal programmieren gelernt und es danach immer nur so ein bisschen nebenbei ein bisschen für den Eigenbedarf gemacht – primär mit PHP und jetzt eben Python. Deswegen halte ich meine Skripte strukturell sehr einfach. Tatsächlich dürfte das das erste Mal sein, dass ich Code von mir veröffentliche. Ich freue mich natürlich über Rückmeldungen und Tipps, mache dann aber einfach damit, was ich möchte. Insbesondere übernehme ich keine Garantie, dass ich das Skript aktualisiere oder re-factore…

Kommentieren

Durch die weitere Nutzung der Seite stimmst du der Verwendung von Cookies zu. Datenschutz

Die Cookie-Einstellungen auf dieser Website sind auf "Cookies zulassen" eingestellt, um das beste Surferlebnis zu ermöglichen. Wenn du diese Website ohne Änderung der Cookie-Einstellungen verwendest oder auf "Akzeptieren" klickst, erklärst du sich damit einverstanden.

Schließen