যেহেতু বিভিন্ন প্রকাশকরা পিডিএফগুলিকে "চিহ্নিত" করার বিভিন্ন পদ্ধতি ব্যবহার করে তা আপনাকে চিহ্নিত করে বিবেচনা না করে তুলনা করা নিশ্চিত করতে হবে।
আপনি যদি একই বার বার একই পিডিএফ ডাউনলোড করেন তবে এটি যেমন আইপি এবং / অথবা তারিখ-সময়-স্ট্যাম্পের সাথে চিহ্নিত হিসাবে আপনার পরামর্শ অনুসারে চিহ্নিত হয়ে থাকে তবে ইতিমধ্যে ডাউনলোড করা সমস্ত পিডিএফ এর সাথে একটি নতুন পিডিএফ তুলনা করার জন্য আপনার একটি দক্ষ পদ্ধতিও প্রয়োজন। আপনি একটি সময় গ্রহণকারী তুলনা ব্যবস্থাটি ব্যবহার করতে চান না যা প্রতিটি নতুন পিডিএফকে ইতিমধ্যে ডাউনলোড করা অনেক পিডিএফ এর সাথে তুলনা করে
আপনার যা দরকার তা হ'ল একটি ইউটিলিটি যা সম্ভাব্য প্রতিটি চিহ্নকে আলাদা করে ফেলে এবং বাকী ডেটার একটি হ্যাশ তৈরি করে। আপনাকে একটি হ্যাশ ফাইল ফাইলের মানচিত্র রাখতে হবে, যা একটি সরল ফাইলে থাকতে পারে এবং যদি কোনও গণনা করা হ্যাশ ফাইলটিতে ইতিমধ্যে থাকে তবে আপনার একটি সদৃশ রয়েছে (এবং এটি মুছুন বা যা প্রয়োজন প্রয়োজন করুন) এবং যদি এখনও হ্যাশটি না থাকে সেখানে, আপনি হ্যাশ এবং ফাইলের নাম যুক্ত করুন। ফাইলটি দেখতে এমন কিছু দেখাচ্ছে:
6fcb6969835d2db7742e81267437c432 /home/anthon/Downloads/explanation.pdf
fa24fed8ca824976673a51803934d6b9 /home/anthon/orders/your_order_20150320.pdf
মূল ফাইলটির তুলনায় এই ফাইলটি অযত্নে ছোট। আপনার যদি কয়েক মিলিয়ন পিডিএফ থাকে তবে আপনি এই ডেটাবেস কোনও ডেটাবেজে সংরক্ষণের বিষয়টি বিবেচনা করতে পারেন। দক্ষতার জন্য আপনি সেখানে ফাইলের আকার এবং পৃষ্ঠাগুলির সংখ্যা অন্তর্ভুক্ত করতে চাইতে পারেন pdfinfo | egrep -E '^Pages:' | grep -Eo '[0-9]*'
।
উপরের চিহ্নগুলি মুছে ফেলতে এবং হ্যাশ তৈরি করতে সমস্যাটিকে ধাক্কা দেয়। যদি আপনি জানেন যে হ্যাশ উত্পন্ন করার রুটিনটি (যেমন আপনি প্রোগ্রামগুলি ডাউনলোডগুলি করেন তবে) পিডিএফটি কোথা থেকে আসে তবে আপনি তার ভিত্তিতে হ্যাশ প্রজন্মকে সূক্ষ্ম-টিউন করতে পারেন। তবে তা ছাড়াও হ্যাশ উত্পাদনের বেশ কয়েকটি সম্ভাবনা রয়েছে:
- যদি শিরোনাম এবং লেখকের মেটাডেটা খালি না থাকে এবং "অ্যাক্রোব্যাট" বা "পিডিএফ" এর মতো অ-নির্দিষ্ট স্ট্রিং অন্তর্ভুক্ত না করে আপনি কেবল লেখক এবং শিরোনাম তথ্যের ভিত্তিতে হ্যাশ তৈরি করতে পারেন।
pdfinfo -E file.pdf | grep -E '^(Author:)|(Title:) | md5sum
হ্যাশ পেতে ব্যবহার করুন । আপনি হ্যাশ গণনা করার পাশাপাশি পৃষ্ঠাগুলির সংখ্যাও অন্তর্ভুক্ত করতে পারেন ( আউটপুটে ' Pages:
' pdfinfo
)।
- যদি পূর্ববর্তী নিয়মটি কাজ করে না এবং পিডিএফটিতে চিত্র রয়েছে, চিত্রগুলি বের করুন এবং সম্মিলিত চিত্রের ডেটাতে একটি হ্যাশ তৈরি করুন। চিত্রগুলি যদি "জো ব্যবহারকারীর কাছে লাইসেন্স দেওয়া" এর মতো পাদলেখ বা শিরোলেখগুলিতে লেখা থাকে তবে হ্যাশ গণনার আগে একটি X সংখ্যক রেখা উপরের বা নীচে গঠন করে। যদি সেই চিহ্নগুলি কিছু বড় চিঠিযুক্ত ধূসর ব্যাকগ্রাউন্ডের পাঠ্যে থাকে তবে এটি অবশ্যই কাজ করবে না, যদি না আপনি পিক্সেলগুলি পুরোপুরি কালো না করে ফিল্টার করেন না (তার জন্য আপনি ব্যবহার করতে পারেন
imagemagick
)। আপনি pdfimages
অস্থায়ী ফাইলে চিত্রের তথ্যটি বের করতে ব্যবহার করতে পারেন ।
- পূর্ববর্তী নিয়মগুলি যদি কাজ না করে (কারণ কোনও চিত্র নেই) তবে আপনি
pdftext
পাঠ্যটি বের করতে, চিহ্নটি ফিল্টার করে (যদি আপনি কিছুটা ফিল্টার করে থাকেন তবে এটি কোনও সমস্যা নয়) এবং তারপরে হ্যাশ তৈরি করে যে।
পুরানো ফাইলের ফাইলের আকারটি হ্যাশের মাধ্যমে পাওয়া যায় এবং নতুন ফাইলের সাথে নির্দিষ্ট মার্জিনের মধ্যে রয়েছে কিনা তা আপনি তুলনা করতে পারবেন Additionally স্ট্রিংগুলিতে সংক্ষিপ্তসার এবং ইফারেন্সের (আইপি / তারিখ-সময়-স্ট্যাম্প) কেবলমাত্র এক শতাংশেরও কম পার্থক্য হতে পারে।
আপনি যদি হ্যাশ নির্ধারণের সময় প্রকাশক যে পদ্ধতিটি ব্যবহার করেন তা যদি আপনি জানেন তবে আপনি উপরের "ডান" পদ্ধতিটি সরাসরি প্রয়োগ করতে পারেন, তবে তা ছাড়া আপনি মেটাডেটা পরীক্ষা করতে পারেন এবং কিছু তাত্পর্য প্রয়োগ করতে পারেন বা কোনও ফাইলের চিত্রের সংখ্যা নির্ধারণ করতে পারেন এবং পৃষ্ঠাগুলির সংখ্যার সাথে এটি তুলনা করুন (যদি তারা কাছাকাছি থাকে তবে আপনার সম্ভবত স্ক্যানের সমন্বিত একটি নথি রয়েছে)। pdftext
স্ক্যান করা চিত্র পিডিএফগুলিতে একটি স্বীকৃত আউটপুটও রয়েছে।
থেকে কাজ করার ভিত্তি হিসাবে আমি পাইথন প্যাকেজ তৈরি করেছি যা বিটবাকেটে রয়েছে এবং / অথবা পাইপিআই ব্যবহার করে ইনস্টল করা যেতে পারে pip install ruamel.pdfdouble
। এটি আপনাকে pdfdbl
কমান্ডটি সরবরাহ করে যা মেটাডেটা, উত্তোলিত চিত্র বা পাঠ্যের উপরে উপরে বর্ণিত স্ক্যানিংটি করে।
এটি চিহ্নিতকরণগুলির (এখনও) কোনও ফিল্টারিং করে না , তবে রিডমে এটি যুক্ত করার জন্য কোন (দুটি) পদ্ধতির উন্নতি করতে হবে তা বর্ণনা করে।
অন্তর্ভুক্ত রিডমি:
ruamel.pdfdouble
এই প্যাকেজটি pdfdbl
কমান্ড সরবরাহ করে :
pdfdbl scan dir1 dir2
এটি আর্গুমেন্ট হিসাবে সরবরাহিত ডিরেক্টরিগুলি নীচে চলে যাবে এবং পিডিএফ পাওয়া ফাইলগুলির জন্য, (ক্রম অনুযায়ী) একটি হ্যাশ তৈরি করবে:
- অনন্য হলে মেটাডেটা
- চিত্র যদি ইমেজ সংখ্যা
- পাঠ
এটি ধরে নিয়েছে যে পপ্প্লার-ইউপেজ প্যাকেজ থেকে পিডিফিনফো, পিডিফাইমেজ এবং পিডিফোটটেক্সট আভিএলযোগ্য।
একটি "ডাটাবেস" তৈরি করা হয় ~/.config/pdfdbl/pdf.lst
যার বিপরীতে আরও স্ক্যানগুলি পরীক্ষা করা হয়।
চিহ্নগুলি সরানো হচ্ছে
ইন ruamel/pdfdouble/pdfdouble.py
সেখানে দুটি পদ্ধতি থেকে PDF- যে তাদের কম অনন্য করুন এবং বিভিন্ন হ্যাশ আছে কার্যত একই ফাইল করা মধ্যে চিহ্ন ফিল্টার করার জন্য উন্নত করা যেতে পারে।
পাঠ্যের জন্য পদ্ধতিটি PdfData.filter_for_marking
যুক্তিযুক্ত স্ট্রিং থেকে মুছে ফেলা এবং চিহ্নগুলি প্রসারিত করতে হবে এবং ফলাফলটি ফিরে আসতে হবে।
স্ক্যান করা চিত্রগুলির জন্য পদ্ধতিটি PdfData.process_image_and_update
উন্নত করা দরকার, উদাহরণস্বরূপ চিত্রগুলির নীচে এবং শীর্ষে এক্স লাইনগুলি কেটে ফেলে এবং সমস্ত কালো পিক্সেলকে সাদা করে সেট করে কোনও ধূসর ব্যাকগ্রাউন্ডের পাঠ্য সরিয়ে দিয়ে। এই ফাংশনটি .update()
ফিল্টারযুক্ত ডেটাতে পাসের পদ্ধতিটি ব্যবহার করে পাস করা হ্যাশ আপডেট করতে হবে ।
বিধিনিষেধ
বর্তমান "ডাটাবেস" নতুন লাইনে থাকা পাথগুলি পরিচালনা করতে পারে না
এই ইউটিলিটিটি বর্তমানে পাইথন ২.7।
আইপি কনফর্মিং স্ট্রিংপার্টগুলি পাইথনের re
মডিউলটির সাথে প্রতিস্থাপন করা যেতে পারে :
import re
IPre = re.compile("(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}"
"([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])")
x = IPre.sub(' ', 'abcd 132.234.0.2 ghi')
assert x == 'abcd ghi'