76 lines
3.8 KiB
Markdown
76 lines
3.8 KiB
Markdown
# استخراجگر کلیدواژه جملات فارسی
|
|
|
|
این پروژه یک اسکریپت پایتون (`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)`
|
|
|
|
## مثال ورودی/خروجی
|
|
|
|
**ورودی:**
|
|
```text
|
|
"حقوق و تکالیف شهروندی در قانون اساسی ایران مورد تاکید قرار گرفته است."
|
|
```
|
|
|
|
**خروجی:**
|
|
```text
|
|
حقوق شهروندی
|
|
قانون اساسی
|
|
تکالیف
|
|
ایران
|
|
```
|
|
|
|
## نکات
|
|
- مدلهای بزرگ (Llama 3.1) به GPU با حافظه بالا نیاز دارند.
|
|
- کلیدواژههای تکراری حذف میشوند.
|
|
- نتایج پردازش بهصورت خودکار در فایل JSON ذخیره میشود.
|