Klarety

Grafo de conocimiento

Defina, construya y recorra el grafo de las entidades de sus datos y cómo se relacionan.

Para desarrolladores

El muestra las entidades de sus datos (clientes, pedidos, sedes) y cómo se relacionan. No se copia nada: un tipo de nodo es una con una clave, y un tipo de arista dice cómo se conectan dos tipos de nodo.

Úselo para recorrer lo que rodea a un registro, encontrar el camino más corto entre dos registros, o encontrar registros que son la misma cosa real.

En la app, explore el grafo en Datos, en Grafo de conocimiento.

Antes de empezar

  • Las tablas que quiere en el grafo existen y tienen una columna clave.
  • Todos los ejemplos suponen nexus = Nexus.connect().

Vea qué hay

overview = nexus.knowledge_graph.overview()   # node types with row counts, and edge types
print(overview)
print(nexus.knowledge_graph.status())          # when each edge type was last built

Cambie la definición

La definición nombra tablas y columnas existentes, y se revisa antes de guardarse.

Lea, edite y guarde

from klarety import ConflictError, RefusedError

current = nexus.knowledge_graph.definition()
definition = current["definition"]
# change the node and edge types here

try:
    nexus.knowledge_graph.define(definition, version=current["version"])
except (ConflictError, RefusedError) as refused:
    print("Not saved. Read the graph again if it changed:", refused)

define() reemplaza completa su parte de la definición, y se rechaza si el grafo cambió desde que leyó version.

Revísela contra sus datos

for result in nexus.knowledge_graph.check("customer", "order"):
    print(result)

check() recibe de 1 a 16 nombres de tipo e informa claves faltantes o repetidas y aristas que no apuntan a nada.

Construya aristas inferidas

nexus.knowledge_graph.build()                   # every edge type you may build
nexus.knowledge_graph.build("same_customer", rebuild=True)

La construcción corre en segundo plano; revise status() para saber cuándo termina.

Para agregar aristas que ya conoce, envíe hasta 1.000 a la vez; cada una se conserva solo si existen ambas filas:

queued = nexus.knowledge_graph.assert_edges("supplies", edges)

Recorra el grafo

Parta de un registro

keys = nexus.knowledge_graph.nodes("customer", starts_with="ACME")
around = nexus.knowledge_graph.around("customer", keys[0], hops=2)
for node in around["nodes"]:
    print(node)

around() devuelve los nodos a hops saltos (como máximo 3), los más cercanos primero. Pase next_cursor como cursor para la página siguiente. stopped_at_budget significa que el recorrido llegó primero al presupuesto de su plan.

Encuentre un camino

paths = nexus.knowledge_graph.path(("customer", "C-1"), ("supplier", "S-9"), hops=4)

path() devuelve las formas más cortas en que un registro llega a otro, paso a paso, dentro de hops (como máximo 4). Queda vacío cuando no hay ninguna.

Iguales, parecidos y centrales

nexus.knowledge_graph.same_as("customer", "C-1")                  # the same real thing
nexus.knowledge_graph.similar("product", "embedding", vector)     # nearest by a vector column
nexus.knowledge_graph.communities()                               # groups
nexus.knowledge_graph.central(node_type="customer")               # most connected

Busque en todo a la vez

nexus.search() ordena en una sola lista los archivos por su nombre y etiquetas, las filas más cercanas a un vector y aquello con lo que se conectan esas filas:

for hit in nexus.search("solar panel invoice", limit=10):
    print(hit)

Qué puede salir mal

ExcepciónCausaQué hacer
ConflictError o RefusedError en define()La definición cambió desde que la leyó, o nombra algo que no existe.Léala de nuevo y vuelva a aplicar su cambio, o corrija los nombres.
RefusedErrorLa definición nombra una tabla o columna que no existe, o no puede llegar a ella.Corrija los nombres.
ValueErrorLlamó a check() sin nombres.Nombre de 1 a 16 tipos.

Próximos pasos

En esta página