Skip to content

Instantly share code, notes, and snippets.

@gusdelact
Created April 12, 2025 08:05
Show Gist options
  • Save gusdelact/c684bfd263d1b713634216a224ac9b45 to your computer and use it in GitHub Desktop.
Save gusdelact/c684bfd263d1b713634216a224ac9b45 to your computer and use it in GitHub Desktop.

Transformar un documento de texto en un grafo de conocimiento en Neo4j implica extraer entidades y relaciones del texto, y luego estructurarlas como nodos y aristas. Aquí te dejo los pasos:


🧠 ¿Qué es lo que quieres lograr?

Pasar de esto:

“Ada Lovelace nació en Londres en 1815. Fue hija de Lord Byron.”

A esto en Neo4j:

(:Persona {nombre: "Ada Lovelace"}) 
  -[:NACIO_EN {año:1815}]-> 
(:Lugar {nombre: "Londres"})

(:Persona {nombre: "Ada Lovelace"}) 
  -[:HIJA_DE]-> 
(:Persona {nombre: "Lord Byron"})

🛠️ PASO A PASO

1. Procesamiento del texto (NLP)

Primero, usa herramientas como:

  • spaCy (muy usado con Neo4j)
  • Hugging Face transformers
  • LLM (como GPT o Claude) con ReAct para extraer triples

🔍 Extrae:

  • Entidades (personas, lugares, fechas…)
  • Relaciones (acciones o vínculos)
  • Atributos

2. Transforma en triples RDF o JSON tipo:

[
  {"sujeto": "Ada Lovelace", "relacion": "nació_en", "objeto": "Londres", "año": 1815},
  {"sujeto": "Ada Lovelace", "relacion": "hija_de", "objeto": "Lord Byron"}
]

3. Crea nodos y relaciones en Neo4j (con Cypher)

MERGE (p:Persona {nombre: "Ada Lovelace"})
MERGE (l:Lugar {nombre: "Londres"})
MERGE (p)-[:NACIO_EN {año:1815}]->(l)

MERGE (b:Persona {nombre: "Lord Byron"})
MERGE (p)-[:HIJA_DE]->(b)

4. Automatiza con Python

Con py2neo o neo4j-driver, puedes hacer un script para procesar muchos documentos.


5. (Opcional) Enriquecimiento semántico

  • Agrega tipos (clases): :Persona, :Lugar, :Evento
  • Usa un vocabulario u ontología si deseas interoperabilidad

🧰 Herramientas útiles

Herramienta Uso principal
spaCy NER, relaciones
Neo4j + Cypher Modelado y visualización
Neosemantics (n10s) Si usas RDF/OWL
GPT / LLMs Extracción de triples explicativos
LangChain Orquestar agentes para NLP + Neo4j

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment