উবুন্টুতে প্রথমে পাঠ্যে রূপান্তর না করে গ্রেডের শক্তি ব্যবহার করে পিডিএফ ফাইলগুলি অনুসন্ধান করার কোনও উপায় আছে কি?
উবুন্টুতে প্রথমে পাঠ্যে রূপান্তর না করে গ্রেডের শক্তি ব্যবহার করে পিডিএফ ফাইলগুলি অনুসন্ধান করার কোনও উপায় আছে কি?
উত্তর:
প্যাকেজ ইনস্টল করুন pdfgrep
, তারপরে কমান্ডটি ব্যবহার করুন:
find /path -iname '*.pdf' -exec pdfgrep pattern {} +
------
সহজ উপায়
pdfgrep 'pattern' *.pdf
pdfgrep 'pattern' file.pdf
pdfgrep
এছাড়াও একটি পুনরাবৃত্তি পতাকা আছে। তাই এই উত্তর সম্ভবত কমে যেতে পারে: pdfgrep -R pattern /path/
। যদিও এটি পিডিএফ না হলেও প্রতিটি ফাইলের মধ্যে দিয়ে যায় তবে এটি কম কার্যকর হতে পারে। এবং আমি লক্ষ্য করেছি যে এটিতে আন্তর্জাতিক অক্ষর যেমন ä, ä এবং ö এর সাথে সমস্যা রয়েছে ö
-n
বিকল্পটি পিডিএফগ্রিপের পক্ষে একটি প্রো কারণ এটি আউটপুটে পৃষ্ঠা নম্বর অন্তর্ভুক্ত করতে দেয় (আরও প্রক্রিয়াজাতকরণের জন্য সহায়ক হতে পারে)।
pattern
? কি {}
? `+` এর সাথে কী হবে? আমি প্রথম পড়ার পরে আমার কোনও ধারণা নেই ... সুতরাং আমি যে ম্যানপেজটি যাচ্ছি তা বন্ধ করে I
আপনি যদি poppler-utils
ইনস্টল করে থাকেন (উবুন্টু ডেস্কটপে ডিফল্ট), আপনি উড়ে এটি "রূপান্তর" করতে এবং এটিতে পাইপ করতে পারেন grep
:
pdftotext my.pdf - | grep 'pattern'
এটি একটি .txt ফাইল তৈরি করবে না।
pdftotext
হ'ল ফাইল নামটি লিখতে হবে। তবে কনভেনশন দ্বারা, সরঞ্জামগুলি সাধারণত stdout
একটি -
পরিবর্তে নির্দিষ্ট করে কোনও ফাইলের পরিবর্তে আপনাকে লেখার অনুমতি দেয় । একইভাবে, কিছু সরঞ্জাম stdout
ডিফল্টরূপে লিখতে হবে যদি আপনি এই জাতীয় যুক্তি পুরোপুরি বাদ দেন (তবে অস্পষ্টতা তৈরি করা ছাড়া এটি সবসময় সম্ভব হয় না)।
pdfgrep ঠিক এই উদ্দেশ্যে লেখা হয়েছিল এবং এটি উবুন্টুতে উপলব্ধ।
এটি বেশিরভাগ ক্ষেত্রেই সামঞ্জস্যপূর্ণ হওয়ার চেষ্টা করে এবং এটি grep
"গ্রেপের শক্তি" সরবরাহ করে, কেবল পিডিএফ জন্য বিশেষীকরণ করে। এর মধ্যে সাধারণ গ্রেপ বিকল্পগুলি অন্তর্ভুক্ত রয়েছে, যেমন --recursive
, --ignore-case
বা --color
।
এর বিপরীতে pdftotext | grep
, পিডিএফগ্রিপ কোনও পারফরম্যান্ট উপায়ে ম্যাচের পৃষ্ঠা নম্বর আউটপুট দিতে পারে এবং সাধারণত যখন দ্রুত পুরো ডকুমেন্টটি অনুসন্ধান করতে হয় না (যেমন --max-count
বা --quiet
))
প্রাথমিক ব্যবহারটি হ'ল:
pdfgrep PATTERN FILE..
যেখানে PATTERN
আপনার অনুসন্ধানের স্ট্রিং এবং FILE
(ক শেল অথবা ওয়াইল্ডকার্ড) ফাইলের নামের একটি তালিকা।
আরও ইনফোসের জন্য ম্যানপেজটি দেখুন।
না।
একটি পিডিএফ ডেটা বিভক্ত থাকে, যার মধ্যে কিছু পাঠ্য, তাদের কয়েকটি চিত্র এবং তাদের মধ্যে কিছু সত্যই যাদুকরী অভিনব এক্সওয়াইজেড (যেমন .u3d ফাইল) থাকে। এই খণ্ডগুলি বেশিরভাগ সময় সংকুচিত হয় (যেমন, ফ্ল্যাট, http://www.verypdf.com/pdfinfoeditor/compression.htm দেখুন )। ', Grep' একটি .pdf করার জন্য আপনার আছে কম্প্রেশন ওরফে বিপরীত টেক্সট বের করে আনতে।
আপনি যে পারেন প্রতি সরঞ্জামগুলির সাথে ফাইল যেমন কি করতে পারেন pdf2text
আপনি একটি 'indexer' (তাকান চালানো এবং ফলাফল grep, অথবা xapian.org বা Lucene ) যা আপনার .pdf ফাইল বাইরে একটি সন্ধানযোগ্য সূচি তৈরী করে এবং তারপর আপনি অনুসন্ধান ব্যবহার করতে পারেন পিডিএফ এর সামগ্রী পেতে সেই সূচকটির ইঞ্জিন সরঞ্জাম।
তবে না, আপনি grep
ফাইলগুলি পিডিএফ করতে পারবেন না এবং প্রথমে পাঠটি না বের করে নির্ভরযোগ্য উত্তরের জন্য আশা করতে পারেন ।
pdfgrep
বিদ্যমান থাকা বিবেচনা করে (উপরে দেখুন), একটি ফ্ল্যাট "না" ভুল।
আপনি strings
প্রথমে এটি পাইপ করতে পারেন : -
cat file.pdf | strings | grep <...etc...>
strings file.pdf | grep <...>
, আপনার প্রয়োজন নেইcat
strings
বা খুব বন্ধুত্বপূর্ণ নয় grep
।
সাধারণ রিসোর্স গ্রেপ টুল ক্রগ্রিপ দেখুন যা পিডিএফ ফাইলগুলির মধ্যে অনুসন্ধানকে সমর্থন করে।
এটি আর্কাইভ, ডাটাবেস টেবিল, চিত্র মেটা-ডেটা, পিওএম ফাইল নির্ভরতা এবং ওয়েব সংস্থানগুলিতে নেস্টেড সামগ্রী যেমন এবং পুনরাবৃত্ত অনুসন্ধান সহ এর সংমিশ্রণের মতো অন্যান্য সংস্থানগুলি অনুসন্ধান করার অনুমতি দেয়।
এটা চেষ্টা কর
find /path -iname *.pdf -print0 | for i in `xargs 0`; do echo $i; \
pdftotext "$i" - | grep pattern; done
লাইনগুলি মুদ্রণের জন্য পিডিএফের ভিতরে প্যাটার্নটি ঘটে
আপনার পিডিএফ-ফাইল যুক্ত ফোল্ডারে সিডি করুন এবং তারপরে ..
pdfgrep 'pattern' your.pdf
অথবা আপনি যদি কেবল এক পিডিএফ-ফাইলের চেয়ে বেশি অনুসন্ধান করতে চান (যেমন আপনার ফোল্ডারের সমস্ত পিডিএফ-ফাইলগুলিতে)
pdfgrep 'pattern' `ls *.pdf`
অথবা
pdfgrep 'pattern' $(ls *.pdf)
ls
অন্যান্য কমান্ড ইনপুট হিসাবে আউটপুট । কেবলমাত্র pdfgrep 'pattern' *.pdf
যথেষ্ট
স্ট্যাকওভারফ্লোতে একটি সদৃশ প্রশ্ন রয়েছে। সেখানকার লোকেরা হরিশদের পরিবর্তনের প্রস্তাব দেয় answer
find /path -name '*.pdf' -exec sh -c 'pdftotext "{}" - | grep --with-filename --label="{}" --color "your pattern"' \;
এখানে অনুরূপ উত্তরের উপর সুবিধা হ'ল --with-filename
গ্রেপের জন্য পতাকা। এটি পিডিএফগ্রিপ থেকেও কিছুটা উন্নত, কারণ স্ট্যান্ডার্ড গ্রেপের আরও বৈশিষ্ট্য রয়েছে।
https://stackoverflow.com/questions/4643438/how-to-search-contents-of-multiple-pdf-files
বর্তমান ডিরেক্টরিতে পিডিএফ অনুসন্ধানের জন্য এখানে একটি দ্রুত স্ক্রিপ্ট রয়েছে:
#!/bin/bash
if [ $# -ne 1 ]; then
echo "usage $0 VALUE" 1>&2
exit 1
fi
echo 'SEARCH IS CASE SENSITIVE' 1>&2
find . -name '*.pdf' -exec /bin/bash -c 'pdftotext "{}" - | grep --with-filename --label="{}" --color "$0"' $1 \;
আমি ধরে নিলাম আপনার অর্থ টিপি এটি ডিস্কে রূপান্তরিত করে না, আপনি এগুলিতে রূপান্তর করতে পারেন stdout
এবং তারপরে এটিকে গ্রেপ করতে পারেন pdftotext
। কোনও ধরণের রূপান্তর ছাড়াই পিডিএফ গ্রিপ করা ব্যবহারিক পদ্ধতি নয় কারণ PDF
বেশিরভাগ বাইনারি ফর্ম্যাট।
ডিরেক্টরিতে:
ls -1 ./*.pdf | xargs -L1 -I {} pdftotext {} - | grep "keyword"
বা ডিরেক্টরি এবং এর উপ ডিরেক্টরিতে:
tree -fai . | grep -P ".pdf$" | xargs -L1 -I {} pdftotext {} - | grep "keyword"
কিছু pdf
স্ক্যান হওয়ার কারণে তাদের প্রথমে ওসিআর করা দরকার। আমি সমস্ত পিডিএফ অনুসন্ধান করার জন্য একটি সহজ সরল উপায় লিখেছি যা grep
এডি করতে পারে না এবং সেগুলিকে ওসিআর করতে পারে ।
আমি লক্ষ্য করেছি যে কোনও pdf
ফাইলের কোনও ফন্ট না থাকলে এটি সাধারণত অনুসন্ধানযোগ্য নয় cha সুতরাং এটি জেনে আমরা ব্যবহার করতে পারি pdffonts
।
এর প্রথম 2 লাইনগুলি pdffonts
হ'ল টেবিল শিরোনাম, সুতরাং যখন কোনও ফাইল অনুসন্ধানযোগ্য হয় তখন দুটি লাইন আউটপুট থাকে, এটি জেনে আমরা তৈরি করতে পারি:
gedit check_pdf_searchable.sh
তারপরে এটি আটকান
#!/bin/bash
#set -vx
if ((`pdffonts "$1" | wc -l` < 3 )); then
echo $1
pypdfocr "$1"
fi
তারপরে এটি কার্যকর করা যায়
chmod +x check_pdf_searchable.sh
তারপরে ডিরেক্টরিতে সমস্ত অ-অনুসন্ধানযোগ্য পিডিএফ তালিকাভুক্ত করুন:
ls -1 ./*.pdf | xargs -L1 -I {} ./check_pdf_searchable.sh {}
বা ডিরেক্টরি এবং এর উপ ডিরেক্টরিতে:
tree -fai . | grep -P ".pdf$" | xargs -L1 -I {} ./check_pdf_searchable.sh {}
আপনি যদি পিডিএফ নাম / বৈশিষ্ট্যগুলি ... বা সাধারণ স্ট্রিংগুলি সংক্ষেপিত বা এনকোডড না করে সন্ধান strings
করতে চান তবে পরিবর্তে আপনি নীচেরটি ব্যবহার করতে পারেন
grep -a STRING file.pdf
cat -v file.pdf | grep STRING
থেকে grep --help
:
--binary-files=TYPE assume that binary files are TYPE;
TYPE is 'binary', 'text', or 'without-match'
-a, --text equivalent to --binary-files=text
এবং cat --help
:
-v, --show-nonprinting use ^ and M- notation, except for LFD and TAB