"""验证元知识图谱:实体统计与到项目枢纽的联通关系。""" from neo4j import GraphDatabase from knowledge_agent.config import get_settings def main() -> None: s = get_settings() with GraphDatabase.driver(s.neo4j_uri, auth=(s.neo4j_user, s.neo4j_password)) as d: q1 = """ MATCH (e:实体类型) RETURN e.name AS entity, e.count AS cnt, e.is_hub AS hub ORDER BY cnt DESC """ print("== 实体类型与数量 ==") for r in d.execute_query(q1).records: hub = " [枢纽]" if r["hub"] else "" print(f" {r['entity']}: {r['cnt']}{hub}") q2 = """ MATCH (e:实体类型)-[rel:关联 {type:'所属项目'}]->(p:实体类型 {name:'项目'}) RETURN e.name AS src, rel.key AS key, rel.cardinality AS card """ print("== 联通到项目枢纽的实体(关联键) ==") for r in d.execute_query(q2).records: print(f" {r['src']} --所属项目--> 项目 键: {r['key']} 基数: {r['card']}") q3 = """ MATCH (d:部门)-[:提供]->(f:数据源)-[:产出]->(e:实体类型) RETURN d.name AS dept, count(DISTINCT f) AS files, count(DISTINCT e) AS entities ORDER BY dept """ print("== 部门 → 文件 → 实体 汇总 ==") for r in d.execute_query(q3).records: print(f" {r['dept']}: {r['files']} 个文件, 产出 {r['entities']} 类实体") if __name__ == "__main__": main()