ฉันจะค้นหาไฟล์ PDF จากบรรทัดคำสั่งได้อย่างไร


26

ฉันกำลังตรวจสอบการอ้างอิงของกระดาษและต้องการค้นหาตำแหน่งในร่างกายที่มีการอ้างอิงบางกระดาษ (ในรายการอ้างอิง) มีโปรแกรมแก้ไข PDF ที่รองรับการค้นหาผ่าน bash และแยกบริบทของตำแหน่งหรือไม่ ฉันพยายามแปลง PDF เป็นข้อความ แต่ไม่ได้ผลลัพธ์ที่ดี

คำตอบ:


22

เพียงเพิ่มคำตอบข้างต้นโดยเฉพาะคุณสามารถใช้เครื่องมือบรรทัดคำสั่งจาก xpdf-utils ชื่อ pdftotext แล้วค้นหาเอกสารข้อความที่สร้างโดยเครื่องมือนี้ด้วย grep

อาจมีลักษณะเช่นนี้:

pdftotext document.pdf - | grep -C5 -n -i "search term"

มีข้อมูลเพิ่มเติมในคู่มือ ข้อเสียเปรียบเพียงข้อเดียวคือ pdftotext คือคุณไม่สามารถที่จะทำให้เราเปลี่ยนแปลงไฟล์หลาย ๆ ไฟล์ได้ในเวลาเดียวกัน ปัญหานี้สามารถแก้ไขได้ด้วยสคริปต์ทุบตีขนาดเล็ก:

for f in pdf_directory; do echo $f; pdftotext $f - | grep -i "search_term"; done

หากคุณมีปัญหาในการสร้างเอกสารข้อความจาก pdf เนื่องจากเช่นไฟล์ pdf ที่เข้ากันไม่ได้แสดงว่าเป็นปัญหาอื่น

ฉันคิดว่าโดยทั่วไปแล้วโปรแกรมแก้ไข pdf จะไม่รวมบรรทัดคำสั่งเพราะเป็นกราฟิก ถ้าคุณต้องการใช้ bash (หรืออาจ zsh!) คุณอาจต้องใช้เทอร์มินัลเชลล์

โชคดี!


20

poppler-utils

หมายเหตุ: xpdf-utils เป็นแพ็คเกจการเปลี่ยนผ่านสำหรับ poppler-utils

คุณสามารถใช้ poppler-utils poppler-utils เป็นชุดเครื่องมือสำหรับไฟล์ Portable Document Format (PDF)

ในการติดตั้งคุณสามารถใช้ Ubuntu Software Center หรือคลิกด้านล่าง:

ติดตั้ง poppler-utils

pdfgrep

pdfgrepสามารถค้นหาสตริงหรือรูปแบบในไฟล์ PDF วนซ้ำในไดเรกทอรีต้นไม้นับการจับคู่หรือพิมพ์บริบทสำหรับแต่ละการแข่งขัน ตัวอย่างเช่นในการค้นหาซ้ำkeywordใน/some directoryกรณีตาย:

pdfgrep -Ri keyword /some/directory

Pdfgrep เป็นเครื่องมือในการค้นหาข้อความในไฟล์ PDF มันทำงานคล้ายกับ `grep '

คุณสมบัติ:

  • ค้นหานิพจน์ทั่วไป
  • รองรับตัวเลือก grep ที่สำคัญ ได้แก่ : + ชื่อไฟล์ที่ส่งออก + เอาท์พุทหมายเลขหน้า + ไม่คำนึงถึงขนาดตัวพิมพ์ + จำนวน
    ครั้งที่เกิดขึ้น
  • และคุณสมบัติที่สำคัญที่สุด: เอาต์พุตสี!

ติดตั้ง pdfgrep

1ที่มา:ไดเรกทอรีแอพ Ubuntu


6

วิธีค้นหานิพจน์ทั่วไปในไฟล์ PDF หลายไฟล์โดยใช้ pdfgrep:

find /path -iname '*.pdf' -exec pdfgrep -H 'pattern' {} \;

โดยที่ path เป็นตำแหน่งสำหรับไฟล์ pdf ของคุณ


0

เหตุผลที่ pdftotext ไม่ประสบความสำเร็จอาจเป็นเพราะ PDF สแกนภาพและคุณต้อง OCR พวกเขาฉันเขียนวิธีที่รวดเร็วในการค้นหาทั้งหมดpdfที่ไม่สามารถgreped และ OCR ได้

ฉันสังเกตว่าpdfไฟล์ไม่มีตัวอักษรใด ๆ มันมักจะไม่สามารถค้นหาได้ pdffontsรู้อย่างนี้เราสามารถใช้

2 บรรทัดแรกของpdffontsส่วนหัวเป็นส่วนหัวของตารางดังนั้นเมื่อไฟล์ที่ค้นหาได้มีเอาต์พุตมากกว่าสองบรรทัดรู้ว่าเราสามารถสร้าง:

gedit check_pdf_searchable.sh

วางสิ่งนี้

#!/bin/bash 
#set -vx
if ((`pdffonts "$1" | wc -l` < 3 )); then
echo $1
ocrmypdf "$1" "$1"_ocr.pdf
fi

จากนั้นทำให้สามารถเรียกใช้งานได้

chmod +x check_pdf_searchable.sh

จากนั้นแสดงรายการไฟล์ PDF ที่ไม่สามารถค้นหาได้ทั้งหมดในไดเรกทอรี:

ls -1 ./*.pdf | xargs -L1 -I {} ./check_pdf_searchable.sh {}

หรือในไดเรกทอรีและไดเรกทอรีย่อย:

tree -fai . | grep -P ".pdf$" | xargs -L1 -I {} ./check_pdf_searchable.sh {}

คุณต้องติดตั้ง:

sudo apt install ocrmypdf
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.