# lnhash

Tokenización determinista con detección de dominio e idioma.

Convierte texto en `Togen`s — tokens hash con clasificación de dominio (lenguaje natural, código fuente, datos numéricos) y detección de idioma por perfiles de trigramas.

## Uso

```rust
use lnhash::{text_to_togens, detect_domain, detect_lang, RING_WORDS, RING_CODE};

let togens = text_to_togens("fn main() { return 42; }");
assert!(togens.iter().all(|t| t.ring == RING_CODE));
assert_eq!(detect_lang("El perro come pan"), 0); // español
```

## Togen

- `id: u32` — hash determinista, misma palabra → mismo hash siempre
- `ring: u8` — dominio: `RING_WORDS` (0), `RING_CODE` (1), `RING_DATA` (2)

## API

| Función | Descripción |
|---|---|
| `text_to_togens(text)` | Tokeniza texto en Vec\<Togen\>, filtra palabras ≤2 chars y números puros |
| `detect_domain(text)` | Clasifica en palabras (0), código (1) o datos (2) |
| `detect_lang(text)` | Detecta idioma: 0=es, 1=en, 2=fr, 3=pt, 4=genérico |
| `hash_word(word)` | Hash determinista de 32 bits |
| `hash_similarity(a, b)` | Similitud por distancia de Hamming (0.0–1.0) |
| `togen_frequencies(togens)` | Frecuencias de cada Togen id |

## Instalación

```bash
cargo add lnhash
```

## Licencia

MIT — parte del ecosistema SHCortex pero usable de forma independiente.
