محاسبه آمار کلمات یکتا در زبان های برنامه نویسی – راهنمای کاربردی


در این مطلب، با مبحث محاسبه آمار کلمات یکتا در «پردازش زبان طبیعی» (Natural Language Processing) آشنا خواهید شد. برای شرح دادن مبحث محاسبه آمار کلمات یکتا و ارائه نمونههای کاربردی از پیادهسازی چنین برنامههایی، از «زبان برنامهنویسی پایتون» (Python Programming language) استفاده میشود.
محاسبه آمار کلمات یکتا در زبان برنامهنویسی پایتون
در این بخش، از زبان برنامهنویسی پایتون برای محاسبه آمار کلمات یکتا در یک داده متنی داده شده استفاده میشود. البته در ادامه کار، کدهای لازم برای محاسبه آمار کلمات یکتا در دیگر زبانهای برنامهنویسی نیز ارائه خواهد شد.
شایان ذکر است که برای محاسبه آمار کلمات یکتا در زبان پایتون، از سه روش مختلف استفاده میشود:
- روش مبتنی بر «حلقه» (Loop) و «لیست» (List)
- روش مبتنی بر «مجموعهها» (Sets)
- روش مبتنی بر Dictionary
هدف از ارائه این مطلب، آموزش ساده و کاربردی محاسبه آمار کلمات یکتا در پردازش زبان طبیعی است. از تکنیکهای محاسبه آمار کلمات یکتا و ابزارهای آن، برای تحلیل محتوای دادههای متنی و استخراج اطلاعات بامعنی و مفید از آنها استفاده میشود.
محاسبه آمار کلمات یکتا و نمایش آنها، سبب درک بهتر برنامهنویسان و تحلیگران دادههای متنی از محتوا و اطلاعات موجود در دادههای متنی میشود. همچنین، محاسبه آمار کلمات یکتا در دادههای متنی، معمولا اولین گام در فرایند «تحلیل کیفی متن» (Text Analysis) یا «متنکاوی» (Text Mining) محسوب میشود.
محاسبه آمار کلمات یکتا با روش مبتنی بر حلقه و لیست
در این مرحله، از یک روش مبتنی بر حلقه و لیست برای محاسبه آمار کلمات یکتا در متن استفاده میشود. برای انجام چنین کاری، از حلقه for جهت پردازش لیست حاوی کلمات موجود در دادههای متنی استفاده میشود.
قطعه کد زیر، آمار کلمات یکتای موجود در یک «رشته» (String) متنی را محاسبه میکند.
دقت داشته باشید که در زبانهای برنامهنویسی، از عملگر += برای الحاق یک «موجودیت» (Entity) یا مقداری مشخص به انتهای یک متغیر تعریف شده استفاده میشود. در این قطعه کد، ابتدا یک رشته متنی تعریف شده است. سپس، محتویات آن جداسازی و درون یک لیست به نام str ذخیره میشود.
سپس، یک لیست خالی به نام str2 تولید میشود و از طریق پیمایش محتویات لیست str (هر یک از کلمات موجود در متن)، کلمات یکتا در لیست str2 ذخیره میشوند (کلمات در صورتی در لیست str2 ذخیره میشوند که پیش از این در لیست ذخیره نشده باشند).
در مرحله بعد، لیست str2 پیمایش و با استفاده از تابع count، تناوب هر کدام از کلمات موجود در این لیست محاسبه میشود. در نهایت، کلمات یکتای موجود در رشتههای متنی و تناوب آنها، در خروجی نمایش داده میشوند.
Frequency of it is : 4 Frequency of was is : 4 Frequency of the is : 4 Frequency of best is : 1 Frequency of of is : 4 Frequency of times is : 2 Frequency of worst is : 1 Frequency of age is : 2 Frequency of wisdom is : 1 Frequency of foolishness is : 1
محاسبه آمار کلمات یکتا با روش مبتنی بر تابع ()set
در این مرحله، از یک روش مبتنی بر تابع ()set برای محاسبه آمار کلمات یکتا در متن استفاده میشود. برای انجام چنین کاری، به جای استفاده از حلقه for جهت پردازش لیست حاوی کلمات موجود در دادههای متنی، از تابع ()set استفاده میشود.
تابع ()set، بدون استفاده از حلقه، تنها کلمات یکتای موجود در یک لیست را انتخاب و آنها را در یک لیست دیگر کپی میکند. قطعه کد زیر، آمار کلمات یکتای موجود در یک «رشته» (String) متنی را محاسبه میکند.
در مرحله اول، رشته متنی مورد نظر با استفاده از تابع ()split جداسازی و کلمات موجود در آن، در لیستی به نام str_list ذخیره میشوند. سپس، از تابع ()set جهت شناسایی کلمات یکتای در موجود در متن و ذخیره آنها در لیستی به نام unique_words استفاده میشود.
در مرحله بعد، لیست unique_words پیمایش و با استفاده از تابع count، تناوب هر کدام از کلمات موجود در این لیست محاسبه میشود. در نهایت، کلمات یکتای موجود در رشتههای متنی و تناوب آنها در خروجی نمایش داده میشوند.
Frequency of ( times ) is : 2 Frequency of ( age ) is : 2 Frequency of ( wisdom ) is : 1 Frequency of ( foolishness ) is : 1 Frequency of ( of ) is : 4 Frequency of ( the ) is : 4 Frequency of ( best ) is : 1 Frequency of ( worst ) is : 1 Frequency of ( it ) is : 4 Frequency of ( was ) is : 4
محاسبه آمار کلمات یکتا با روش مبتنی بر Dictionary
نوعهای دادهای لیست (List) و رشته (String)، نوعهای دادهای هستند که به صورت ترتیبی مرتبسازی (Sequentially Ordered) شدهاند. به عبارت دیگر، برنامهنویس با استفاده از «شاخص» (Index) متناظر با عناصر این نوعهای دادهای، قادر به دسترسی به محتویات آنها خواهند بود.
شاخص در زبانهای برنامهنویسی از صفر آغاز میشود. اگر شما لیستی متشکل از مقادیر رشتهای داشته باشید، با استفاده از شاخصهای دوبعدی قادر خواهید بود ابتدا به رشته خاصی در لیست و سپس، به کاراکتر خاصی در رشتهها دسترسی پیدا کنید. به عنوان نمونه:
برای مشخص کردن تناوب کلمات در یک رشته متنی، میتوان از نوع خاصی از «اشیاء» (Object) در زبان پایتون به نام Dictionary استفاده کرد. نوعهای Dictionary، «مجموعهای نامرتب» (Unordered Collection) از اشیاء هستند. به عبارت دیگر، از طریق استفاده از شاخص، قابلیت دسترسی به محتویات عناصر آن را نخواهید داشت. با این حال، با استفاده از مفهومی به نام «کلید» (Key) قادر به جستجوی محتویات آن خواهید بود. به همین دلیل، به آنها Dictionary گفته میشود. به عنوان نمونه:
نوعهای Dictionary، قابلیتی مشابه با فرهنگ لغات زبان دارند. در صورتی که شما معنی یک کلمه خاص را ندانید، کافی است که به فرهنگ لغات مراجعه کنید. در مثال بالا، زمانی که دستور [('print(d['hello اجرا میشود، مفسر پایتون در متغیر d به دنبال کلیدی به نام hello خواهد گشت و در صورت پیدا کردن این کلید، مقدار متناظر با این کلید در Dictionary را در خروجی چاپ میکند (مقدار صفر، متناظر با کلید hello است).
از قطعه کد زیر، برای محاسبه آمار کلمات یکتا در دادههای متنی استفاده میشود.
لازم به ذکر است که کدهای نمایش داده شده باید در فایلی به نام Dictionary_Unique_Word_Freq.py ذخیره شوند تا توسط کدهای ذخیره شده در فایل زیر، قابل فراخوانی و اجرا باشند. کدهای زیر نیز باید در فایلی به نام Frequency.py ذخیره شوند.
خروجی:
(4, 'was') (4, 'the') (4, 'of') (4, 'it') (2, 'times') (2, 'age') (1, 'worst') (1, 'wisdom') (1, 'foolishness') (1, 'best')
حذف کلمات بیاثر (Stowords)
در دادههای متنی، کلماتی وجود دارند که در زبانهای طبیعی بسیار شایع هستند و هیچ گونه اطلاعاتی در مورد زمینه محتوایی و معنای موجود در دادههای متنی منتقل نمیکنند. به طور کلی، کاربردهای پردازش زبان طبیعی به دنبال پیدا کردن کلماتی هستند که میتوانند به شناسایی معنا، مفهوم و موضوعات مختلفی که دادههای متنی درباره آنها صحبت میکنند، کمک کنند.
بنابراین بهتر که این دسته از کلمات (شایع و بیاثر) از متن حذف شوند. به کلماتی که معمولا برای تحلیل کیفی دادههای متنی نادیده گرفته میشوند، «کلمات بیاثر» (Stopwords) گفته میشود. برای تعریف کلمات بیاثر و حذف کردن آنها از دادههای متنی، باید تغییرات زیر را در فایلهای Dictionary_Unique_Word_Freq.py و Frequency.py ایجاد کنید:
سپس تابع تعریف شده برای حذف کلمات را فراخوانی کنید تا کلمات بیاثر از دادههای متنی حذف شوند.
خروجی:
(2, 'times') (2, 'age') (1, 'worst') (1, 'wisdom') (1, 'foolishness') (1, 'best')
محاسبه آمار کلمات یکتا در دیگر زبانهای برنامهنویسی
در ادامه، کدهای لازم برای محاسبه آمار کلمات یکتا در دیگر زبانهای برنامهنویسی نمایش داده میشوند.
محاسبه آمار کلمات یکتا در زبان C#
در ادامه، قطعه کد لازم برای محاسبه آمار کلمات یکتا در زبان C# نمایش داده شده است:
خروجی:
it 4 was 4 the 4 of 4 times 2 age 2 best 1 worst 1 wisdom 1 foolishness 1
محاسبه آمار کلمات یکتا در زبان جاوا
در ادامه، قطعه کد لازم برای محاسبه آمار کلمات یکتا در زبان جاوا نمایش داده شده است:
خروجی:
Word = the, Frequency = 4 Word = times, Frequency = 2 Word = foolishness, Frequency = 1 Word = of, Frequency = 4 Word = was, Frequency = 4 Word = best, Frequency = 1 Word = worst, Frequency = 1 Word = it, Frequency = 4 Word = age, Frequency = 2 Word = wisdom, Frequency = 1
اگر نوشته بالا برای شما مفید بوده است، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزشهای برنامهنویسی پایتون Python
- گنجینه آموزشهای برنامه نویسی پایتون (Python)
- مجموعه آموزشهای برنامهنویسی
- زبان برنامه نویسی پایتون (Python) — از صفر تا صد
- زبان برنامه نویسی جاوا (Java) — از صفر تا صد
- متن کاوی (Text Mining) — به زبان ساده
^^