#!/usr/bin/env python3 """P&ID 시스템/제어기 추출기 LI, PI, TI, FIQ, FICQ, TICA, PICA, LICA 등 시스템/제어기 전용 추출. 사용법: python pid_extract_system.py --input full_text.txt --output system.json """ import sys import os sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) from pid_extract_template import call_llm from pid_extract_prompts import _SYSTEM_PROMPT import argparse import json import logging import time logger = logging.getLogger("pid_extractor.system") def extract(input_text: str, max_tokens: int = 65536) -> list: """시스템/제어기 태그 추출.""" return call_llm(_SYSTEM_PROMPT, input_text, max_tokens=max_tokens) if __name__ == "__main__": parser = argparse.ArgumentParser(description="P&ID 시스템/제어기 추출기") parser.add_argument("--input", required=True, help="입력 텍스트 파일 경로") parser.add_argument("--output", required=True, help="출력 JSON 파일 경로") parser.add_argument("--max-tokens", type=int, default=65536, help="최대 토큰 수") args = parser.parse_args() with open(args.input, "r", encoding="utf-8") as f: input_text = f.read() logger.info(f"입력 파일 읽기 완료: {len(input_text)}자") t0 = time.time() tags = extract(input_text, max_tokens=args.max_tokens) elapsed = time.time() - t0 logger.info(f"추출 완료: {len(tags)}개 태그, 소요 시간: {elapsed:.1f}초") output_dir = os.path.dirname(args.output) if output_dir: os.makedirs(output_dir, exist_ok=True) result = { "success": True, "count": len(tags), "tags": tags, "processing_time_sec": round(elapsed, 1), } with open(args.output, "w", encoding="utf-8") as f: json.dump(result, f, ensure_ascii=False, indent=2) logger.info(f"결과 저장 완료: {args.output}") print(json.dumps({"success": True, "count": len(tags), "time": round(elapsed, 1)}, ensure_ascii=False))