مصطفی عباسی
مصطفی عباسی
خواندن ۳ دقیقه·۴ سال پیش

تبدیل سریع PDFهای طولانی یا عکس به متن فارسی


خب مدت ها بود که تو ویرگول ثبت نام کرده بودم و پست های اینجا رو میخوندم، چند روز پیش به یک مشکلی برخوردم و جوابش رو از یکی از همین پست ها پیدا کردم، در عین حال تو حل این مشکل چیزهای بیشتری هم فهمیدم و این شد که گفتم بیام و اولین پست خودم رو اینجا بنویسم تا تونسته باشم با این تجربه کمکی به بقیه هم کرده باشم :)
خب اول از همه لطفا پستی که این پایین میزارم رو بخونید چون چیزی که میخوام در ادامه بگم یه جورایی ادامه این مطلبه! از نویسنده این مطلب هم تشکر میکنم برای آموزش خوبی که نوشته:

https://virgool.io/@mrashidi/persian-ocr-made-easy-aulili3tlhqa

قصد من این بود که یک جزوه 200 صفحه ای به صورت PDF رو که در واقع اسکن شده بود رو به ورد تبدیل کنم تا کلیدواژه هایی که مدنظرمه رو توش سرچ کنم، طبیعتا میتونید این متن رو ویرایش کنید یا هر کار دیگه ای که میشه هم روش انجام بدید. این شد که یه مقداری سرچ کردم تا ببینم چطور میشه فرایندی که تو پست گفته شده رو با سرعت بیشتری انجام داد، چون تبدیل تک به تک عکس به گوگل داک و سیو کردنش و همچنین چسبوندن تک به تک فایل های وردی که در نهایت به دست میان به همدیگه خیلی وقت گیره و شاید برای یه جزوه 200 صفحه ای بالای 5 ساعت زمان ببره.

من در ادامه سه تا راهکار مختلف رو توضیح میدم که خیلی هم ساده هستن و با انجامشون می تونید تا 90 درصد و حتی بیشتر تو زمانتون صرفه جویی کنید :)

برای اتوماتیک شدن فرایند تبدیل عکس ها به Google Docs (همون مرحله ای که عکس رو با راست کلیک روش و open with Google Docs باز می کنید) می تونید از سرویس گوگل اسکریپت استفاده کنید.

گوگل اسکریپت سرویسی هست که باهاش میشه از طریق API سرویس های مختلف گوگل مثل یوتیوب و جیمیل و درایو و... برای یه سری کارها اسکریپت نوشت و امکانات جدیدی رو به این سرویس ها اضافه کرد یا اون هارو به صورت اتوماتیک در آورد.

روند کار به این صورته که اول از همه به آدرس script.google.com میرید (بهتره این مرحله رو با قندشکن انجام بدید!)

وارد حساب گوگل بشید (حسابی که تو گوگل درایوش عکس هایی رو که قراره تبدیل کنید از قبل آپلود کردید)، حالا روی دکمه New Project کلیک کنید و کدهایی که از قبل اونجا نوشته شده رو پاک کنید و اسکریپت زیر رو که به زبان جاوا اسکریپت نوشته شده جایگزین کنید:

function convertJPGtoGoogleDocs() { var srcfolderId = &quot18FxU_rFxC0KsTnbjAjPVAqoZ7J3raChR&quot // <--- Please input folder ID. var dstfolderId = srcfolderId; // <--- If you want to change the destination folder, please modify this and insert destination folder ID. var files = DriveApp.getFolderById(srcfolderId).getFilesByType(MimeType.JPEG); while (files.hasNext()) { var file = files.next(); Drive.Files.insert({title: file.getName(), parents: [{id: dstfolderId}]}, file.getBlob(), {ocr: true}); } }

حالا باید یه سری کارها رو انجام بدید تا بتونید از این اسکریپت استفاده کنید:

Google Script
Google Script

اول اینکه باید مقدار متغیر srcfolderId رو تغییر بدید به ID پوشه ای توی گوگل درایو که توش عکس هارو ریختید (نگران نباشید در ادامه میگم چطوری)، برای اینکار پوشه های مختلفی درست می کنید و توش حداکثر 30-40 تا عکس می ریزید (دلیل اینکار رو در ادامه میگم چیه)، به عنوان مثال اگر کلا 200 تا عکس دارید، 40 تا عکس اول تو پوشه اول، 40 تا عکس دوم تو پوشه دوم و... تا جایی که 5 تا پوشه مختلف درست میشه و هر کدوم هم 40 تا عکس توشونه (واضحه که اگر تعداد عکس هاتون زیر 30-40 تاست میتونید تو یه پوشه هم اینکارو انجام بدید)


زمانی که بعدا اسکریپت رو اجرا کردید، فایل های Google Docs تولید شده، تو پوشه ای که توش همون عکسای اولیه هستن ریخته میشه (دلیلش اینه مقدار متغیر dstfolderId یا همون "پوشه مقصد" رو با مقدار متغیر srcfolderId یا "پوشه مبدا" تو اسکریپت مساوی قرار دادیم)، اگر میخواین فایل های تولید شده از پوشه های مختلف تو یه پوشه جداگانه و واحد ذخیره بشن، میتونید یه پوشه جدید توی گوگل درایو ایجاد کنید و ID اون پوشه رو جلوی متغیر dstfolderId قرار بدید.

برای اینکه بتونید ID هر پوشه توی گوگل درایو رو به دست بیارید فقط کافیه اون پوشه رو باز کنید و ID تو URL هستش به این صورت:

این ID رو بین دو تا کوتیشن مارک (") قرار میدید و یه چیزی مثل "18FsU_rFxC0KsTnbjAjPVAqoZ7J3raChR" به دست میاد. (هر فولدر ID متفاوتی داره)

این IDهای به دست اومده رو جلوی srcfolderId قرار می دید یا در صورتی که خواستین برای فایل های به دست اومده یه پوشه واحد داشته باشین جلوی dstfolderId هم می تونید قرار بدید.

روی علامت دیسک کلیک می کنید تا اسکریپت ذخیره بشه، اگر نام اسکریپت رو وارد نکردید نامش رو هم ازتون می خواد و خب این رو هم یه چیز دلخواهی وارد کنید :)

حالا برید تو منو و بخش Resources و بعدش قسمت Advanced Google Services رو کلیک کنید، اسکرول کنید و سه تا گزینه Drive API و Drive Activity API v1 و Drive Activity API v2 رو on کنید.

روی Run کلیک می کنید تا اسکریپت اجرا بشه، اولین بار که اجراش می کنید نیاز داره تا بهش دسترسی به گوگل درایو بدید، ممکنه بهتون هشدار بده که اپلیکیشن تایید نشده، برای رفع این هم رو Advanced کلیک می کنید و (Go to My First Script (unsafe رو انتخاب می کنید. اگر آدرس فولدر مبدا و مقصد رو درست وارد کرده باشید اسکریپت باید بدون مشکل اجرا بشه و فایل های ورد رو تو پوشه مقصد داشته باشید.

حالا دلیلش چیه که گفتم برای هر 30 40 تا عکس باید یه پوشه داشته باشید؟ اولین بار که این اسکریپت رو اجرا کردم دیدم از 200 تا عکس حدودا 50 تاش تبدیل شدن و بقیش تبدیل نشدن، بعدش فهمیدم که اجرای هر اسکریپت یه محدودیت زمانی 6 دقیقه ای داره، دوباره اسکریپت رو اجرا کردم و دیدم از ادامه فایل هایی که تبدیل کرده شروع نمیکنه و دوباره از اولین عکس تبدیل میکنه که خب اینجوری هیچوقت از 50 تا عکس جلوتر نمیریم، این شد که یه خورده باهاش ور رفتم و فهمیدم برای عکس های 200-300 کیلوبایتی که من دارم تو 6 دقیقه میتونه حدودا 50 تارو تبدیل کنه، و خب از اونجایی که مشکلی هم پیش نیاد پوشه های 40 تایی درست کردم تا مطمئن بشم همه عکس ها تبدیل میشن، حالا اگر حجم عکس های شما کمتر باشه یا بیشتر، این عدد احتمالا تغییر میکنه و خودتون باید با آزمون و خطا به دستش بیارید، اما به عنوان رفرنس همون 30-40 تارو در نظر داشته باشید.

به این صورت اگر توی 5 تا فولدر 40 تایی عکس هاتون رو ذخیره کرده باشید، دفعه اول ID پوشه اول رو جایگزین میکنید تو اسکریپت و اجراش می کنید، دفعه دوم ID پوشه دوم و این کار رو تا پوشه پنجم ادامه می دید، طبیعتا اگر پوشه مقصد ساخته باشید هم نیاز نیست هر دفعه مقدارش رو تغییرش بدید چون قراره تمام فایل ها تو یه پوشه ذخیره بشن. تبدیل عکس ها هم که تموم شد پوشه مقصد رو در قالب یک فایل زیپ از گوگل درایو دانلود می کنید و یه جایی اکسترکتش کنید که بعدا باهاش کلی کار داریم!



حالا که تمام فایل های ورد تبدیل شده رو تو یه پوشه داریم، باید اونارو تک به تک به هم بچسبونیم تا یه فایل ورد کامل به دست بیاد که البته وقت گیره، می تونید این کار رو از طریق امکانی که خود مایکروسافت تو ورد اضافه کرده تو زمان خیلی کمتری انجام بدید.

روشش به این صورته که یه فایل ورد جدید درست کنید، روی تب Insert کلیک کنید بعدش روی Object کلیک می کنید و بعد هم Text from File رو انتخاب کنید. تو شکل زیر نشونش دادم:

الان فقط کافیه که فایل های ورد مورد نظرتون که اکسترکت کرده بودید رو هر چند تا که باشن انتخاب کنید و بعدش روی Insert کلیک کنید، اگر ترتیب اسم فایل ها درست بوده باشه باید پشت سر هم قرار بگیرن. (اسم فایل ها به صورت صعودی مثلا اولی 1 و بعدیش 2 و...) حالا میتونید به راحتی تو متن به دست اومده سرچ کنید و کارهاتون رو انجام بدید!




اما یه مسئله ای که هست اینه که وقتی تو گوگل درایو یک عکس به یک متن تبدیل میشه در کنار متنی که به دست میاد، عکس هم تو صفحه اول باقی میمونه، وقتی هم همه فایل های word رو جایگذاری کردید طبیعتا همه این عکس ها هم باهاش جایگذاری میشن، اگر میخواین از دست این عکس ها هم با چند تا دکمه خلاص بشید و تک تک حذفشون نکنید می تونید از این روش توی فایل ورد نهایی استفاده کنید:

اول Ctrl+H رو بزنید، همچین صفحه ای باز میشه:

روی باکس Find what کلیک کنید، بعدش More رو بزنید.

روی Special کلیک می کنید و Graphic رو انتخاب می کنید.

متنی توی باکس Find what نوشته میشه، روی Replace All کلیک می کنید و تمام عکس ها به همین راحتی حذف میشن!

البته من توصیه میکنم که این کار رو انجام ندید، دلیلش اینه که ممکنه متنی که از روی عکس "یک" صفحه تبدیل میشه در واقع بیشتر یا کمتر از "دقیقا یک صفحه" بشه و اگر به این موضوع توجه نکنید و تمام عکس هارو با هم حذف کنید یک مقدار صفحه ها ممکنه به هم بریزن و دلیل دیگه هم این هست که بهتره اول عکس رو نگاهی بندازید و ببینید مشکلی تو تبدیل وجود نداشته باشه و اگر هست درستش کنید و بعد عکس رو حذف کنید. این نکته رو هم بد نیست بدونید که اگر توی عکس اصلی جدول یا نمودار و هر چیز مشابه بهش وجود داشته باشه به درستی تبدیل نمیشه و حتما باید بعدا چک و اصلاحش کنید.

خب امیدوارم از این آموزش خوشتون اومده باشه، اگر روشی رو میشناسید که از این سریعتر هست خوشحال میشم معرفی کنید :)

اگر هم هر جایی به مشکل خوردید فقط کافیه تو قسمت نظرات بگید تا کمکتون کنم.


تبدیل متنocrتبدیل عکس به متن
برنامه نویس، علاقمند به سخت افزار و دانشجوی مهندسی کامپیوتر، توییتر من: twitter.com/mostafa_abbacc
شاید از این پست‌ها خوشتان بیاید