Fork me on GitHub

Herr Knedel/Großartiges mit Containern: PDFs automatisch vertaggen mit Calibre und Docker

Created Thu, 27 Feb 2020 00:00:00 +0000 Modified Mon, 14 Mar 2022 18:18:09 +0000 Schwierigkeitsgrad: Für jeden machbar

240 Words

Es kann oft mühselig sein, PDFs mit den richtigen Metainfos zu versehen. Ich selbst sortiere die gedownloadeten PDFs aus meinem Heise-IX-Abo-Account, in meine private Calibre-Bibliothek ein.

Weil sich dieser Vorgang jeden Monat wiederholt, habe ich mir folgendes Setup überlegt. Ich ziehe meine neuen PDFs nur noch in meine Bibliothek.

Ich habe mir einen Container erstellt, der meine Calibre-Bibliothek als Volumen bekommt (-v …:/books). In diesem Container habe ich folgende Pakete installiert:

x
+
Terminal

$ apt-get update && apt-get install -y xpdf calibre

Nun sucht mein Script nach neuen PDFs, die dem Muster „IX*.pdf“ entsprechen. Aus jedem PDF werden die ersten 5 Seiten als Text exportiert. Anschließend werden alle Wörter entfernt, die auf dieser Wörterliste auftauchen: https://raw.githubusercontent.com/ChristianKnedel/heise-ix-reader-for-calibre/master/blacklist.txt

#!/bin/bash
export LANG=C.UTF-8
mkdir /tmp/worker1/

find /books/ -type f -iname '*.pdf' -newermt 20201201 -print0 | 
while IFS= read -r -d '' line; do 
        calibreID=$(echo  "$line" | sed -r 's/.*\(([0-9]+)\).*/\1/g')
        
        echo "bearbeite $clearName"
        echo "id $calibreID";

        cp "$line" /tmp/worker1/test.pdf

        echo "ocr "
        pdftotext -f 0 -l 5 /tmp/worker1/test.pdf /tmp/worker1/tmp.txt

        echo "text aufbereitung"
        cat /tmp/worker1/tmp.txt  | grep  -i -F -w -v -f  /books/blacklist.txt | sed -r s/[^a-zA-ZäöüÄÖÜ]+//g | grep -iE '[A-Za-z]{2,212}' |  sed ':begin;$!N;s/\n/,/;tbegin' > /tmp/worker1/final.txt

        calibredb set_metadata  --with-library /books/ --field cover:"cover.jpg" --field tags:"$(cat /tmp/worker1/final.txt) " --field series:"Heise IX" --field languages:"Deutsch" --field authors:"Heise Verkag" $calibreID
        
        rm /tmp/worker1/*
done

Mit dem Befehl „calibredb set_metadata“ setze ich alles Übrige als Tags. Das Ergebnis sieht wie folgt aus:

Das Skript gibt es auch unter Github: https://github.com/ChristianKnedel/heise-ix-reader-for-calibre .