handle_pattern.py 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. """
  2. 关键点检索工具 - 根据输入的点在图数据库中查找所有关联的点
  3. 用于 Agent 执行时自主调取关联关键点数据。
  4. """
  5. import json
  6. import os
  7. from pathlib import Path
  8. from typing import Any, Dict, Optional
  9. # 完整图数据库文件路径(包含 edges)
  10. GRAPH_FULL_DATA_PATH = os.getenv(
  11. "GRAPH_FULL_DATA_PATH",
  12. # str(Path(__file__).parent.parent / "data/library/item_graph/item_graph_full_all_levels.json")
  13. str(Path(__file__).parent.parent / "data/library/apriori_analysis_post_level/frequent_itemsets_multi_depth.json")
  14. )
  15. # 缓存图数据,避免重复加载
  16. _graph_full_cache: Optional[Dict[str, Any]] = None
  17. def _load_graph_full() -> Dict[str, Any]:
  18. """加载完整图数据(带缓存,包含 edges)"""
  19. global _graph_full_cache
  20. if _graph_full_cache is None:
  21. with open(GRAPH_FULL_DATA_PATH, 'r', encoding='utf-8') as f:
  22. _graph_full_cache = json.load(f)
  23. return _graph_full_cache
  24. def build_element_index(data):
  25. """
  26. 预先建立元素到组合的索引
  27. Returns:
  28. dict: {元素: [包含该元素的组合索引列表]}
  29. """
  30. index = {}
  31. data = data.get("dimension_modes", {}).get("full", {}).get("results_by_depth", {}).get("depth_4", {}).get("frequent_itemsets_by_type", {}).get("关键点×灵感点×目的点_混合", {}).get("itemsets", [])
  32. items = {}
  33. index = {}
  34. for group_idx, group in enumerate(data):
  35. itemset = group.get("itemset", [])
  36. items[group_idx] = itemset
  37. for element in itemset:
  38. if element not in index:
  39. index[element] = []
  40. index[element].append(str(group_idx))
  41. return index, items
  42. if __name__ == "__main__":
  43. graph = _load_graph_full()
  44. index, items = build_element_index(graph)
  45. # 输出到文件
  46. output_path = Path(__file__).parent.parent / "data/library/apriori_analysis_post_level/frequent_itemsets_multi_depth_index.json"
  47. with open(output_path, 'w', encoding='utf-8') as f:
  48. json.dump({
  49. "index": index,
  50. "items": items
  51. }, f, ensure_ascii=False, indent=2)
  52. print(f"数据已输出到: {output_path}")