Fix GraphValidator: Add missing details to dangling edge issues

This commit is contained in:
KaifAhmad1
2025-12-19 16:16:17 +05:30
parent 3f78d00c6b
commit dc94526e9a
2 changed files with 355 additions and 19 deletions
@@ -4,7 +4,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"# Ultimate Graph Analytics Masterclass\n",
"# Graph Analytics \n",
"\n",
"Welcome to the **comprehensive walkthrough** of Semantica's Graph Analytics capabilities. This notebook goes beyond simple graph construction to demonstrate a full-lifecycle production pipeline.\n",
"\n",
@@ -22,7 +22,33 @@
},
{
"cell_type": "code",
"execution_count": null,
"execution_count": 1,
"id": "695d435c",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"WARNING: Ignoring invalid distribution ~gno (C:\\Users\\Mohd Kaif\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages)\n",
"WARNING: Ignoring invalid distribution ~lotly (C:\\Users\\Mohd Kaif\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages)\n",
"WARNING: Ignoring invalid distribution ~ython-socketio (C:\\Users\\Mohd Kaif\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages)\n",
"WARNING: Ignoring invalid distribution ~gno (C:\\Users\\Mohd Kaif\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages)\n",
"WARNING: Ignoring invalid distribution ~lotly (C:\\Users\\Mohd Kaif\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages)\n",
"WARNING: Ignoring invalid distribution ~ython-socketio (C:\\Users\\Mohd Kaif\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages)\n",
"WARNING: Ignoring invalid distribution ~gno (C:\\Users\\Mohd Kaif\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages)\n",
"WARNING: Ignoring invalid distribution ~lotly (C:\\Users\\Mohd Kaif\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages)\n",
"WARNING: Ignoring invalid distribution ~ython-socketio (C:\\Users\\Mohd Kaif\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages)\n"
]
}
],
"source": [
"!pip install -q semantica"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
@@ -63,9 +89,17 @@
},
{
"cell_type": "code",
"execution_count": null,
"execution_count": 3,
"metadata": {},
"outputs": [],
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Loaded 6 raw entities and 4 raw relationships.\n"
]
}
],
"source": [
"# Our \"Raw\" Messy Data\n",
"raw_entities = [\n",
@@ -107,9 +141,25 @@
},
{
"cell_type": "code",
"execution_count": null,
"execution_count": 4,
"id": "bd8fb13d",
"metadata": {},
"outputs": [],
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Running Validation Check...\n",
"Validation Failed! Issues found:\n",
" - [ERROR] Target entity ID not found: startup_999 (Code: DANGLING_EDGE)\n",
" Auto-Fixing: Removing invalid relationship...\n",
" - [WARNING] Found 2 orphan nodes (no relationships). (Code: ORPHAN_NODES)\n",
"\n",
"Re-validating after fixes...\n",
"Graph is now clean and valid!\n"
]
}
],
"source": [
"# Initialize Validator\n",
"validator = GraphValidator()\n",
@@ -153,9 +203,180 @@
},
{
"cell_type": "code",
"execution_count": null,
"execution_count": 5,
"metadata": {},
"outputs": [],
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Scanning for duplicates...\n"
]
},
{
"data": {
"text/html": [
"<div style='font-family: monospace;'><h4>🧠 Semantica - 📊 Current Progress</h4><table style='width: 100%; border-collapse: collapse;'><tr><th>Status</th><th>Action</th><th>Module</th><th>Submodule</th><th>File</th><th>Time</th></tr><tr><td>✅</td><td>Semantica is deduplicating</td><td>🔄 deduplication</td><td>DuplicateDetector</td><td>-</td><td>0.25s</td></tr><tr><td>✅</td><td>Semantica is deduplicating</td><td>🔄 deduplication</td><td>SimilarityCalculator</td><td>-</td><td>0.02s</td></tr><tr><td>✅</td><td>Semantica is resolving</td><td>⚠️ conflicts</td><td>ConflictDetector</td><td>-</td><td>0.01s</td></tr><tr><td>✅</td><td>Semantica is building</td><td>🧠 kg</td><td>CentralityCalculator</td><td>-</td><td>0.01s</td></tr><tr><td>✅</td><td>Semantica is building</td><td>🧠 kg</td><td>CommunityDetector</td><td>-</td><td>0.01s</td></tr></table></div>"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"2025-12-19 16:09:21,008 - INFO - [RUNNING] | Module: deduplication | Submodule: DuplicateDetector | Message: Detecting duplicates in 6 entities\n",
"2025-12-19 16:09:21,008 - INFO - Detecting duplicates in 6 entities (threshold: 0.7)\n",
"2025-12-19 16:09:21,011 - INFO - [RUNNING] | Module: deduplication | Submodule: DuplicateDetector | Message: Calculating similarities...\n",
"2025-12-19 16:09:21,013 - INFO - [RUNNING] | Module: deduplication | Submodule: SimilarityCalculator | Message: Calculating similarity between entities\n",
"2025-12-19 16:09:21,015 - INFO - [RUNNING] | Module: deduplication | Submodule: SimilarityCalculator | Message: Calculating string similarity...\n",
"2025-12-19 16:09:21,018 - INFO - [RUNNING] | Module: deduplication | Submodule: SimilarityCalculator | Message: Calculating property similarity...\n",
"2025-12-19 16:09:21,020 - INFO - [RUNNING] | Module: deduplication | Submodule: SimilarityCalculator | Message: Calculating relationship similarity...\n",
"2025-12-19 16:09:21,023 - INFO - [RUNNING] | Module: deduplication | Submodule: SimilarityCalculator | Message: Aggregating similarity scores...\n",
"2025-12-19 16:09:21,026 - INFO - [COMPLETED] | Module: deduplication | Submodule: SimilarityCalculator | Message: Similarity score: 0.56\n",
"2025-12-19 16:09:21,029 - INFO - [RUNNING] | Module: deduplication | Submodule: SimilarityCalculator | Message: Calculating similarity between entities\n",
"2025-12-19 16:09:21,031 - INFO - [RUNNING] | Module: deduplication | Submodule: SimilarityCalculator | Message: Calculating string similarity...\n",
"2025-12-19 16:09:21,034 - INFO - [RUNNING] | Module: deduplication | Submodule: SimilarityCalculator | Message: Calculating property similarity...\n",
"2025-12-19 16:09:21,036 - INFO - [RUNNING] | Module: deduplication | Submodule: SimilarityCalculator | Message: Calculating relationship similarity...\n",
"2025-12-19 16:09:21,038 - INFO - [RUNNING] | Module: deduplication | Submodule: SimilarityCalculator | Message: Aggregating similarity scores...\n",
"2025-12-19 16:09:21,040 - INFO - [COMPLETED] | Module: deduplication | Submodule: SimilarityCalculator | Message: Similarity score: 0.86\n",
"2025-12-19 16:09:21,043 - INFO - [RUNNING] | Module: deduplication | Submodule: SimilarityCalculator | Message: Calculating similarity between entities\n",
"2025-12-19 16:09:21,046 - INFO - [RUNNING] | Module: deduplication | Submodule: SimilarityCalculator | Message: Calculating string similarity...\n",
"2025-12-19 16:09:21,049 - INFO - [RUNNING] | Module: deduplication | Submodule: SimilarityCalculator | Message: Calculating property similarity...\n",
"2025-12-19 16:09:21,052 - INFO - [RUNNING] | Module: deduplication | Submodule: SimilarityCalculator | Message: Calculating relationship similarity...\n",
"2025-12-19 16:09:21,055 - INFO - [RUNNING] | Module: deduplication | Submodule: SimilarityCalculator | Message: Aggregating similarity scores...\n",
"2025-12-19 16:09:21,058 - INFO - [COMPLETED] | Module: deduplication | Submodule: SimilarityCalculator | Message: Similarity score: 0.61\n",
"2025-12-19 16:09:21,060 - INFO - [RUNNING] | Module: deduplication | Submodule: SimilarityCalculator | Message: Calculating similarity between entities\n",
"2025-12-19 16:09:21,063 - INFO - [RUNNING] | Module: deduplication | Submodule: SimilarityCalculator | Message: Calculating string similarity...\n",
"2025-12-19 16:09:21,065 - INFO - [RUNNING] | Module: deduplication | Submodule: SimilarityCalculator | Message: Calculating property similarity...\n",
"2025-12-19 16:09:21,068 - INFO - [RUNNING] | Module: deduplication | Submodule: SimilarityCalculator | Message: Calculating relationship similarity...\n",
"2025-12-19 16:09:21,069 - INFO - [RUNNING] | Module: deduplication | Submodule: SimilarityCalculator | Message: Aggregating similarity scores...\n",
"2025-12-19 16:09:21,072 - INFO - [COMPLETED] | Module: deduplication | Submodule: SimilarityCalculator | Message: Similarity score: 0.61\n",
"2025-12-19 16:09:21,075 - INFO - [RUNNING] | Module: deduplication | Submodule: SimilarityCalculator | Message: Calculating similarity between entities\n",
"2025-12-19 16:09:21,077 - INFO - [RUNNING] | Module: deduplication | Submodule: SimilarityCalculator | Message: Calculating string similarity...\n",
"2025-12-19 16:09:21,080 - INFO - [RUNNING] | Module: deduplication | Submodule: SimilarityCalculator | Message: Calculating property similarity...\n",
"2025-12-19 16:09:21,083 - INFO - [RUNNING] | Module: deduplication | Submodule: SimilarityCalculator | Message: Calculating relationship similarity...\n",
"2025-12-19 16:09:21,087 - INFO - [RUNNING] | Module: deduplication | Submodule: SimilarityCalculator | Message: Aggregating similarity scores...\n",
"2025-12-19 16:09:21,089 - INFO - [COMPLETED] | Module: deduplication | Submodule: SimilarityCalculator | Message: Similarity score: 0.54\n",
"2025-12-19 16:09:21,092 - INFO - [RUNNING] | Module: deduplication | Submodule: SimilarityCalculator | Message: Calculating similarity between entities\n",
"2025-12-19 16:09:21,093 - INFO - [RUNNING] | Module: deduplication | Submodule: SimilarityCalculator | Message: Calculating string similarity...\n",
"2025-12-19 16:09:21,098 - INFO - [RUNNING] | Module: deduplication | Submodule: SimilarityCalculator | Message: Calculating property similarity...\n",
"2025-12-19 16:09:21,100 - INFO - [RUNNING] | Module: deduplication | Submodule: SimilarityCalculator | Message: Calculating relationship similarity...\n",
"2025-12-19 16:09:21,103 - INFO - [RUNNING] | Module: deduplication | Submodule: SimilarityCalculator | Message: Aggregating similarity scores...\n",
"2025-12-19 16:09:21,106 - INFO - [COMPLETED] | Module: deduplication | Submodule: SimilarityCalculator | Message: Similarity score: 0.57\n",
"2025-12-19 16:09:21,109 - INFO - [RUNNING] | Module: deduplication | Submodule: SimilarityCalculator | Message: Calculating similarity between entities\n",
"2025-12-19 16:09:21,112 - INFO - [RUNNING] | Module: deduplication | Submodule: SimilarityCalculator | Message: Calculating string similarity...\n",
"2025-12-19 16:09:21,115 - INFO - [RUNNING] | Module: deduplication | Submodule: SimilarityCalculator | Message: Calculating property similarity...\n",
"2025-12-19 16:09:21,117 - INFO - [RUNNING] | Module: deduplication | Submodule: SimilarityCalculator | Message: Calculating relationship similarity...\n",
"2025-12-19 16:09:21,121 - INFO - [RUNNING] | Module: deduplication | Submodule: SimilarityCalculator | Message: Aggregating similarity scores...\n",
"2025-12-19 16:09:21,124 - INFO - [COMPLETED] | Module: deduplication | Submodule: SimilarityCalculator | Message: Similarity score: 0.59\n",
"2025-12-19 16:09:21,126 - INFO - [RUNNING] | Module: deduplication | Submodule: SimilarityCalculator | Message: Calculating similarity between entities\n",
"2025-12-19 16:09:21,129 - INFO - [RUNNING] | Module: deduplication | Submodule: SimilarityCalculator | Message: Calculating string similarity...\n",
"2025-12-19 16:09:21,131 - INFO - [RUNNING] | Module: deduplication | Submodule: SimilarityCalculator | Message: Calculating property similarity...\n",
"2025-12-19 16:09:21,136 - INFO - [RUNNING] | Module: deduplication | Submodule: SimilarityCalculator | Message: Calculating relationship similarity...\n",
"2025-12-19 16:09:21,138 - INFO - [RUNNING] | Module: deduplication | Submodule: SimilarityCalculator | Message: Aggregating similarity scores...\n",
"2025-12-19 16:09:21,142 - INFO - [COMPLETED] | Module: deduplication | Submodule: SimilarityCalculator | Message: Similarity score: 0.59\n",
"2025-12-19 16:09:21,146 - INFO - [RUNNING] | Module: deduplication | Submodule: SimilarityCalculator | Message: Calculating similarity between entities\n",
"2025-12-19 16:09:21,150 - INFO - [RUNNING] | Module: deduplication | Submodule: SimilarityCalculator | Message: Calculating string similarity...\n",
"2025-12-19 16:09:21,153 - INFO - [RUNNING] | Module: deduplication | Submodule: SimilarityCalculator | Message: Calculating property similarity...\n",
"2025-12-19 16:09:21,156 - INFO - [RUNNING] | Module: deduplication | Submodule: SimilarityCalculator | Message: Calculating relationship similarity...\n",
"2025-12-19 16:09:21,159 - INFO - [RUNNING] | Module: deduplication | Submodule: SimilarityCalculator | Message: Aggregating similarity scores...\n",
"2025-12-19 16:09:21,162 - INFO - [COMPLETED] | Module: deduplication | Submodule: SimilarityCalculator | Message: Similarity score: 0.30\n",
"2025-12-19 16:09:21,166 - INFO - [RUNNING] | Module: deduplication | Submodule: SimilarityCalculator | Message: Calculating similarity between entities\n",
"2025-12-19 16:09:21,168 - INFO - [RUNNING] | Module: deduplication | Submodule: SimilarityCalculator | Message: Calculating string similarity...\n",
"2025-12-19 16:09:21,170 - INFO - [RUNNING] | Module: deduplication | Submodule: SimilarityCalculator | Message: Calculating property similarity...\n",
"2025-12-19 16:09:21,173 - INFO - [RUNNING] | Module: deduplication | Submodule: SimilarityCalculator | Message: Calculating relationship similarity...\n",
"2025-12-19 16:09:21,175 - INFO - [RUNNING] | Module: deduplication | Submodule: SimilarityCalculator | Message: Aggregating similarity scores...\n",
"2025-12-19 16:09:21,177 - INFO - [COMPLETED] | Module: deduplication | Submodule: SimilarityCalculator | Message: Similarity score: 0.56\n",
"2025-12-19 16:09:21,179 - INFO - [RUNNING] | Module: deduplication | Submodule: SimilarityCalculator | Message: Calculating similarity between entities\n",
"2025-12-19 16:09:21,180 - INFO - [RUNNING] | Module: deduplication | Submodule: SimilarityCalculator | Message: Calculating string similarity...\n",
"2025-12-19 16:09:21,184 - INFO - [RUNNING] | Module: deduplication | Submodule: SimilarityCalculator | Message: Calculating property similarity...\n",
"2025-12-19 16:09:21,186 - INFO - [RUNNING] | Module: deduplication | Submodule: SimilarityCalculator | Message: Calculating relationship similarity...\n",
"2025-12-19 16:09:21,187 - INFO - [RUNNING] | Module: deduplication | Submodule: SimilarityCalculator | Message: Aggregating similarity scores...\n",
"2025-12-19 16:09:21,188 - INFO - [COMPLETED] | Module: deduplication | Submodule: SimilarityCalculator | Message: Similarity score: 0.66\n",
"2025-12-19 16:09:21,192 - INFO - [RUNNING] | Module: deduplication | Submodule: SimilarityCalculator | Message: Calculating similarity between entities\n",
"2025-12-19 16:09:21,193 - INFO - [RUNNING] | Module: deduplication | Submodule: SimilarityCalculator | Message: Calculating string similarity...\n",
"2025-12-19 16:09:21,196 - INFO - [RUNNING] | Module: deduplication | Submodule: SimilarityCalculator | Message: Calculating property similarity...\n",
"2025-12-19 16:09:21,198 - INFO - [RUNNING] | Module: deduplication | Submodule: SimilarityCalculator | Message: Calculating relationship similarity...\n",
"2025-12-19 16:09:21,200 - INFO - [RUNNING] | Module: deduplication | Submodule: SimilarityCalculator | Message: Aggregating similarity scores...\n",
"2025-12-19 16:09:21,201 - INFO - [COMPLETED] | Module: deduplication | Submodule: SimilarityCalculator | Message: Similarity score: 0.55\n",
"2025-12-19 16:09:21,203 - INFO - [RUNNING] | Module: deduplication | Submodule: SimilarityCalculator | Message: Calculating similarity between entities\n",
"2025-12-19 16:09:21,206 - INFO - [RUNNING] | Module: deduplication | Submodule: SimilarityCalculator | Message: Calculating string similarity...\n",
"2025-12-19 16:09:21,206 - INFO - [RUNNING] | Module: deduplication | Submodule: SimilarityCalculator | Message: Calculating property similarity...\n",
"2025-12-19 16:09:21,210 - INFO - [RUNNING] | Module: deduplication | Submodule: SimilarityCalculator | Message: Calculating relationship similarity...\n",
"2025-12-19 16:09:21,211 - INFO - [RUNNING] | Module: deduplication | Submodule: SimilarityCalculator | Message: Aggregating similarity scores...\n",
"2025-12-19 16:09:21,213 - INFO - [COMPLETED] | Module: deduplication | Submodule: SimilarityCalculator | Message: Similarity score: 0.56\n",
"2025-12-19 16:09:21,215 - INFO - [RUNNING] | Module: deduplication | Submodule: SimilarityCalculator | Message: Calculating similarity between entities\n",
"2025-12-19 16:09:21,217 - INFO - [RUNNING] | Module: deduplication | Submodule: SimilarityCalculator | Message: Calculating string similarity...\n",
"2025-12-19 16:09:21,221 - INFO - [RUNNING] | Module: deduplication | Submodule: SimilarityCalculator | Message: Calculating property similarity...\n",
"2025-12-19 16:09:21,225 - INFO - [RUNNING] | Module: deduplication | Submodule: SimilarityCalculator | Message: Calculating relationship similarity...\n",
"2025-12-19 16:09:21,228 - INFO - [RUNNING] | Module: deduplication | Submodule: SimilarityCalculator | Message: Aggregating similarity scores...\n",
"2025-12-19 16:09:21,231 - INFO - [COMPLETED] | Module: deduplication | Submodule: SimilarityCalculator | Message: Similarity score: 0.50\n",
"2025-12-19 16:09:21,234 - INFO - [RUNNING] | Module: deduplication | Submodule: SimilarityCalculator | Message: Calculating similarity between entities\n",
"2025-12-19 16:09:21,237 - INFO - [RUNNING] | Module: deduplication | Submodule: SimilarityCalculator | Message: Calculating string similarity...\n",
"2025-12-19 16:09:21,240 - INFO - [RUNNING] | Module: deduplication | Submodule: SimilarityCalculator | Message: Calculating property similarity...\n",
"2025-12-19 16:09:21,243 - INFO - [RUNNING] | Module: deduplication | Submodule: SimilarityCalculator | Message: Calculating relationship similarity...\n",
"2025-12-19 16:09:21,246 - INFO - [RUNNING] | Module: deduplication | Submodule: SimilarityCalculator | Message: Aggregating similarity scores...\n",
"2025-12-19 16:09:21,249 - INFO - [COMPLETED] | Module: deduplication | Submodule: SimilarityCalculator | Message: Similarity score: 0.56\n",
"2025-12-19 16:09:21,252 - INFO - [RUNNING] | Module: deduplication | Submodule: DuplicateDetector | Message: Creating duplicate candidates...\n",
"2025-12-19 16:09:21,254 - INFO - Detected 1 duplicate candidate(s) (confidence >= 0.6)\n",
"2025-12-19 16:09:21,258 - INFO - [COMPLETED] | Module: deduplication | Submodule: DuplicateDetector | Message: Detected 1 duplicate candidates\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Found potential duplicate pair (Score: 0.86):\n",
" - TechFlow AI (ID: startup_1)\n",
" - TechFlow Inc. (ID: startup_1_dup)\n",
" Merging entities...\n",
"\n",
"Checking for data conflicts...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"2025-12-19 16:09:21,261 - INFO - [RUNNING] | Module: conflicts | Submodule: ConflictDetector | Message: Detecting all conflicts\n",
"2025-12-19 16:09:21,265 - INFO - [RUNNING] | Module: conflicts | Submodule: ConflictDetector | Message: Detecting value conflicts for property: founded\n",
"2025-12-19 16:09:21,268 - INFO - [RUNNING] | Module: conflicts | Submodule: ConflictDetector | Message: Analyzing 2 entities...\n",
"2025-12-19 16:09:21,271 - INFO - [COMPLETED] | Module: conflicts | Submodule: ConflictDetector | Message: Detected 0 conflicts\n",
"2025-12-19 16:09:21,274 - INFO - [RUNNING] | Module: conflicts | Submodule: ConflictDetector | Message: Detecting value conflicts for property: revenue\n",
"2025-12-19 16:09:21,277 - INFO - [RUNNING] | Module: conflicts | Submodule: ConflictDetector | Message: Analyzing 2 entities...\n",
"2025-12-19 16:09:21,279 - WARNING - Value conflict detected: startup_1.revenue has conflicting values: ['1000000', '1200000']\n",
"2025-12-19 16:09:21,280 - INFO - [COMPLETED] | Module: conflicts | Submodule: ConflictDetector | Message: Detected 1 conflicts\n",
"2025-12-19 16:09:21,283 - INFO - [RUNNING] | Module: conflicts | Submodule: ConflictDetector | Message: Detecting value conflicts for property: name\n",
"2025-12-19 16:09:21,286 - INFO - [RUNNING] | Module: conflicts | Submodule: ConflictDetector | Message: Analyzing 2 entities...\n",
"2025-12-19 16:09:21,288 - WARNING - Value conflict detected: startup_1.name has conflicting values: ['TechFlow Inc.', 'TechFlow AI']\n",
"2025-12-19 16:09:21,291 - INFO - [COMPLETED] | Module: conflicts | Submodule: ConflictDetector | Message: Detected 1 conflicts\n",
"2025-12-19 16:09:21,295 - INFO - [RUNNING] | Module: conflicts | Submodule: ConflictDetector | Message: Detecting type conflicts\n",
"2025-12-19 16:09:21,296 - INFO - [COMPLETED] | Module: conflicts | Submodule: ConflictDetector | Message: Detected 0 type conflicts\n",
"2025-12-19 16:09:21,299 - INFO - [RUNNING] | Module: conflicts | Submodule: ConflictDetector | Message: Detecting temporal conflicts\n",
"2025-12-19 16:09:21,302 - INFO - [COMPLETED] | Module: conflicts | Submodule: ConflictDetector | Message: Detected 0 temporal conflicts\n",
"2025-12-19 16:09:21,308 - INFO - [RUNNING] | Module: conflicts | Submodule: ConflictDetector | Message: Detecting logical conflicts\n",
"2025-12-19 16:09:21,313 - INFO - [COMPLETED] | Module: conflicts | Submodule: ConflictDetector | Message: Detected 0 logical conflicts\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
" Conflict detected in field 'revenue':\n",
" Values: [1000000, 1200000]\n",
" Resolved to: 1200000.0\n",
" Conflict detected in field 'name':\n",
" Values: ['TechFlow AI', 'TechFlow Inc.']\n",
"\n",
"Cleaned Data: 5 entities remaining.\n"
]
}
],
"source": [
"# 1. Detect Duplicates\n",
"print(\"Scanning for duplicates...\")\n",
@@ -214,9 +435,17 @@
},
{
"cell_type": "code",
"execution_count": null,
"execution_count": 6,
"metadata": {},
"outputs": [],
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Knowledge Graph Assembled Successfully!\n"
]
}
],
"source": [
"# Manual Graph Construction (since we already cleaned it)\n",
"kg = {\n",
@@ -241,9 +470,76 @@
},
{
"cell_type": "code",
"execution_count": null,
"execution_count": 7,
"metadata": {},
"outputs": [],
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"2025-12-19 16:09:52,395 - INFO - Centrality calculator initialized\n",
"2025-12-19 16:09:52,396 - INFO - Graph analyzer initialized (temporal: True)\n",
"2025-12-19 16:09:52,398 - INFO - Analyzing graph connectivity\n",
"2025-12-19 16:09:52,398 - INFO - Finding connected components\n",
"2025-12-19 16:09:52,399 - INFO - Calculating connectivity metrics\n",
"2025-12-19 16:09:52,399 - INFO - Calculating all centrality measures\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"--- Connectivity Analysis ---\n",
" • Graph Connected? Yes\n",
" • Connected Components: 1\n",
"\n",
"--- Centrality Analysis ---\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"2025-12-19 16:09:52,403 - INFO - [RUNNING] | Module: kg | Submodule: CentralityCalculator | Message: Calculating degree centrality\n",
"2025-12-19 16:09:52,403 - INFO - Calculating degree centrality\n",
"2025-12-19 16:09:52,406 - INFO - [RUNNING] | Module: kg | Submodule: CentralityCalculator | Message: Processing graph structure...\n",
"2025-12-19 16:09:52,409 - INFO - [COMPLETED] | Module: kg | Submodule: CentralityCalculator | Message: Calculated degree centrality for 4 nodes\n",
"2025-12-19 16:09:52,410 - INFO - Detecting communities using louvain algorithm\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
" • Top Influencers (Degree Centrality):\n",
" - founder_1: 0.67\n",
" - startup_1: 0.67\n",
" - startup_2: 0.33\n",
"\n",
"--- Community Detection ---\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"2025-12-19 16:09:52,413 - INFO - [RUNNING] | Module: kg | Submodule: CommunityDetector | Message: Detecting communities using Louvain algorithm\n",
"2025-12-19 16:09:52,414 - INFO - Detecting communities using Louvain algorithm\n",
"2025-12-19 16:09:52,417 - INFO - [RUNNING] | Module: kg | Submodule: CommunityDetector | Message: Detecting communities with NetworkX...\n",
"2025-12-19 16:09:52,422 - INFO - [COMPLETED] | Module: kg | Submodule: CommunityDetector | Message: Detected 2 communities\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
" • Detected 2 communities.\n",
" Community 1: investor_1, startup_1\n",
" Community 2: startup_2, founder_1\n"
]
}
],
"source": [
"# Initialize the Master Analyzer\n",
"analyzer = GraphAnalyzer(enable_temporal=True)\n",
@@ -289,9 +585,33 @@
},
{
"cell_type": "code",
"execution_count": null,
"execution_count": 8,
"metadata": {},
"outputs": [],
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"2025-12-19 16:09:58,419 - INFO - Querying graph at time: 2020-06-01\n",
"2025-12-19 16:09:58,420 - INFO - Querying graph at time: 2023-07-01\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"--- Time Travel: 2020 ---\n",
" Active Relationships in 2020: 1\n",
" - founder_1 --[ADVISED]--> startup_2\n",
"\n",
"--- Time Travel: 2023 ---\n",
" Active Relationships in 2023: 2\n",
" - founder_1 --[FOUNDED]--> startup_1\n",
" - investor_1 --[INVESTED_IN]--> startup_1\n"
]
}
],
"source": [
"temporal_engine = TemporalGraphQuery(temporal_granularity=\"year\")\n",
"\n",
@@ -323,9 +643,23 @@
},
{
"cell_type": "code",
"execution_count": null,
"execution_count": 9,
"metadata": {},
"outputs": [],
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"--- Provenance Report: TechFlow AI ---\n",
" Entity: startup_1\n",
" First Seen: 2025-12-19T16:13:07.782408\n",
" Sources:\n",
" - Crunchbase_API_v2 (at 2025-12-19T16:13:07.782408)\n",
" - Manual_Entry_User_Bob (at 2025-12-19T16:13:07.782408)\n"
]
}
],
"source": [
"tracker = ProvenanceTracker()\n",
"\n",
@@ -376,7 +710,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.5"
"version": "3.11.9"
},
"nbformat": 4,
"nbformat_minor": 4
+4 -2
View File
@@ -207,7 +207,8 @@ class GraphValidator:
message=f"Source entity ID not found: {src}",
severity=ValidationSeverity.ERROR,
element_id=f"{src}->{tgt}",
element_type="relationship"
element_type="relationship",
details={"source_id": src}
))
if tgt not in entity_ids:
issues.append(ValidationIssue(
@@ -215,7 +216,8 @@ class GraphValidator:
message=f"Target entity ID not found: {tgt}",
severity=ValidationSeverity.ERROR,
element_id=f"{src}->{tgt}",
element_type="relationship"
element_type="relationship",
details={"target_id": tgt}
))
# Check Self-Loops (Warning)