Нахождение количества вхождений слова в PDF-файле

Вопрос или проблема

Внутри папки есть множество подпапок, а внутри подпапок есть множество PDF-файлов. Вот так:

+- SubfolderA
|  +- File1.pdf
|  +- File2.pdf
|
+- SubfolderB
|  +- File3.pdf
|  +- File4.pdf
|  +- file5.pdf
|
+- SubfolderC
   +- File6.pdf
   +- File7.pdf

Я хотел бы подсчитать, сколько раз конкретное слово, например, keywordx, встречается в этих файлах.

  • Предпочтительно игнорировать файлы, в которых 0 совпадений.
  • И в идеале показать отсортированный список, с файлом с максимальным количеством совпадений, отображаемым первым.

Если у вас установлен pdftotext (он должен быть в репозиториях большинства дистрибутивов Linux), вы можете конвертировать PDF-файл в текст, использовать grep для поиска шаблона в текстовом файле, а затем удалить его. Что-то вроде этого:

pattern="keywordx"
for file in */*pdf; do 
  txt=${file/.pdf/.txt}
  num=$(pdftotext "$file" 2>/dev/null && grep -c "$pattern" "$txt" && rm "$txt")
  [[ $num -gt 0 ]] && echo "$file: $num"
done

Ответ или решение

Вопрос о том, как подсчитать количество вхождений определённого слова в PDF-файлах на вашем компьютере, может показаться сложным, однако с помощью инструментов, таких как pdftotext и grep, вы сможете выполнить эту задачу эффективно и быстро. В данном руководстве мы предложим пошаговый подход к решению вашей задачи, а также обсудим дополнительные параметры, которые помогут вам получить искомую информацию без лишних усилий.

Шаг 1: Установка необходимых инструментов

Для начала убедитесь, что у вас установлен пакет poppler-utils, который содержит утилиту pdftotext. Она доступна во всех основных дистрибутивах Linux и может быть установлена через менеджеры пакетов. Например, на Ubuntu вы можете выполнить команду:

sudo apt-get install poppler-utils

Шаг 2: Подготовка сценария

После установки необходимых инструментов вы можете использовать следующий Bash-скрипт для поиска слова во всех PDF-файлах в заданных подкаталогах. Скрипт будет преобразовывать каждый PDF-файл в текстовый формат, подсчитывать вхождения указанного слова и выводить только те файлы, в которых слово встречается хотя бы один раз.

pattern="keywordx"  # Замените "keywordx" на нужное вам слово
declare -A results  # Используем ассоциативный массив для хранения результатов

for file in */*.pdf; do 
  txt=${file/.pdf/.txt}  # Формируем имя текстового файла
  pdftotext "$file" "$txt" 2>/dev/null  # Преобразуем PDF в текст
  num=$(grep -c "$pattern" "$txt")  # Подсчитываем вхождения слова
  rm "$txt"  # Удаляем временный текстовый файл

  if [[ $num -gt 0 ]]; then  # Если вхождений больше нуля
    results["$file"]=$num  # Сохраняем файл и количество вхождений
  fi
done

# Сортируем и выводим результаты
for file in "${!results[@]}"; do
  echo "$file: ${results[$file]}"
done | sort -t':' -k2 -nr  # Сортируем по количеству вхождений

Шаг 3: Запуск скрипта

После того как вы скопируете и сохраните этот скрипт в файл, например count_keyword.sh, не забудьте сделать его исполняемым:

chmod +x count_keyword.sh

Затем запустите его в том же каталоге, где расположены ваши подкаталоги и PDF-файлы:

./count_keyword.sh

Итог

Этот подход позволяет вам быстро и эффективно подсчитать количество вхождений слова во множестве PDF-файлов, игнорируя те файлы, где вхождений нет. Эффективная организация вывода результатов, упорядоченных по количеству вхождений, делает данный метод ещё более удобным.

Используя этот метод, вы получите четкое представление о распространенности интересующего вас слова в различных документах, что может быть особенно полезно при анализе больших объёмов информации. Если у вас есть более специфические требования или вам нужна дополнительная помощь, не стесняйтесь задавать вопросы.

Оцените материал
Добавить комментарий

Капча загружается...