llms.md: - Only Groq/OpenAI/LiteLLM/HuggingFaceLLM are exported — remove non-exported Anthropic/Ollama/Gemini/DeepSeek/Novita as direct imports - Rename HuggingFace -> HuggingFaceLLM (correct class name) - Remove non-existent create_provider() — replace with LiteLLM provider/model pattern - Add LiteLLM 100+ providers section with provider/model string examples - Add Exported Classes table (class -> provider -> API key) - Update Provider Comparison table to show correct import per provider ontology.md: - Remove non-existent OntologyManager — replace with OntologyEngine facade - Remove non-existent start_explorer() — replace with CLI: semantica-explorer - SHACLValidator -> OntologyValidator (correct exported name) - OWLExporter -> OWLGenerator (correct exported name) - Add Exported Classes block with all 15+ exported symbols - Add LLMOntologyGenerator section, NamespaceManager section - Add OntologyEvaluator section with coverage/completeness metrics - Add ingest_ontology() section - Add versioning moved-to note (change_management module) kg.md: - TemporalKnowledgeGraph does not exist — replace with TemporalGraphQuery - DistanceCalculator does not exist — replace with SimilarityCalculator - Add Exported Classes block with all 20+ exported symbols - Fix temporal example to use TemporalGraphQuery + TemporalVersionManager correctly - Add SimilarityCalculator section with NodeEmbedder integration example provenance.md: - ActivityTracker not exported — remove; ProvenanceManager handles tracking - Fix track_entity() signature: add source_location, source_quote params - Fix GraphBuilderWithProvenance import: from semantica.kg, not semantica.provenance - Add Exported Classes block with storage backends and checksum utilities - Add SourceReference section with DOI/page/quote fields - Add tamper-evident checksum section (compute_checksum/verify_checksum) - Add Enable Provenance in Extractors section - Fix duplicate heading (W3C PROV-O Export appeared twice) reasoning.md: - Add Exported Classes block with all engines + data types + explanation types - Add Quick Start section - Add Choosing an Engine comparison table - Add InferenceResult/Explanation/ReasoningStep type annotations in examples - Add Tip: use DatalogReasoner for recursive rules semantic_extract.md: - Add Exported Classes block with NamedEntityRecognizer, EventDetector, Entity, Relation, Event, CoreferenceChain, EntityClassifier, TemporalEventProcessor - Add Quick Start section (one-liner extraction pipeline) - Rename EventExtractor -> EventDetector (correct exported name) - Clarify NERExtractor vs NamedEntityRecognizer distinction - Add return type annotations to EventDetector example core.md: - Add Exported Classes block - Add When to Use Core vs. Individual Modules decision table - Add Tip: LifecycleManager only for long-running apps - Fix MethodRegistry example to import build_knowledge_base correctly parse.md: - Add Exported Classes block with all format-specific parsers + data types - Add DoclingParser optional import note utils.md: - Add Exported Classes block with logging/validation/progress/helpers/exceptions deduplication.md: - Add Exported Classes block with PropertyMergeRule, MergeStrategyManager, method_registry, and all convenience functions export.md: - Add Exported Classes block with all exporters, NamespaceManager, SemanticNetworkYAMLExporter, and all convenience functions
10 KiB
title, description, icon
| title | description | icon |
|---|---|---|
| Knowledge Graph Module | Graph construction, temporal models, analytics, similarity scoring, and structural embeddings. | diagram-project |
semantica.kg transforms extracted entities and relationships into structured, queryable knowledge graphs. It includes temporal support, a full suite of graph analytics algorithms, node embeddings, and structural similarity scoring.
Exported Classes
from semantica.kg import (
KnowledgeGraph, # core graph data structure
GraphBuilder, # construct from entities + relationships
GraphBuilderWithProvenance, # auto-tracks provenance for every node/edge
EntityResolver, # entity deduplication during construction
GraphAnalyzer, # temporal evolution, diversity metrics
GraphValidator, # schema and constraint validation
TemporalGraphQuery, # point-in-time snapshots, diffs, interval queries
TemporalPatternDetector, # sequence/cycle/trend detection
TemporalVersionManager, # snapshot creation and version comparison
TemporalNormalizer, # normalize timestamps across granularities
BiTemporalFact, # bi-temporal fact model (transaction + valid time)
CentralityCalculator, # degree, betweenness, closeness, PageRank, eigenvector
CommunityDetector, # Louvain, Leiden, Label Propagation, K-Clique
PathFinder, # Dijkstra, A*, BFS, K-Shortest paths
LinkPredictor, # Preferential Attachment, Jaccard, Adamic-Adar
NodeEmbedder, # Node2Vec, DeepWalk structural embeddings
SimilarityCalculator, # cosine, Euclidean, Manhattan, correlation similarity
ConnectivityAnalyzer, # connected components, bridges, density
ProvenanceTracker, # source tracking and lineage management
)
What You Get
GraphBuilder— construct graphs from entities and relationships with automatic entity mergingTemporalGraphQuery— time-aware point-in-time snapshots, diffs, and Allen interval queries (v0.4.0)SimilarityCalculator— cosine, Euclidean, Manhattan, and correlation similarity scoringCentralityCalculator— PageRank, degree, betweenness, closeness, eigenvector centralityCommunityDetector— Louvain, Leiden, Label Propagation, K-Clique community detectionPathFinder— Dijkstra, A*, BFS, K-Shortest path algorithmsLinkPredictor— Preferential Attachment, Jaccard, Adamic-Adar link predictionNodeEmbedder— Node2Vec, DeepWalk structural embeddings
<img src="/assets/img/diagrams/kg-structure.svg" alt="Knowledge graph entity and relation structure: Person, Organization, Location, Date nodes with typed labeled edges" style={{ width: '100%', borderRadius: '12px', margin: '0 0 24px' }} />
GraphBuilder
Constructs knowledge graphs from extracted entities and relationships:
from semantica.kg import GraphBuilder
builder = GraphBuilder(merge_entities=True)
kg = builder.build(entities=entities, relationships=relationships)
| Method | Description |
|---|---|
build(sources) |
Build graph from multiple data sources |
build_single_source(data) |
Build graph from a single data source |
merge_entities() |
Deduplicate and merge entities during construction |
Temporal Knowledge Graphs (v0.4.0)
Use TemporalGraphQuery to attach valid_from/valid_until windows and query time-aware graphs:
from semantica.kg import GraphBuilder, TemporalGraphQuery, TemporalVersionManager
from datetime import datetime
# Build a time-aware graph
builder = GraphBuilder()
kg = builder.build(sources=[
{
"entities": [
{"id": "alice", "type": "Person"},
{"id": "acme_corp", "type": "Organization"},
],
"relationships": [
{
"source": "alice", "target": "acme_corp", "type": "ceo_of",
"valid_from": "2020-01-01",
"valid_until": "2023-06-01",
}
]
}
])
# Point-in-time snapshot
query = TemporalGraphQuery(kg)
snapshot_2021 = query.at_time("2021-06-15")
snapshot_2023 = query.at_time("2023-01-01")
# Diff between two snapshots
diff = query.diff("2020-01-01", "2023-01-01")
print(f"New nodes since 2020: {len(diff.get('added_nodes', []))}")
# Versioned snapshots
versioner = TemporalVersionManager()
versioner.create_snapshot(kg, version_label="2024-Q1")
Supports all 13 Allen interval algebra relations (before, after, meets, overlaps, during, starts, finishes, equals, and their inverses). OWL-Time export available.
Similarity Scoring
SimilarityCalculator computes cosine, Euclidean, Manhattan, and correlation similarity between node embeddings:
from semantica.kg import SimilarityCalculator, NodeEmbedder
# First compute structural embeddings
embedder = NodeEmbedder(method="node2vec", embedding_dimension=128)
embeddings = embedder.compute_embeddings(kg, ["Person", "Organization"], ["RELATED_TO"])
# Then compare nodes by embedding similarity
calc = SimilarityCalculator()
score = calc.cosine_similarity(embeddings["Apple Inc."], embeddings["Google"])
print(f"Apple–Google structural similarity: {score:.3f}")
# Find structurally similar nodes
similar = embedder.find_similar_nodes(kg, "Apple Inc.", top_k=5)
for node in similar:
print(f"{node['id']}: {node['score']:.3f}")
Graph Analytics
Centrality Analysis
from semantica.kg import CentralityCalculator
calculator = CentralityCalculator()
centrality = calculator.calculate_degree_centrality(graph)
pagerank = calculator.calculate_pagerank(graph, damping_factor=0.85)
betweenness = calculator.calculate_betweenness_centrality(graph)
closeness = calculator.calculate_closeness_centrality(graph)
eigenvector = calculator.calculate_eigenvector_centrality(graph)
all_metrics = calculator.calculate_all_centrality(graph)
top_nodes = calculator.get_top_nodes(centrality, top_k=10)
| Method | Algorithm |
|---|---|
calculate_degree_centrality() |
Degree-based importance |
calculate_betweenness_centrality() |
Bridge-based importance (bottleneck nodes) |
calculate_closeness_centrality() |
Distance-based importance |
calculate_eigenvector_centrality() |
Influence-based importance |
calculate_pagerank() |
Link-based importance (PageRank) |
calculate_all_centrality() |
All measures at once |
Community Detection
from semantica.kg import CommunityDetector
detector = CommunityDetector()
# Louvain (default — fast, high quality)
communities = detector.detect_communities(graph, algorithm="louvain")
# Leiden (higher quality, slower)
leiden_communities = detector.detect_communities_leiden(graph, resolution=1.2)
metrics = detector.calculate_community_metrics(graph, communities)
Algorithms: Louvain, Leiden, Label Propagation, K-Clique Communities.
Path Finding
from semantica.kg import PathFinder
finder = PathFinder()
path = finder.dijkstra_shortest_path(graph, "node_a", "node_b")
paths = finder.all_shortest_paths(graph, "source", "target")
k_paths = finder.find_k_shortest_paths(graph, "source", "target", k=3)
Algorithms: Dijkstra, A*, BFS, All Shortest Paths, K-Shortest Paths.
Link Prediction
from semantica.kg import LinkPredictor
predictor = LinkPredictor(method="preferential_attachment")
links = predictor.predict_links(graph, top_k=20)
score = predictor.score_link(graph, "node_a", "node_b")
Algorithms: Preferential Attachment, Common Neighbors, Jaccard, Adamic-Adar, Resource Allocation.
Node Embeddings
from semantica.kg import NodeEmbedder
embedder = NodeEmbedder(method="node2vec", embedding_dimension=128)
embeddings = embedder.compute_embeddings(graph_store, ["Entity"], ["RELATED_TO"])
similar_nodes = embedder.find_similar_nodes(graph_store, "entity_123", top_k=10)
Algorithms: Node2Vec, DeepWalk, Word2Vec.
Algorithm Summary
| Category | Algorithms | Use Cases |
|---|---|---|
| Node Embeddings | Node2Vec, DeepWalk, Word2Vec | Structural similarity, node representation |
| Similarity | Cosine, Euclidean, Manhattan, Correlation | Node matching, recommendation |
| Path Finding | Dijkstra, A*, BFS, K-Shortest | Route planning, network analysis |
| Link Prediction | Preferential Attachment, Jaccard, Adamic-Adar | Network completion |
| Centrality | Degree, Betweenness, Closeness, PageRank | Influence analysis |
| Community Detection | Louvain, Leiden, Label Propagation | Social clustering |
| Connectivity | Components, Bridges, Density | Network robustness |
Configuration
kg:
resolution:
threshold: 0.9
strategy: semantic
temporal:
enabled: true
default_validity: infinite
Cookbooks
- Building Knowledge Graphs — fundamentals of KG construction · Beginner
- Your First Knowledge Graph — entity extraction to visualization · Beginner
- Graph Analytics — centrality and community detection · Intermediate
- Advanced Graph Analytics — PageRank, Louvain, shortest path · Advanced
- Temporal Knowledge Graphs — temporal logic and graph evolution · Advanced