Build Nodes and Edges from Evidence Records
import json
nodes: set[tuple[str, str]] = set()
edges: list[dict[str, str]] = []
with open("evidence.jsonl", encoding="utf-8") as source:
for line in source:
record = json.loads(line)
observable = record["observable"]
source_name = record["source"]
nodes.add(("observable", observable))
nodes.add(("source", source_name))
edges.append({
"from": observable,
"to": source_name,
"relationship": "observed in",
"observed_at": record["observed_at"],
"confidence": record["confidence"],
})
print(json.dumps({"nodes": sorted(nodes), "edges": edges}, indent=2))
Sort Relationships into a Timeline
import csv
from datetime import datetime
with open("relationships.csv", encoding="utf-8") as source:
rows = list(csv.DictReader(source))
rows.sort(key=lambda row: datetime.fromisoformat(row["observed_at"].replace("Z", "+00:00")))
for row in rows:
print(
row["observed_at"],
row["subject"],
row["relationship"],
row["object"],
row["source"],
sep="\t",
)