---
name: normalize_entity_name
kind: function
lang: py
domain: core
version: "1.0.0"
purity: pure
signature: "def normalize_entity_name(name: str, entity_type: str = \"\") -> str"
description: "Normaliza el nombre de una entidad para comparacion y deduplicacion. Aplica reglas distintas segun el tipo: ip/email/domain/crypto_wallet/phone usan normalizacion tecnica; person remueve titulos y convierte formato Apellido-Nombre; organization elimina sufijos legales; default aplica lower+strip+colapso de espacios."
tags: [normalize, entity, name, deduplication, osint, fuzzygraph, nlp, text]
uses_functions: []
uses_types: []
returns: []
returns_optional: false
error_type: ""
imports: [re]
params:
  - name: name
    desc: "Nombre de la entidad a normalizar"
  - name: entity_type
    desc: "Tipo de entidad para aplicar reglas específicas (person, organization, email, domain, ip, etc.)"
output: "Nombre normalizado según el tipo de entidad"
tested: true
tests:
  - "person strip whitespace"
  - "person apellido nombre"
  - "person titulo"
  - "organization llc"
  - "organization corp"
  - "ip sin cambio"
  - "email lowercase"
  - "domain www y trailing dot"
  - "phone formato"
  - "default lowercase"
  - "default colapsa espacios"
  - "crypto wallet case sensitive"
  - "domain solo trailing dot"
  - "person prof titulo"
test_file_path: "python/functions/core/normalize_entity_name_test.py"
file_path: "python/functions/core/normalize_entity_name.py"
---

## Ejemplo

```python
# Persona con titulo y whitespace
normalize_entity_name("  Dr. Jane Doe  ", "person")   # "Jane Doe"

# Formato apellido-nombre
normalize_entity_name("Smith, John", "person")          # "John Smith"

# Organizacion con sufijo legal
normalize_entity_name("Google LLC", "organization")     # "Google"
normalize_entity_name("ACME Corp.", "organization")     # "Acme"

# Tecnico: dominio con www y trailing dot
normalize_entity_name("www.example.com.", "domain")     # "example.com"

# Email case-insensitive
normalize_entity_name("user@GMAIL.com", "email")        # "user@gmail.com"

# Telefono: solo digitos y +
normalize_entity_name("+1 (555) 123-4567", "phone")     # "+15551234567"

# Crypto wallet es case-sensitive
normalize_entity_name("1A1zP1eP5QGefi2DMPTfTL5SLmv7Divf", "crypto_wallet")
# "1A1zP1eP5QGefi2DMPTfTL5SLmv7Divf" (sin cambio de case)

# Default
normalize_entity_name("  Hello   WORLD  ")              # "hello world"
```

## Notas

Disenada para el modulo fuzzygraph donde entidades de distintos tipos necesitan normalizacion previa a la comparacion y deduplicacion.

El parametro `entity_type` es case-insensitive. Valores soportados: `ip`, `email`, `domain`, `crypto_wallet`, `phone`, `person`, `organization`. Cualquier otro valor (incluido string vacio) activa el comportamiento default.

Bitcoin y otras crypto addresses son case-sensitive por diseno — el tipo `crypto_wallet` solo aplica strip sin cambiar el case.

Los titulos de persona reconocidos incluyen: Dr, Mr, Mrs, Ms, Miss, Prof, Sr, Jr, Ing, Lic, Gen, Col, Maj, Capt, Sgt, Rev, Hon (con o sin punto final).

Los sufijos legales de organizacion reconocidos incluyen: Inc, LLC, Ltd, Corp, Co, SA, GmbH, BV, NV, PLC, AG, SRL, SL, Pty, LP, LLP, LLLP, PC, PA, PLLC, Foundation, Group, Holdings, Enterprises, International, Industries, Services, Solutions, Systems, Technologies.
