অন্যান্য উত্তরদাতারা ধরে নিলেন যে আপনি কোনও গ্রাফের রাস্টার ইমেজ নিয়ে কাজ করছেন। তবে আজকাল ভাল অনুশীলন হচ্ছে ভেক্টর আকারে গ্রাফ প্রকাশ করা। এই ক্ষেত্রে আপনি পুনরুদ্ধার করা তথ্যের অনেক বেশি নির্ভুলতা অর্জন করতে পারেন এবং এমনকি যদি আপনি ভেক্টর গ্রাফের কোডটি সরাসরি রাস্টার ইমেজে রূপান্তর না করেই কাজ করেন তবে পুনরুদ্ধারের ত্রুটিটি অনুমান করতে পারেন।
যেহেতু কাগজপত্রগুলি পিডিএফ ফাইল হিসাবে অনলাইনে প্রকাশিত হয়, তাই আমি ধরে নিয়েছি যে আপনার কাছে একটি পিডিএফ ফাইল রয়েছে যাতে আপনি এটি থেকে পুনরুদ্ধার করতে চান এমন ডেটা সহ ভেক্টর প্লট রয়েছে (সংখ্যাসূচক আকারে পান) এবং আনুমানিক পুনরুদ্ধারের ত্রুটি অনুমান করা যায়।
প্রথমত, পিডিএফ একটি ভেক্টর ফর্ম্যাট যা মূলত পাঠ্যগত (কোনও পাঠ্য সম্পাদক দ্বারা পড়া যেতে পারে)। সমস্যাটি হ'ল এটিতে (এবং প্রায় সবসময়) সংকুচিত ডেটা স্ট্রিম থাকতে পারে যা কোনও পাঠ্য সম্পাদক দ্বারা সেগুলি পড়ার জন্য সঙ্কুচিত হওয়া দরকার। এই সংকুচিত ডেটা স্ট্রিমগুলিতে সাধারণত আমাদের প্রয়োজনীয় তথ্য থাকে।
পাঠযোগ্য পিডিএফ কোড সহ পাঠ্য ডকুমেন্টে পিডিএফ ফাইল রূপান্তর করতে ডেটা স্ট্রিমগুলি সঙ্কুচিত করার বিভিন্ন উপায় রয়েছে। সম্ভবত সহজ উপায় হ'ল বিকল্প সহ বিনামূল্যে কিউপিডিএফ ইউটিলিটি ব্যবহার করা :--stream-data=uncompress
qpdf infile.pdf --stream-data=uncompress -- outfile.pdf
আরও কিছু উপায় এখানে এবং এখানে বর্ণিত হয়েছে ।
উত্পন্ন আউটফাইল.পিডিএফ একটি পাঠ্য সম্পাদক দ্বারা খোলা যেতে পারে। আপনি কী দেখছেন তা বোঝার জন্য এখন আপনার পিডিএফ রেফারেন্স ম্যানুয়ালটি 1.7 প্রয়োজন । এই মুহুর্তে আতঙ্কিত হবেন না! 226 - 227 পৃষ্ঠায় "টেবিল 4.9 পাথ নির্মাণ অপারেটরগুলি" তে বর্ণিত আপনাকে কেবল কয়েকটি অপারেটরই জানতে হবে The সবচেয়ে গুরুত্বপূর্ণ অপারেটরগুলি (প্রথম কলামে অপারেটরের জন্য সমন্বিত স্পেসিফিকেশন রয়েছে, দ্বিতীয়টিতে অপারেটর রয়েছে এবং তৃতীয়টি অপারেটরের নাম রয়েছে) ):
x y m moveto
x y l lineto
x y width height re rectangle
h closepath
বেশিরভাগ ক্ষেত্রে তথ্য পুনরুদ্ধারের জন্য এই চারটি অপারেটরকে জানা যথেষ্ট।
এখন আপনাকে কিছু প্রোগ্রামে আউটফাইল.পিডিএফ ফাইলটি পাঠ্য হিসাবে আমদানি করতে হবে যেখানে আপনি ডেটা ম্যানিপুলেট করতে পারবেন। আমি ম্যাথামেটিকার সাথে এটি কীভাবে করব তা দেখাব ।
ফাইলটি আমদানি করা হচ্ছে:
pdfCode = Import["outfile.pdf", "Text"];
এখন আমি সবচেয়ে সহজ কেস ধরে নিই: গ্রাফটিতে একটি লাইন থাকে যা অনেকগুলি দ্বি-পয়েন্ট খণ্ড নিয়ে গঠিত। এক্ষেত্রে লাইনের প্রতিটি বিভাগকে এভাবে এনকোড করা হয়:
268.79999 408.92975 m
272.39999 408.92975 l
পিডিএফ কোড থেকে এ জাতীয় সমস্ত বিভাগগুলি বের করা:
lines = StringCases[pdfCode,
StartOfLine ~~ x1 : NumberString ~~ " " ~~ y1 : NumberString ~~ " m\n" ~~
x2 : NumberString ~~ " " ~~ y2 : NumberString ~~ " l\n"
:> ToExpression@{{x1, y1}, {x2, y2}}];
সেগুলি ভিজ্যুয়ালাইজ করা:
Graphics[{Line[lines]}]
আপনি এই জাতীয় কিছু পান (আমি যে কাগজটির সাথে কাজ করছি তার মধ্যে চারটি গ্রাফ রয়েছে):
প্রতিটি দুটি সংলগ্ন অংশগুলি একটি বিন্দু ভাগ করে। সুতরাং এই ক্ষেত্রে আপনি সংলগ্ন অংশগুলির ক্রমগুলিকে পাথে পরিণত করতে পারেন:
paths = Split[lines, #1[[2]] == #2[[1]] &];
এখন আপনি সমস্ত পথ পৃথকভাবে কল্পনা করতে পারেন:
Graphics[{Line /@ paths}]
এই চিত্রটি থেকে আপনি যে পথটি সন্ধান করছেন (ডাবল-ক্লিক করে) নির্বাচন করতে পারেন, গ্রাফিক্স নির্বাচনটি অনুলিপি করতে এবং নতুন হিসাবে পেস্ট করতে পারেন Graphics
। এটিকে পিছনে রূপান্তর করার জন্য পয়েন্টগুলির তালিকায় আপনি উপাদানটি গ্রহণ করেন {1, 1, 1}
। এখন আমাদের পয়েন্টগুলি গ্রাফের স্থানাঙ্ক সিস্টেমে নয় পিডিএফ ফাইলের সমন্বিত সিস্টেমে রয়েছে। তাদের মধ্যে সম্পর্ক স্থাপন করা আমাদের দরকার।
উপরের প্লট থেকে আপনি হাতে হাতে টিক্স নির্বাচন করুন ( Shift
একাধিক নির্বাচনের জন্য ধারণ করে ), তারপরে সেগুলি অনুলিপি করুন এবং নতুন হিসাবে আটকান Graphics
। অনুভূমিক টিক্সের স্থানাঙ্কগুলি কীভাবে উত্তোলন করতে পারেন তা এখানে:
এখন টিক্সের মধ্যে পার্থক্যগুলি পরীক্ষা করুন:
Differences[reHorTicks]
এই পার্থক্যগুলি থেকে আপনি দেখতে পাচ্ছেন পিডিএফ ফাইলে টিকের অবস্থান কতটা সুনির্দিষ্ট। এটি পিডিএফ ফাইলের মধ্যে অন্তর্ভুক্ত ভেক্টর গ্রাফে মূল ডেটাপয়েন্টগুলিকে রূপান্তর করে ত্রুটির একটি অনুমান দেয়। টিক্স পজিশনিংয়ে প্রশংসনীয় ত্রুটি থাকলে আপনি টিকের স্থানাঙ্ককে একটি রৈখিক মডেলকে ফিট করে ত্রুটিটি হ্রাস করতে পারেন। এই লিনিয়ার ফাংশনটি এখন পথের পয়েন্টগুলির মূল স্থানাঙ্কগুলি পেতে ব্যবহার করা যেতে পারে (এটি প্লটের সমন্বয় ব্যবস্থাতে রয়েছে)।