grep содержимое из PDF-файла и записать его частично в переменные - PullRequest
1 голос
/ 18 марта 2020

Представляясь, я только начал присоединяться к переполнению стека после нескольких дней поиска. Я работаю над небольшим проектом с моим RasPi, сортирующим мои документы PDF с говорящими именами файлов.

Я собираюсь использовать pdfgrep название компании и дату из различных документов.

Здесь это код:

#!/bin/bash

# set work directory
workpath=~pi/Documents/

find $workpath/ -iname '*.pdf' -print | while read FILENAME
do
        if pdfgrep -i --max-count 1 'company1' "${FILENAME}";
        then
                echo "$FILENAME";
                pdfgrep  --max-count 1 '(([0-9][0-9]{,1}\.)\s+('Januar'|'Februar'|'März'|'April'|'Mai'|'Juni'|'Juli'|'August'|'September'|'Oktober'|'November'|'Dezember')\s+([1-9][0-9][0-9][0-9]{1,}))' "${FILENAME}";
                echo "company1";
       elif pdfgrep -i --max-count 1 'company2' "${FILENAME}";
       then
               echo "$FILENAME";
               pdfgrep  --max-count 1 '('Datum:')\s+(([0-9][0-9]{,1}\.)([0-9][0-9]{,1}\.)([1-9][0-9][0-9][0-9]{1,}))'
               echo "company2";
        else
                echo "$FILENAME";
                echo "undefined document -- Error!!";
        fi
done

Для каждого файла я получаю различное содержимое:

название компании

документ поведения название компании

название компании и адрес компании

и другие разные вещи

Дата также отличается

дд.мм.гггг

дата: дд.мм.гггг

текст дд. месяц гггг

_______________________ дд.месяц гггг

Я ищу способ написать только необходимый контент, без текста вокруг, в переменные как:

comp = название компании

datey = гггг

datem = мм / здесь мне также нужна идея, как перевести месяц до мм

от = дд

результат должен быть: ггггммдд-название компании.pdf

Я начал со сценариев bash, так как я запускаю pdfgrep и не совсем знаком с языками программирования. Может быть, я сделал несколько строк в python: S

Ваша помощь будет очень кстати!

ура, bdream

1 Ответ

1 голос
/ 18 марта 2020

Это не полное решение, а список подсказок.

Добавление option -o к команде pdfgrep должно печатать только соответствующую часть строки, т.е. исключить дополнительный текст, такой как «дата:» и т. д. c

pdfgrep -o --max-count 1 '(([0-9][0-9]{,1}\.)\s+('Januar'|'Februar'|'März'|'April'|'Mai'|'Juni'|'Juli'|'August'|'September'|'Oktober'|'November'|'Dezember')\s+([1-9][0-9][0-9][0-9]{1,}))' "${FILENAME}";

Поскольку вы ищете конкретные c названия компаний в

if pdfgrep -i --max-count 1 'company1' "${FILENAME}";

et c, вам на самом деле не нужен вывод, вместо этого вы можете использовать известное название компании , Вы можете добавить параметр -q, чтобы подавить вывод

if pdfgrep -q -i --max-count 1 'company1' "${FILENAME}";

Таким образом, оставшаяся задача - проанализировать различные форматы даты / времени, которые можно выполнить с помощью функции strptime, доступной в Python или Perl или с использованием библиотеки Python dateutil. См. Анализ даты, которая может быть в нескольких форматах в python

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...