فرض کنید که یک رشته بیت به اندازه ی 2000 بایت به صورت تصادفی از یک فایل جدا می کنند و به شما می دهند؛ آیا می توانید با احتمال بالا تشخیص دهید که این رشته بیت مربوط به چه نوع فایلی هست؟
به طور کلی به این کار، تشخیص نوع فایل بر اساس محتوا ( به انگلیسی Content-based file type detection) گفته می شود. این مساله را می توان به دو صورت مطرح کرد:
1. کل فایل در دسترس است
2. تنها یک رشته بیت از آن فایل در دسترس است.
در مورد اول روش های آسانتری برای تشخیص نوع وجود دارد. مثلا همان روشی که در پست تشخیص نوع فایل بدون پسوند بدان اشاره کردم. اما اساس مساله ی تشخیص بر اساس محتوا برای زمانی است که هدر فایل در دسترس نیست و یا تنها یک رشته بیت از آن فایل را در اختیار داریم. به این تکه ها file fragments می گویند.
از سال 2001 تا کنون حدودا 20 مقاله در این زمینه منتشر شده است که اکثرا دارای دقت کمی می باشند و یا آنقدر پیچیده اند که قابل توسعه نیستند! همچنین خیلی از این روش ها تنها قابلیت تشخیص تعداد کمی نوع فایل را دارا می باشند. مثلا آخرین روشی که در این حوزه ارائه شد و مربوط به آقای طورانی و همکارانش است، تنها قابلیت تشخیص 6 نوع فایل را داراست و این در حالی است که روش پیشنهادی ایشان بسیار پیچیده می باشد و حتی در برخی مواقع برای نوع های کم ولی متفاوت با آنچه ایشان در مقاله ذکر کرده اند نیز کار نمی کند ( به دلیل اینکه از شبکه های عصبی استفاده می کنند و شبکه های عصبی ممکن است برای برخی داده ها همگرا نشوند!). البته مقاله هایی نیز منتشر شده اند که از تعداد نوع های زیادی پشتیبانی می کنند ولی خب با دقت بسیار پایین (مثلا در برخی موارد کمتر از 40 درصد!).
در مورد اهمیت این موضوع باید گفت که بسیار با اهمیت است. کاربرد های متفاوتی دارد، نظیر استفاده در سیستم های امنیتی مثل آنتی ویروس ها و یا سیستم های بازیابی اطلاعات و سیستم های کنترل داده و ... .
با توجه به اهمیت این موضوع پروژه کارشناسی من به سرپرستی دکتر احمد کشاورز (عضو هئیت علمی گروه مهندسی برق دانشگاه خلیج فارس) به این صورت تعریف شده که باید یک روش مطمئن برای تشخیص نوع فایل از میان 30 نوع پشتیبانی شده و با استفاده از یک رشته بیت دریافتی ارائه دهم.
پس از بررسی روش های ارائه شده ی قبلی و یافتن نقاط ضعف و قوت آنها توانستیم روشی ارائه دهیم که توانست رکورد بی سابقه 93.45 درصد را ثبت کند. یعنی الگوریتم ما در نهایت این توانایی را داشت که با این درصد دقت، رشته بیت دریافتی را میان 30 نوع فرنت از پیش تعریف شده طبقه بندی کند. همچنین قابل ذکر است که این روش اصلا پیچیده نیست و قابلیت پیاده سازی و توسعه فراوانی دارد و به راحتی می توان تعداد نوع های پشتیبانی شده آن را افزایش داد.
به خاطر قرار دادی که با یک شرکت خصوصی داریم از ارائه الگوریتم ذکر شده معذوریم.
امیدواریم که در آینده با بهبود الگوریتم بتوانیم دقت کار را افزایش دهیم.