KashefTech commited on
Commit
0615a86
·
verified ·
1 Parent(s): 44f4b05

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +18 -5
app.py CHANGED
@@ -151,8 +151,8 @@ class AnonymizerAdvanced:
151
  json_example += ' "person-01": "متن اصلی کامل",\n'
152
 
153
  if "company" in self.entities_to_anonymize:
154
- mapping_instructions.append('- برای company-XX: نام کامل شرکت/سازمان (مثلاً "شرکت پتروشیمی")')
155
- json_example += ' "company-01": "متن اصلی کامل",\n'
156
 
157
  if "amount" in self.entities_to_anonymize:
158
  mapping_instructions.append('- برای amount-XX: عدد + واحد (مثلاً "80 هزار تومان" یا "50 میلیارد ریال")')
@@ -218,7 +218,7 @@ class AnonymizerAdvanced:
218
  raise
219
 
220
  def _fix_percent_mapping(self):
221
- """اصلاح mapping برای درصدها"""
222
  for token, value in self.mapping_table.items():
223
  value_str = str(value).strip()
224
 
@@ -230,6 +230,13 @@ class AnonymizerAdvanced:
230
  elif token.startswith('amount-'):
231
  if not re.search(r'(میلیارد|میلیون|هزار|تومان|ریال|دلار|یورو|تن)', value_str):
232
  logger.warning(f"⚠️ {token}: فقط عدد '{value_str}' - واحد مشخص نیست")
 
 
 
 
 
 
 
233
 
234
  def _extract_mapping_from_text(self, original: str, anonymized: str):
235
  """استخراج mapping از متن‌های اصلی و ناشناس شده - فقط برای موجودیت‌های انتخابی"""
@@ -247,7 +254,8 @@ class AnonymizerAdvanced:
247
  if "person" in self.entities_to_anonymize:
248
  patterns['person'] = r'\b[ء-ي]+\s+[ء-ي]+(?:\s+[ء-ي]+)*\b'
249
  if "company" in self.entities_to_anonymize:
250
- patterns['company'] = r'(?:شرکت|بانک|سازمان|گروه|هلدینگ)\s+[ء-ي]+(?:\s+[ء-ي]+)*'
 
251
  if "amount" in self.entities_to_anonymize:
252
  patterns['amount'] = r'\d+(?:\.\d+)?\s*(?:میلیارد|میلیون|هزار|تومان|ریال|دلار|یورو|تن)'
253
  if "percent" in self.entities_to_anonymize:
@@ -256,7 +264,11 @@ class AnonymizerAdvanced:
256
  original_entities = {}
257
  for entity_type, pattern in patterns.items():
258
  matches = list(re.finditer(pattern, original))
259
- original_entities[entity_type] = [m.group().strip() for m in matches]
 
 
 
 
260
 
261
  for token, entity_type in all_tokens:
262
  if entity_type in original_entities and original_entities[entity_type]:
@@ -691,6 +703,7 @@ if __name__ == "__main__":
691
  print("💡 فقط gpt-4o-mini از Secret می‌خواند")
692
  print(" بقیه مدل‌ها نیاز به API key دارند")
693
  print(" اکنون می‌توانید موجودیت‌های خاص را انتخاب کنید")
 
694
  print("=" * 70 + "\n")
695
 
696
  app.launch(
 
151
  json_example += ' "person-01": "متن اصلی کامل",\n'
152
 
153
  if "company" in self.entities_to_anonymize:
154
+ mapping_instructions.append('- برای company-XX: فقط نام شرکت/سازمان بدون کلمه "شرکت" یا "بانک" (مثلاً فقط "پتروشیمی" نه "شرکت پتروشیمی")')
155
+ json_example += ' "company-01": "نام بدون کلمه شرکت/بانک",\n'
156
 
157
  if "amount" in self.entities_to_anonymize:
158
  mapping_instructions.append('- برای amount-XX: عدد + واحد (مثلاً "80 هزار تومان" یا "50 میلیارد ریال")')
 
218
  raise
219
 
220
  def _fix_percent_mapping(self):
221
+ """اصلاح mapping برای درصدها و حذف کلمه شرکت/بانک از نام شرکت‌ها"""
222
  for token, value in self.mapping_table.items():
223
  value_str = str(value).strip()
224
 
 
230
  elif token.startswith('amount-'):
231
  if not re.search(r'(میلیارد|میلیون|هزار|تومان|ریال|دلار|یورو|تن)', value_str):
232
  logger.warning(f"⚠️ {token}: فقط عدد '{value_str}' - واحد مشخص نیست")
233
+
234
+ elif token.startswith('company-'):
235
+ # ✅ حذف کلمه "شرکت"، "بانک"، "سازمان"، "گروه"، "هلدینگ" از ابتدای نام
236
+ cleaned = re.sub(r'^(شرکت|بانک|سازمان|گروه|هلدینگ)\s+', '', value_str)
237
+ if cleaned != value_str:
238
+ self.mapping_table[token] = cleaned
239
+ logger.info(f"✅ اصلاح {token}: '{value_str}' → '{cleaned}'")
240
 
241
  def _extract_mapping_from_text(self, original: str, anonymized: str):
242
  """استخراج mapping از متن‌های اصلی و ناشناس شده - فقط برای موجودیت‌های انتخابی"""
 
254
  if "person" in self.entities_to_anonymize:
255
  patterns['person'] = r'\b[ء-ي]+\s+[ء-ي]+(?:\s+[ء-ي]+)*\b'
256
  if "company" in self.entities_to_anonymize:
257
+ # الگو برای استخراج نام شرکت بدون کلمه شرکت/بانک/...
258
+ patterns['company'] = r'(?:شرکت|بانک|سازمان|گروه|هلدینگ)\s+([ء-ي\s]+)'
259
  if "amount" in self.entities_to_anonymize:
260
  patterns['amount'] = r'\d+(?:\.\d+)?\s*(?:میلیارد|میلیون|هزار|تومان|ریال|دلار|یورو|تن)'
261
  if "percent" in self.entities_to_anonymize:
 
264
  original_entities = {}
265
  for entity_type, pattern in patterns.items():
266
  matches = list(re.finditer(pattern, original))
267
+ if entity_type == 'company':
268
+ # ✅ فقط گروه اول (بدون کلمه شرکت/بانک/...)
269
+ original_entities[entity_type] = [m.group(1).strip() for m in matches]
270
+ else:
271
+ original_entities[entity_type] = [m.group().strip() for m in matches]
272
 
273
  for token, entity_type in all_tokens:
274
  if entity_type in original_entities and original_entities[entity_type]:
 
703
  print("💡 فقط gpt-4o-mini از Secret می‌خواند")
704
  print(" بقیه مدل‌ها نیاز به API key دارند")
705
  print(" اکنون می‌توانید موجودیت‌های خاص را انتخاب کنید")
706
+ print(" کلمه 'شرکت' از ابتدای نام شرکت‌ها حذف می‌شود")
707
  print("=" * 70 + "\n")
708
 
709
  app.launch(