fix
This commit is contained in:
@@ -14,16 +14,37 @@
|
||||
|
||||
Один JSON: все поля анализа + `tags`, `removed`. Если задан `--input-chapter`, в выход добавляются метаданные главы/книги (book_id, chapter_id, chapter_number, chapter_title, book_title, author). Этот документ передаётся в шаг 6 (генерация эмбеддингов) и в шаг 7 (payload Qdrant).
|
||||
|
||||
## Использование
|
||||
## Скрипт с путями по умолчанию
|
||||
|
||||
`run_merge_analysis_tags.py` — мерж с путями по умолчанию (как в остальных этапах). Без вызова LLM.
|
||||
|
||||
**Вход (по умолчанию):**
|
||||
- `../1_анализ_главы/merge.json` — полный анализ (framework, insights, application, limitations)
|
||||
- `../4_валидация_тегов/validated_tags.json` — результат шага 4 (tags, removed)
|
||||
- `../1_анализ_главы/вход_главы.json` — метаданные главы/книги (book_id, chapter_id и т.д.; подставляются в выход для шагов 6–8)
|
||||
|
||||
**Выход:** `merged_with_tags.json` в каталоге скрипта (или путь через `-o`).
|
||||
|
||||
**Запуск:**
|
||||
```bash
|
||||
python3 merge_analysis_tags.py <merge.json> <выход_valid_tag.json> [--input-chapter вход_главы.json] [-o выход.json]
|
||||
cd 5_мерж_анализа_и_тегов
|
||||
python3 run_merge_analysis_tags.py
|
||||
# с указанием путей:
|
||||
python3 run_merge_analysis_tags.py --merge /path/to/merge.json --tags /path/to/validated_tags.json --input-chapter /path/to/вход_главы.json -o merged_with_tags.json
|
||||
# без метаданных главы:
|
||||
python3 run_merge_analysis_tags.py --no-chapter
|
||||
```
|
||||
|
||||
Пример (с метаданными для шага 7):
|
||||
## Универсальный скрипт (позиционные аргументы)
|
||||
|
||||
```bash
|
||||
python3 merge_analysis_tags.py ../2b_финальная_валидация_согласованности/merge.json ../4_валидация_тегов/выход_valid_tag.json --input-chapter ../1_анализ_главы/вход_главы.example.json -o merged_with_tags.json
|
||||
python3 merge_analysis_tags.py <merge.json> <validated_tags.json> [--input-chapter вход_главы.json] [-o выход.json]
|
||||
```
|
||||
|
||||
Пример:
|
||||
|
||||
```bash
|
||||
python3 merge_analysis_tags.py ../1_анализ_главы/merge.json ../4_валидация_тегов/validated_tags.json --input-chapter ../1_анализ_главы/вход_главы.json -o merged_with_tags.json
|
||||
```
|
||||
|
||||
Без `-o` результат выводится в stdout.
|
||||
|
||||
95
5_мерж_анализа_и_тегов/run_merge_analysis_tags.py
Normal file
95
5_мерж_анализа_и_тегов/run_merge_analysis_tags.py
Normal file
@@ -0,0 +1,95 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Запуск шага 5 с путями по умолчанию: мерж анализа (2b) и валидированных тегов (4).
|
||||
Без вызова LLM — только слияние JSON. Использует merge_analysis_tags.merge_analysis_and_tags.
|
||||
Вход по умолчанию: merge.json (1), validated_tags.json (4), вход_главы.json (1).
|
||||
Выход по умолчанию: merged_with_tags.json в каталоге скрипта.
|
||||
"""
|
||||
|
||||
import argparse
|
||||
import json
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
DIR = Path(__file__).resolve().parent
|
||||
DEFAULT_ANALYSIS = DIR.parent / "1_анализ_главы" / "merge.json"
|
||||
DEFAULT_TAGS = DIR.parent / "4_валидация_тегов" / "validated_tags.json"
|
||||
DEFAULT_CHAPTER = DIR.parent / "1_анализ_главы" / "вход_главы.json"
|
||||
DEFAULT_OUTPUT = DIR / "merged_with_tags.json"
|
||||
|
||||
# Импорт логики мержа из основного скрипта
|
||||
from merge_analysis_tags import load_json, merge_analysis_and_tags
|
||||
|
||||
|
||||
def main() -> int:
|
||||
"""Загружает анализ и теги по путям (по умолчанию — из соседних этапов), мержит, пишет выход."""
|
||||
parser = argparse.ArgumentParser(
|
||||
description="Мерж анализа (2b) и валидированных тегов (4) в один JSON (шаг 5). Пути по умолчанию — из этапов 1 и 4.",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--merge",
|
||||
type=Path,
|
||||
default=DEFAULT_ANALYSIS,
|
||||
help=f"Путь к merge.json с анализом (по умолчанию: {DEFAULT_ANALYSIS})",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--tags",
|
||||
type=Path,
|
||||
default=DEFAULT_TAGS,
|
||||
help=f"Путь к validated_tags.json (по умолчанию: {DEFAULT_TAGS})",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--input-chapter",
|
||||
type=Path,
|
||||
default=DEFAULT_CHAPTER,
|
||||
help=f"Путь к вход_главы.json для метаданных главы/книги (по умолчанию: {DEFAULT_CHAPTER})",
|
||||
)
|
||||
parser.add_argument(
|
||||
"-o",
|
||||
"--output",
|
||||
type=Path,
|
||||
default=DEFAULT_OUTPUT,
|
||||
help=f"Путь к выходному JSON (по умолчанию: {DEFAULT_OUTPUT})",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--no-chapter",
|
||||
action="store_true",
|
||||
help="Не подставлять метаданные главы из --input-chapter.",
|
||||
)
|
||||
args = parser.parse_args()
|
||||
|
||||
if not args.merge.is_file():
|
||||
print(f"Файл не найден: {args.merge}", file=sys.stderr)
|
||||
return 1
|
||||
if not args.tags.is_file():
|
||||
print(f"Файл не найден: {args.tags}", file=sys.stderr)
|
||||
return 1
|
||||
|
||||
print("Загрузка merge.json и validated_tags.json...")
|
||||
try:
|
||||
analysis = load_json(args.merge)
|
||||
tags_doc = load_json(args.tags)
|
||||
except json.JSONDecodeError as e:
|
||||
print(f"Ошибка разбора JSON: {e}", file=sys.stderr)
|
||||
return 1
|
||||
|
||||
input_chapter = None
|
||||
if not args.no_chapter and args.input_chapter.is_file():
|
||||
try:
|
||||
input_chapter = load_json(args.input_chapter)
|
||||
except json.JSONDecodeError as e:
|
||||
print(f"Ошибка разбора input-chapter JSON: {e}", file=sys.stderr)
|
||||
return 1
|
||||
elif not args.no_chapter and not args.input_chapter.is_file():
|
||||
print(f"Файл не найден (метаданные главы не добавлены): {args.input_chapter}", file=sys.stderr)
|
||||
|
||||
merged = merge_analysis_and_tags(analysis, tags_doc, input_chapter)
|
||||
args.output.parent.mkdir(parents=True, exist_ok=True)
|
||||
with open(args.output, "w", encoding="utf-8") as f:
|
||||
json.dump(merged, f, ensure_ascii=False, indent=2)
|
||||
print(f"Записано: {args.output}")
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
sys.exit(main())
|
||||
Reference in New Issue
Block a user