filter_multiaxis.py 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. """给老的「多轴正交组合」query 加一层创作筛选(query_filter.txt)。
  2. 读 DB 里 method=多轴正交组合 的每条 query,批量过 filter,把 keep + filter_reason 写回各自的
  3. axes JSON(前端据此显示 留/排除)。不重生成、不动搜索结果,纯就地打标。
  4. 用法:PYTHONPATH=. CK_ENV_FILE=.env python scripts/filter_multiaxis.py [method]
  5. """
  6. from __future__ import annotations
  7. import json
  8. import sys
  9. from acquisition import store
  10. from acquisition.query_filter import filter_queries
  11. from core.config import Settings
  12. METHOD = sys.argv[1] if len(sys.argv) > 1 else "多轴正交组合"
  13. def main() -> None:
  14. settings = Settings.from_env()
  15. conn = store.connect()
  16. try:
  17. rows = conn.execute("SELECT id, query, axes FROM queries WHERE method=?", (METHOD,)).fetchall()
  18. if not rows:
  19. print(f"DB 里没有 method={METHOD} 的 query")
  20. return
  21. queries = [r["query"] for r in rows]
  22. print(f"{METHOD}: {len(queries)} 条 → 过滤中…")
  23. verdicts = filter_queries(queries, settings)
  24. kept = 0
  25. for r, v in zip(rows, verdicts):
  26. axes = json.loads(r["axes"] or "{}")
  27. axes["keep"] = v["keep"]
  28. axes["filter_reason"] = v["reason"]
  29. conn.execute("UPDATE queries SET axes=? WHERE id=?",
  30. (json.dumps(axes, ensure_ascii=False), r["id"]))
  31. kept += 1 if v["keep"] else 0
  32. conn.commit()
  33. print(f"完成:保留 {kept} / {len(queries)}(排除 {len(queries) - kept})")
  34. finally:
  35. conn.close()
  36. if __name__ == "__main__":
  37. main()