معرفی Persian Swear Detector – تشخیص فحش فارسی با ML + Rule-based
فحش دادن در دنیای واقعی شاید فقط چند ثانیه طول بکشه، اما در دنیای آنلاین میتونه به سرعت به تجربه کاربری بد، محتوای توهینآمیز و حتی مشکلات حقوقی ختم بشه. برای همین داشتن یک ابزار تشخیص فحش و کلمات توهینآمیز به زبان فارسی همیشه یکی از نیازهای اصلی پلتفرمهایی مثل شبکههای اجتماعی، فرومها و حتی بخش کامنت سایتهاست.
اینجا بود که پروژه Persian Swear Detector شکل گرفت؛ یک ابزار ساده ولی قدرتمند که با ترکیب روشهای Rule-based و مدلهای یادگیری ماشین (ML) میتونه به راحتی متون فارسی رو پردازش و کلمات نامناسب رو شناسایی کنه.
🚀 چه چیزهایی داره؟
- Hybrid Detection → ترکیب Rule-based + ML برای دقت بالا
- قابلیت شخصیسازی دیتاست → میتونی لیست کلمات فحش یا نرمال رو به راحتی گسترش بدی
- پشتیبانی از زبان فارسی → نرمالسازی و پیشپردازش متن فارسی رو هندل میکنه
- CLI Interface → یه رابط خط فرمان ساده برای تست سریع
- Model Persistence → امکان ذخیره و لود مدل برای استفاده سریع در پروژههای بعدی
├── swear_detector.py # اسکریپت اصلی
├── requirements.txt # وابستگیهای Python
├── dataset/
│ ├── swear_words.json # لیست کلمات فحش
│ └── normal_words.json # لیست کلمات نرمال
├── models/
│ └── swear_detector_model.pkl # مدل ML آموزشدیده
├── Dockerfile # پشتیبانی از Docker
├── docker-compose.yml # تنظیمات Docker Compose
└── README.md
🏁 شروع کار با پروژه
git clone https://github.com/ghaninia/swear_persian.git
cd swear_persian
source venv/bin/activate
pip install -r requirements.txt
python3 swear_detector.py
همچنین شما میتونید دیتاست های مربوط به پروژه رو ویرایش کنید که در پوشه dataset قرار گرفته
آموزش یا استفاده از مدل:
اگه دیتاست آماده باشه، اولین بار که اجرا کنی مدل به صورت خودکار train میشه و اگر فایل مدل از قبل موجود باشه (models/swear_detector_model.pkl)، مستقیم لود میشه
نمونه از از خروجی :
{
"text": "نمونه متن تستی",
"processed_text": "نمونه متن تستی",
"rule_based_detection": false,
"ml_detection": false,
"ml_confidence": 0.02,
"final_prediction": false,
"confidence": 0.02,
"used_ml_prediction": true
}
خلاصه روند کار:
- آمادهسازی دادهها: دو فایل JSON شامل لیست ناسزاها و کلمات/جملات عادی تهیه میشود. دادهها برچسبگذاری شده و برای آموزش مدل استفاده میشوند.
- تشخیص مبتنی بر قواعد:متن ورودی پیشپردازش میشود (نرمالسازی، حذف کاراکترهای خاص، تبدیل به حروف کوچک) و سپس بررسی میشود که آیا کلمهای از لیست ناسزاها در متن وجود دارد یا نه. اگر باشد، متن به عنوان ناسزا علامتگذاری میشود.
- مدل یادگیری ماشین: مدل با استفاده از TfidfVectorizer (استخراج n-gramهای کاراکتری) و LogisticRegression آموزش میبیند تا الگوهای ناسزا را تشخیص دهد. اگر مدل احتمال ناسزا بودن متن را بیشتر از ۰.۵ تشخیص دهد، آن را ناسزا در نظر میگیرد.
- ترکیب نتایج:اگر روش مبتنی بر قواعد ناسزا را تشخیص دهد، نتیجه نهایی ناسزا خواهد بود. در غیر این صورت، نتیجه مدل یادگیری ماشین ملاک قرار میگیرد.
import joblib
model = joblib.load('swear_detector.pkl')
text = "متن ورودی شما"
result = model.predict([text])