مقدمه ای بر استخراج جدول
با افزایش تعداد برنامهها، نرمافزارها و پلتفرمهای آنلاین، میزان دادههای جمعآوریشده روز به روز به شدت در حال افزایش است.
برای مدیریت/دسترسی موثر به این داده های عظیم، توسعه ابزارهای استخراج اطلاعات ارزشمند ضروری است.
یکی از حوزه های فرعی که در زمینه استخراج اطلاعات می طلبد، استخراج جداول از تصاویر یا تشخیص داده های جدولی از فرم ها، فایل های PDF و اسناد است.
استخراج جدول وظیفه شناسایی و تجزیه اطلاعات جدول در یک سند است.
تصور کنید اسناد زیادی با داده های جدولی دارید که برای پردازش بیشتر باید استخراج کنید. به طور معمول، می توانید آنها را به صورت دستی (روی کاغذ) کپی کنید یا در برگه های اکسل بارگذاری کنید.
با این حال، با نرم افزار جدول OCR، می توانید به طور خودکار جداول را شناسایی کرده و تمام داده های جدولی را از اسناد در یک حرکت استخراج کنید. این باعث صرفه جویی در زمان و کار مجدد می شود.
در این مقاله ابتدا به نحوه استخراج خودکار جداول از تصاویر یا اسناد توسط نانو شبکه ها می پردازیم. سپس برخی از تکنیک های محبوب DL را برای شناسایی و استخراج جداول در اسناد پوشش خواهیم داد.
آیا می خواهید داده های جدولی را از فاکتورها، رسیدها یا هر نوع سند دیگری استخراج کنید؟ Nanonets را بررسی کنید استخراج جدول PDF برای استخراج داده های جدولی نمایش نسخه ی نمایشی برای کسب اطلاعات بیشتر در مورد خودکارسازی استخراج جدول.
فهرست مندرجات
استخراج جدول از تصویر با OCR جدول نانو شبکه
-
ثبت نام برای یک حساب Nanonets رایگان
- تصاویر/فایل ها را در مدل OCR جدول نانوشبکه ها آپلود کنید
- Nanonets به طور خودکار تمام داده های جدولی را شناسایی و استخراج می کند
- ویرایش و بررسی داده ها (در صورت نیاز)
- داده های پردازش شده را به صورت Excel، csv یا JSON صادر کنید
می خواهم به داده ها را از PDF خراش دهید اسناد، تبدیل جدول PDF به اکسل or استخراج خودکار جدول? پیدا کردن چگونه نانو شبکه ها اسکراپر پی دی اف or تجزیه کننده PDF می تواند کسب و کار شما را برای بهره وری بیشتر تقویت کند.
Nanonets Table OCR API
La Nanonets OCR API به شما امکان می دهد مدل های OCR را با سهولت بسازید. برای افزایش دقت مدل OCR لازم نیست نگران پردازش قبلی تصاویر خود باشید یا نگران تطبیق الگوها یا ساخت موتورهای مبتنی بر قاعده باشید.
میتوانید دادههای خود را آپلود کنید، آنها را حاشیهنویسی کنید، مدل را برای آموزش تنظیم کنید و منتظر دریافت پیشبینیها از طریق یک UI مبتنی بر مرورگر باشید، بدون اینکه حتی یک خط کد بنویسید، نگران GPUها باشید یا با استفاده از مدلهای یادگیری عمیق، معماریهای مناسب برای تشخیص جدول خود پیدا کنید.
همچنین میتوانید پاسخهای JSON هر پیشبینی را به دست آورید تا آن را با سیستمهای خود ادغام کنید و برنامههای مبتنی بر یادگیری ماشینی را که بر اساس الگوریتمهای پیشرفته و زیرساخت قوی ساخته شدهاند، بسازید.
https://nanonets.com/documentation/
آیا کسب و کار شما با تشخیص داده یا متن در اسناد دیجیتال، PDF یا تصاویر سروکار دارد؟ آیا فکر کرده اید که چگونه داده های جدولی را استخراج کنید، استخراج متن از تصاویر , استخراج داده ها از PDF or استخراج متن از PDF دقیق و کارآمد؟
چه کسی استخراج جدول را مفید خواهد یافت
همانطور که در بخش قبل بحث شد، جداول اغلب برای نمایش داده ها در قالب تمیز استفاده می شوند. ما میتوانیم آنها را اغلب در چندین حوزه ببینیم، از سازماندهی کارمان با ساختاربندی دادهها در جداول گرفته تا ذخیره داراییهای عظیم شرکتها. سازمان های زیادی وجود دارند که هر روز باید با میلیون ها جدول سر و کار داشته باشند. برای تسهیل چنین کارهای پرزحمت انجام همه کارها به صورت دستی، باید به تکنیک های سریعتر متوسل شویم. اجازه دهید در مورد چند مورد استفاده بحث کنیم استخراج جداول می تواند ضروری باشد:
موارد استفاده شخصی
La استخراج جدول این فرآیند می تواند برای موارد استفاده شخصی کوچک نیز مفید باشد. گاهی اوقات ما اسناد را روی تلفن همراه ضبط می کنیم و بعداً آنها را در رایانه خود کپی می کنیم. به جای استفاده از این فرآیند، میتوانیم اسناد را مستقیماً ضبط کنیم و آنها را به عنوان قالبهای قابل ویرایش در قالبهای سفارشی خود ذخیره کنیم. در زیر چند مورد استفاده در مورد اینکه چگونه می توانیم استخراج جدول را در روال شخصی خود قرار دهیم آورده شده است -
اسکن اسناد روی تلفن: ما اغلب تصاویر جداول مهم را در گوشی می گیریم و آنها را ذخیره می کنیم، اما با تکنیک استخراج جدول، می توانیم تصاویر جداول را ضبط کنیم و آنها را مستقیماً در فرمت جدولی یا در اکسل یا صفحات گوگل ذخیره کنیم. با این کار، نیازی به جستجوی تصاویر یا کپی محتوای جدول در هیچ فایل جدیدی نداریم، در عوض، میتوانیم مستقیماً از جداول وارد شده استفاده کرده و کار بر روی اطلاعات استخراج شده را شروع کنیم.
اسناد به HTML: در صفحات وب، اطلاعات زیادی را می یابیم که با استفاده از جداول ارائه شده است. آنها در مقایسه با دادهها به ما کمک میکنند و به صورت سازمانیافته به ما یادداشت سریعی درباره اعداد میدهند. با استفاده از فرآیند استخراج جدول، میتوانیم اسناد PDF یا تصاویر JPG/PNG را اسکن کنیم و اطلاعات را مستقیماً در قالب جدولی که خود طراحی کردهایم بارگیری کنیم. ما میتوانیم اسکریپتهایی بنویسیم تا جداول اضافی را بر اساس جداول موجود اضافه کنیم و در نتیجه اطلاعات را دیجیتالی کنیم. این به ما در ویرایش محتوا کمک می کند و فرآیند ذخیره سازی را تسریع می کند.
موارد استفاده صنعتی
صنایع مختلفی در سرتاسر جهان وجود دارند که به شدت بر اساس اسناد و مدارک کار می کنند، به ویژه در بخش های بانکی و بیمه. از ذخیره جزئیات مشتریان گرفته تا توجه به نیازهای مشتریان، جداول به طور گسترده مورد استفاده قرار می گیرند. این اطلاعات مجدداً به عنوان یک سند (کپی چاپی) به شعب مختلف برای تأیید ارسال می شود که در آن گاهی اوقات، عدم ارتباط می تواند منجر به خطا در هنگام گرفتن اطلاعات از جداول شود. در عوض، استفاده از اتوماسیون در اینجا، زندگی ما را بسیار آسانتر میکند. هنگامی که دادههای اولیه جمعآوری و تأیید شد، میتوانیم مستقیماً آن اسناد را در جداول اسکن کنیم و روی دادههای دیجیتالی شده بیشتر کار کنیم. بگذریم از کاهش زمان مصرف و ایرادات، میتوانیم مشتریان را از زمان و مکان پردازش اطلاعات مطلع کنیم. بنابراین، این امر قابلیت اطمینان داده ها را تضمین می کند و راه ما را برای مقابله با عملیات ساده می کند. حال بیایید سایر موارد استفاده ممکن را بررسی کنیم:
کنترل کیفیت: کنترل کیفیت یکی از خدمات اصلی است که صنایع برتر ارائه می کنند. معمولاً در داخل و برای ذینفعان انجام می شود. به عنوان بخشی از این، تعداد زیادی فرم بازخورد وجود دارد که از مصرف کنندگان برای استخراج بازخورد در مورد خدمات ارائه شده جمع آوری می شود. در بخش های صنعتی، آنها از جداول برای یادداشت چک لیست ها و یادداشت های روزانه استفاده می کنند تا ببینند خطوط تولید چگونه کار می کنند. همه اینها را می توان در یک مکان واحد با استفاده از استخراج جدول به راحتی مستند کرد.
مسیر دارایی ها: در صنایع تولیدی، مردم از جداول کدگذاری شده برای پیگیری شرکتهای تولید شده مانند فولاد، آهن، پلاستیک و غیره استفاده میکنند. هر کالای تولیدی با یک شماره منحصر به فرد برچسبگذاری میشود که در آن از جداول برای پیگیری اقلام تولید شده و تحویل شده هر روز استفاده میکنند. اتوماسیون می تواند به صرفه جویی در زمان و دارایی های زیادی از نظر جایابی نادرست یا ناسازگاری داده ها کمک کند.
موارد استفاده تجاری
چندین صنعت تجاری وجود دارند که بر روی برگه های اکسل و فرم های آفلاین اجرا می شوند. اما در یک مقطع زمانی، جستجو در میان این برگه ها و فرم ها دشوار است. اگر به صورت دستی این جداول را وارد کنیم وقت گیر است و احتمال اینکه داده ها اشتباه وارد شوند زیاد خواهد بود. از این رو استخراج جدول جایگزین بهتری برای حل موارد استفاده تجاری است زیرا موارد زیر کمی هستند.
فاکتور اتوماسیون: صنایع کوچک و بزرگ زیادی وجود دارد که فاکتورها هنوز در قالب های جدولی تولید می شوند. اینها صورتهای مالیاتی تضمینشده مناسبی را ارائه نمیکنند. برای غلبه بر چنین موانعی، می توانیم از استخراج جدول برای تبدیل همه استفاده کنیم فاکتورها به یک فرمت قابل ویرایش و در نتیجه، آنها را به نسخه جدیدتر ارتقا دهید.
اتوماسیون فرم: فرمهای آنلاین با کمک به کسبوکارها در جمعآوری اطلاعات مورد نیاز و اتصال همزمان آن به سایر پلتفرمهای نرمافزاری که در گردش کارشان تعبیه شدهاند، این روش آزمایششده و واقعی را مختل میکنند. علاوه بر کاهش نیاز به وارد کردن دستی داده ها (با ورود خودکار داده ها) و ایمیل های بعدی، استخراج جدول می تواند هزینه چاپ، پست، ذخیره سازی، سازماندهی و از بین بردن جایگزین های کاغذی سنتی را کاهش دهد.
آیا مشکل OCR در ذهن دارید؟ می خواهید دیجیتالی کنید فاکتورها، پی دی اف یا پلاک؟ سر به نانوت و ساخت مدل های OCR به صورت رایگان!
یادگیری عمیق در عمل
یادگیری عمیق بخشی از خانواده وسیعتر روشهای یادگیری ماشینی مبتنی بر شبکههای عصبی مصنوعی است.
شبکه عصبی چارچوبی است که روابط زیربنایی در داده های داده شده را از طریق فرآیندی که نحوه عملکرد مغز انسان را تقلید می کند، تشخیص می دهد. آنها دارای لایه های مصنوعی مختلفی هستند که داده ها از طریق آنها عبور می کنند و در آنجا با ویژگی ها آشنا می شوند. معماریهای مختلفی مانند Convolution NN، NNهای تکراری، Autoencoder، Generative Adversarial NN برای پردازش انواع مختلف دادهها وجود دارد. اینها پیچیده هستند اما عملکرد بالایی را برای مقابله با مشکلات در زمان واقعی به تصویر می کشند. حال بیایید به تحقیقاتی که در زمینه استخراج جدول با استفاده از شبکه های عصبی انجام شده است نگاهی بیندازیم و به طور مختصر به بررسی آنها بپردازیم.
تبلت نت
معرفی: TableNet یک معماری یادگیری عمیق مدرن است که توسط تیمی از سال تحقیقاتی TCS در سال 2019 پیشنهاد شد. انگیزه اصلی استخراج اطلاعات از جداول اسکن شده از طریق تلفن همراه یا دوربین بود.
آنها راه حلی را پیشنهاد کردند که شامل تشخیص دقیق ناحیه جدولی در یک تصویر و متعاقباً شناسایی و استخراج اطلاعات از سطرها و ستون های جدول شناسایی شده است.
مجموعه داده: مجموعه داده مورد استفاده مارموت بود. دارای 2000 صفحه در قالب PDF که با حقایق زمینی مربوطه جمع آوری شده است. این شامل صفحات چینی نیز می شود. ارتباط دادن - http://www.icst.pku.edu.cn/cpdp/sjzy/index.htm
معماری: این معماری بر اساس لانگ و همکاران، یک مدل رمزگذار-رمزگشا برای تقسیم بندی معنایی است. از همان شبکه رمزگذار/رمزگشا به عنوان معماری FCN برای استخراج جدول استفاده می شود. تصاویر با استفاده از پیش پردازش و اصلاح می شوند Tesseract OCR.
این مدل در دو مرحله با قرار دادن ورودی به تکنیک های یادگیری عمیق مشتق شده است. در مرحله اول، آنها از وزنه های شبکه VGG-19 از پیش آموزش دیده استفاده کرده اند. آنها لایه های کاملا متصل شبکه VGG استفاده شده را با لایه های کانولوشنال 1×1 جایگزین کرده اند. تمام لایه های کانولوشن با فعال سازی ReLU و یک لایه حذفی با احتمال 0.8 دنبال می شوند. آنها فاز دوم را شبکه رمزگشایی می نامند که از دو شاخه تشکیل شده است. این طبق شهودی است که ناحیه ستون زیر مجموعه ای از ناحیه جدول است. بنابراین، شبکه رمزگذاری منفرد می تواند مناطق فعال را با دقت بهتر با استفاده از ویژگی های هر دو منطقه جدول و ستون فیلتر کند. خروجی از شبکه اول به دو شاخه توزیع می شود. در شاخه اول، دو عملیات کانولوشن اعمال میشود و نقشه ویژگی نهایی برای برآوردن ابعاد تصویر اصلی ارتقاء داده میشود. در شاخه دیگر برای تشخیص ستونها، یک لایه پیچیدگی اضافی با تابع فعالسازی ReLU و یک لایه خروج با همان احتمال ریزش همانطور که قبلا ذکر شد وجود دارد. نقشههای ویژگی با استفاده از پیچیدگیهای گامهای کسری پس از یک لایه پیچشی (1×1) نمونهبرداری میشوند. در زیر تصویری از معماری را مشاهده می کنید:
خروجی: پس از پردازش اسناد با استفاده از مدل، ماسک جداول و ستون ها ایجاد می شود. این ماسک ها برای فیلتر کردن جدول و مناطق ستون آن از تصویر استفاده می شود. اکنون با استفاده از Tesseract OCR، اطلاعات از مناطق تقسیم شده استخراج می شود. در زیر تصویری وجود دارد که ماسکهایی را نشان میدهد که تولید و بعداً از جداول استخراج میشوند:
آنها همچنین همان مدلی را پیشنهاد کردند که با ICDAR تنظیم شده است که عملکرد بهتری نسبت به مدل اصلی دارد. Recall، Precision و F1-Score مدل دقیق تنظیم شده به ترتیب 0.9628، 0.9697، 0.9662 است. مدل اصلی دارای معیارهای ثبت شده 0.9621، 0.9547، 0.9583 به همین ترتیب است. بیایید اکنون به یک معماری دیگر بپردازیم.
DeepDeSRT
کاغذ: DeepDeSRT: یادگیری عمیق برای تشخیص و تشخیص ساختار جداول در تصاویر سند
معرفی: DeepDeSRT یک چارچوب شبکه عصبی است که برای شناسایی و درک جداول در اسناد یا تصاویر استفاده می شود. همانطور که در عنوان ذکر شد دو راه حل دارد:
- این یک راه حل مبتنی بر یادگیری عمیق برای تشخیص جدول در تصاویر سند ارائه می دهد.
- این یک رویکرد مبتنی بر یادگیری عمیق جدید برای تشخیص ساختار جدول، یعنی شناسایی ردیفها، ستونها و موقعیتهای سلولی در جداول شناسایی شده پیشنهاد میکند.
مدل پیشنهادی کاملاً مبتنی بر داده است و نیازی به اکتشافی یا فراداده اسناد یا تصاویر ندارد. یکی از مزیتهای اصلی با توجه به آموزش این است که از مجموعه دادههای آموزشی بزرگ استفاده نمیکنند، در عوض از مفهوم یادگیری انتقال و تطبیق دامنه برای تشخیص جدول و تشخیص ساختار جدول استفاده میکنند.
مجموعه داده: مجموعه داده استفاده شده یک مجموعه داده مسابقه جدولی ICDAR 2013 است که شامل 67 سند با 238 صفحه است.
معماری:
- تشخیص جدول مدل پیشنهادی از RCNN سریع به عنوان چارچوب اصلی برای تشخیص جداول استفاده میکند. معماری به دو بخش مختلف تقسیم می شود. در بخش اول، آنها پیشنهادات منطقه ای را بر اساس تصویر ورودی توسط یک شبکه به اصطلاح پیشنهاد منطقه (RPN) تولید کردند. در بخش دوم، آنها مناطق را با استفاده از Fast-RCNN طبقه بندی کردند. برای پشتوانه این معماری استفاده کردند ZFNet و اوزان VGG-16.
- شناخت ساختار پس از اینکه جدول با موفقیت شناسایی شد و مکان آن برای سیستم شناخته شد، چالش بعدی در درک محتوای آن شناسایی و مکان یابی سطرها و ستون هایی است که ساختار فیزیکی جدول را تشکیل می دهند. از این رو آنها از یک شبکه کاملاً متصل با وزن های VGG-16 استفاده کرده اند که اطلاعات را از سطرها و ستون ها استخراج می کند. در زیر خروجی های DeepDeSRT آمده است:
خروجی ها:
نتایج ارزیابی نشان میدهد که DeepDeSRT از روشهای پیشرفته برای تشخیص جدول و تشخیص ساختار بهتر عمل میکند و تا سال 1 به اندازههای F96.77 91.44 درصد و 2015 درصد برای تشخیص جدول و تشخیص ساختار دست مییابد.
شبکه های عصبی نموداری
کاغذ: بازاندیشی تشخیص جدول با استفاده از شبکه های عصبی نمودار
معرفی: در این تحقیق، نویسندگان آزمایشگاه یادگیری عمیق، مرکز ملی هوش مصنوعی (NCAI) شبکههای عصبی گراف را برای استخراج اطلاعات از جداول پیشنهاد کردند. آنها استدلال کردند که شبکه های نموداری انتخاب طبیعی تری برای این مشکلات هستند و دو شبکه عصبی گراف مبتنی بر گرادیان را بیشتر مورد بررسی قرار دادند.
این مدل پیشنهادی مزایای هر دو، شبکههای عصبی کانولوشن برای استخراج ویژگیهای بصری و شبکههای نموداری برای مقابله با ساختار مشکل را ترکیب میکند.
مجموعه داده: نویسندگان مجموعه دادههای مصنوعی بزرگ جدیدی از 0.5 میلیون جدول را پیشنهاد کردند که به چهار دسته تقسیم میشوند.
- تصاویر، تصاویر ساده و بدون ادغام و دارای خطوط حاکم هستند
- تصاویر دارای انواع مختلف حاشیه هستند، از جمله عدم وجود گاه به گاه خطوط حاکم
- ادغام سلول و ستون را معرفی می کند
- دوربین تصاویر را با تبدیل پرسپکتیو خطی ثبت کرد
معماری: آنها از یک شبکه کانولوشن کم عمق استفاده کردند که ویژگی های کانولوشن مربوطه را ایجاد می کند. اگر ابعاد فضایی ویژگیهای خروجی با تصویر ورودی یکسان نباشد، موقعیتهایی را جمعآوری میکنند که بسته به نسبت بین ابعاد ورودی و خروجی به صورت خطی کوچک میشوند و آنها را به یک شبکه تعاملی ارسال میکنند که دارای دو شبکه گراف است که به DGCNN معروف است. و GravNet. پارامترهای شبکه گراف مانند CNN اصلی است. در پایان، آنها از یک نمونهبرداری جفت زمان اجرا برای طبقهبندی محتوای استخراجشده استفاده کردهاند که در داخل از الگوریتم مبتنی بر مونت کارلو استفاده میکند. در زیر خروجی ها آمده است:
خروجی:
در زیر اعداد صحت جدول بندی شده است که توسط شبکه ها برای چهار دسته از شبکه تولید شده است که در مجموعه داده بخش:
CGAN ها و الگوریتم های ژنتیک
کاغذ: استخراج جداول از اسناد با استفاده از شبکههای متخاصم مولد شرطی و الگوریتمهای ژنتیک
معرفی: در این تحقیق، نویسندگان از رویکرد بالا به پایین به جای استفاده از رویکرد پایین به بالا (ادغام خطوط در سلول ها، ردیف ها یا ستون ها) استفاده کردند.
در این روش، با استفاده از یک شبکه متخاصم مولد، تصویر جدول را به شکل جدول استاندارد شده «اسکلت» ترسیم کردند. این جدول اسکلت، مرزهای سطر و ستون تقریبی را بدون محتوای جدول نشان می دهد. سپس، آنها رندرهای ساختارهای جدول نهفته نامزد را با استفاده از اندازه گیری فاصله بهینه شده توسط یک الگوریتم ژنتیک با ساختار اسکلت مطابقت دادند.
مجموعه داده: نویسندگان از مجموعه داده خود استفاده کردند که دارای 4000 جدول است.
معماری: مدل پیشنهادی از دو بخش تشکیل شده است. در بخش اول، تصاویر ورودی با استفاده از یک شبکه عصبی متخاصم مولد شرطی در جداول اسکلت انتزاع میشوند. یک GAN دوباره دو شبکه دارد، ژنراتور که نمونههای تصادفی را تولید میکند و متمایزکننده که تشخیص میدهد که آیا تصاویر تولید شده جعلی هستند یا اصلی. ژنراتور G یک شبکه رمزگذار-رمزگشا است که در آن یک تصویر ورودی از یک سری لایههای نمونهبرداری تدریجی تا یک لایه گلوگاه که در آن فرآیند معکوس میشود، عبور داده میشود. برای انتقال اطلاعات کافی به لایههای رمزگشایی، از معماری U-Net با اتصالات پرش استفاده میشود و یک اتصال پرش بین لایههای i و n-i از طریق الحاق اضافه میشود، جایی که n تعداد کل لایهها و i شماره لایه است. در رمزگذار یک معماری PatchGAN برای تشخیص دهنده D استفاده می شود. این ساختار تصویر خروجی را در مقیاس وصله ها جریمه می کند. اینها خروجی را به صورت جدول اسکلت تولید می کنند.
در بخش دوم، آنها تناسب ساختارهای داده پنهان نامزد را با تصویر اسکلت تولید شده با استفاده از اندازه گیری فاصله بین هر نامزد و اسکلت بهینه می کنند. به این ترتیب متن داخل تصاویر استخراج می شود. در زیر تصویری از معماری به تصویر کشیده شده است:
تولید: ساختارهای جدول برآورد شده با مقایسه - شماره سطر و ستون، موقعیت گوشه بالا سمت چپ، ارتفاع ردیف و عرض ستون
الگوریتم ژنتیک در حین استخراج اطلاعات از جداول، 95.5 درصد دقت ردیف و 96.7 درصد صحت ستون به دست داد.
نیاز به دیجیتالی کردن اسناد، رسید or فاکتورها اما برای کدنویسی خیلی تنبل است؟ سر به نانوت و ساخت مدل های OCR به صورت رایگان!
[کد] رویکردهای سنتی
در این بخش، نحوه استخراج اطلاعات از جداول با استفاده از Deep Learning و OpenCV را یاد خواهیم گرفت. می توانید این توضیح را به عنوان یک مقدمه در نظر بگیرید، با این حال، ساخت مدل های پیشرفته نیاز به تجربه و تمرین زیادی دارد. این به شما کمک می کند تا اصول نحوه آموزش رایانه ها را با رویکردها و الگوریتم های مختلف ممکن درک کنید.
برای درک دقیق تر مشکل، برخی از اصطلاحات اساسی را تعریف می کنیم که در سراسر مقاله استفاده می شود:
- متن: شامل یک رشته و پنج ویژگی (بالا، چپ، عرض، ارتفاع، فونت) است.
- لاین: شامل اشیاء متنی است که فرض می شود در یک خط در فایل اصلی قرار دارند
- تک خطی: خط شی فقط با یک شی متنی.
- چند خطی: خط شی با بیش از یک شی متن.
- چند خطی مسدود کردن: مجموعه ای از اشیاء چند خطی پیوسته.
- ردیف: بلوک های افقی در جدول
- ستون: بلوک های عمودی در جدول
- سلول: محل تلاقی یک سطر و ستون
- سلول – بالشتک: بالشتک داخلی یا فضای داخل سلول.
تشخیص جدول با OpenCV
برای استخراج اطلاعات از جداول اسکن شده از تکنیک های بینایی کامپیوتری سنتی استفاده خواهیم کرد. خط لوله ما اینجاست. ابتدا با استفاده از دوربین های معمولی، داده ها (جدول هایی را که باید از آنجا استخراج کنیم) می گیریم، و سپس با استفاده از بینایی کامپیوتر، مرزها، لبه ها و سلول ها را پیدا می کنیم. ما از فیلترها و خطوط مختلف استفاده خواهیم کرد و ویژگی های اصلی جداول را برجسته خواهیم کرد.
ما به تصویری از یک جدول نیاز خواهیم داشت. ما میتوانیم این تصویر را روی یک تلفن ضبط کنیم یا از هر تصویر موجود استفاده کنیم. در زیر قطعه کد آمده است،
file = r’table.png’
table_image_contour = cv2.imread(file, 0)
table_image = cv2.imread(file)
در اینجا، از زمانی که از آن استفاده خواهیم کرد، همان تصویر تصویر را دو متغیر بارگذاری کرده ایم table_image_contour هنگامی که خطوط شناسایی شده خود را روی تصویر بارگذاری شده ترسیم می کنیم. تصویر جدولی که در برنامه خود استفاده می کنیم در زیر آمده است:
ما از تکنیکی به نام استفاده خواهیم کرد آستانه تصویر معکوس که داده های موجود در تصویر داده شده را افزایش می دهد.
ret, thresh_value = cv2.threshold( table_image_contour, 180, 255, cv2.THRESH_BINARY_INV)
یکی دیگر از مراحل پیش پردازش مهم است اتساع تصویر. اتساع یک عملیات ریاضی ساده است که بر روی تصاویر باینری (سیاه و سفید) اعمال می شود که به تدریج مرزهای مناطق پیکسل های پیش زمینه را بزرگ می کند.به عنوان مثال پیکسل های سفید، معمولا).
kernel = np.ones((5,5),np.uint8)
dilated_value = cv2.dilate(thresh_value,kernel,iterations = 1)
در OpenCV از روش استفاده می کنیم FindContours برای به دست آوردن خطوط در تصویر حاضر. این روش سه آرگومان می گیرد، اول تصویر گشاد شده (تصویر مورد استفاده برای تولید تصویر متسع table_image_contour است – روش findContours فقط تصاویر باینری را پشتیبانی می کند)، دومی cv2.RETR_TREE که به ما می گوید از حالت بازیابی کانتور استفاده کنیم، سومین حالت است cv2.CHAIN_APPROX_SIMPLE که حالت تقریب کانتور است. در FindContours دو مقدار را باز می کند، بنابراین یک متغیر دیگر به نام اضافه می کنیم سلسله مراتب. هنگامی که تصاویر تو در تو هستند، خطوط از وابستگی متقابل بیرون می زند. برای نشان دادن چنین روابطی از سلسله مراتب استفاده می شود.
contours, hierarchy = cv2.findContours( dilated_value, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
خطوط مشخص می کنند که دقیقاً کجا داده ها در تصویر وجود دارد. اکنون، لیست خطوطی را که در مرحله قبل محاسبه کردیم، تکرار می کنیم و مختصات کادرهای مستطیلی را همانطور که در تصویر اصلی مشاهده شده است با استفاده از روش محاسبه می کنیم. cv2.boundingRect. در آخرین تکرار، با استفاده از روش، آن کادرها را در تصویر اصلی table_image قرار دادیم: cv2.rectangle().
for cnt in contours: x, y, w, h = cv2.boundingRect(cnt) # bounding the images if y < 50: table_image = cv2.rectangle(table_image, (x, y), (x + w, y + h), (0, 0, 255), 1)
این آخرین قدم ماست. در اینجا ما از روش استفاده می کنیم به نام پنجره تا جدول خود را با محتوای استخراج شده و کانتورهای تعبیه شده روی آن رندر کنیم. در زیر قطعه کد آمده است:
plt.imshow(table_image)
plt.show()
cv2.namedWindow('detecttable', cv2.WINDOW_NORMAL)
مقدار y را در قطعه کد بالا به 300 تغییر دهید، این خروجی شما خواهد بود:
هنگامی که جداول را استخراج کردید، می توانید هر کراپ کانتور را از طریق موتور OCR tesseract اجرا کنید، آموزش آن را می توانید پیدا کنید. اینجا کلیک نمایید. هنگامی که جعبههایی از هر متن داشتیم، میتوانیم آنها را بر اساس مختصات x و y آنها خوشهبندی کنیم تا مشخص کنیم به کدام ردیف و ستون مربوط میشوند.
علاوه بر این، گزینه استفاده از PDFMiner برای تبدیل اسناد pdf خود به فایل های HTML وجود دارد که می توانیم با استفاده از عبارات منظم تجزیه و تحلیل کنیم تا در نهایت جداول خود را دریافت کنیم. در اینجا نحوه انجام این کار آمده است.
تجزیه PDFMiner و Regex
برای استخراج اطلاعات از اسناد کوچکتر، زمان لازم برای پیکربندی مدل های یادگیری عمیق یا نوشتن الگوریتم های بینایی کامپیوتری است. در عوض، می توانیم از عبارات منظم در پایتون استفاده کنیم استخراج متن از اسناد PDF همچنین به یاد داشته باشید که این تکنیک برای تصاویر کار نمی کند. ما فقط می توانیم از این برای استخراج اطلاعات از فایل های HTML یا اسناد PDF استفاده کنیم. این به این دلیل است که وقتی از یک عبارت معمولی استفاده می کنید، باید محتوا را با منبع مطابقت دهید و اطلاعات را استخراج کنید. با تصاویر، نمیتوانید متن را مطابقت دهید و عبارات معمولی شکست خواهند خورد. حالا بیایید با یک سند PDF ساده کار کنیم و اطلاعات را از جداول موجود در آن استخراج کنیم. در زیر تصویر آمده است:
در مرحله اول، PDF را در برنامه خود بارگذاری می کنیم. پس از انجام این کار، پیدیاف را به HTML تبدیل میکنیم تا بتوانیم مستقیماً از عبارات منظم استفاده کنیم و در نتیجه محتوا را از جداول استخراج کنیم. برای این، ماژولی که ما استفاده می کنیم این است pdfminer. این به خواندن مطالب از PDF و تبدیل آن به فایل HTML کمک می کند.
در زیر قطعه کد آمده است:
from pdfminer.pdfinterp import PDFResourceManager from pdfminer.pdfinterp import PDFPageInterpreter
from pdfminer.converter import HTMLConverter
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfpage import PDFPage
from cStringIO import StringIO
import re def convert_pdf_to_html(path): rsrcmgr = PDFResourceManager() retstr = StringIO() codec = 'utf-8' laparams = LAParams() device = HTMLConverter(rsrcmgr, retstr, codec=codec, laparams=laparams) fp = file(path, 'rb') interpreter = PDFPageInterpreter(rsrcmgr, device) password = "" maxpages = 0 #is for all caching = True pagenos=set() for page in PDFPage.get_pages(fp, pagenos, maxpages=maxpages,password=password,caching=caching, check_extractable=True): interpreter.process_page(page) fp.close() device.close() str = retstr.getvalue() retstr.close() return str
اعتبار کد: زوروس
ما بسیاری از ماژولها شامل Regular Expression و کتابخانههای مرتبط با PDF را وارد کردیم. در روش convert_pdf_to_html، ما مسیر فایل PDF را ارسال می کنیم که باید به یک فایل HTML تبدیل شود. خروجی متد یک رشته HTML مانند شکل زیر خواهد بود:
'<span style="font-family: XZVLBD+GaramondPremrPro-LtDisp; font-size:12px">Changing Echoesn<br>7632 Pool Station Roadn<br>Angels Camp, CA 95222n<br>(209) 785-3667n<br>Intake: (800) 633-7066n<br>SA </span><span style="font-family: GDBVNW+Wingdings-Regular; font-size:11px">s</span><span style="font-family: UQGGBU+GaramondPremrPro-LtDisp; font-size:12px"> TX DT BU </span><span style="font-family: GDBVNW+Wingdings-Regular; font-size:11px">s</span><span style="font-family: UQGGBU+GaramondPremrPro-LtDisp; font-size:12px"> RS RL OP PH </span><span style="font-family: GDBVNW+Wingdings-Regular; font-size:11px">s</span><span style="font-family: UQGGBU+GaramondPremrPro-LtDisp; font-size:12px"> CO CJ n<br></span><span style="font-family: GDBVNW+Wingdings-Regular; font-size:11px">s</span><span style="font-family: UQGGBU+GaramondPremrPro-LtDisp; font-size:12px"> SF PI </span><span style="font-family: GDBVNW+Wingdings-Regular; font-size:11px">s</span><span style="font-family: UQGGBU+GaramondPremrPro-LtDisp; font-size:12px"> AH SPn<br></span></div>'
بیان منظم یکی از پیچیده ترین و جالب ترین تکنیک های برنامه نویسی است که برای تطبیق الگو استفاده می شود. اینها به طور گسترده در چندین برنامه استفاده می شوند، مثلاً برای قالب بندی کد، حذف وب و اهداف اعتبار سنجی. قبل از اینکه شروع به استخراج محتوا از جداول HTML خود کنیم، اجازه دهید به سرعت چند چیز در مورد عبارات منظم یاد بگیریم.
این کتابخانه روش های داخلی مختلفی را برای مطابقت و جستجوی الگوها ارائه می دهد. در زیر چند مورد وجود دارد:
import re # Match the pattern in the string
re.match(pattern, string) # Search for a pattern in a string
re.search(pattern, string) # Finds all the pattern in a string
re.findall(pattern, string) # Splits string based on the occurrence of pattern
re.split(pattern, string, [maxsplit=0] # Search for the pattern and replace it with the given string
re.sub(pattern, replace, string)
کاراکترها/عباراتی که معمولاً در عبارات منظم می بینید عبارتند از:
- [A-Z] - هر حرف بزرگ
- d - رقم
- w - کاراکتر کلمه (حروف، اعداد و زیرخط)
- s - فضای خالی (فضاها، برگهها و فضای خالی)
اکنون برای پیدا کردن یک الگوی خاص در HTML، از عبارات منظم استفاده می کنیم و سپس الگوها را بر اساس آن می نویسیم. ابتدا داده ها را به گونه ای تقسیم می کنیم که تکه های آدرس مطابق با نام برنامه به بلوک های جداگانه تفکیک شوند (ANGELS CAMP، APPLE VALLEY و غیره):
pattern = '(?<=<span style="font-family: XZVLBD+GaramondPremrPro-LtDisp; font-size:12px">)(.*?)(?=<br></span></div>)' for programinfo in re.finditer(pattern, biginputstring, re.DOTALL): do looping stuff…
بعداً، نام برنامه، شهر، ایالت و zip را پیدا می کنیم که همیشه از یک الگو پیروی می کنند (متن، کاما، حروف بزرگ دو رقمی، 5 عدد (یا 5 عدد خط فاصله چهار عدد) - این موارد در فایل PDF موجود است که ما به عنوان ورودی در نظر گرفتیم). قطعه کد زیر را بررسی کنید:
# To identify the program name
programname = re.search('^(?!<br>).*(?=\n)', programinfo.group(0))
# since some programs have odd characters in the name we need to escape
programname = re.escape(programname) citystatezip =re.search('(?<=>)([a-zA-Zs]+, [a-zA-Zs]{2} d{5,10})(?=\n)', programinfo.group(0))
mainphone =re.search('(?<=<br>)(d{3}) d{3}-d{4}x{0,1}d{0,}(?=\n)', programinfo.group(0))
altphones = re.findall('(?<=<br>)[a-zA-Zs]+: (d{3}) d{3}-d{4}x{0,1}d{0,}(?=\n)(?=\n)', programinfo.group(0))
این یک مثال ساده است که توضیح می دهد چگونه اطلاعات را از فایل های PDF با استفاده از یک عبارت منظم استخراج می کنیم. پس از استخراج تمام اطلاعات مورد نیاز، این داده ها را در یک فایل CSV بارگذاری می کنیم.
def createDirectory(instring, outpath, split_program_pattern): i = 1 with open(outpath, 'wb') as csvfile: filewriter = csv.writer(csvfile, delimiter=',' , quotechar='"', quoting=csv.QUOTE_MINIMAL) # write the header row filewriter.writerow(['programname', 'address', 'addressxtra1', 'addressxtra2', 'city', 'state', 'zip', 'phone', 'altphone', 'codes']) # cycle through the programs for programinfo in re.finditer(split_program_pattern, instring, re.DOTALL): print i i=i+1 # pull out the pieces programname = getresult(re.search('^(?!<br>).*(?=\n)', programinfo.group(0))) programname = re.escape(programname) # some facilities have odd characters in the name
بنابراین این یک مثال ساده است که توضیح می دهد چگونه می توانید HTML استخراج شده خود را به یک فایل CSV فشار دهید. ابتدا یک فایل CSV ایجاد می کنیم، تمام ویژگی های خود را پیدا می کنیم و یک به یک به ستون های مربوطه فشار می دهیم. در زیر یک اسکرین شات است:
در مواقعی، تکنیکهای فوق پیچیده به نظر میرسند و چالشهایی را برای برنامهنویسان ایجاد میکنند، اگر همه جداول تودرتو و پیچیده باشند. در اینجا، انتخاب یک CV یا مدل یادگیری عمیق باعث صرفه جویی در زمان می شود. بیایید ببینیم چه اشکالات و چالش هایی مانع استفاده از این روش های سنتی می شود.
چالش با روش های سنتی
در این بخش، در مورد جایی که فرآیندهای استخراج جدول ممکن است شکست بخورند، عمیقاً یاد میگیریم و راههای غلبه بر این موانع را با استفاده از روشهای مدرن ناشی از یادگیری عمیق بیشتر درک خواهیم کرد. اگرچه این روند یک راهپیمایی نیست. دلیل آن این است که جداول معمولاً در تمام طول ثابت نمی مانند. آنها ساختارهای مختلفی برای نمایش داده ها دارند و داده های داخل جداول می توانند چند زبانه با سبک های قالب بندی مختلف (سبک فونت، رنگ، اندازه فونت و ارتفاع) باشند. از این رو برای ساخت یک مدل قوی، باید از همه این چالش ها آگاه بود. معمولاً این فرآیند شامل سه مرحله است: تشخیص جدول، استخراج و تبدیل. بیایید مشکلات را در تمام مراحل یک به یک شناسایی کنیم:
تشخیص جدول
در این مرحله، مشخص می کنیم که جداول دقیقاً کجا در ورودی داده شده وجود دارند. ورودی می تواند با هر فرمتی باشد، مانند تصاویر، اسناد PDF/Word و گاهی اوقات فیلم. ما از تکنیکها و الگوریتمهای مختلفی برای تشخیص جداول از طریق خطوط یا مختصات استفاده میکنیم. در برخی موارد، ممکن است با جداول بدون حاشیه مواجه شویم، جایی که باید روش های مختلفی را انتخاب کنیم. علاوه بر اینها، در اینجا چند چالش دیگر وجود دارد:
- تبدیل تصویر: تبدیل تصویر یک مرحله اولیه در تشخیص برچسب ها است. این شامل افزایش داده ها و مرزهای موجود در جدول است. ما باید الگوریتم های پیش پردازش مناسب را بر اساس داده های ارائه شده در جدول انتخاب کنیم. به عنوان مثال، زمانی که ما با تصاویر کار می کنیم، باید از آشکارسازهای آستانه و لبه استفاده کنیم. این مرحله تبدیل به ما کمک می کند تا محتوا را با دقت بیشتری پیدا کنیم. در برخی موارد، خطوط ممکن است اشتباه بروند و الگوریتمها در بهبود تصویر شکست بخورند. از این رو، انتخاب مراحل تبدیل تصویر و پیش پردازش مناسب بسیار مهم است.
- کیفیت تصویر: هنگامی که جداول را برای استخراج اطلاعات اسکن می کنیم، باید مطمئن شویم که این اسناد در محیط های روشن تر اسکن شده اند که کیفیت تصاویر را تضمین می کند. وقتی شرایط روشنایی ضعیف است، الگوریتمهای CV و DL ممکن است جداول را در ورودیهای داده شده شناسایی نکنند. اگر از یادگیری عمیق استفاده می کنیم، باید مطمئن شویم که مجموعه داده سازگار است و مجموعه خوبی از تصاویر استاندارد دارد. اگر از این مدل ها بر روی میزهای موجود در کاغذهای مچاله شده قدیمی استفاده کنیم، ابتدا باید نویز موجود در آن تصاویر را پیش پردازش و حذف کنیم.
- انواع چیدمان ها و قالب های سازه ای: همه جداول منحصر به فرد نیستند. یک سلول می تواند بر روی چندین سلول، به صورت عمودی یا افقی، گسترش یابد، و ترکیب سلول های پوشا می تواند تعداد زیادی از تغییرات ساختاری را ایجاد کند. همچنین، برخی بر ویژگیهای متن تأکید میکنند و خطوط جدول میتواند بر نحوه درک ساختار جدول تأثیر بگذارد. برای مثال، خطوط افقی یا متن پررنگ ممکن است بر چندین سرصفحه جدول تأکید کنند. ساختار جدول به صورت بصری روابط بین سلول ها را تعریف می کند. روابط بصری در جداول، یافتن محاسباتی سلول های مرتبط و استخراج اطلاعات از آنها را دشوار می کند. از این رو، ساخت الگوریتم هایی که در مدیریت ساختارهای مختلف جداول قوی باشند، مهم است.
- پوشش سلولی، حاشیه، حاشیه: اینها ملزومات هر جدولی هستند - بالشتک ها، حاشیه ها و حاشیه ها همیشه یکسان نخواهند بود. برخی از جداول دارای بالشتک های زیادی در داخل سلول ها هستند و برخی دیگر ندارند. استفاده از تصاویر با کیفیت خوب و مراحل پیش پردازش، به اجرای روان فرآیند استخراج جدول کمک می کند.
استخراج جدول
این مرحله ای است که اطلاعات پس از شناسایی جداول استخراج می شود. عوامل زیادی در مورد چگونگی ساختار محتوا و محتوای موجود در جدول وجود دارد. بنابراین مهم است که قبل از ساختن یک الگوریتم، تمام چالش ها را درک کنید.
- محتوای متراکم: محتوای سلول ها می تواند عددی یا متنی باشد. با این حال، محتوای متنی معمولاً متراکم است و شامل تکههای کوتاه مبهم متن با استفاده از کلمات اختصاری و اختصاری است. برای درک جداول، متن نیاز به ابهام زدایی دارد و اختصارات و کلمات اختصاری باید بسط داده شوند.
- فونت ها و فرمت های مختلف: فونت ها معمولا دارای سبک ها، رنگ ها و ارتفاع های متفاوتی هستند. ما باید مطمئن شویم که اینها عمومی هستند و به راحتی قابل شناسایی هستند. تعداد کمی از خانوادههای فونت، بهویژه آنهایی که تحت خط شکسته یا دستنویس هستند، استخراج آنها کمی سخت است. از این رو استفاده از فونت خوب و قالب بندی مناسب به الگوریتم کمک می کند تا اطلاعات را با دقت بیشتری شناسایی کند.
- چندین صفحه پی دی اف و شکستگی صفحه: خط متن در جداول به یک آستانه از پیش تعریف شده حساس است. همچنین با پوشاندن سلول ها در چندین صفحه، شناسایی جداول دشوار می شود. در یک صفحه چند جدولی، تشخیص جداول مختلف از یکدیگر دشوار است. کار با میزهای پراکنده و نامنظم سخت است. بنابراین، خطوط حاکم گرافیکی و چیدمان محتوا باید با هم به عنوان منابع مهم برای تشخیص مناطق جدول استفاده شوند.
تبدیل جدول
مرحله آخر شامل تبدیل اطلاعات استخراج شده از جداول به کامپایل آنها به عنوان یک سند قابل ویرایش، چه در اکسل یا با استفاده از نرم افزارهای دیگر است. بیایید با چند چالش آشنا شویم.
- تنظیم چیدمان ها: هنگامی که فرمتهای مختلف جداول از اسناد اسکن شده استخراج میشوند، ما نیاز به طرحبندی جدول مناسبی برای وارد کردن محتوا داریم. گاهی اوقات، الگوریتم در استخراج اطلاعات از سلولها شکست میخورد. از این رو، طراحی یک چیدمان مناسب نیز به همان اندازه مهم است.
- انواع الگوهای ارائه ارزش: مقادیر در سلول ها را می توان با استفاده از الگوهای نمایش نحوی مختلف ارائه کرد. متن جدول را 6 ± 2 در نظر بگیرید. الگوریتم ممکن است در تبدیل آن اطلاعات خاص شکست بخورد. از این رو استخراج مقادیر عددی نیازمند دانش الگوهای ارائه ممکن است.
- نمایندگی برای تجسم: بیشتر قالبهای نمایش جداول، مانند زبانهای نشانهگذاری که میتوان جداول را در آنها توصیف کرد، برای تجسم طراحی شدهاند. بنابراین، پردازش خودکار جداول چالش برانگیز است.
اینها چالش هایی هستند که در طول فرآیند استخراج جدول با استفاده از تکنیک های سنتی با آن مواجه هستیم. حال بیایید ببینیم چگونه با کمک یادگیری عمیق بر این موارد غلبه کنیم. به طور گسترده در بخش های مختلف در حال تحقیق است.
نیاز به دیجیتالی کردن اسناد، رسیدها یا فاکتورها اما برای کدنویسی خیلی تنبل است؟ سر به نانوت و ساخت مدل های OCR به صورت رایگان!
خلاصه
در این مقاله به بررسی جزئیات استخراج اطلاعات از جداول پرداخته ایم. ما دیدهایم که چگونه فناوریهای مدرن مانند Deep Learning و Computer Vision میتوانند با ایجاد الگوریتمهای قوی در خروجی نتایج دقیق، کارهای روزمره را خودکار کنند. در بخشهای اولیه، با نقش استخراج جدول در تسهیل وظایف افراد، صنایع و بخشهای تجاری آشنا شدهایم و همچنین موارد استفاده را بررسی کردهایم که در مورد استخراج جداول از PDF/HTML، اتوماسیون فرم، فاکتور اتوماسیون و غیره. ما الگوریتمی را با استفاده از Computer Vision کدگذاری کردهایم تا موقعیت اطلاعات را در جداول با استفاده از تکنیکهای آستانهگذاری، اتساع و تشخیص کانتور پیدا کنیم. ما در مورد چالش هایی که ممکن است در فرآیندهای تشخیص، استخراج و تبدیل جدول هنگام استفاده از تکنیک های مرسوم با آن مواجه شویم، صحبت کرده ایم و بیان کرده ایم که چگونه یادگیری عمیق می تواند به ما در غلبه بر این مسائل کمک کند. در نهایت، ما چند معماری شبکه عصبی را بررسی کردهایم و راههای دستیابی به استخراج جدول بر اساس دادههای آموزشی داده شده را درک کردهایم.
به روز رسانی:
مطالب خواندنی بیشتری در مورد رویکردهای مختلف در تشخیص جدول و استخراج اطلاعات با استفاده از یادگیری عمیق اضافه شد.
- &
- 2019
- 67
- درباره ما
- مطابق
- بر این اساس
- دقیق
- به دست آوردن
- در میان
- فعال
- اضافی
- نشانی
- مزیت - فایده - سود - منفعت
- الگوریتم
- الگوریتم
- معرفی
- جایگزین
- جایگزین
- همیشه
- مقدار
- فرشتگان
- اپل
- برنامه های کاربردی
- درخواست
- روش
- برنامه های
- معماری
- استدلال
- هنر
- مقاله
- مصنوعی
- هوش مصنوعی
- دارایی
- توجه
- خواص
- نویسندگان
- خودکار بودن
- اتوماسیون
- زمینه
- بانکداری
- قبل از
- بودن
- در زیر
- مزایای
- بیت
- سیاه پوست
- مرز
- می شکند
- مرورگر
- ساختن
- بنا
- می سازد
- کسب و کار
- کسب و کار
- صدا
- دوربین
- نامزد
- سرمایه
- گرفتن
- موارد
- به چالش
- چالش ها
- به چالش کشیدن
- چینی
- انتخاب
- را انتخاب کنید
- شهر:
- CNN
- رمز
- جمع آوری
- ستون
- ترکیب
- شرکت
- رقابت
- به طور کامل
- پیچیده
- کامپیوتر
- کامپیوتر
- مفهوم
- متصل
- اتصال
- ارتباط
- اتصالات
- استوار
- مصرف کنندگان
- مصرف
- شامل
- محتوا
- محتویات
- کنترل
- تبدیل
- هسته
- متناظر
- پوشش
- ایجاد
- اعتبار
- محصول
- بسیار سخت
- سفارشی
- مشتریان
- داده ها
- روز
- مقدار
- معامله
- تحویل داده
- بستگی دارد
- شرح داده شده
- طراحی
- طراحی
- جزئیات
- جزئیات
- شناسایی شده
- کشف
- توسعه
- دستگاه
- DID
- مختلف
- مشکل
- دیجیتال
- دیجیتالی کردن
- رقم
- مستقیما
- بحث و تبادل نظر
- فاصله
- توزیع شده
- اسناد و مدارک
- دامنه
- پایین
- اشکالاتی
- رسم
- در طی
- لبه
- موثر
- از بین بردن
- جاسازی شده
- پشت سر هم
- موتور
- وارد
- اشخاص
- به خصوص
- ضروری است
- ملزومات
- برآورد
- و غیره
- همه چیز
- مثال
- اکسل
- موجود
- منبسط
- تجربه
- اصطلاحات
- عصاره ها
- چهره
- عوامل
- جعلی
- خانواده
- خانواده
- FAST
- سریعتر
- ویژگی
- امکانات
- باز خورد
- فیلترها برای تصفیه آب
- سرانجام
- پیدا کردن
- پیدا می کند
- نام خانوادگی
- نگاه اول
- مناسب
- به دنبال
- پیروی
- فرم
- قالب
- اشکال
- یافت
- چارچوب
- رایگان
- تابع
- اصول
- بیشتر
- تولید می کنند
- مولد
- ژنراتور
- گرفتن
- خوب
- گوگل
- در حال رشد
- اداره
- سر
- ارتفاع
- کمک
- مفید
- کمک
- کمک می کند
- اینجا کلیک نمایید
- سلسله مراتب
- زیاد
- نماد
- افقی
- چگونه
- چگونه
- اما
- HTTPS
- بزرگ
- انسان
- موانع
- شناسایی
- شناسایی
- تصویر
- مهم
- شامل
- شامل
- از جمله
- افزایش
- افزایش
- افراد
- صنعتی
- لوازم
- اطلاعات
- شالوده
- ورودی
- بیمه
- ادغام
- اطلاعات
- اثر متقابل
- تقاطع
- مسائل
- IT
- دانش
- شناخته شده
- برچسب ها
- زبان ها
- بزرگ
- لایه
- رهبری
- یاد گرفتن
- آموخته
- یادگیری
- کتابخانه
- لاین
- ارتباط دادن
- فهرست
- بار
- محل
- طولانی
- دستگاه
- فراگیری ماشین
- باعث می شود
- کتابچه راهنمای
- دستی
- تولید
- نقشه
- نقشه ها
- علامت
- ماسک
- مسابقه
- مطابق
- ماده
- ریاضی
- اندازه
- ذکر شده
- روش
- متریک
- قدرت
- میلیون
- میلیون ها نفر
- ذهن
- موبایل
- تلفن همراه
- گوشی های تلفن همراه
- مدل
- مدل
- ماه
- بیش
- اکثر
- چندگانه
- ملی
- طبیعی
- لازم
- نیازهای
- شبکه
- شبکه
- سر و صدا
- طبیعی
- یادداشت
- عدد
- تعداد
- آنلاین نیست.
- آنلاین
- سیستم عامل های آنلاین
- عمل
- عملیات
- بهینه سازی
- بهینه
- گزینه
- سفارش
- سازمان های
- سازمان یافته
- سازماندهی
- دیگر
- به طور کلی
- خود
- مقاله
- بخش
- ویژه
- کلمه عبور
- پچ های
- الگو
- مردم
- کارایی
- شخصی
- چشم انداز
- فاز
- گوشی های
- فیزیکی
- پلاستیک
- سیستم عامل
- نقطه
- استخر
- فقیر
- محبوب
- موقعیت
- ممکن
- قدرت
- تمرین
- دقیقا
- پیش گویی
- پیش بینی
- در حال حاضر
- ارائه
- قبلی
- اصلی
- مشکل
- مشکلات
- روند
- فرآیندهای
- در حال پردازش
- تولید کردن
- تولید
- برنامه
- برنامه نویسان
- برنامه نويسي
- برنامه ها
- طرح پیشنهادی
- پیشنهاد شده
- ارائه
- فراهم می کند
- اهداف
- کیفیت
- سریع
- به سرعت
- RE
- مطالعه
- زمان واقعی
- شناختن
- به رسمیت می شناسد
- کاهش
- با توجه
- منظم
- روابط
- ماندن
- جایگزین
- نشان دادن
- نمایندگی
- نیاز
- ضروری
- نیاز
- تحقیق
- توسل
- نتایج
- برگشت
- این فایل نقد می نویسید:
- دویدن
- مقیاس
- اسکن
- جستجو
- بخش ها
- تقسیم بندی
- سلسله
- سرویس
- خدمات
- تنظیم
- چند
- کوتاه
- نشان داده شده
- ساده
- پس از
- اندازه
- کوچک
- So
- نرم افزار
- جامد
- راه حل
- مزایا
- حل
- برخی از
- فضا
- فضاها
- انشعاب
- تقسیم می کند
- استاندارد
- شروع
- دولت
- وضعیت هنر
- اظهار داشت:
- اظهارات
- ایستگاه
- ذخیره سازی
- opbevare
- قوی
- ساخت یافته
- سبک
- متعاقبا
- موفقیت
- پشتیبانی از
- سیستم
- سیستم های
- مصرف
- وظایف
- مالیات
- تیم
- تکنیک
- فن آوری
- می گوید
- قالب
- منبع
- از این رو
- آستانه
- از طریق
- سراسر
- زمان
- زمان بر
- بار
- عنوان
- با هم
- ابزار
- بالا
- مسیر
- سنتی
- آموزش
- انتقال
- دگرگونی
- TX
- انواع
- به طور معمول
- ui
- زیر
- فهمیدن
- درک
- فهمید
- منحصر به فرد
- us
- استفاده کنید
- معمولا
- اعتبار سنجی
- ارزش
- مختلف
- نسخه
- فیلم های
- دید
- تجسم
- W
- صبر کنيد
- وب
- چی
- در حین
- در داخل
- بدون
- مهاجرت کاری
- کارگر
- نوشته
- X
- سال
- یوتیوب