Fork me on GitHub

Herr Knedel/Wspaniałe rzeczy z kontenerami: Automatyczne oznaczanie plików PDF za pomocą Calibre i Dockera

Created Thu, 27 Feb 2020 00:00:00 +0000 Modified Sat, 02 Apr 2022 16:03:43 +0000 Schwierigkeitsgrad: Für jeden machbar

227 Words

Dodawanie właściwych metainformacji do plików PDF może być często żmudne. Ja sam sortuję pobrane pliki PDF z mojego konta subskrypcji Heise IX do mojej prywatnej biblioteki Calibre.

Ponieważ proces ten powtarza się co miesiąc, wymyśliłem następującą konfigurację. Do biblioteki przeciągam tylko nowe pliki PDF. Utworzyłem kontener, który pobiera moją bibliotekę Calibre jako wolumin (-v …:/books). W tym kontenerze zainstalowałem następujące pakiety:
x
+
Terminal

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

Teraz mój skrypt wyszukuje nowe pliki PDF, które pasują do wzorca “IX*.pdf”. Z każdego pliku PDF pierwsze 5 stron jest eksportowanych jako tekst. Następnie usuwane są wszystkie słowa, które pojawiają się na tej liście: 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


Za pomocą polecenia “calibredb set_metadata” ustawiam wszystko inne jako tagi. Wynik wygląda następująco:

Skrypt jest również dostępny w serwisie Github: https://github.com/ChristianKnedel/heise-ix-reader-for-calibre .