تعداد واژه های درون یک فایل متنی

در مطلب کار با فایل ها در پایتون، چگونگی خواندن و نوشتن فایل های متنی و دودویی را توضیح داده ایم. در این مطلب می خواهیم در مورد شمارش و پیدا کردن تعداد واژگان درون یک فایل متنی صحبت کنیم. به طور مثال می خواهیم فهرست یا تعداد تمامی واژگان، فهرست یا تعداد یک یا چندین واژه خاص، کدام واژه بیشترین تکرار را داشته است را پیدا کنیم. به روش های متفاوتی می توانیم واژه های درون یک فایل را  پیدا کنیم. 

فرض می کنیم یک فایل متنی ساده داریم و می خواهیم تمامی واژه های این فایل را پیدا کنیم برای این کار ابتدا باید فایل را توسط تابع ()open باز کنیم سپس در یک حلقه for هر خط از فایل را می خوانیم. قطعه کد زیر مثالی از شمارش تمامی واژه های درون را نشان می دهد. در ابتدا یک فایل متنی توسط تابع ()oepn باز و سپس در یک حلقه for خط به خط خوانده می شود. سپس توسط تابع ‌‌()rstrip تمامی خطوط خالی (فضای خالی بعد هر خط یا به عبارت دیگر فضای خالی سمت راست هر خط) از فایل حذف می شوند.

در خطوط ۱۱ و ۱۲ و ۱۳ از کد بالا ابتدا در شرط if و توسط دستور ()line.split هر واژه درون هر خط، پیدا شده و سپس  یک لیست از واژه های درون یک خط مانند مثال زیر برگشت داده می شود. سپس در خط ۱۲ هر لیست پیمایش شده و تمامی واژه های درون یک متغیر به نام words از نوع لیست اضافه می شوند. کد زیر یک لیست نمونه از اجرای خط ۱۱ را نشان می دهد که تمامی واژه های یک خط، به جز فضای خالی (space یا tab) در این لیست وجود دارند.

در خطوط  ۱۸ تا ۲۰ ابتدا درون یک حلقه تکرار for لیست آماده شده از تمامی واژه ها، یعنی لیست words را پیمایش می کنیم و در هر پیمایش که به اندازه طول لیست words است، اگر واژه برابر با program بود، پس یک واحد به متغیر count اضافه می شود. در نهایت در خطوط ۲۲ و ۲۳ تعداد کل واژه های درون لیست و تعداد کل واژه program نشان داده می شوند. توجه کنید دو تابع ()strip و ()rstrip و ()lstrfip هر دو یک کاربرد دارند و آن خذف یک کاراکتر (یا رشته) از ابتدا یا انتهای یک رشته است.

اگر مقداری به این توابع ارسال نشود، پس کارکتر فضای خالی در نظر گرفته می شود. ()strip تمامی فضاهای خالی را پاک می کند و ()lstrip و ()rstrip به ترتیب از سمت چپ و راست فضاهای خالی را پاک می کنند. اما کاربرد این توابع تنها بر ای فضای خالی نیست، بلکه به طور مثال می توانیم تمامی صفرهای ابتدای (سمت چپ) یک رشته را پاک کنیم. کد زیر بازنویسی شده کد بالا است با این تفاوت که یک دیشکنری برگشت داده می شود که هر کلید آن یک واژه و مقدار هر کلید تعداد تکرار آن واژه است.

تنها مطلبی که لازم است برای کد بالا (تابع findAllWordsCount) گفته شود این است که در خطوط ۹ تا ۱۲ بررسی می شود که آیا کلیدی مطابق با یک واژه در دیشکنری از پیش وجود دارد یا نه؟ اگر وجود داشته باشد، پس باید یک واحد به مقدار آن کلید اضافه شود، در غیر این صورت، به یک واژه جدید رسیده ایم، پس باید آن واژه را فعلا به عنوان کلید و با مقدار یک واحد به درون دیکشنری اضافه کنیم. در خط ۲۰ تعداد تکرار واژه program را می خواهیم نشان دهیم.

دیدگاهتان را بنویسید

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