Files
reader/scripts/build_keyword_index.py
T

77 lines
2.2 KiB
Python

from __future__ import annotations
import argparse
import sys
from pathlib import Path
REPO_ROOT = Path(__file__).resolve().parents[1]
SRC_ROOT = REPO_ROOT / "src"
if str(SRC_ROOT) not in sys.path:
sys.path.insert(0, str(SRC_ROOT))
from summary_mcp.core.keyword_index import persist_keyword_indexes
from summary_mcp.models.openclaw_delivery import OpenClawDeliveryPayload
def _load_payload(path: Path) -> OpenClawDeliveryPayload:
return OpenClawDeliveryPayload.model_validate_json(path.read_text(encoding="utf-8-sig"))
def main() -> None:
parser = argparse.ArgumentParser(
description="Build the daily keyword index and global keyword stats from an OpenClaw delivery payload."
)
parser.add_argument(
"--input",
type=Path,
required=True,
help="OpenClaw delivery payload JSON file",
)
parser.add_argument(
"--daily-dir",
type=Path,
default=REPO_ROOT / "data" / "term_index" / "daily",
help="Directory for daily keyword index files",
)
parser.add_argument(
"--stats-output",
type=Path,
default=REPO_ROOT / "data" / "term_index" / "term_stats.json",
help="Global keyword stats output path",
)
parser.add_argument(
"--aliases",
type=Path,
default=REPO_ROOT / "configs" / "term_aliases.json",
help="Keyword alias config JSON file",
)
parser.add_argument(
"--stopwords",
type=Path,
default=REPO_ROOT / "configs" / "term_stopwords.json",
help="Keyword stopwords config JSON file",
)
args = parser.parse_args()
payload = _load_payload(args.input)
result = persist_keyword_indexes(
payload.candidates,
for_date=payload.date,
digest_id=payload.run_id,
source="openclaw_delivery_payload",
daily_dir=args.daily_dir,
stats_path=args.stats_output,
aliases_path=args.aliases,
stopwords_path=args.stopwords,
)
print(f"Saved daily keyword index to {result['daily_output']}")
print(f"Saved keyword stats to {result['stats_output']}")
print(f"Indexed {result['candidate_count']} candidates and {result['term_count']} keywords")
if __name__ == "__main__":
main()