test_hierarchical_match.py 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. """
  4. 测试分层匹配模块
  5. """
  6. import asyncio
  7. import json
  8. from pathlib import Path
  9. import sys
  10. project_root = Path(__file__).parent
  11. sys.path.insert(0, str(project_root))
  12. from lib.hierarchical_match_analyzer import hierarchical_match
  13. async def test_hierarchical_match():
  14. """测试分层匹配功能"""
  15. print("=== 测试分层匹配模块 ===\n")
  16. # 测试案例1: 标签匹配(应该匹配成功)
  17. print("测试案例1: 标签完全匹配")
  18. print("-" * 50)
  19. current_features_1 = ["猫咪", "拟人化", "搞笑"]
  20. persona_combo_1 = [
  21. {"特征名称": "猫咪", "所属分类": ["宠物情感", "实质"]},
  22. {"特征名称": "被拿捏住的无奈感", "所属分类": ["宠物关系主导", "宠物情感", "实质"]}
  23. ]
  24. print(f"当前特征: {current_features_1}")
  25. print(f"人设组合: {[f['特征名称'] for f in persona_combo_1]}")
  26. print("\n正在匹配...")
  27. result_1 = await hierarchical_match(current_features_1, persona_combo_1)
  28. print(f"\n结果:")
  29. print(f" 匹配层级: {result_1['匹配层级']}")
  30. print(f" 匹配结果: {result_1['匹配结果']}")
  31. print(f" 最终得分: {result_1['最终得分']}")
  32. print(f" 说明: {result_1['综合说明']}")
  33. # 测试案例2: 第一层分类匹配
  34. print("\n\n测试案例2: 第一层分类匹配")
  35. print("-" * 50)
  36. current_features_2 = ["立冬", "教资查分", "时间巧合"]
  37. persona_combo_2 = [
  38. {"特征名称": "节后返工场景", "所属分类": ["职场状态", "实质"]},
  39. {"特征名称": "打工", "所属分类": ["职场状态", "实质"]}
  40. ]
  41. print(f"当前特征: {current_features_2}")
  42. print(f"人设组合: {[f['特征名称'] for f in persona_combo_2]}")
  43. print(f"人设分类: {list(set(c for f in persona_combo_2 for c in f['所属分类']))}")
  44. print("\n正在匹配...")
  45. result_2 = await hierarchical_match(current_features_2, persona_combo_2)
  46. print(f"\n结果:")
  47. print(f" 匹配层级: {result_2['匹配层级']}")
  48. print(f" 匹配结果: {result_2['匹配结果']}")
  49. print(f" 最终得分: {result_2['最终得分']}")
  50. print(f" 说明: {result_2['综合说明']}")
  51. # 测试案例3: 第二层上位分类匹配
  52. print("\n\n测试案例3: 第二层上位分类匹配(完全不相关)")
  53. print("-" * 50)
  54. current_features_3 = ["科技产品", "功能介绍"]
  55. persona_combo_3 = [
  56. {"特征名称": "猫孩子", "所属分类": ["宠物亲子化", "宠物情感", "实质"]},
  57. {"特征名称": "被拿捏住的无奈感", "所属分类": ["宠物关系主导", "宠物情感", "实质"]}
  58. ]
  59. print(f"当前特征: {current_features_3}")
  60. print(f"人设组合: {[f['特征名称'] for f in persona_combo_3]}")
  61. print(f"人设分类: {list(set(c for f in persona_combo_3 for c in f['所属分类']))}")
  62. print("\n正在匹配...")
  63. result_3 = await hierarchical_match(current_features_3, persona_combo_3)
  64. print(f"\n结果:")
  65. print(f" 匹配层级: {result_3['匹配层级']}")
  66. print(f" 匹配结果: {result_3['匹配结果']}")
  67. print(f" 最终得分: {result_3['最终得分']}")
  68. print(f" 说明: {result_3['综合说明']}")
  69. # 保存详细结果
  70. print("\n\n=== 保存详细结果 ===")
  71. output_file = Path("test_hierarchical_match_results.json")
  72. results = {
  73. "测试案例1_标签匹配": result_1,
  74. "测试案例2_第一层分类匹配": result_2,
  75. "测试案例3_第二层上位分类匹配": result_3
  76. }
  77. with open(output_file, "w", encoding="utf-8") as f:
  78. json.dump(results, f, ensure_ascii=False, indent=2)
  79. print(f"详细结果已保存到: {output_file}")
  80. if __name__ == "__main__":
  81. asyncio.run(test_hierarchical_match())