leilaghomashchi commited on
Commit
b342cf5
·
verified ·
1 Parent(s): d559073

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +58 -57
app.py CHANGED
@@ -14,8 +14,8 @@ class GroqConfig:
14
  """تنظیمات Groq API"""
15
  api_key: str
16
  base_url: str = "https://api.groq.com/openai/v1"
17
- model: str = "llama-3.1-8b-instant"
18
- max_tokens: int = 1500
19
  temperature: float = 0.1
20
 
21
  class GroqAnonymizer:
@@ -33,37 +33,23 @@ class GroqAnonymizer:
33
 
34
  def _create_system_prompt(self) -> str:
35
  """ایجاد دستورالعمل سیستمی برای Groq"""
36
- return """شما یک سیستم ناشناس‌سازی متن فارسی هستید. وظیفه شما تشخیص و جایگزینی موجودیت‌های حساس در متن است.
37
 
38
- قوانین ناشناس‌سازی:
39
- 1. نام شرکت‌ها را با company-01, company-02, ... جایگزین کنید
40
- 2. نام افراد را با person-01, person-02, ... جایگزین کنید
41
- 3. مبالغ و اعداد را با amount-01, amount-02, ... جایگزین کنید
42
- 4. درصدها را با percent-01, percent-02, ... جایگزین کنید
43
- 5. نام گروه‌ها را با group-01, group-02, ... جایگزین کنید
44
 
45
- نکات مهم:
46
- - اگر همان موجودیت تکرار شود، همان شماره را استفاده کنید
47
- - پیشوندهای افراد (دکتر، مهندس، آقا، خانم) را حفظ کنید
48
- - فقط موجودیت‌های حساس را تغییر دهید، بقیه متن دست نخورده باقی بماند
49
- - خروجی را فقط به صورت JSON با فیلدهای زیر ارائه دهید:
50
- {
51
- "anonymized_text": "متن ناشناس‌سازی شده",
52
- "entities": [
53
- {
54
- "original": "متن اصلی",
55
- "anonymized": "متن جایگزین",
56
- "type": "نوع موجودیت"
57
- }
58
- ],
59
- "statistics": {
60
- "company": تعداد,
61
- "person": تعداد,
62
- "amount": تعداد,
63
- "percent": تعداد,
64
- "group": تعداد
65
- }
66
- }"""
67
 
68
  def _make_api_request(self, text: str) -> Dict[str, Any]:
69
  """ارسال درخواست به Groq API"""
@@ -120,38 +106,53 @@ class GroqAnonymizer:
120
 
121
  content = response["choices"][0]["message"]["content"]
122
 
123
- try:
124
- # حذف markdown formatting
125
- if "```json" in content:
126
- content = content.split("```json")[1].split("```")[0]
127
- elif "```" in content:
128
- content = content.split("```")[1].split("```")[0]
129
-
130
- result = json.loads(content.strip())
131
-
132
- return {
133
- "success": True,
134
- "anonymized_text": result.get("anonymized_text", ""),
135
- "entities": result.get("entities", []),
136
- "statistics": result.get("statistics", {}),
137
- "usage": response.get("usage", {})
138
- }
139
-
140
- except json.JSONDecodeError:
141
- return {
142
- "success": True,
143
- "anonymized_text": content,
144
- "entities": [],
145
- "statistics": {},
146
- "usage": response.get("usage", {}),
147
- "note": "پاسخ به صورت JSON قابل پارس نبود"
148
- }
149
 
150
  except Exception as e:
151
  return {
152
  "success": False,
153
  "error": f"خطا در پردازش: {str(e)}"
154
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
155
 
156
  def create_interface():
157
  """ایجاد رابط کاربری برای Hugging Face Spaces"""
 
14
  """تنظیمات Groq API"""
15
  api_key: str
16
  base_url: str = "https://api.groq.com/openai/v1"
17
+ model: str = "llama-3.1-8b-instant"
18
+ max_tokens: int = 1000
19
  temperature: float = 0.1
20
 
21
  class GroqAnonymizer:
 
33
 
34
  def _create_system_prompt(self) -> str:
35
  """ایجاد دستورالعمل سیستمی برای Groq"""
36
+ return """شما یک سیستم ناشناس‌سازی متن فارسی هستید.
37
 
38
+ وظیفه: تشخیص و جایگزینی موجودیت‌های حساس:
 
 
 
 
 
39
 
40
+ 1. نام شرکت‌ها → company-01, company-02, ...
41
+ 2. نام افراد person-01, person-02, ...
42
+ 3. مبالغ و اعداد amount-01, amount-02, ...
43
+ 4. درصدها percent-01, percent-02, ...
44
+
45
+ نکات:
46
+ - همان موجودیت = همان شماره
47
+ - پیشوندها (دکتر، آقا) را حفظ کنید
48
+ - فقط متن ناشناس‌سازی شده را برگردانید، بدون JSON یا توضیح اضافی
49
+
50
+ مثال:
51
+ ورودی: احمد رضایی مدیرعامل شرکت پارس 100 میلیون تومان درآمد دارد
52
+ خروجی: person-01 مدیرعامل company-01 amount-01 درآمد دارد"""
 
 
 
 
 
 
 
 
 
53
 
54
  def _make_api_request(self, text: str) -> Dict[str, Any]:
55
  """ارسال درخواست به Groq API"""
 
106
 
107
  content = response["choices"][0]["message"]["content"]
108
 
109
+ # پاک کردن markdown اگر وجود دارد
110
+ if "```" in content:
111
+ lines = content.split('\n')
112
+ clean_lines = []
113
+ skip = False
114
+ for line in lines:
115
+ if line.strip().startswith('```'):
116
+ skip = not skip
117
+ continue
118
+ if not skip:
119
+ clean_lines.append(line)
120
+ content = '\n'.join(clean_lines)
121
+
122
+ # حذف خطوط اضافی و فضاهای خالی
123
+ content = content.strip()
124
+
125
+ return {
126
+ "success": True,
127
+ "anonymized_text": content,
128
+ "entities": [], # در حالت ساده entities نداریم
129
+ "statistics": self._count_entities(content),
130
+ "usage": response.get("usage", {})
131
+ }
 
 
 
132
 
133
  except Exception as e:
134
  return {
135
  "success": False,
136
  "error": f"خطا در پردازش: {str(e)}"
137
  }
138
+
139
+ def _count_entities(self, text: str) -> Dict[str, int]:
140
+ """شمارش موجودیت‌ها در متن ناشناس‌سازی شده"""
141
+ import re
142
+
143
+ company_count = len(re.findall(r'company-\d+', text))
144
+ person_count = len(re.findall(r'person-\d+', text))
145
+ amount_count = len(re.findall(r'amount-\d+', text))
146
+ percent_count = len(re.findall(r'percent-\d+', text))
147
+ group_count = len(re.findall(r'group-\d+', text))
148
+
149
+ return {
150
+ "company": company_count,
151
+ "person": person_count,
152
+ "amount": amount_count,
153
+ "percent": percent_count,
154
+ "group": group_count
155
+ }
156
 
157
  def create_interface():
158
  """ایجاد رابط کاربری برای Hugging Face Spaces"""