Spaces:
No application file
No application file
Update app.py
Browse files
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": "
|
| 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 |
-
|
|
|
|
| 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 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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(
|