feat: enrichers offline split_sentences + extract_iocs_text

Para probar la app sin depender de red (DDG bloquea con captcha desde
ciertas IPs). Ambos aplican grouping (umbral 50, preview K=10) replicando
el patron de web_search.

- split_sentences: parte texto en frases (regex), crea nodos Sentence
  conectados con SENTENCE_OF.
- extract_iocs_text: variante de extract_text_entities que lee directo
  metadata.text/description/name, sin requerir fetch previo. Vendoriza
  extract_iocs_py_cybersecurity. Multi-tipo, agrupado en un solo Group
  heterogeneo (decision 6 multi-grupo-por-tipo es fase 2).
- Tipo Sentence en types.yaml.

Tests pytest cubren below/above threshold para ambos.
This commit is contained in:
2026-05-03 15:20:39 +02:00
parent 092ad2801e
commit 0e435c2e21
7 changed files with 934 additions and 0 deletions
+12
View File
@@ -122,6 +122,18 @@ entities:
- { name: text_length, type: int }
- { name: lang, type: string }
# Sentence — fragmento de texto producido por split_sentences. Color
# violeta para distinguirlo de Text/Document; principal_field=text para
# que el viewport muestre el contenido completo en el inspector.
- name: Sentence
color: "#A78BFA"
icon: ti-quote
principal_field: text
fields:
- { name: text, type: string, required: true }
- { name: rank, type: int }
- { name: batch_id, type: string }
# Nodo grupo — cuadrado (regla de forma). Issue 0035: contenedor para
# agrupar resultados de enrichers cuando exceden el umbral. Los hijos
# son entidades reales con `group_id` apuntando al Group.