ساخت ابزار خط فرمان تحلیل متن در پایتون بدون ابزار سنگین

با نوشتن یک اسکریپت ساده پایتون، فایل‌های متنی حجیم را در چند ثانیه تحلیل کنید، کلمات پرتکرار را بیابید و آمار دقیق استخراج کنید.

🎧 خلاصه صوتی مقاله (پادکست ۲ دقیقه‌ای):

فرصت مطالعه ندارید؟ چکیده این مطلب را همین‌جا گوش دهید:

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

مشخصات فنی اسکریپت تحلیل متن CLI

زبان برنامه‌نویسیپایتون (نسخه ۳ به بالا)
ابزارهای وابستهکتابخانه‌های داخلی و استاندارد پایتون (بدون نیاز به نصب پکیج خارجی)
نوع رابط کاربریخط فرمان (Command Line Interface)
پشتیبانی از زبان فارسیدارد (با رمزگذاری استاندارد UTF-8)
وضعیت دسترسی برای ایرانکاملاً آزاد و بدون محدودیت

مسئله: چرا به تحلیلگر متنی خط فرمان نیاز داریم؟

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

نصب کتابخانه‌ها و پیش‌نیازها

خوشبختانه این ابزار به صورت ۱۰۰ درصد متکی بر کتابخانه‌های داخلی و استاندارد پایتون است. بنابراین نیازی به استفاده از دستور pip install و دانلود پکیج‌های خارجی ندارید. پایتون به طور پیش‌فرض ابزارهای قدرتمندی برای مدیریت ورودی‌های ترمینال و ساختاربندی داده‌ها در اختیار ما قرار می‌دهد که در ادامه از آن‌ها استفاده خواهیم کرد. مطمئن شوید که پایتون نسخه ۳ یا بالاتر روی سیستم شما نصب است.

کد کامل اسکریپت تحلیلگر متنی پایتون

کد زیر یک اسکریپت کامل، یکپارچه و اجرایی است. این کد مسیر فایل را از خط فرمان دریافت می‌کند، متن را می‌خواند، خطوط و کلمات را می‌شمارد، کلمات پرتکرار را استخراج کرده و یک گزارش آماری مرتب و خوانا در خروجی ترمینال چاپ می‌کند. این اسکریپت را می‌توانید در یک فایل با نام text_analyzer.py ذخیره کنید.

import sys
from collections import Counter
import re

def analyze_text(file_path):
    # بررسی وجود فایل و خواندن محتوا با رمزگذاری امن UTF-8
    try:
        with open(file_path, 'r', encoding='utf-8') as file:
            text = file.read()
    except FileNotFoundError:
        print(f"خطا: فایل '{file_path}' یافت نشد. لطفاً مسیر را بررسی کنید.")
        return
    except Exception as e:
        print(f"خطا در خواندن فایل: {e}")
        return

    # محاسبه آمار کلی متن
    lines = text.splitlines()
    total_lines = len(lines)
    
    # استفاده از عبارت منظم برای استخراج کلمات (سازگار با کلمات فارسی و انگلیسی)
    words = re.findall(r'\b\w+\b', text)
    total_words = len(words)
    total_characters = len(text)
    total_characters_no_space = len(text.replace(" ", "").replace("\n", ""))

    # استخراج ۵ کلمه پرتکرار اول (با نادیده گرفتن کلمات بسیار کوتاه تک حرفی)
    filtered_words = [word.lower() for word in words if len(word) > 1]
    common_words = Counter(filtered_words).most_common(5)

    # نمایش گزارش نهایی به صورت جدول‌مانند در ترمینال
    print("=" * 45)
    print(f" گزارش تحلیل آماری فایل: {file_path}")
    print("=" * 45)
    print(f" تعداد کل خطوط:              {total_lines:,}")
    print(f" تعداد کل کلمات:              {total_words:,}")
    print(f" تعداد کل کاراکترها (با فضا): {total_characters:,}")
    print(f" تعداد کاراکترها (بدون فضا):   {total_characters_no_space:,}")
    print("-" * 45)
    print(" ۵ کلمه پرتکرار برتر متن:")
    print("-" * 45)
    for index, (word, count) in enumerate(common_words, 1):
        print(f" {index}. واژه '{word}' --> {count} بار تکرار")
    print("=" * 45)

if __name__ == "__main__":
    # بررسی دریافت آرگومان مسیر فایل از خط فرمان
    if len(sys.argv) < 2:
        print("راهنما: لطفاً مسیر فایل متنی را به عنوان آرگومان وارد کنید.")
        print("مثال اجرای دستور:")
        print("python text_analyzer.py sample.txt")
    else:
        target_file = sys.argv[1]
        analyze_text(target_file)

توضیح بخش به بخش کد

برای درک بهتر نحوه کارکرد این اسکریپت، بخش‌های اصلی آن را بررسی می‌کنیم:

  • مدیریت کتابخانه‌ها: ماژول sys برای دریافت آرگومان‌های ورودی از خط فرمان استفاده می‌شود. ماژول collections.Counter وظیفه‌ی شمارش و رتبه‌بندی بسامد کلمات را بر عهده دارد و ماژول re برای جداسازی هوشمندانه کلمات از علائم نگارشی به کار می‌رود.
  • مدیریت خطا در فایل: ساختار try-except تضمین می‌کند که اگر کاربر مسیر اشتباهی بدهد یا فایل وجود نداشته باشد، برنامه کرش نکند و پیام خطای دوستانه‌ای نمایش دهد.
  • پردازش متن و محاسبه آمار: با متد splitlines تعداد خطوط به دست می‌آید. تابع re.findall(r'\b\w+\b', text) مرز کلمات را پیدا کرده و تمام واژگان را استخراج می‌کند.
  • فیلتر واژگان پرتکرار: کلمات با طول کمتر از ۲ حرف حذف می‌شوند تا حروف اضافه‌ای مثل «و» یا «به» آمار را مخدوش نکنند. سپس شیء Counter ۵ کلمه برتر را جدا می‌کند.

نحوه اجرا در ترمینال

برای اجرای این اسکریپت، ترمینال (یا خط فرمان سیستم‌عامل) را باز کرده و به پوشه‌ای که فایل پایتون در آن قرار دارد بروید. سپس دستور زیر را همراه با نام فایل متنی مورد نظر خود (مثلاً document.txt) وارد کنید:

python text_analyzer.py document.txt

اگر فایل شما در پوشه دیگری قرار دارد، کافی است مسیر کامل یا نسبی آن را به عنوان آرگومان دوم به اسکریپت بدهید. مشابه همین رویکرد ساخت ابزارهای کاربردی متن‌باز را می‌توانید در ابزارهای مشابه مدیریت فایل و داده‌ها مثل جی‌نومریک (Gnumeric)؛ جایگزین متن‌باز، سریع و دقیق اکسل نیز مشاهده کنید که پردازش سریع اطلاعات را بدون اتکا به ابزارهای سنگین هدف قرار داده‌اند.

خروجی نمونه اسکریپت

پس از اجرای موفقیت‌آمیز اسکریپت روی یک فایل متنی نمونه، خروجی ساختاریافته و تمیزی به شکل زیر در ترمینال شما چاپ خواهد شد:

=============================================
 گزارش تحلیل آماری فایل: document.txt
=============================================
 تعداد کل خطوط:              1,240
 تعداد کل کلمات:              15,850
 تعداد کل کاراکترها (با فضا): 104,230
 تعداد کاراکترها (بدون فضا):   88,110
---------------------------------------------
 ۵ کلمه پرتکرار برتر متن:
---------------------------------------------
 1. واژه 'پایتون' --> 245 بار تکرار
 2. واژه 'داده' --> 180 بار تکرار
 3. واژه 'برنامه' --> 142 بار تکرار
 4. واژه 'سیستم' --> 115 بار تکرار
 5. واژه 'کد' --> 98 بار تکرار
=============================================

ایده‌های توسعه و شخصی‌سازی

این اسکریپت یک نقطه‌ی شروع عالی است و شما می‌توانید قابلیت‌های جذاب دیگری به آن اضافه کنید:

  • جستجوی الگوی خاص (Regex): می‌توانید ورودی دیگری برای جستجوی الگوهای خاص مثل شماره تلفن‌ها، ایمیل‌ها یا کلمات کلیدی خاص در متن اضافه کنید.
  • خروجی به فرمت JSON: به جای چاپ نتایج در ترمینال، آن‌ها را در یک فایل خروجی با فرمت JSON ذخیره کنید تا در برنامه‌های دیگر قابل استفاده باشد.
  • حذف کلمات توقف (Stopwords): لیست کاملی از کلمات ربطی زبان فارسی یا انگلیسی تهیه کنید تا کلماتی مانند «در»، «از»، «The»، «And» به طور کامل از آمار پرتکرارها فیلتر شوند.

خطاهای رایج و راه‌حل‌ها

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

  • خطای کدگذاری کاراکترها (UnicodeDecodeError): این خطا زمانی رخ می‌دهد که پایتون تلاش می‌کند یک فایل متنی با کدگذاری غیر استاندارد (مثل ANSI یا Windows-1256) را با utf-8 بخواند. راه‌حل این است که فایل متنی خود را در یک ویرایشگر متن باز کرده و آن را با انکودینگ UTF-8 مجدداً ذخیره (Save As) کنید. در کد بالا پارامتر encoding='utf-8' برای پیشگیری از این مشکل لحاظ شده است.
  • خطای فراموشی آرگومان: اگر اسکریپت را بدون ذکر نام فایل اجرا کنید، پیام راهنمای داخل بلاک شرط sys.argv نمایش داده می‌شود که یادآوری می‌کند نام فایل باید حتماً وارد شود.

پرسش‌های متداول

آیا این اسکریپت از متن‌های فارسی پشتیبانی می‌کند؟

بله، به لطف استفاده از انکودینگ UTF-8 و الگوی عبارت منظم \w در پایتون، این اسکریپت به خوبی کلمات و خطوط فارسی را پردازش و شمارش می‌کند.

آیا برای اجرای این کد نیاز به نصب کتابخانه خارجی هست؟

خیر، تمامی ماژول‌های استفاده شده (sys, collections, re) جزو کتابخانه‌ی استاندارد و پیش‌فرض پایتون هستند و نیازی به نصب پکیج اضافه‌تری ندارید.

محدودیت حجم فایل متنی چقدر است؟

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

جمع‌بندی

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

پاسخی بگذارید

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