package com.guo.learningprogresstracker.utils; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import java.util.ArrayList; import java.util.List; /** * 思维导图结构对比结果。 * 每个 {@link NodeDiff} 对应标准导图中的一个节点,标注其匹配状态及用户在回忆中撰写的标题。 */ @Data public class CompareResult { /** 对比后的完整树(带 MATCHED/MISSED 标注) */ private MindMapNode matchedTree; /** 用户追加但标准导图中不存在的节点 */ private List extraNodes = new ArrayList<>(); /** 回忆覆盖率 0-1 */ private double recallRatio; /** 命中节点数 */ private int matchedCount; /** 遗漏节点数 */ private int missedCount; /** 额外节点数 */ private int extraCount; /** AI 评价文本(仅 AI 对比时有值,内置对比为 null) */ private String evaluation; @Data @NoArgsConstructor @AllArgsConstructor public static class FlatNode { private String title; private String path; // 以 / 分隔的路径 private String sourceType; private Integer sourceId; } }