1概览
本 notebook 演示如何使用 Semantica 的分析模块来分析知识图谱。你将学习使用 GraphAnalyzer、CentralityCalculator、CommunityDetector 和 ConnectivityAnalyzer 来理解图结构和属性。
学习目标
- 使用
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 中学习如何对实体进行去重。