352b27d488
split_sentences a menudo no llega al umbral de 50 (un texto medio tiene 5-15 frases). split_words tokeniza el mismo notes en palabras y trivialmente lo supera con cualquier parrafo decente -> Group visible y testeable end-to-end sin necesidad de pegar megabytes. Diferencias respecto a split_sentences: * Splits por regex de letras (incluye acentos espanyoles + apostrofo interno como "don't"). Numeros y puntuacion ignorados. * Lowercase + filtro por min_length (default 3, filtra a/el/de/y/o). * Param `dedupe` (default true): vocabulario unico vs cada ocurrencia. Con dedupe=false sirve como stress test de volumen. * Tipo `Word` en types.yaml: amarillo, ti-letter-w, principal_field=word. * Relacion `WORD_OF` desde cada Word al source. * Mismo patron de grouping que split_sentences (threshold 50, K=10 preview, batch_id en metadata, Group con count + enricher). Tests: * below threshold no crea Group. * >=50 tokens unicos -> Group + 10 sueltos + resto agrupados. * dedupe=true (default) colapsa repeticiones; dedupe=false las conserva como nodos separados. * min_length filtra correctamente. * notes prioriza sobre node_name. * texto vacio -> exit 2. * max_words trunca. WSL 89 / Windows 78 + 11 skipped.
11 lines
655 B
YAML
11 lines
655 B
YAML
id: split_words
|
|
name: "Split text into words"
|
|
description: "Tokeniza el texto del nodo (entities.notes con fallback a name) en palabras y crea un nodo Word por cada token. Pensado para probar grouping con volumen alto: cualquier parrafo decente supera el umbral de 50 trivialmente."
|
|
applies_to: [text, Text]
|
|
emits: [Word]
|
|
relations: [WORD_OF]
|
|
params:
|
|
- { name: max_words, type: int, default: 500 }
|
|
- { name: min_length, type: int, default: 3, description: "ignora tokens con menos de N caracteres (filtra ruido tipo 'a', 'el', 'de')" }
|
|
- { name: dedupe, type: bool, default: true, description: "si true, una palabra repetida produce un solo nodo" }
|