Browse Source

fix: 统一使用预计算路径节点高亮帖子标签边

合并镜像边和二阶边的高亮逻辑,直接使用边详情中的路径节点列表

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
yangxiaohui 5 ngày trước cách đây
mục cha
commit
36e1132d87
1 tập tin đã thay đổi với 10 bổ sung51 xóa
  1. 10 51
      script/data_processing/visualize_match_graph.py

+ 10 - 51
script/data_processing/visualize_match_graph.py

@@ -2273,63 +2273,22 @@ HTML_TEMPLATE = '''<!DOCTYPE html>
                 highlightNodeIds.add(sourceId);
                 highlightNodeIds.add(targetId);
 
-                // 如果是二阶边,显示完整路径
-                if (clickedLink.type.startsWith("二阶_") && clickedLink.边详情) {{
+                // 如果是镜像边或二阶边,使用预计算的路径节点高亮
+                if ((clickedLink.type.startsWith("镜像_") || clickedLink.type.startsWith("二阶_")) && clickedLink.边详情) {{
                     const detail = clickedLink.边详情;
-                    // 分类节点
-                    if (detail.分类节点1) highlightNodeIds.add(detail.分类节点1);
-                    if (detail.分类节点2) highlightNodeIds.add(detail.分类节点2);
-                    // 标签节点
-                    if (detail.标签节点1) highlightNodeIds.add(detail.标签节点1);
-                    if (detail.标签节点2) highlightNodeIds.add(detail.标签节点2);
-
-                    // 找出路径上的边
-                    links.forEach((link, i) => {{
-                        const lSrc = typeof link.source === "object" ? link.source.id : link.source;
-                        const lTgt = typeof link.target === "object" ? link.target.id : link.target;
+                    const pathNodes = new Set([sourceId, targetId]);
 
-                        // 帖子->标签 的匹配边
-                        if (link.type.startsWith("匹配_")) {{
-                            if ((lSrc === sourceId && lTgt === detail.标签节点1) ||
-                                (lSrc === targetId && lTgt === detail.标签节点2)) {{
-                                highlightLinkIndices.add(i);
-                            }}
-                        }}
-                        // 标签->分类 的属于边
-                        if (link.type === "属于") {{
-                            if ((lSrc === detail.标签节点1 && lTgt === detail.分类节点1) ||
-                                (lSrc === detail.标签节点2 && lTgt === detail.分类节点2)) {{
-                                highlightLinkIndices.add(i);
-                            }}
-                        }}
-                        // 分类之间的边
-                        if ((lSrc === detail.分类节点1 && lTgt === detail.分类节点2) ||
-                            (lSrc === detail.分类节点2 && lTgt === detail.分类节点1)) {{
-                            highlightLinkIndices.add(i);
-                        }}
-                    }});
-                }}
-                // 如果是镜像边,显示对应的人设边
-                else if (clickedLink.type.startsWith("镜像_") && clickedLink.边详情) {{
-                    const detail = clickedLink.边详情;
-                    if (detail.源人设节点) highlightNodeIds.add(detail.源人设节点);
-                    if (detail.目标人设节点) highlightNodeIds.add(detail.目标人设节点);
+                    // 使用预计算的路径节点
+                    (detail.路径节点 || []).forEach(n => pathNodes.add(n));
+
+                    // 高亮路径上的所有节点
+                    pathNodes.forEach(n => highlightNodeIds.add(n));
 
-                    // 找出对应的人设边和匹配
+                    // 高亮连接路径节点的边
                     links.forEach((link, i) => {{
                         const lSrc = typeof link.source === "object" ? link.source.id : link.source;
                         const lTgt = typeof link.target === "object" ? link.target.id : link.target;
-
-                        // 匹配边
-                        if (link.type.startsWith("匹配_")) {{
-                            if ((lSrc === sourceId && lTgt === detail.源人设节点) ||
-                                (lSrc === targetId && lTgt === detail.目标人设节点)) {{
-                                highlightLinkIndices.add(i);
-                            }}
-                        }}
-                        // 人设边
-                        if ((lSrc === detail.源人设节点 && lTgt === detail.目标人设节点) ||
-                            (lSrc === detail.目标人设节点 && lTgt === detail.源人设节点)) {{
+                        if (pathNodes.has(lSrc) && pathNodes.has(lTgt)) {{
                             highlightLinkIndices.add(i);
                         }}
                     }});