Вопрос или проблема
Я читаю PDF-документ в Ubuntu 11.04, используя стандартный “Просмотр документов”. Документ содержит более 500 страниц, и для выполнения поиска по тексту требуется некоторое время. Есть ли способ индексировать PDF-документы на вышеупомянутой платформе? Я ищу функцию, встроенную в сам ридер.
У меня есть скрипт, который может индексировать и искать содержание в PDF.
Сначала установите poppler-utils (apt install poppler-utils
)
Отредактируйте скрипт, чтобы указать папку для сканирования (foldertoindex)
(и, конечно, используйте на свой страх и риск)
#!/bin/bash # # Для индексации и поиска терминов в pdf-файлах # Зависимости: pdftotext (установите poppler-utils) # by desgua 2025/03/03 # Псевдонимы для цветов: 00 -> обычный, 01 -> жирный, 02 -> более тёмный, 03 -> курсив green="\e[01;32m"; yellow="\e[01;33m"; turquoise="\e[01;36m"; white="\e[01;37m" if [ ! "$1" ] || [ "$1" = "-h" ] || [ "$1" = "--help" ] ; then name="$(basename $0)" echo " Использование: $name [поисковые слова] $name --index " exit 0 fi # Настройки foldertoindex="/home/$USER/Documents/Papers" cachefolder="/home/$USER/.cache/pdfsearch" cachefile="$cachefolder/pdfsearchindex" [ ! -d "$cachefolder" ] && mkdir -p "$cachefolder" INDEX () { clear started="$(date +%s)" count="1" list="$(find "$foldertoindex" -type f -name "*.pdf")" total="$(printf "%s\n" "$list" | wc -l)" printf "%s" "$list" | while read pdfname do printf "\e[1;1f${white}Индексация $count из $total ($((10#100*$count/$total))%%) " printf "\e[2;1fЧтение $pdfname \033[K" if [ ! "$(grep "$pdfname" "$cachefile")" ]; then pdfcontent= pdfcontent="$(pdftotext "$pdfname" - 2>/dev/null)" pdfnameandcontent="$(printf "%s === %s" "$pdfname" "$pdfcontent" | tr '\n' ' ' | tr '\r' ' ')" printf "%s\n" "$pdfnameandcontent" >> "$cachefile" fi count="$((count+1))" done line="$((line+4))" stoped="$(date +%s)" totaltime="$(($stoped - $started))" printf "\e[${line};1f ${green}Готово за $totaltime секунд! " exit 0 } SEARCH () { clear printf "\e[2;1f${white}# С возвращением, $USER! #" printf "\e[4;1f${white}Поиск по \"${yellow}%s %s %s %s${white}\":\n" "$first" "$second" "$third" "$forth" printf "\e[5;1f${turquoise}" grep -i "$first" "$cachefile" | grep -i "$second" | grep -i "$third" | grep -i "$forth" | awk -F "===" '{ print $1 }' exit 0 } cd $HOME if [ "$1" = "--index" ] ; then INDEX; else first="$1" second="$2" third="$3" forth="$4" SEARCH; fi exit 1
старый ответ:
Tracker (устарел) может индексировать ваши PDF-документы. Он очень быстрый и надёжный.
Если вы ещё не используете этот отличный инструмент, вы можете настроить его для индексации только ваших PDF-документов: Alt+F2 затем вставьте tracker-preferences
перейдите в “Местоположения” и выберите папку ваших PDF.
Альтернативный PDF-просмотрщик
Обзор
Очень лёгкой и быстрой альтернативой Okular, не требующей его зависимости от KDE, является qpdfview. Он всё ещё находится в стадии бета-тестирования, но я нахожу его столь же стабильным, как и его более крупные аналоги. Производительность поиска превосходная и не уступает Okular.
Установка
Qpdfview ещё не доступен в официальных репозиториях, но его можно легко установить из PPA разработчика, набрав:
sudo add-apt-repository ppa:b-eltzner/qpdfview && apt-get update
sudo apt-get install qpdfview
Индексация PDF
Обзор
Я не смог найти аналог индексации Adobe Acrobat на Linux, и, похоже, это связано с тем, что встроенные индексы всё ещё не являются частью открытых PDF-стандартов.
Тем не менее, существует множество очень мощных настольных поисковых инструментов, которые быстрее и более эффективны в индексации PDF, чем проприетарные инструменты Adobe. Tracker уже упоминался, но есть и другие приложения. Вы можете найти очень подробное сравнение здесь.
Я не уверен, что какие-либо из PDF-читалок поддерживают индексацию текста — возможно, потому что сама индексация была бы довольно затратной, а PDF-файлы открываются и закрываются “по мере необходимости”
Однако, я провёл некоторые тесты и увидел, что okular — стандартный просмотрщик от KDE — имеет гораздо более быстрый поиск, чем evince (стандартный просмотрщик от Ubuntu). Например, okular тратит, возможно, секунду, чтобы отсканировать весь документ из 500 страниц, в то время как evince тратит около 5 секунд на ту же задачу.
Вы можете установить его, набрав
sudo apt-get install okular
(или просто искать его в Центре программного обеспечения)
Если это первая программа KDE на вашей машине, она потребует установить довольно много зависимостей, но это может стоить того — я нахожу программы KDE обычно более способными, чем их аналоги от Gnome… Okular поддерживает аннотации в PDF, например, что также иногда полезно.
Ответ или решение
Индексирование PDF-документа может существенно ускорить поиск информации в крупных файлах, особенно если речь идет о PDF-документах, содержащих более 500 страниц. В вашей текущей ситуации, при использовании стандартного просмотра документов в Ubuntu 11.04, поиск текста может занять длительное время. Далее мы рассмотрим возможности индексирования PDF-документов на базе Ubuntu и инструментов, которые могут быть полезны для этого процесса.
Теория
Индексирование PDF-документов заключается в создании структуры данных, которая позволяет быстро находить и извлекать текстовую информацию. Это достигается путем создания индексов — аналогов содержимого PDF-документов, которые упрощают и ускоряют процесс поиска текста. Такие индексы работают, анализируя текст и записывая его в удобные для поиска структуры.
В отличие от простого линейного поиска через каждую страницу документа, индексация позволяет использовать заранее подготовленные данные для мгновенного нахождения нужной информации. Также важно понимать, что сам процесс индексирования может быть достаточно ресурсозатратным, особенно для больших объемов данных.
Пример
В вашем случае, можно использовать bash-скрипт для индексации PDF, который упоминается в вашем описании. Этот скрипт использует утилиту pdftotext
, входящую в состав poppler-utils
, для извлечения текста из PDF и создания текстового индекса, который затем можно использовать для более быстрого поиска.
Шаги применения скрипта:
-
Установите
poppler-utils
:sudo apt install poppler-utils
-
Настройте скрипт, указав папку с вашими PDF-файлами:
foldertoindex="/путь/к/вашей/папке"
-
Запустите скрипт с параметром
--index
для создания индекса:./ваш_скрипт.sh --index
-
Для поиска используйте команды:
./ваш_скрипт.sh "ваш поисковый запрос"
Применение
Применение таких скриптов возможно и по другим операционным системам Linux, помимо Ubuntu 11.04. Этот подход особенно удобен для пользователей, которые хотят избежать установки громоздких программ и предпочитают работать с командной строкой.
Как альтернатива, стоит рассмотреть приложения с более высокой производительностью, такие как Okular и qpdfview.
Okular
Okular, будучи частью окружения рабочего стола KDE, имеет возможность быстрее обрабатывать текстовые поисковые запросы по сравнению с Evince из Ubuntu. Это достигается благодаря улучшенной оптимизации поиска и продуманной архитектуре работы с документами. Связанные зависимости могут увеличиться, но это зачастую оправдано улучшением функциональности.
Для установки Okular используйте:
sudo apt-get install okular
Qpdfview
Qpdfview представляет собой легкий и быстрый просмотрщик PDF, который также обладает хорошей производительностью поиска. Он устанавливается из PPA-разработчика и не требует множества зависимостей для работы.
Для установки qpdfview выполните:
sudo add-apt-repository ppa:b-eltzner/qpdfview
sudo apt-get update
sudo apt-get install qpdfview
Заключение
Вышеописанные варианты решения задачи поиска и индексации PDF-документов в значительной степени позволяют оптимизировать и ускорить работу с крупными файлами. Выбор конкретного решения зависит от ваших предпочтений в использовании интерфейса (графический или командная строка) и потребностей в функциональности. Независимо от выбранного метода, важно понимать, что индексирование — это мощный инструмент, который существенно облегчает повседневную работу с документами большого объема.