اینترنت جای شلوغی است و گاهی اوقات منابع مناسبی که را در جستجویش هستیم در آن نمی‌یابیم. بدین ترتیب یادگیری یک زبان برنامه‌نویسی جدید ممکن است کار دشواری باشد. در این حالت، اغلب یادگیرندگان تسلیم می‌شوند و یا موضوع دیگری را انتخاب می‌کنند. بنابراین باید تأکید کنیم که این سری مطالب راهنما صرفاً یک نوشته ساده در مورد آموزش پایتون نیست که به فراوانی در اینترنت یافت می‌شود. شما در این سری ده‌گانه از مطالب آموزشی، 10 اپلیکیشن واقعی پایتون می‌سازید و در این مسیر ابزارهای مهم و ضروری دیگر برای ارتقای مهارت‌های پایتون در مسیر یادگیری علم داده را فرا می‌گیرید. نخستین بخش از این سری مطالب به آموزش ساخت اپلیکیشن دیکشنری اختصاص دارد.

master-python

اغلب افراد این نکته را درک نمی‌کنند که یادگیری یک زبان برنامه‌نویسی اهمیت بالایی دارد. مهم نیست که این کار تا چه حد دشوار به نظر می‌رسد، شما بالاخره باید از یک جایی شروع کنید. بنابراین اگر هیچ تجربه عملی از برنامه‌نویسی با استفاده از پایتون ندارید، نباید نگران باشید، چون اگر صرفاً یک آشنایی مقدماتی با پایتون داشته باشید، می‌توانید شروع به مطالعه این راهنما بکنید.

اپلیکیشن دیکشنری

نخستین اپلیکیشنی که قرار است در این سری راهنماهای پایتون بنویسیم یک دیکشنری است. این دیکشنری از نوع تعاملی است. شاید این کار به نظر ساده بیاید؛ اما یک سفر هزاران کیلومتری هم از گام نخست آغاز می‌شود، بنابراین در این نوشته اولین گام خود را برمی‌داریم. اکنون سؤال این است که این دیکشنری چه کار خواهد کرد؟ دیکشنری ما چنان که انتظار می‌رود تعریف یک واژه را که کاربر وارد کرده است بازگشت می‌دهد. علاوه بر آن اگر کاربر هنگام وارد کردن واژه‌های مورد نظر خود، غلط املایی داشته باشد، برنامه ما نزدیک‌ترین کلمه را با بیان «آیا منظورتان این بود؟» (did you mean this instead) پیشنهاد می‌کند و اگر واژه‌ای بیش از یک تعریف داشته باشید، همه آن‌ها را بازیابی می‌کند. شاید ساخت این اپلیکیشن اکنون دیگر به نظرتان ساده نیاید. در هر حال با ما همراه باشید.

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

گام 1: داده‌ها

برای این که بدانید دیکشنری چگونه کار خواهد کرد، باید بدانید که از چه داده‌هایی برای اجرای اعمال فوق‌الذکر استفاده می‌کند. داده‌ها در این اپلیکیشن در قالب JSON هستند. اگر از قبل JSON را می‌شناسید، می‌توانید چند خط آینده را رد کنید و به ادامه مطالعه این راهنما بپردازید. با این حال اگر نخستین باری است که واژه JSON را می‌شنوید و یا به کمی یادآوری اطلاعات نیاز دارید، می‌توانید در ادامه نمونه‌ای از قالب JSON را ببینید:

شاید اطلاع نداشته باشید که در سال 2017 در هر ثانیه 2,500,000,000,000,000,000 (2.5 کوینتیلیون) بایت داده تولید شده است.

JSON چیست؟

JSON اختصاری برای عبارت «نمادگذاری شیء جاوا اسکریپت» (JavaScript Object Notation) به طور عمده شامل دو بخش کلید و مقدار است که یک مقدار را به یک کلید انتساب می‌دهد.

اینک نوبت به بررسی کد رسیده است. ابتدا کتابخانه JSON را ایمپورت می‌کنیم و سپس از متد load این کتابخانه برای بارگذاری داده‌هایی که در قالب JSON هستند استفاده خواهیم کرد. نکته مهم آن است که ما داده‌ها را در قالب JSON بارگذاری می‌کنیم؛ اما این داده‌ها در متغیر data در قالب «دیکشنری» پایتون ذخیره می‌شوند. اگر در مورد نوع داده دیکشنری در پایتون اطلاع ندارید، باید بگوییم که این نوع داده یک قالب برای ذخیره‌سازی داده‌ها است که شباهت زیادی به قالب JSON دارد و از همان حالت «کلید-مقدار» (key-value) پیروی می‌کند.

به محض این که داده‌ها در پایتون بارگذاری شدند، یک تابع می‌نویسیم که کلمه را بگیرد و به دنبال تعریف آن در داده‌ها بگردد. این کار آسان است:

Data
گام 1– داده‌ها (خروجی) — برای مشاهد تصویر در ابعاد اصلی روی این لینک کلیک کنید (+).

گام 2: بررسی کلمات ناموجود

ما می‌توانیم با بهره‌گیری از یک ساختار if-else به بررسی وضعیت وجود یا عدم وجود کلمات در میان داده‌های خود بپردازیم. اگر کلمه‌ای در میان داده‌ها موجود نباشد، این امر را به کاربر اطلاع می‌دهیم. در این مورد این کار با نمایش پیام «The word doesn’t exist, please double check it» صورت می‌گیرد.

گام 2– بررسی عدم وجود کلمه‌ها (خروجی)

گام 3: حساسیت به حروف کوچک یا بزرگ

هر کاربر روش خاصی برای نوشتن کلمات دارد. با این که برخی افراد همه حروف را به صورت کوچک می‌نویسند؛ اما برخی دیگر حروف ابتدای کلمات را بزرگ می‌نویسند، هدف ما این است که خروجی کلمه‌هایی که به صورت‌های مختلف نوشته می‌شوند، همواره یکسان باشد. برای نمونه Rain و rain هر دو یک خروجی ایجاد می‌کنند. برای رسیدن به این هدف باید کلمه‌ای که کاربر وارد کرده را به حالت «همه حروف کوچک»، تبدیل کنیم، چون داده‌های ما در همین قالب هستند. این کار در پایتون با استفاده از متد ()lower ممکن است.

  • حالت 1 – برای اطمینان از این که برنامه ما تعریف کلماتی را که با حرف بزرگ آغاز شده‌اند (مانند Texas یا Tehran) به درستی بازگشت می‌دهد باید با استفاده از یک شرط if-else این وضعیت را بررسی کنیم.
  • حالت 2– برای اطمینان از این که برنامه ما تعریف کلمات اختصاری (مانند USA یا UN) را به درستی بازگشت می‌دهد، باید حالت‌های حروف بزرگ را نیز بررسی کنیم.
گام 3– حساسیت به کوچکی/بزرگی حروف – برای مشاهده تصویر در ابعاد اصلی روی این لینک کلیک کنید (+).

در این حالت دیکشنری ما آماده ارائه اهداف اولیه خود شده است، یعنی تعاریف واژه‌ها را بازیابی می‌کند. اما باید یک گام دیگر نیز به پیش برویم. آیا تاکنون از روش پیشنهاد کلمات از سوی گوگل، برای اصلاح واژه‌ها در هنگام وارد کردن یک عبارت اشتباه در نوار جستجو شگفت‌زده شده‌اید؟

ما می‌خواهیم این امکان جالب را در دیکشنری خود قرار دهیم. پیش از آن که این کار را در گام 5 این راهنما انجام دهیم، باید سازوکار عملی این کار را در گام 4 درک کنیم.

گام 4: نزدیک‌ترین مطابقت

اکنون در مواردی که کاربر هنگام وارد کردن کلمه مورد نظر خود اشتباه املایی دارد، می خواهیم نزدیک‌ترین کلمه مطابق را به او پیشنهاد دهیم و بپرسیم آیا معنای این کلمه را می‌خواهد یا نه. این کار در پایتون با استفاده از کتابخانه difflib ممکن است. دو متد برای انجام این کار وجود دارد. ما هر دو را معرفی می‌کنیم و سپس آن را که کارایی بیشتری دارد انتخاب می‌کنیم.

روش اول: Sequence Matcher

برای درک این متد، ابتدا باید کتابخانه را ایمپورت کنیم و متد مورد نظر را از آن واکشی کنیم. تابع ()SequenceMatcher کلاً سه پارامتر می‌گیرد. پارامتر اول به بررسی صحت کلمه می‌پردازد، یعنی آیا کاراکتر فاصله یا خطوط خالی دارد یا نه، که در مورد ما چنین چیزی وجود ندارد. پارامترهای دوم و سوم، دو کلمه‌ای هستند که می‌خواهید مشابهت‌های آن‌ها را بیابید. این متد نتیجه را به صورت یک عدد کسری ارائه می‌کند.

گام 4.1 – Sequence Matcher (خروجی)

همان طور که شاهد هستید، شباهت بین کلمه‌های rainn و rain برابر با 0.89 است که همان 89% است. این یک روش برای انجام کار فوق است. با این وجود روش دیگری نیز وجود دارد که در همین کتابخانه قابل انجام است و در آن نزدیک‌ترین مورد مطابقت مستقیم با یک کلمه ارائه می‌شود و دیگر از اعداد استفاده نمی‌شود.

روش دوم: دریافت نزدیک‌ترین مورد مطابقت

روش کار این متد چنین است که پارامتر نخست به عنوان کلمه‌ای است که می‌خواهیم مطابق آن را بیابیم و پارامتر دوم فهرست کلماتی است که مطابقت داشته‌اند. پارامتر سوم تعداد موارد مطابقتی را شامل می‌شود که می‌خواهید در خروجی خود داشته باشید. پارامتر آخر نیز یک معیار است که به صورت عددی نسبی، مانند متد قبلی عمل می‌کند. بدین ترتیب می‌توانیم مثلاً یک معیار به صورت 99% تعیین کنیم که صرفاً کلماتی که این معیار را دارند بازگشت یابند. بر حسب نیاز خود یک معیار برای این پارامتر تعیین کنید.

اپلیکیشن دیکشنری در پایتون
گام 4.2 – دریافت نزدیک‌ترین مورد مطابقت (خروجی)

همان طور که شاهد هستید، خروجی فوق نیازی به توضیح ندارد. نزدیک‌ترین کلمه در میان آن سه کلمه، عبارت «rainy» است. اگر به این مرحله رسیده‌اید، باید بدانید که اینک بخش دشوار کار را به انجام رسانده‌اید. در ادامه کافی است این بخش را در کد خود قرار دهیم تا بتوانیم خروجی‌های مربوطه را داشته باشیم.

گام 5: «آیا منظورتان این بود؟»

ما برای این که این بخش کد خوانایی داشته باشد آن را به قسمت if-else برنامه خود اضافه کرده‌ایم. اینک با دو گزاره if-else اول آشنا هستیم و صرفاً مورد سوم را توضیح می‌دهیم. در این گزاره ابتدا طول نزدیک‌ترین مورد مطابقت را بررسی می‌کنیم، چون تنها می‌توانیم مواردی را نمایش دهیم که 1 یا چند مورد مطابقت نزدیک داشته باشند. تابع دریافت نزدیک‌ترین موارد مطابقت، کلمه‌ای را که کاربر وارد کرده است به عنوان نخستین پارامتر می‌گیرد و کل مجموعه داده‌های ما را می‌گردد تا نزدیک‌ترین مورد مطابقت را بیاید. در این بخش «کلید» (key) کلمه‌ای است که در میان داده‌های ما قرار دارد و «مقدار» (value) تعریف آن را شامل می‌شود که قبل‌تر توضیح دادیم. مقدار [0] در گزاره بازگشتی نزدیک‌ترین مورد مطابقت را در میان همه موارد مطابقت نشان می‌دهد.

اپلیکیشن دیکشنری در پایتون
گام 5 – «آیا منظورتان این بود؟»

بدین ترتیب ما نزدیک‌ترین کلمه به ورودی کاربر را تشخیص داده و از وی در مورد آن می‌پرسیم. اما نمی‌توانیم کاربر را با این سؤال تنها بگذاریم. بنابراین در گام بعدی ادامه مراحل را توضیح می‌دهیم.

گام 6: بازیابی تعریف

به این منظور یک ورودی دیگر از کاربر می‌گیریم و با تعریف یک لایه دیگر if-else آن را بررسی می‌کنیم. بدین ترتیب تعریف کلمه پیشنهادی به صورت زیر است:

اپلیکیشن دیکشنری در پایتون
گام 6 – بازیابی تعریف (خروجی) – برای مشاهده تصویر در ابعاد اصلی روی این لینک کلیک کنید (+).

گام 7: تزیین خروجی

در بخش قبل موفق شدیم تعریف واژه را از داده‌های خود استخراج کنیم و به کاربر نمایش دهیم؛ اما با وجود کروشه و موارد دیگر، متن خروجی چندان زیبا دیده نمی‌شود. در ادامه، این موارد را حذف کرده و ظاهر آن را زیباتر می‌کنیم. آیا متوجه شدید که واژه rain بیش از یک تعریف دارد؟ چندین واژه در میان داده‌های ما وجود دارند که بیش از یک تعریف دارند و از این رو باید برای کلماتی که بیش از یک معنی ‌دارند، حلقه‌ای روی خروجی قرار دهیم و تنها مواردی را نمایش دهیم که یک تعریف دارند:

اپلیکیشن دیکشنری در پایتون
گام 7 – تزیین خروجی

اینک خروجی ما ظاهر بهتری یافته است. کد کامل برنامه را برای مطالعه در ادامه ارائه می‌کنیم. شما می‌توانید این برنامه را بنا بر نیازهای خود اصلاح کرده و یا ارتقا دهید.

کد برنامه دیکشنری در پایتون

سخن پایانی

شما در این نوشته موارد زیادی را آموختید. در این مقاله در مورد داده‌های JOSN، کارکردهای ابتدایی پایتون، کتابخانه جدیدی به نام difflib و همچنین اهمیت نوشتن کدهای تمیز مطالبی را آموختیم. همچنین می‌توانید از مجموعه داده‌های مختلف استفاده کرده و مهارت‌هایی را که آموخته‌اید روی آن‌ها اعمال کنید. به این ترتیب می‌توانید به یک فرد خبره در رشته «علم داده» (Data Science) تبدیل شوید.

برای مطالعه بخش بعدی این مطلب می‌توانید از لینک زیر استفاده کنید:

اگر این مطلب برای شما مفید بوده است، آموزش‌های زیر نیز به شما پیشنهاد می‌شوند:

==

بر اساس رای 1 نفر

آیا این مطلب برای شما مفید بود؟

نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *