data_processes/readme/readme-keyword-extractor-fa.md
2025-08-16 16:54:29 +03:30

3.8 KiB

استخراج‌گر کلیدواژه جملات فارسی

این پروژه یک اسکریپت پایتون (p5_representer.py) برای استخراج کلیدواژه‌ها از جملات و سکشن‌های متون حقوقی فارسی با استفاده از مدل‌های مبتنی بر Transformer است.

نحوه عملکرد

این اسکریپت از مدل Meta-Llama-3.1-8B-Instruct (با فشرده‌سازی و کوانتایز مناسب به منظور کارایی بیشتر) استفاده می‌کند.
ابتدا متن ورودی دریافت شده، با استفاده از پرامپت‌های سیستمی و کاربری آماده‌سازی می‌شود و سپس کلمات کلیدی مرتبط از متن استخراج می‌شوند.

پیش‌نیازها

  • پایتون 3.8 یا بالاتر
  • کتابخانه‌های torch، transformers، bitsandbytes
  • کلاس ElasticHelper برای بارگذاری داده‌ها
  • سایر ابزارها در فایل requirements.txt

برای مشاهده نسخه دقیق کتابخانه‌ها به فایل requirements.txt مراجعه کنید.

استفاده از پرامپت‌ها

  • پرامپت سیستمی (SYS_PROMPT): نقش دستیار را تعریف می‌کند. نمونه: "شما یک دستیار حقوقی هستید."
  • پرامپت کاربری (USER_PROMPT): به مدل می‌گوید حداقل تعداد مشخصی کلیدواژه استخراج کند. خروجی باید فهرستی فارسی باشد، بدون علائم اضافی.

این ترکیب باعث پایداری و دقت در استخراج کلیدواژه می‌شود.

متدهای اصلی

format_prompt(SENTENCE: str) -> str

متن خام فارسی را به فرمت مناسب برای مدل تبدیل می‌کند.
ورودی: یک جمله فارسی (str)
خروجی: متن قالب‌بندی‌شده (str)

kw_count_calculator(text: str) -> int

تعداد کلیدواژه‌ها را بر اساس طول متن محاسبه می‌کند.
ورودی: متن (str)
خروجی: تعداد کلیدواژه‌ها (int)

generate(formatted_prompt: str) -> str

متد اصلی برای ارسال پرامپت به مدل و دریافت خروجی.
ورودی: پرامپت آماده‌شده (str)
خروجی: متن کلیدواژه‌ها (str)

single_section_get_keyword(sentence: str) -> list[str]

متد اصلی برای استخراج کلیدواژه‌ها از یک جمله.
ورودی: جمله (str)
خروجی: لیستی از کلیدواژه‌های یکتا (list[str])

get_sections() -> dict

بارگذاری سکشن‌ها از فایل فشرده JSON با کمک کلاس ElasticHelper.
خروجی: دیکشنری سکشن‌ها (dict)

convert_to_dict(sections: list) -> dict

تبدیل لیست سکشن‌ها به دیکشنری با کلید ID.

do_keyword_extract(sections: dict) -> tuple

حلقه اصلی پردازش سکشن‌ها، ذخیره خروجی در فایل JSON و ثبت خطاها.
ورودی: سکشن‌ها (dict)
خروجی: تاپل (operation_result: bool, sections: dict)

مثال ورودی/خروجی

ورودی:

"حقوق و تکالیف شهروندی در قانون اساسی ایران مورد تاکید قرار گرفته است."

خروجی:

حقوق شهروندی
قانون اساسی
تکالیف
ایران

نکات

  • مدل‌های بزرگ (Llama 3.1) به GPU با حافظه بالا نیاز دارند.
  • کلیدواژه‌های تکراری حذف می‌شوند.
  • نتایج پردازش به‌صورت خودکار در فایل JSON ذخیره می‌شود.