← 返回 Semantica 专题首页 🌱 SEMANTICA · COOKBOOK · 入门系列

图分析

Semantica 官方 Cookbook 中文翻译 · 第 10 / 37 篇

📦 semantica 🕸️ 知识图谱 🔎 GraphRAG

1概览

本 notebook 演示如何使用 Semantica 的分析模块来分析知识图谱。你将学习使用 GraphAnalyzerCentralityCalculatorCommunityDetectorConnectivityAnalyzer 来理解图结构和属性。

文档API Reference

学习目标

  • 使用 GraphAnalyzer 进行全面的图分析
  • 使用 CentralityCalculator 计算中心性度量
  • 使用 CommunityDetector 查找图中的社区
  • 使用 ConnectivityAnalyzer 分析图的连通性

2安装

从 PyPI 安装 Semantica:

pip install semantica
# 或安装所有可选依赖:
pip install semantica[all]

3步骤 1:图分析

分析图结构和属性。

# 安装 Semantica
!pip install semantica
# 构建示例知识图谱并计算图度量
from semantica.kg import GraphBuilder, GraphAnalyzer
from semantica.semantic_extract import NERExtractor, RelationExtractor

# 初始化图谱构建器与分析器
builder = GraphBuilder()
analyzer = GraphAnalyzer()

# 定义示例实体(组织、人物、地点)
entities = [
    {"id": "e1", "type": "Organization", "name": "Apple Inc.", "properties": {}},
    {"id": "e2", "type": "Person", "name": "Tim Cook", "properties": {}},
    {"id": "e3", "type": "Location", "name": "Cupertino", "properties": {}}
]

# 定义实体之间的关系
relationships = [
    {"source": "e2", "target": "e1", "type": "CEO_of", "properties": {}},
    {"source": "e1", "target": "e3", "type": "located_in", "properties": {}}
]

# 构建知识图谱
kg = builder.build(entities, relationships)

# 计算图结构度量
metrics = analyzer.compute_metrics(kg)

print(f"Graph metrics:")
print(f"  Entities: {metrics.get('entity_count', 0)}")
print(f"  Relationships: {metrics.get('relationship_count', 0)}")
print(f"  Density: {metrics.get('density', 0):.3f}")

4步骤 2:中心性度量

计算实体的中心性度量。

# 计算图中各实体的度中心性
from semantica.kg import CentralityCalculator

centrality_calculator = CentralityCalculator()

# 计算度中心性并提取得分
centrality_result = centrality_calculator.calculate_degree_centrality(kg)
centrality_scores = centrality_result.get('centrality', {})

# 打印前 5 个实体的中心性得分
print(f"Centrality scores:")
for entity_id, score in list(centrality_scores.items())[:5]:
    print(f"  {entity_id}: {score:.3f}")

5步骤 3:社区检测

检测图中的社区。

from semantica.kg import CommunityDetector

community_detector = CommunityDetector()

# 获取检测结果
result = community_detector.detect_communities(kg)

# 从结果字典中提取社区列表
communities = result.get("communities", [])

print(f"Detected {len(communities)} communities")
for i, community in enumerate(communities[:3], 1):
    print(f"  Community {i}: {len(community)} entities")

6步骤 4:连通性分析

分析图的连通性。

# 分析知识图谱的连通性
from semantica.kg import ConnectivityAnalyzer

connectivity_analyzer = ConnectivityAnalyzer()

# 分析图的连通性(是否连通、连通分量数量)
connectivity = connectivity_analyzer.analyze_connectivity(kg)

print(f"Connectivity analysis:")
print(f"  Is connected: {connectivity.get('is_connected', False)}")
print(f"  Components: {len(connectivity.get('components', []))}")

7小结

你已经学会了如何分析知识图谱:

  • GraphAnalyzer:全面的图分析和度量
  • CentralityCalculator:计算中心性度量
  • CommunityDetector:检测图中的社区
  • ConnectivityAnalyzer:分析图的连通性

下一步:在 Deduplication notebook 中学习如何对实体进行去重。