| | import gradio as gr |
| | from transformers import pipeline, AutoTokenizer, AutoModelForSequenceClassification |
| | import requests |
| | import torch |
| |
|
| | |
| | MODEL_REPO = "OmidSakaki/mental-health-deberta" |
| |
|
| | print("در حال بارگذاری مدل و توکنایزر...") |
| | tokenizer = AutoTokenizer.from_pretrained(MODEL_REPO) |
| | model = AutoModelForSequenceClassification.from_pretrained(MODEL_REPO) |
| |
|
| | |
| | classifier = pipeline( |
| | "text-classification", |
| | model=model, |
| | tokenizer=tokenizer, |
| | device=0 if torch.cuda.is_available() else -1 |
| | ) |
| |
|
| | |
| | TRANSLATE_API_URL = "https://api.mymemory.translated.net/get" |
| |
|
| | def translate_to_english(text_fa: str) -> str: |
| | if not text_fa or not text_fa.strip(): |
| | return "متن وارد نشده است" |
| | |
| | params = { |
| | "q": text_fa, |
| | "langpair": "fa|en" |
| | } |
| | |
| | try: |
| | response = requests.get(TRANSLATE_API_URL, params=params, timeout=12) |
| | response.raise_for_status() |
| | data = response.json() |
| | translated = data.get("responseData", {}).get("translatedText", "") |
| | return translated if translated else "ترجمه انجام نشد" |
| | except Exception as e: |
| | return f"خطا در ترجمه: {str(e)}" |
| |
|
| |
|
| | def classify_mental_health(text_fa: str) -> str: |
| | if not text_fa or not text_fa.strip(): |
| | return "لطفاً متن فارسی وارد کنید." |
| |
|
| | |
| | text_en = translate_to_english(text_fa) |
| |
|
| | |
| | result_text = ( |
| | f"متن ترجمهشده به انگلیسی:\n{text_en}\n\n" |
| | ) |
| |
|
| | try: |
| | |
| | result = classifier(text_en, truncation=True, max_length=512)[0] |
| | label_en = result['label'] |
| | score = result['score'] * 100 |
| |
|
| | label_map = { |
| | 'Normal': 'نرمال / عادی', |
| | 'Depression': 'افسردگی', |
| | 'Anxiety': 'اضطراب', |
| | 'Suicidal': 'افکار خودکشی' |
| | } |
| | label_fa = label_map.get(label_en, label_en) |
| |
|
| | |
| | advice = "" |
| | if label_en == 'Depression': |
| | advice = ( |
| | "احساس افسردگی سنگین است، اما شما تنها نیستید و کمک وجود دارد.\n" |
| | "امروز با یک فرد مورد اعتماد صحبت کنید.\n" |
| | "فعالیتهای کوچک لذتبخش را امتحان کنید.\n" |
| | "خواب و تغذیه منظم را جدی بگیرید.\n" |
| | "حتماً به روانشناس یا روانپزشک مراجعه کنید – درمان مؤثر است.\n" |
| | "شما ارزشمند هستید و شرایط میتواند بهتر شود." |
| | ) |
| | elif label_en == 'Anxiety': |
| | advice = ( |
| | "اضطراب زیاد آزاردهنده است، اما قابل کنترل است.\n" |
| | "نفس عمیق بکشید (۴ ثانیه دم، ۴ نگه، ۶ بازدم).\n" |
| | "به اطرافتان توجه کنید (۵ چیز ببینید، ۴ چیز لمس کنید).\n" |
| | "از محرکها (کافئین، اخبار) دوری کنید.\n" |
| | "با کسی صحبت کنید.\n" |
| | "این احساس میگذرد و شما قوی هستید." |
| | ) |
| | elif label_en == 'Suicidal': |
| | advice = ( |
| | "اگر افکار خودکشی دارید، لطفاً همین حالا کمک بگیرید.\n" |
| | "فوراً با ۱۲۳ (اورژانس اجتماعی) یا ۱۴۸۰ (مشاوره بهزیستی) تماس بگیرید.\n" |
| | "وسایل خطرناک را دور کنید.\n" |
| | "با یک فرد نزدیک صحبت کنید.\n" |
| | "به مرکز درمانی بروید.\n" |
| | "زندگی شما ارزشمند است – کمک وجود دارد." |
| | ) |
| |
|
| | |
| | |
| | result_text += f"وضعیت تشخیص داده شده: **{label_fa}**\n" |
| | result_text += f"اطمینان مدل: {score:.1f}%\n\n" |
| |
|
| | if advice: |
| | result_text += "**توصیه حمایتی کوتاه:**\n" + advice + "\n\n" |
| |
|
| | result_text += ( |
| | "⚠️ **توجه مهم:**\n" |
| | "این فقط یک تحلیل اولیه توسط هوش مصنوعی است و جایگزین نظر متخصص روانشناس یا روانپزشک نمیشود.\n" |
| | "در موارد بحران یا احساس خطر فوراً با خطوط حمایتی (۱۲۳ یا ۱۴۸۰ در ایران) تماس بگیرید یا به نزدیکترین مرکز درمانی مراجعه کنید." |
| | ) |
| |
|
| | except Exception as e: |
| | result_text += f"\n\nجزئیات خطا: {str(e)}" |
| |
|
| | return result_text |
| |
|
| |
|
| | |
| | demo = gr.Interface( |
| | fn=classify_mental_health, |
| | inputs=gr.Textbox( |
| | label="متن فارسی خود را وارد کنید", |
| | placeholder="مثال: احساس میکنم دیگه هیچ امیدی ندارم...", |
| | lines=7, |
| | max_lines=15 |
| | ), |
| | outputs=gr.Textbox( |
| | label="نتیجه تحلیل و توصیه", |
| | lines=12 |
| | ), |
| | title="تحلیل وضعیت سلامت روان از روی متن فارسی", |
| | description=( |
| | "متن فارسی بنویسید → توسط مدل تحلیل میشود → " |
| | "نتیجه و توصیه حمایتی به فارسی نمایش داده میشود.\n\n" |
| | "کلاسهای تشخیص: نرمال، افسردگی، اضطراب، افکار خودکشی\n\n" |
| | "این ابزار فقط جنبه آزمایشی و آموزشی دارد و جایگزین مشاوره حرفهای نیست.\n" |
| | "در موارد بحران فوراً با ۱۲۳ یا ۱۴۸۰ تماس بگیرید." |
| | ), |
| | examples=[ |
| | ["مدام نگرانم و نمیتونم آرام باشم"], |
| | ["دیگه هیچی برام مهم نیست، خسته شدم"], |
| | ["احساس میکنم زندگی ارزش ادامه دادن نداره"] |
| | ], |
| | cache_examples=False, |
| | theme=gr.themes.Soft(primary_hue="blue") |
| | ) |
| |
|
| | if __name__ == "__main__": |
| | demo.launch( |
| | server_name="0.0.0.0", |
| | server_port=7860, |
| | debug=False |
| | ) |