leilaghomashchi commited on
Commit
dd32deb
·
verified ·
1 Parent(s): 5108f08

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +74 -41
app.py CHANGED
@@ -11,7 +11,7 @@ class CerebrasConfig:
11
  """تنظیمات Cerebras API"""
12
  api_key: str
13
  base_url: str = "https://api.cerebras.ai/v1"
14
- model: str = "llama-3.1-8b" # یا llama-3.3-70b برای دقت بیشتر
15
  max_tokens: int = 2000
16
  temperature: float = 0.1
17
 
@@ -41,18 +41,10 @@ class AdvancedCerebrasAnonymizer:
41
  ### **2. ثبات شناسه‌ها در متن:**
42
  - اگر "همراه اول" اول‌بار company-01 شد، در تمام متن همان باشد
43
  - اگر "مهدی احمدی" اول‌بار person-01 شد، در تمام متن همان باشد
44
- -شناسایی و جایگزینی "گروه" و ترکیبات مشابه:
45
- - وقتی واژه "گروه" یا ترکیبات مشابه مثل "گروه شرکتی" یا "گروه اقتصادی" در متن ظاهر می‌شود، آن‌ها را به‌عنوان یک "شرکت" در نظر بگیرید.
46
- - جایگزینی عبارت "گروه شر کت اقتصادی و خودکفایی آزادگان" با 'company-XX' (به‌جای group-XX).
47
- - به‌طور کلی، تمام گروه‌هایی که به مجموعه‌ای از شرکت‌ها اشاره دارند، باید به‌عنوان یک "شرکت" در نظر گرفته شوند و با 'company-XX' جایگزین شوند.
48
- -شناسایی و جلوگیری از شناسایی عبارت‌هایی مانند "عملکرد ۵ ماهه سال" یا عبارات مشابه:
49
- - اگر عبارتی مانند "عملکرد ۵ ماهه سال" یا هر نوع عبارتی که به دوره‌های زمانی خاص مانند ماه‌ها یا سال‌ها اشاره دارد (و مرتبط با عملکرد مالی یا غیر مالی باشد)، در متن ظاهر شد، این عبارت نباید به‌عنوان موجودیت مبلغ (amount-XX) شناسایی شود.
50
- - به‌طور کلی، عباراتی که در آن‌ها واژه‌هایی مانند "عملکرد"، "دوره"، "زمان"، "ماه" یا "سال" به‌تنهایی یا همراه با عدد می‌آید، نباید به‌عنوان مبلغ در نظر گرفته شوند.
51
-
52
-
53
 
54
  ### **3. تشخیص صحیح انواع:**
55
  **شرکت/سازمان:** همراه اول، بانک ملی، ایران‌خودرو، سایپا، بانک مرکزی، سامانه کدال، وزارت نفت
 
56
  **شخص:** مهدی اخوان بهابادی، محمدرضا فرزین، ابوالفضل نجارزاده
57
  **عدد:** 37، 70، 677، 73.7، 178 (هر عددی)
58
  **درصد:** 37 درصدی، 15 درصدی، 53 درصد، 43%
@@ -72,6 +64,16 @@ class AdvancedCerebrasAnonymizer:
72
  **ورودی:** سایپا و ایران‌خودرو مجموع زیان 620 همت داشتند و سایپا 269 هزار میلیارد زیان اعلام کرد.
73
  **خروجی:** company-01 و company-02 مجموع زیان amount-01 داشتند و company-01 amount-02 زیان اعلام کرد.
74
 
 
 
 
 
 
 
 
 
 
 
75
  ## **تشخیص دقیق درصدها:**
76
  - "37 درصدی" → percent-01 (نه amount)
77
  - "15 درصد" → percent-02 (نه amount)
@@ -79,7 +81,23 @@ class AdvancedCerebrasAnonymizer:
79
  - "بازه 10 تا 20 درصد" → percent-04 تا percent-05
80
  - «رِنج‌ها» با «تا/الی/بین … و …» باید یک entity واحد باشند:
81
  مثال: «یک تا 1.5 میلیون تن» → یک amount-# ، «50 الی 70 درصد» → یک percent-# .
82
- -
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
83
  - تاریخ/ماه/سال و ساعت را فعلاً «اصلاً» انتیتی نگیر (هیچ date-* / time-* تولید نکن).
84
 
85
 
@@ -88,11 +106,13 @@ class AdvancedCerebrasAnonymizer:
88
  - عناوین شغلی: مدیرعامل، رئیس کل، مدیرکل
89
  - واحدها: میلیارد تومان، همت، ریال، ماه، سال
90
  - مکان‌ها: تهران، اصفهان، ایران
 
91
 
92
  ## **ممنوع:**
93
  - کلمات انگلیسی اضافی
94
  - تغییر ساختار جمله
95
  - حذف یا اضافه کردن کلمات
 
96
 
97
  **فقط متن ناشناس‌شده را برگردان - هیچ توضیح اضافی نیاز نیست.**
98
 
@@ -101,13 +121,14 @@ class AdvancedCerebrasAnonymizer:
101
 
102
  انواع موجودیت‌ها:
103
 
104
- company-XX: نام شرکت‌ها، سازمان‌ها، بانک‌ها، هلدینگ‌ها، گروه‌های مالی (مثال: ایران خودرو، بانک ملی، گروه مالی صبا، سازمان حسابرسی)
 
105
 
106
  person-XX: نام و نام خانوادگی اشخاص (مثال: محمد رضایی، مهدی اخوان بهابادی، فرج‌اله قدمی)
107
 
108
- amount-XX: مبالغ مالی شامل ریال، تومان، همت، دلار، تن، دستگاه و واحدهای اندازه‌گیری (مثال: ۲۳ هزار و ۲۹۶ میلیارد تومان، ۵۰۰ میلیون دلار، ۷۳.۷ میلیون نفر، 636 ریال)
109
 
110
- percent-XX: درصدها و نسبت‌ها (مثال: ۴.۵۸ درصد، ۷۵ درصد، ۱۴٪، منفی 345 درصد)
111
 
112
  قوانین کلیدی:
113
 
@@ -117,11 +138,13 @@ percent-XX: درصدها و نسبت‌ها (مثال: ۴.۵۸ درصد، ۷۵
117
 
118
  3. تشخیص نام‌های مختلف: "فولاد مبارکه اصفهان" و "فولاد مبارکه" و "این شرکت" همه company-01 هستند. "همراه اول" و "گروه همراه اول" و "این اپراتور" همه company-01 هستند. اما "بانک پاسارگاد" و "سرزمین هوشمند پاد" دو company مختلف هستند.
119
 
120
- 4. مبالغ و درصدهای مختلف: هر عدد جدید، شماره جدید می‌گیرد
121
 
122
- 5. حفظ ساختار: ساختار جمله را حفظ کن، تاریخ‌ها را تغییر نده، کلمات توصیفی مثل "شرکت"، "بانک"، "گروه" را قبل از برچسب حفظ کن
123
 
124
- 6. هیچ توضیح اضافه‌ای نده: فقط متن ناشناس‌شده را برگردان، بدون توضیح یا تفسیر
 
 
125
 
126
  نمونه‌های آموزشی:
127
 
@@ -135,7 +158,21 @@ percent-XX: درصدها و نسبت‌ها (مثال: ۴.۵۸ درصد، ۷۵
135
 
136
  نمونه ۳:
137
  متن اصلی: مهدی اخوان بهابادی، مدیرعامل همراه اول، در مجمع عمومی عادی سالیانه اعلام کرد درآمد عملیاتی شرکت اصلی با رشد قابل توجه 37 درصدی نسبت به سال 1402، به 70 هزار و 677 میلیارد تومان رسیده است. سود خالص تلفیقی گروه همراه اول در پایان سال مالی 1403 به 8003 میلیارد تومان رسید.
138
- متن ناشناس‌شده: person-01، مدیرعامل company-01، در مجمع عمومی عادی سالیانه اعلام کرد درآمد عملیاتی شرکت اصلی با رشد قابل توجه percent-01 نسبت به سال 1402، به amount-01 رسیده است. سود خالص تلفیقی گروه company-01 در پایان سال مالی 1403 به amount-02 رسید.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
139
 
140
  حالا وظیفه شما: متن زیر را طبق الگوی بالا ناشناس‌سازی کنید. فقط متن ناشناس‌شده را بدون هیچ توضیح اضافه برگردانید.
141
 
@@ -246,16 +283,14 @@ percent-XX: درصدها و نسبت‌ها (مثال: ۴.۵۸ درصد، ۷۵
246
  persons = re.findall(r'person-(\d+)', text)
247
  amounts = re.findall(r'amount-(\d+)', text)
248
  percents = re.findall(r'percent-(\d+)', text)
249
- groups = re.findall(r'group-(\d+)', text)
250
 
251
- # آمار کلی
252
  statistics = {
253
  "company": len(set(companies)),
254
  "person": len(set(persons)),
255
  "amount": len(set(amounts)),
256
  "percent": len(set(percents)),
257
- "group": len(set(groups)),
258
- "total_replacements": len(companies) + len(persons) + len(amounts) + len(percents) + len(groups)
259
  }
260
 
261
  # جزئیات موجودیت‌ها
@@ -263,8 +298,7 @@ percent-XX: درصدها و نسبت‌ها (مثال: ۴.۵۸ درصد، ۷۵
263
  "companies": sorted(list(set(companies)), key=lambda x: int(x)),
264
  "persons": sorted(list(set(persons)), key=lambda x: int(x)),
265
  "amounts": sorted(list(set(amounts)), key=lambda x: int(x)),
266
- "percents": sorted(list(set(percents)), key=lambda x: int(x)),
267
- "groups": sorted(list(set(groups)), key=lambda x: int(x))
268
  }
269
 
270
  # تحلیل دقیق‌تر
@@ -285,12 +319,11 @@ percent-XX: درصدها و نسبت‌ها (مثال: ۴.۵۸ درصد، ۷۵
285
  """اعتبارسنجی پیشرفته متن ناشناس‌شده"""
286
  import re
287
 
288
- # استخراج همه موجودیت‌ها
289
  companies = re.findall(r'company-(\d+)', text)
290
  persons = re.findall(r'person-(\d+)', text)
291
  amounts = re.findall(r'amount-(\d+)', text)
292
  percents = re.findall(r'percent-(\d+)', text)
293
- groups = re.findall(r'group-(\d+)', text)
294
 
295
  validation_issues = []
296
 
@@ -299,8 +332,7 @@ percent-XX: درصدها و نسبت‌ها (مثال: ۴.۵۸ درصد، ۷۵
299
  ("company", companies),
300
  ("person", persons),
301
  ("amount", amounts),
302
- ("percent", percents),
303
- ("group", groups)
304
  ]:
305
  if indices:
306
  unique_indices = sorted(list(set([int(x) for x in indices])))
@@ -326,8 +358,7 @@ percent-XX: درصدها و نسبت‌ها (مثال: ۴.۵۸ درصد، ۷۵
326
  "company": len(set(companies)),
327
  "person": len(set(persons)),
328
  "amount": len(set(amounts)),
329
- "percent": len(set(percents)),
330
- "group": len(set(groups))
331
  }
332
  }
333
 
@@ -543,6 +574,7 @@ def create_advanced_interface():
543
  <div class="stat-card">
544
  <h3>🏢 شرکت‌ها</h3>
545
  <h2>{stats.get('company', 0)}</h2>
 
546
  </div>
547
  <div class="stat-card">
548
  <h3>👤 اشخاص</h3>
@@ -556,10 +588,6 @@ def create_advanced_interface():
556
  <h3>📊 درصدها</h3>
557
  <h2>{stats.get('percent', 0)}</h2>
558
  </div>
559
- <div class="stat-card">
560
- <h3>👥 گروه‌ها</h3>
561
- <h2>{stats.get('group', 0)}</h2>
562
- </div>
563
  <div class="stat-card">
564
  <h3>🔢 کل تغییرات</h3>
565
  <h2>{stats.get('total_replacements', 0)}</h2>
@@ -593,15 +621,13 @@ def create_advanced_interface():
593
  entities_md = "🏷️ **موجودیت‌های شناسایی شده:**\n\n"
594
 
595
  if entities.get("companies"):
596
- entities_md += f"🏢 **شرکت‌ها:** company-{', company-'.join(entities['companies'])}\n\n"
597
  if entities.get("persons"):
598
  entities_md += f"👤 **اشخاص:** person-{', person-'.join(entities['persons'])}\n\n"
599
  if entities.get("amounts"):
600
  entities_md += f"💰 **مبالغ:** amount-{', amount-'.join(entities['amounts'])}\n\n"
601
  if entities.get("percents"):
602
  entities_md += f"📊 **درصدها:** percent-{', percent-'.join(entities['percents'])}\n\n"
603
- if entities.get("groups"):
604
- entities_md += f"👥 **گروه‌ها:** group-{', group-'.join(entities['groups'])}\n\n"
605
 
606
  # تحلیل دقیق
607
  detailed = result.get("detailed_analysis", {})
@@ -674,10 +700,11 @@ def create_advanced_interface():
674
  # مثال‌های پیشرفته
675
  gr.Examples(
676
  examples=[
677
- ["صورت‌های مالی حسابرسی شده شرکت آسان پادرو منتهی به 30 آذر 1403 نشان می‌دهد این شرکت سال مالی جاری بیش از 6 میلیارد تومان زیان خالص شناسایی کرده است. پادرو سال مالی 1403 حدود 30 میلیارد تومان درآمد عملیاتی کسب کرد که این رقم در مقایسه با سال 1402 رشد تقریباً دوبرابری دارد. 97 درصد درآمد پادرو از «پردازش حمل» است که مربوط به مشتریان متقاضی خدمات پستی بوده و بیش از 60 درصد درآمد آن از سرزمین هوشمند پاد (زیرمجموعه بانک پاسارگاد) و بابت حمل مرسوله کارت‌های بانکی است."],
 
 
678
  ["بانک پاسارگاد با شناسایی سود خالص 155 هزار میلیارد ریالی در رده دوم سودآورترین بانک‌های کشور قرار گرفت."],
679
  ["مهدی اخوان بهابادی، مدیرعامل همراه اول، اعلام کرد درآمد عملیاتی شرکت با رشد 37 درصدی به 70 هزار و 677 میلیارد تومان رسیده است."],
680
- ["هزینه لجستیکی بوعلی حدود 100 میلیون دلار بود؛ 40٪ خوراک از خط لوله و 60٪ معادل 1 تا 1.5 میلیون تن در سال."],
681
  ["گروه دتا با سود خالص 45.3 میلیارد تومان و EPS برابر 2850 ریال، رشد 15.7 درصدی نسبت به مدت مشابه سال قبل داشته است."]
682
  ],
683
  inputs=input_text,
@@ -696,9 +723,9 @@ def create_advanced_interface():
696
  - **API ساده:** سازگار با OpenAI
697
 
698
  ### 🏷️ انواع برچسب‌ها:
699
- - **company-XX:** شرکت‌ها، سازمان‌ها، برندها، نهادها
 
700
  - **person-XX:** اشخاص حقیقی (نام و نام‌خانوادگی)
701
- - **group-XX:** گروه‌ها، هلدینگ‌ها، کنسرسیوم‌ها
702
  - **amount-XX:** تمام اعداد (پولی، تعدادی، حجمی، زمانی)
703
  - **percent-XX:** درصدها و بازه‌های درصدی
704
 
@@ -709,6 +736,7 @@ def create_advanced_interface():
709
  - 📈 شاخص‌های مالی (EPS, P/E, ARPU, NPL)
710
  - 🗺️ نام مکان‌ها و آدرس‌ها
711
  - 📝 ساختار جمله و لحن
 
712
 
713
  ### 🔍 کنترل کیفیت:
714
  - بررسی شروع اندیس‌ها از 01
@@ -722,6 +750,11 @@ def create_advanced_interface():
722
  - در بازه‌های عددی: amount-01—amount-02
723
  - برای درصدها: percent-01—percent-02
724
  - اعداد چسبیده: "5هزار" → "amount-01 هزار"
 
 
 
 
 
725
 
726
  ### 🚀 مدل‌های موجود Cerebras:
727
  - `llama-3.3-70b`: مدل اصلی و قدرتمند (پیشنهادی)
 
11
  """تنظیمات Cerebras API"""
12
  api_key: str
13
  base_url: str = "https://api.cerebras.ai/v1"
14
+ model: str = "llama-3.3-70b" # یا llama-3.1-8b برای سرعت بیشتر
15
  max_tokens: int = 2000
16
  temperature: float = 0.1
17
 
 
41
  ### **2. ثبات شناسه‌ها در متن:**
42
  - اگر "همراه اول" اول‌بار company-01 شد، در تمام متن همان باشد
43
  - اگر "مهدی احمدی" اول‌بار person-01 شد، در تمام متن همان باشد
 
 
 
 
 
 
 
 
 
44
 
45
  ### **3. تشخیص صحیح انواع:**
46
  **شرکت/سازمان:** همراه اول، بانک ملی، ایران‌خودرو، سایپا، بانک مرکزی، سامانه کدال، وزارت نفت
47
+ **⚠️ CRITICAL - گروه‌ها:** "گروه همراه اول"، "گروه اقتصادی آزادگان"، "گروه مالی صبا" → همه company-XX هستند (نه group-XX)
48
  **شخص:** مهدی اخوان بهابادی، محمدرضا فرزین، ابوالفضل نجارزاده
49
  **عدد:** 37، 70، 677، 73.7، 178 (هر عددی)
50
  **درصد:** 37 درصدی، 15 درصدی، 53 درصد، 43%
 
64
  **ورودی:** سایپا و ایران‌خودرو مجموع زیان 620 همت داشتند و سایپا 269 هزار میلیارد زیان اعلام کرد.
65
  **خروجی:** company-01 و company-02 مجموع زیان amount-01 داشتند و company-01 amount-02 زیان اعلام کرد.
66
 
67
+ ### **مثال 4 (مهم - گروه‌ها):**
68
+ **ورودی:** شرکت صنایع غذایی مینو شرق جزء واحدهای تجاری فرعی شرکت صنعتی مینو و واحدهای تجاری نهایی گروه شرکت اقتصادی و خودکفایی آزادگان می‌باشد.
69
+ **خروجی:** company-01 جزء واحدهای تجاری فرعی company-02 و واحدهای تجاری نهایی company-03 می‌باشد.
70
+ ⚠️ **توجه:** "گروه شرکت اقتصادی" → company-03 (نه group-03)
71
+
72
+ ### **مثال 5 (مهم - دوره‌های زمانی):**
73
+ **ورودی:** همراه اول در 9 ماه سال 49 هزار میلیارد درآمد کسب کرد. عملکرد ۵ ماهه شرکت نشان‌دهنده رشد 37 درصدی است. در ۳ ماهه اول سال سود 8003 میلیارد تومان شناسایی شد.
74
+ **خروجی:** company-01 در ۹ ماه سال amount-01 درآمد کسب کرد. عملکرد ۵ ماهه شرکت نشان‌دهنده رشد percent-01 است. در ۳ ماهه اول سال سود amount-02 شناسایی شد.
75
+ ⚠️ **توجه:** "۹ ماه" و "۵ ماهه" و "۳ ماهه اول" → حفظ شوند (نه amount)
76
+
77
  ## **تشخیص دقیق درصدها:**
78
  - "37 درصدی" → percent-01 (نه amount)
79
  - "15 درصد" → percent-02 (نه amount)
 
81
  - "بازه 10 تا 20 درصد" → percent-04 تا percent-05
82
  - «رِنج‌ها» با «تا/الی/بین … و …» باید یک entity واحد باشند:
83
  مثال: «یک تا 1.5 میلیون تن» → یک amount-# ، «50 الی 70 درصد» → یک percent-# .
84
+
85
+ ## **⚠️ CRITICAL - دوره‌های زمانی را حفظ کن:**
86
+ - "۹ ماهه" → حفظ شود (نه amount-XX)
87
+ - "۵ ماهه سال" → حفظ شود (نه amount-XX)
88
+ - "۳ ماهه اول" → حفظ شود (نه amount-XX)
89
+ - "۶ ماهه منتهی به" → حفظ شود (نه amount-XX)
90
+ - "سه‌ماهه نخست" → حفظ شود (نه amount-XX)
91
+ - "در ۹ ماه" → "در ۹ ماه" حفظ شود
92
+ - "عملکرد ۵ ماهه" → "عملکرد ۵ ماهه" حفظ شود
93
+
94
+ اما:
95
+ - "۹ ماه سپرده" → "amount-XX ماه سپرده" (چون مدت سپرده است)
96
+ - "۹ میلیون تومان" → amount-XX (چون مبلغ است)
97
+
98
+ **قانون:** اگر عدد + "ماهه" یا "ماهه سال" یا "ماهه اول" باشد → حفظ کن
99
+ **قانون:** اگر عدد + "ماه" بدون "ه" باشد و منظور تعداد ماه است → amount-XX
100
+
101
  - تاریخ/ماه/سال و ساعت را فعلاً «اصلاً» انتیتی نگیر (هیچ date-* / time-* تولید نکن).
102
 
103
 
 
106
  - عناوین شغلی: مدیرعامل، رئیس کل، مدیرکل
107
  - واحدها: میلیارد تومان، همت، ریال، ماه، سال
108
  - مکان‌ها: تهران، اصفهان، ایران
109
+ - ⚠️ **CRITICAL - دوره‌های زمانی:** "۵ ماهه سال"، "۹ ماهه"، "۳ ماهه اول"، "۶ ماهه منتهی به" → حفظ شوند (نه amount-XX)
110
 
111
  ## **ممنوع:**
112
  - کلمات انگلیسی اضافی
113
  - تغییر ساختار جمله
114
  - حذف یا اضافه کردن کلمات
115
+ - ⚠️ **CRITICAL: استفاده از group-XX ممنوع است** - همه گروه‌ها باید company-XX باشند
116
 
117
  **فقط متن ناشناس‌شده را برگردان - هیچ توضیح اضافی نیاز نیست.**
118
 
 
121
 
122
  انواع موجودیت‌ها:
123
 
124
+ company-XX: نام شرکت‌ها، سازمان‌ها، بانک‌ها، هلدینگ‌ها، گروه‌های مالی (مثال: ایران خودرو، بانک ملی، گروه مالی صبا، گروه اقتصادی آزادگان، سازمان حسابرسی)
125
+ ⚠️ **توجه:** "گروه X" همیشه company-XX است، نه group-XX
126
 
127
  person-XX: نام و نام خانوادگی اشخاص (مثال: محمد رضایی، مهدی اخوان بهابادی، فرج‌اله قدمی)
128
 
129
+ amount-XX: مبالغ مالی شامل ریال، تومان، همت، دلار، تن، دستگاه و واحدهای اندازه‌گیری (مثال: ۲۳ هزار و ۲۹۶ میلیارد تومان، ۵۰۰ میلیون دلار، ۷۳.۷ میلیون نفر، 636 ریال، ۹۴ تن)
130
 
131
+ percent-XX: درصدها و نسبت‌ها (مثال: ۴.۵۸ درصد، ۷۵ درصد، ۱۴٪، منفی 345 درصد، ۲۲ درصد)
132
 
133
  قوانین کلیدی:
134
 
 
138
 
139
  3. تشخیص نام‌های مختلف: "فولاد مبارکه اصفهان" و "فولاد مبارکه" و "این شرکت" همه company-01 هستند. "همراه اول" و "گروه همراه اول" و "این اپراتور" همه company-01 هستند. اما "بانک پاسارگاد" و "سرزمین هوشمند پاد" دو company مختلف هستند.
140
 
141
+ 4. ⚠️ **گروه‌ها = company:** "گروه X" همیشه company-XX است، نه group-XX. مثلاً "گروه اقتصادی آزادگان" → company-03
142
 
143
+ 5. مبالغ و درصدهای مختلف: هر عدد جدید، شماره جدید می‌گیرد
144
 
145
+ 6. حفظ ساختار: ساختار جمله را حفظ کن، تاریخ‌ها را تغییر نده، کلمات توصیفی مثل "شرکت"، "بانک"، "گروه" را قبل از برچسب حفظ کن
146
+
147
+ 7. هیچ توضیح اضافه‌ای نده: فقط متن ناشناس‌شده را برگردان، بدون توضیح یا تفسیر
148
 
149
  نمونه‌های آموزشی:
150
 
 
158
 
159
  نمونه ۳:
160
  متن اصلی: مهدی اخوان بهابادی، مدیرعامل همراه اول، در مجمع عمومی عادی سالیانه اعلام کرد درآمد عملیاتی شرکت اصلی با رشد قابل توجه 37 درصدی نسبت به سال 1402، به 70 هزار و 677 میلیارد تومان رسیده است. سود خالص تلفیقی گروه همراه اول در پایان سال مالی 1403 به 8003 میلیارد تومان رسید.
161
+ متن ناشناس‌شده: person-01، مدیرعامل company-01، در مجمع عمومی عادی سالیانه اعلام کرد درآمد عملیاتی شرکت اصلی با رشد قابل توجه percent-01 نسبت به سال 1402، به amount-01 رسیده است. سود خالص تلفیقی company-01 در پایان سال مالی 1403 به amount-02 رسید.
162
+ ⚠️ **توجه:** "گروه همراه اول" = company-01 (چون همان همراه اول است)
163
+
164
+ نمونه ۴:
165
+ متن اصلی: شرکت صنایع غذایی مینو شرق جزء واحدهای تجاری فرعی شرکت صنعتی مینو و واحدهای تجاری نهایی گروه شرکت اقتصادی و خودکفایی آزادگان می‌باشد. شرکت در اسفند مقدار ۹۴ تن تافی با نرخ هر تن ۹ میلیون تومان فروخته است.
166
+ متن ناشناس‌شده: company-01 جزء واحدهای تجاری فرعی company-02 و واحدهای تجاری نهایی company-03 می‌باشد. شرکت در اسفند مقدار amount-01 تافی با نرخ هر تن amount-02 فروخته است.
167
+ ⚠️ **توجه:** "گروه شرکت اقتصادی و خودکفایی آزادگان" → company-03
168
+
169
+ نمونه ۵:
170
+ متن اصلی: بانک پاسارگاد با شناسایی سود خالص 155 هزار میلیارد ریالی در رده دوم سودآورترین بانک‌های کشور قرار گرفت و رقابت تنگاتنگی با بانک ملت داشت. در مقابل، بانک سرمایه با مدیرعاملی فرج‌اله قدمی وضعیت بحرانی دارد.
171
+ متن ناشناس‌شده: company-01 با شناسایی سود خالص amount-01 در رده دوم سودآورترین بانک‌های کشور قرار گرفت و رقابت تنگاتنگی با company-02 داشت. در مقابل، company-03 با مدیرعاملی person-01 وضعیت بحرانی دارد.
172
+
173
+ نمونه ۶:
174
+ متن اصلی: گزارش عملکرد ۵ ماهه سال 1403 نشان می‌دهد همراه اول در ۹ ماه سال 49 هزار میلیارد تومان درآمد کسب کرده و رشد 37 درصدی داشته است. سود ۳ ماهه اول به 8003 میلیارد تومان رسید.
175
+ متن ناشناس‌شده: گزارش عملکرد ۵ ماهه سال 1403 نشان می‌دهد company-01 در ۹ ماه سال amount-01 درآمد کسب کرده و رشد percent-01 داشته است. سود ۳ ماهه اول به amount-02 رسید.
176
 
177
  حالا وظیفه شما: متن زیر را طبق الگوی بالا ناشناس‌سازی کنید. فقط متن ناشناس‌شده را بدون هیچ توضیح اضافه برگردانید.
178
 
 
283
  persons = re.findall(r'person-(\d+)', text)
284
  amounts = re.findall(r'amount-(\d+)', text)
285
  percents = re.findall(r'percent-(\d+)', text)
 
286
 
287
+ # آمار کلی (group حذف شد - همه گروه‌ها company هستند)
288
  statistics = {
289
  "company": len(set(companies)),
290
  "person": len(set(persons)),
291
  "amount": len(set(amounts)),
292
  "percent": len(set(percents)),
293
+ "total_replacements": len(companies) + len(persons) + len(amounts) + len(percents)
 
294
  }
295
 
296
  # جزئیات موجودیت‌ها
 
298
  "companies": sorted(list(set(companies)), key=lambda x: int(x)),
299
  "persons": sorted(list(set(persons)), key=lambda x: int(x)),
300
  "amounts": sorted(list(set(amounts)), key=lambda x: int(x)),
301
+ "percents": sorted(list(set(percents)), key=lambda x: int(x))
 
302
  }
303
 
304
  # تحلیل دقیق‌تر
 
319
  """اعتبارسنجی پیشرفته متن ناشناس‌شده"""
320
  import re
321
 
322
+ # استخراج همه موجودیت‌ها (group حذف شد)
323
  companies = re.findall(r'company-(\d+)', text)
324
  persons = re.findall(r'person-(\d+)', text)
325
  amounts = re.findall(r'amount-(\d+)', text)
326
  percents = re.findall(r'percent-(\d+)', text)
 
327
 
328
  validation_issues = []
329
 
 
332
  ("company", companies),
333
  ("person", persons),
334
  ("amount", amounts),
335
+ ("percent", percents)
 
336
  ]:
337
  if indices:
338
  unique_indices = sorted(list(set([int(x) for x in indices])))
 
358
  "company": len(set(companies)),
359
  "person": len(set(persons)),
360
  "amount": len(set(amounts)),
361
+ "percent": len(set(percents))
 
362
  }
363
  }
364
 
 
574
  <div class="stat-card">
575
  <h3>🏢 شرکت‌ها</h3>
576
  <h2>{stats.get('company', 0)}</h2>
577
+ <small>(شامل گروه‌ها)</small>
578
  </div>
579
  <div class="stat-card">
580
  <h3>👤 اشخاص</h3>
 
588
  <h3>📊 درصدها</h3>
589
  <h2>{stats.get('percent', 0)}</h2>
590
  </div>
 
 
 
 
591
  <div class="stat-card">
592
  <h3>🔢 کل تغییرات</h3>
593
  <h2>{stats.get('total_replacements', 0)}</h2>
 
621
  entities_md = "🏷️ **موجودیت‌های شناسایی شده:**\n\n"
622
 
623
  if entities.get("companies"):
624
+ entities_md += f"🏢 **شرکت‌ها (شامل گروه‌ها):** company-{', company-'.join(entities['companies'])}\n\n"
625
  if entities.get("persons"):
626
  entities_md += f"👤 **اشخاص:** person-{', person-'.join(entities['persons'])}\n\n"
627
  if entities.get("amounts"):
628
  entities_md += f"💰 **مبالغ:** amount-{', amount-'.join(entities['amounts'])}\n\n"
629
  if entities.get("percents"):
630
  entities_md += f"📊 **درصدها:** percent-{', percent-'.join(entities['percents'])}\n\n"
 
 
631
 
632
  # تحلیل دقیق
633
  detailed = result.get("detailed_analysis", {})
 
700
  # مثال‌های پیشرفته
701
  gr.Examples(
702
  examples=[
703
+ ["گزارش عملکرد ۵ ماهه سال 1403 نشان می‌دهد همراه اول در ۹ ماه سال 49 هزار میلیارد تومان درآمد کسب کرده و رشد 37 درصدی داشته است. سود ۳ ماهه اول به 8003 میلیارد تومان رسید."],
704
+ ["شرکت صنایع غذایی مینو شرق جزء واحد‌های تجاری فرعی شرکت صنعتی مینو و واحد‌های تجاری نهایی گروه شرکت اقتصادی و خودکفایی آزادگان می‌باشد. این شرکت در زمینه تولید انواع فرآورده‌های غذایی و صنایع تبدیلی به ویژه محصولات آردی از جمله انواع بیسکوئیت، کیک، ویفر، نان و محصولات شکری فعالیت می‌کند. شرکت در اسفند مقدار ۹۴ تن تافی با نرخ هر تن ۹ میلیون تومان فروخته است که نسبت به ماه قبل مقدار فروش ۲۲ درصد افزایش داشته است."],
705
+ ["صورت‌های مالی حسابرسی شده شرکت آسان پادرو منتهی به 30 آذر 1403 نشان می‌دهد این شرکت سال مالی جاری بیش از 6 میلیارد تومان زیان خالص شناسایی کرده است. پادرو سال مالی 1403 حدود 30 میلیارد تومان درآمد عملیاتی کسب کرد که این رقم در مقایسه با سال 1402 رشد تقریباً دوبرابری دارد."],
706
  ["بانک پاسارگاد با شناسایی سود خالص 155 هزار میلیارد ریالی در رده دوم سودآورترین بانک‌های کشور قرار گرفت."],
707
  ["مهدی اخوان بهابادی، مدیرعامل همراه اول، اعلام کرد درآمد عملیاتی شرکت با رشد 37 درصدی به 70 هزار و 677 میلیارد تومان رسیده است."],
 
708
  ["گروه دتا با سود خالص 45.3 میلیارد تومان و EPS برابر 2850 ریال، رشد 15.7 درصدی نسبت به مدت مشابه سال قبل داشته است."]
709
  ],
710
  inputs=input_text,
 
723
  - **API ساده:** سازگار با OpenAI
724
 
725
  ### 🏷️ انواع برچسب‌ها:
726
+ - **company-XX:** شرکت‌ها، سازمان‌ها، برندها، نهادها، **گروه‌ها**
727
+ - ⚠️ **مهم:** "گروه همراه اول"، "گروه اقتصادی آزادگان" → همه company-XX هستند
728
  - **person-XX:** اشخاص حقیقی (نام و نام‌خانوادگی)
 
729
  - **amount-XX:** تمام اعداد (پولی، تعدادی، حجمی، زمانی)
730
  - **percent-XX:** درصدها و بازه‌های درصدی
731
 
 
736
  - 📈 شاخص‌های مالی (EPS, P/E, ARPU, NPL)
737
  - 🗺️ نام مکان‌ها و آدرس‌ها
738
  - 📝 ساختار جمله و لحن
739
+ - ⏰ **دوره‌های زمانی:** "۵ ماهه سال"، "۹ ماهه"، "۳ ماهه اول" (حفظ می‌شوند)
740
 
741
  ### 🔍 کنترل کیفیت:
742
  - بررسی شروع اندیس‌ها از 01
 
750
  - در بازه‌های عددی: amount-01—amount-02
751
  - برای درصدها: percent-01—percent-02
752
  - اعداد چسبیده: "5هزار" → "amount-01 هزار"
753
+ - ⚠️ **دوره‌های زمانی حفظ می‌شوند:**
754
+ - "۵ ماهه سال" → حفظ (نه amount-XX)
755
+ - "۹ ماهه" → حفظ (نه amount-XX)
756
+ - "در ۹ ماه" → حفظ
757
+ - اما "۹ میلیون تومان" → amount-XX
758
 
759
  ### 🚀 مدل‌های موجود Cerebras:
760
  - `llama-3.3-70b`: مدل اصلی و قدرتمند (پیشنهادی)