আমি কীভাবে পিডিএফ ফাইলগুলিতে গ্রেপ করতে পারি?


135

উবুন্টুতে প্রথমে পাঠ্যে রূপান্তর না করে গ্রেডের শক্তি ব্যবহার করে পিডিএফ ফাইলগুলি অনুসন্ধান করার কোনও উপায় আছে কি?


1
আমার মনে হয় কিছু ব্যবহারযোগ্য ফলাফল ফিরে পেতে আপনার পিডিএফ 2 টেক্সটটি বিশ্লেষণ করা দরকার ...
জোহান


1
অনুসন্ধানের মাধ্যমে এখানে আগত লোকদের জন্য: আপনি যদি প্রথমে এটি পাঠ্য ফাইলগুলিতে রূপান্তর করতে চান তবে একাধিক পিডিএফ ফাইলের বিষয়বস্তু কীভাবে
মার্টিন থোমা

উত্তর:


135

প্যাকেজ ইনস্টল করুন pdfgrep, তারপরে কমান্ডটি ব্যবহার করুন:

find /path -iname '*.pdf' -exec pdfgrep pattern {} +

------

সহজ উপায়

pdfgrep 'pattern' *.pdf
pdfgrep 'pattern' file.pdf 

5
এটি ম্যাক অসক্সে (ম্যাভারিক্স) পাশাপাশি কাজ করে। ব্রু ব্যবহার করে এটি ইনস্টল করুন। সহজ। ধন্যবাদ।
মিকিমোরালস

7
কৌতূহলের বাইরে আমি পিডিএফগ্রাইপের উত্সটি পরীক্ষা করেছিলাম এবং এটি পিডিএফ থেকে স্ট্রিংগুলি বের করার জন্য পপলার ব্যবহার করে। প্রায় ডাব্লু ওয়াগের উত্তর হিসাবে পুরো ডকুমেন্টের পরিবর্তে কেবল পৃষ্ঠা অনুসারে উত্তর দেওয়া হয়।
অ্যান্ড্রু মার্টিন

4
pdfgrepএছাড়াও একটি পুনরাবৃত্তি পতাকা আছে। তাই এই উত্তর সম্ভবত কমে যেতে পারে: pdfgrep -R pattern /path/। যদিও এটি পিডিএফ না হলেও প্রতিটি ফাইলের মধ্যে দিয়ে যায় তবে এটি কম কার্যকর হতে পারে। এবং আমি লক্ষ্য করেছি যে এটিতে আন্তর্জাতিক অক্ষর যেমন ä, ä এবং ö এর সাথে সমস্যা রয়েছে ö
রোভানিয়ন

1
প্রকৃতপক্ষে, -nবিকল্পটি পিডিএফগ্রিপের পক্ষে একটি প্রো কারণ এটি আউটপুটে পৃষ্ঠা নম্বর অন্তর্ভুক্ত করতে দেয় (আরও প্রক্রিয়াজাতকরণের জন্য সহায়ক হতে পারে)।
জেপজেড

4
এই উত্তরটি ব্যবহার করা আরও সহজ হবে যদি এটি ব্যাখ্যা করে যে কমান্ডের কোন বিটগুলি অক্ষরে অক্ষরে অনুলিপি করা হয়েছে এবং কোনটি স্থানধারক। কি pattern? কি {}? `+` এর সাথে কী হবে? আমি প্রথম পড়ার পরে আমার কোনও ধারণা নেই ... সুতরাং আমি যে ম্যানপেজটি যাচ্ছি তা বন্ধ করে I
মার্ক এ Amery

56

আপনি যদি poppler-utilsইনস্টল করে থাকেন (উবুন্টু ডেস্কটপে ডিফল্ট), আপনি উড়ে এটি "রূপান্তর" করতে এবং এটিতে পাইপ করতে পারেন grep:

pdftotext my.pdf - | grep 'pattern'

এটি একটি .txt ফাইল তৈরি করবে না।


1
সুতরাং .. আপনি পাঠ্যটি গ্রেপ করার আগে এটি নিষ্ক্রিয় করেন যার অর্থ উত্তরটি "না"।
আকিররা

18
@কীরা এই ওপিটির সম্ভবত সম্ভবত "দর্শকের পিডিএফ না খোলার এবং পাঠ্যে রফতানি না করে"
মাইকেল মরোজেক

5
@কীরা আপনি "গ্রেপ শুধুমাত্র" দেখতে পাবেন?
মাইকেল মরোজেক

6
@ ককিরা আচ্ছা, আমি ইতিমধ্যে বলেছিলাম যে আমার মনে হয় তিনি সম্ভবত বোঝাতে চেয়েছিলেন; তিনি পাঠ্য প্রক্রিয়া করার আগে রফতানি করতে চান না। আমার খুব সন্দেহ আছে যে কোনও কমান্ডে কোনও সমস্যা রয়েছে যা কোনওভাবেই পাঠ্যে রূপান্তরিত হয়; না করার কোনও কারণ নেই
মাইকেল মরোজেক

2
@Sherrellbc এর দ্বিতীয় যুক্তিটি pdftotextহ'ল ফাইল নামটি লিখতে হবে। তবে কনভেনশন দ্বারা, সরঞ্জামগুলি সাধারণত stdoutএকটি -পরিবর্তে নির্দিষ্ট করে কোনও ফাইলের পরিবর্তে আপনাকে লেখার অনুমতি দেয় । একইভাবে, কিছু সরঞ্জাম stdoutডিফল্টরূপে লিখতে হবে যদি আপনি এই জাতীয় যুক্তি পুরোপুরি বাদ দেন (তবে অস্পষ্টতা তৈরি করা ছাড়া এটি সবসময় সম্ভব হয় না)।
জুস্ট

11

pdfgrep ঠিক এই উদ্দেশ্যে লেখা হয়েছিল এবং এটি উবুন্টুতে উপলব্ধ।

এটি বেশিরভাগ ক্ষেত্রেই সামঞ্জস্যপূর্ণ হওয়ার চেষ্টা করে এবং এটি grep"গ্রেপের শক্তি" সরবরাহ করে, কেবল পিডিএফ জন্য বিশেষীকরণ করে। এর মধ্যে সাধারণ গ্রেপ বিকল্পগুলি অন্তর্ভুক্ত রয়েছে, যেমন --recursive, --ignore-caseবা --color

এর বিপরীতে pdftotext | grep, পিডিএফগ্রিপ কোনও পারফরম্যান্ট উপায়ে ম্যাচের পৃষ্ঠা নম্বর আউটপুট দিতে পারে এবং সাধারণত যখন দ্রুত পুরো ডকুমেন্টটি অনুসন্ধান করতে হয় না (যেমন --max-countবা --quiet))

প্রাথমিক ব্যবহারটি হ'ল:

pdfgrep PATTERN FILE..

যেখানে PATTERNআপনার অনুসন্ধানের স্ট্রিং এবং FILE(ক শেল অথবা ওয়াইল্ডকার্ড) ফাইলের নামের একটি তালিকা।

আরও ইনফোসের জন্য ম্যানপেজটি দেখুন।


7

না।

একটি পিডিএফ ডেটা বিভক্ত থাকে, যার মধ্যে কিছু পাঠ্য, তাদের কয়েকটি চিত্র এবং তাদের মধ্যে কিছু সত্যই যাদুকরী অভিনব এক্সওয়াইজেড (যেমন .u3d ফাইল) থাকে। এই খণ্ডগুলি বেশিরভাগ সময় সংকুচিত হয় (যেমন, ফ্ল্যাট, http://www.verypdf.com/pdfinfoeditor/compression.htm দেখুন )। ', Grep' একটি .pdf করার জন্য আপনার আছে কম্প্রেশন ওরফে বিপরীত টেক্সট বের করে আনতে।

আপনি যে পারেন প্রতি সরঞ্জামগুলির সাথে ফাইল যেমন কি করতে পারেন pdf2textআপনি একটি 'indexer' (তাকান চালানো এবং ফলাফল grep, অথবা xapian.org বা Lucene ) যা আপনার .pdf ফাইল বাইরে একটি সন্ধানযোগ্য সূচি তৈরী করে এবং তারপর আপনি অনুসন্ধান ব্যবহার করতে পারেন পিডিএফ এর সামগ্রী পেতে সেই সূচকটির ইঞ্জিন সরঞ্জাম।

তবে না, আপনি grepফাইলগুলি পিডিএফ করতে পারবেন না এবং প্রথমে পাঠটি না বের করে নির্ভরযোগ্য উত্তরের জন্য আশা করতে পারেন ।


5
pdfgrepবিদ্যমান থাকা বিবেচনা করে (উপরে দেখুন), একটি ফ্ল্যাট "না" ভুল।
জোনাথন ক্রস

6

রিকোল পিডিএফ অনুসন্ধান করতে পারে। এটি নিয়মিত এক্সপ্রেশন সমর্থন করে না, তবে এতে প্রচুর অন্যান্য অনুসন্ধান বিকল্প রয়েছে, সুতরাং এটি আপনার প্রয়োজনের সাথে খাপ খায়।


5

আপনি stringsপ্রথমে এটি পাইপ করতে পারেন : -

cat file.pdf | strings | grep <...etc...>

8
শুধু ব্যবহার করুন strings file.pdf | grep <...>, আপনার প্রয়োজন নেইcat
ফুনেহে

হ্যাঁ - আমার মন স্ট্রিমগুলির সাথে আরও ভাল কাজ করছে বলে মনে হচ্ছে ... :-)
অ্যান্ডি স্মিথ

12
পাঠ্যকে সংকুচিত করা হলে এটি কাজ করবে না, যা বেশিরভাগ সময়।
আকিররা

6
এমনকি পাঠ্যটি সংকুচিত থাকলেও, এটি সাধারণত বাক্যগুলির ছোট ছোট টুকরো (এমনকি পুরো শব্দগুলিও হয় না!) ফর্ম্যাটিংয়ের তথ্যের সাথে সূক্ষ্মভাবে মিলে যায়। stringsবা খুব বন্ধুত্বপূর্ণ নয় grep
জান্ডার

এর জন্য স্ট্রিং ব্যবহার করা কাজ করবে না কেন আপনি অন্য কোনও কারণের কথা ভাবতে পারেন? আমি খুঁজে পেয়েছি যে স্ট্রিংগুলি ব্যবহার করা কিছু পিডিএফগুলিতে কাজ করে তবে অন্যদের জন্য নয়।
ঘন্টাব্যাক

3

সাধারণ রিসোর্স গ্রেপ টুল ক্রগ্রিপ দেখুন যা পিডিএফ ফাইলগুলির মধ্যে অনুসন্ধানকে সমর্থন করে।

এটি আর্কাইভ, ডাটাবেস টেবিল, চিত্র মেটা-ডেটা, পিওএম ফাইল নির্ভরতা এবং ওয়েব সংস্থানগুলিতে নেস্টেড সামগ্রী যেমন এবং পুনরাবৃত্ত অনুসন্ধান সহ এর সংমিশ্রণের মতো অন্যান্য সংস্থানগুলি অনুসন্ধান করার অনুমতি দেয়।


2

এটা চেষ্টা কর

find /path -iname *.pdf -print0 | for i in `xargs 0`; do echo $i; \
    pdftotext "$i" - | grep pattern; done

লাইনগুলি মুদ্রণের জন্য পিডিএফের ভিতরে প্যাটার্নটি ঘটে


2

আপনার পিডিএফ-ফাইল যুক্ত ফোল্ডারে সিডি করুন এবং তারপরে ..

pdfgrep 'pattern' your.pdf

অথবা আপনি যদি কেবল এক পিডিএফ-ফাইলের চেয়ে বেশি অনুসন্ধান করতে চান (যেমন আপনার ফোল্ডারের সমস্ত পিডিএফ-ফাইলগুলিতে)

pdfgrep 'pattern'  `ls *.pdf`

অথবা

pdfgrep 'pattern' $(ls *.pdf)

কেন পৃথিবীতে আপনি প্যারামিটারগুলিতে ফাইলের নাম রাখতে এলএস ব্যবহার করেন? এটা তোলে না শুধুমাত্র ধীর কিন্তু একটা খারাপ ধারণা ব্যবহার lsঅন্যান্য কমান্ড ইনপুট হিসাবে আউটপুট । কেবলমাত্র pdfgrep 'pattern' *.pdfযথেষ্ট
ফুক্লিভি

1

স্ট্যাকওভারফ্লোতে একটি সদৃশ প্রশ্ন রয়েছে। সেখানকার লোকেরা হরিশদের পরিবর্তনের প্রস্তাব দেয় 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


আমি মনে করি যে আপনি উল্লেখ করছেন একই উত্তরটিতে মন্তব্য (বা সম্পাদনা) হিসাবে রেখে দেওয়া ভাল হত।
বার্নহার্ড

0

বর্তমান ডিরেক্টরিতে পিডিএফ অনুসন্ধানের জন্য এখানে একটি দ্রুত স্ক্রিপ্ট রয়েছে:

#!/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 \;

0

আমি ধরে নিলাম আপনার অর্থ টিপি এটি ডিস্কে রূপান্তরিত করে না, আপনি এগুলিতে রূপান্তর করতে পারেন 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 {}

0

আপনি যদি পিডিএফ নাম / বৈশিষ্ট্যগুলি ... বা সাধারণ স্ট্রিংগুলি সংক্ষেপিত বা এনকোডড না করে সন্ধান 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

0

আপনি যদি জিনোম ব্যবহার করছেন তবে জিপিডিএফ আপনার যা প্রয়োজন তা হতে পারে! পরীক্ষা করে দেখুন এই ক্ষেত্রে যদি আপনার গুহ্নোম ব্যবহার করছেন না হবে। এটি সিএলআই পিডিএফ দর্শকদের একটি তালিকা পেয়েছে। তারপরে আপনি grepকিছু প্যাটার্ন সন্ধান করতে ব্যবহার করতে পারেন ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.