from py2neo import Graph, Node, Relationship, Subgraph from Config.Config import * from Util.Neo4jExecutor import Neo4jExecutor # 连接到 Neo4j 数据库 graph = Graph(NEO4J_URI, auth=NEO4J_AUTH) # 定义节点类 class EntityNode(Node): def __init__(self, name, description=""): super().__init__("Entity", name=name, description=description) class TopicNode(Node): def __init__(self, name, description=""): super().__init__("Topic", name=name, description=description) class SubtopicNode(Node): def __init__(self, name, description=""): super().__init__("Subtopic", name=name, description=description) class RelationshipNode(Relationship): def __init__(self, start_node, end_node, relation_type): super().__init__(start_node, relation_type, end_node) # 创建知识图谱的函数 def create_knowledge_graph(): # 创建主题节点 core_topic = EntityNode("小学数学教学中的若干问题", "小学数学教学的核心内容") # 创建数的认识主题及子主题节点 number_recognition = TopicNode("数的认识", "关于数的基本概念和性质") quantity_essence = SubtopicNode("数量与数的本质", "数量是对现实生活中事物量的抽象") natural_numbers = SubtopicNode("自然数", "自然数是对数量的抽象") negative_numbers = SubtopicNode("负数", "负数是与自然数数量相等但意义相反的数") fractions = SubtopicNode("分数", "分数本身是数,表示整体与等分关系或比例关系") decimals = SubtopicNode("小数", "小数建立在十进制基础上") number_sense = SubtopicNode("数感", "关于数与数量、数量关系、运算结果估计的感悟") # 创建数的认识主题与子主题的关系 core_topic_number_rel = RelationshipNode(core_topic, number_recognition, "INCLUDES") number_recognition_quantity_rel = RelationshipNode(number_recognition, quantity_essence, "INCLUDES") number_recognition_natural_rel = RelationshipNode(number_recognition, natural_numbers, "INCLUDES") number_recognition_negative_rel = RelationshipNode(number_recognition, negative_numbers, "INCLUDES") number_recognition_fraction_rel = RelationshipNode(number_recognition, fractions, "INCLUDES") number_recognition_decimal_rel = RelationshipNode(number_recognition, decimals, "INCLUDES") number_recognition_sense_rel = RelationshipNode(number_recognition, number_sense, "INCLUDES") # 创建数的运算主题及子主题节点 number_operations = TopicNode("数的运算", "关于数的运算规则和方法") addition = SubtopicNode("加法运算", "加法运算的解释基于对应的方法和定义的方法") subtraction = SubtopicNode("减法运算", "减法是加法的逆运算") multiplication = SubtopicNode("乘法运算", "自然数集合上乘法是加法的简便运算") division = SubtopicNode("除法运算", "除法是乘法的逆运算") mixed_operations = SubtopicNode("混合运算", "混合运算遵循先乘除后加减的法则") estimation = SubtopicNode("估算", "估算是基于数量关系的运算") symbol_awareness = SubtopicNode("符号意识", "符号意识涉及用字母表示数和基于符号的运算") equation_essence = SubtopicNode("方程的本质", "方程用字母表示未知量,讲述现实世界中的等量关系") operations_model = SubtopicNode("模型", "模型是数学与现实世界的桥梁") problem_discovery = SubtopicNode("发现问题与提出问题", "发现问题与提出问题体现创新意识") # 创建数的运算主题与子主题的关系 core_topic_operation_rel = RelationshipNode(core_topic, number_operations, "INCLUDES") operations_addition_rel = RelationshipNode(number_operations, addition, "INCLUDES") operations_subtraction_rel = RelationshipNode(number_operations, subtraction, "INCLUDES") operations_multiplication_rel = RelationshipNode(number_operations, multiplication, "INCLUDES") operations_division_rel = RelationshipNode(number_operations, division, "INCLUDES") operations_mixed_rel = RelationshipNode(number_operations, mixed_operations, "INCLUDES") operations_estimation_rel = RelationshipNode(number_operations, estimation, "INCLUDES") operations_symbol_rel = RelationshipNode(number_operations, symbol_awareness, "INCLUDES") operations_equation_rel = RelationshipNode(number_operations, equation_essence, "INCLUDES") operations_model_rel = RelationshipNode(number_operations, operations_model, "INCLUDES") operations_problem_rel = RelationshipNode(number_operations, problem_discovery, "INCLUDES") # 创建图形与几何主题及子主题节点 geometry = TopicNode("图形与几何", "关于图形与几何的基本概念和性质") space_concept = SubtopicNode("空间观念与几何直观", "空间观念是空间想象力,几何直观是直接判断能力") figure_recognition = SubtopicNode("图形的认识与分类", "图形的认识需从立体图形抽象出点、线、面、体、角等概念") measurement = SubtopicNode("长度、面积、体积", "长度、面积、体积是对一维、二维、三维空间物体的度量") figure_movement = SubtopicNode("平移、旋转、轴对称", "图形的运动包括平移、旋转、轴对称") # 创建图形与几何主题与子主题的关系 core_topic_geometry_rel = RelationshipNode(core_topic, geometry, "INCLUDES") geometry_space_rel = RelationshipNode(geometry, space_concept, "INCLUDES") geometry_figure_rel = RelationshipNode(geometry, figure_recognition, "INCLUDES") geometry_measurement_rel = RelationshipNode(geometry, measurement, "INCLUDES") geometry_movement_rel = RelationshipNode(geometry, figure_movement, "INCLUDES") # 创建统计与概率主题及子主题节点 statistics_probability = TopicNode("统计与概率", "关于统计与概率的基本概念和方法") data_analysis = SubtopicNode("数据分析观念", "统计学以数据为基础,强调数据分析观念") statistical_chart = SubtopicNode("统计图", "三种统计图各有共性和差异,用于直观表述数据") data_randomness = SubtopicNode("数据的随机性", "数据的随机性与不确定性区别") average = SubtopicNode("平均数", "平均数是统计学中的重要概念") probability = SubtopicNode("概率", "概率是随机事件发生的属性") # 创建统计与概率主题与子主题的关系 core_topic_statistics_rel = RelationshipNode(core_topic, statistics_probability, "INCLUDES") statistics_data_rel = RelationshipNode(statistics_probability, data_analysis, "INCLUDES") statistics_chart_rel = RelationshipNode(statistics_probability, statistical_chart, "INCLUDES") statistics_randomness_rel = RelationshipNode(statistics_probability, data_randomness, "INCLUDES") statistics_average_rel = RelationshipNode(statistics_probability, average, "INCLUDES") statistics_probability_rel = RelationshipNode(statistics_probability, probability, "INCLUDES") # 创建附录内容主题及子主题节点 appendix = TopicNode("附录内容", "小学数学相关话题和教学设计") topics = SubtopicNode("若干话题", "与小学数学相关的若干话题") teaching_design = SubtopicNode("相关教学设计", "小学数学教学设计示例") # 创建附录内容主题与子主题的关系 core_topic_appendix_rel = RelationshipNode(core_topic, appendix, "INCLUDES") appendix_topics_rel = RelationshipNode(appendix, topics, "INCLUDES") appendix_design_rel = RelationshipNode(appendix, teaching_design, "INCLUDES") # 合并所有节点和关系 nodes = [ core_topic, number_recognition, quantity_essence, natural_numbers, negative_numbers, fractions, decimals, number_sense, number_operations, addition, subtraction, multiplication, division, mixed_operations, estimation, symbol_awareness, equation_essence, operations_model, problem_discovery, geometry, space_concept, figure_recognition, measurement, figure_movement, statistics_probability, data_analysis, statistical_chart, data_randomness, average, probability, appendix, topics, teaching_design ] relationships = [ core_topic_number_rel, number_recognition_quantity_rel, number_recognition_natural_rel, number_recognition_negative_rel, number_recognition_fraction_rel, number_recognition_decimal_rel, number_recognition_sense_rel, core_topic_operation_rel, operations_addition_rel, operations_subtraction_rel, operations_multiplication_rel, operations_division_rel, operations_mixed_rel, operations_estimation_rel, operations_symbol_rel, operations_equation_rel, operations_model_rel, operations_problem_rel, core_topic_geometry_rel, geometry_space_rel, geometry_figure_rel, geometry_measurement_rel, geometry_movement_rel, core_topic_statistics_rel, statistics_data_rel, statistics_chart_rel, statistics_randomness_rel, statistics_average_rel, statistics_probability_rel, core_topic_appendix_rel, appendix_topics_rel, appendix_design_rel ] # 创建子图并提交到数据库 subgraph = Subgraph(nodes, relationships) graph.create(subgraph) print("知识图谱创建成功!") if __name__ == '__main__': executor = Neo4jExecutor.create_default() # 清库 executor.graph.run("MATCH (n) DETACH DELETE n") # 调用函数创建知识图谱 create_knowledge_graph()