Spaces:
Running
Running
Replace v24-era demo with v34 pipeline demo (engine-vendored bundle)
Browse filesThis view is limited to 50 files because it contains too many changes. See raw diff
- .gitignore +0 -1
- Dockerfile +10 -19
- README.md +11 -28
- app.py +112 -86
- assets/pipelines/pipeline_dev_v34.yaml +58 -0
- {prompts/prod_251231 → assets/prompts/prompt_dev_260825_combo}/step1.txt +33 -3
- {prompts/prod_251231 → assets/prompts/prompt_dev_260825_combo}/step2.txt +6 -0
- {prompts/prod_251231 → assets/prompts/prompt_dev_260825_combo}/step3.txt +0 -0
- assets/resources/compound_whitelist.txt +3136 -0
- {data → assets/resources}/vocabulary.csv +0 -0
- blindtest/__init__.py +0 -5
- blindtest/db.py +0 -218
- blindtest/schema.sql +0 -84
- blindtest/ui.py +0 -171
- data/pmi_compounds_top.tsv.gz +0 -3
- diff_utils.py +0 -101
- pipelines.py +0 -1416
- postprocess.py +0 -460
- prompts/dev_260408_v16/step1.txt +0 -153
- prompts/dev_260429_v24/judge.txt +0 -95
- prompts/dev_260429_v24/step1.txt +0 -92
- prompts/dev_260430_e1b/step1.txt +0 -717
- prompts/dev_260430_e8/step1.txt +0 -807
- prompts/dev_260430_e8/step2.txt +0 -254
- prompts/dev_260430_f3c/step1.txt +0 -228
- prompts/dev_260430_pro3_v2/step1.txt +0 -87
- prompts/dev_260430_pro3_v2/step2.txt +0 -408
- prompts/dev_260430_pro3_v3/step1.txt +0 -78
- prompts/dev_260430_pro3_v3/step2.txt +0 -384
- prompts/dev_260430_pro3_v4/step1.txt +0 -48
- prompts/dev_260430_pro3_v4/step2.txt +0 -408
- prompts/dev_260430_pro3_v5/step1.txt +0 -717
- prompts/dev_260430_pro3_v5/step2.txt +0 -408
- prompts/dev_260430_pro3_v5/step3.txt +0 -254
- prompts/dev_260430_pro3_v6/step1.txt +0 -64
- prompts/dev_260430_pro3_v6/step2.txt +0 -408
- prompts/dev_260513_taxonomy_v6/context_dedup.txt +0 -47
- prompts/dev_260513_taxonomy_v6/grammar_particle.txt +0 -76
- prompts/dev_260513_taxonomy_v6/merger.txt +0 -26
- prompts/dev_260513_taxonomy_v6/proofread.txt +0 -1
- prompts/dev_260513_taxonomy_v6/punct_number.txt +0 -62
- prompts/dev_260513_taxonomy_v6/spelling_vocab.txt +0 -49
- requirements.txt +9 -10
- runner.py +95 -0
- solar_eval/__init__.py +5 -0
- solar_eval/_version.py +1 -0
- solar_eval/cli/__init__.py +1 -0
- solar_eval/cli/client.py +58 -0
- solar_eval/cli/commands/__init__.py +0 -0
- solar_eval/cli/commands/compare.py +127 -0
.gitignore
DELETED
|
@@ -1 +0,0 @@
|
|
| 1 |
-
__pycache__/
|
|
|
|
|
|
Dockerfile
CHANGED
|
@@ -1,24 +1,15 @@
|
|
| 1 |
-
# HuggingFace Spaces용 Dockerfile.
|
| 2 |
-
# Space 리포지토리가 이 디렉토리의 내용과 동일하다고 가정 (build context = Space root).
|
| 3 |
-
|
| 4 |
FROM python:3.12-slim
|
| 5 |
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
|
| 9 |
-
|
| 10 |
-
|
| 11 |
-
WORKDIR /app
|
| 12 |
-
|
| 13 |
-
COPY requirements.txt ./
|
| 14 |
-
RUN pip install -r requirements.txt
|
| 15 |
|
| 16 |
-
COPY
|
| 17 |
-
|
| 18 |
-
COPY title_proofread ./title_proofread
|
| 19 |
-
COPY prompts ./prompts
|
| 20 |
-
COPY data ./data
|
| 21 |
|
| 22 |
-
|
| 23 |
|
| 24 |
-
CMD ["
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
FROM python:3.12-slim
|
| 2 |
|
| 3 |
+
RUN useradd -m -u 1000 user
|
| 4 |
+
USER user
|
| 5 |
+
ENV HOME=/home/user \
|
| 6 |
+
PATH=/home/user/.local/bin:$PATH \
|
| 7 |
+
STREAMLIT_BROWSER_GATHER_USAGE_STATS=false
|
| 8 |
+
WORKDIR $HOME/app
|
|
|
|
|
|
|
|
|
|
| 9 |
|
| 10 |
+
COPY --chown=user requirements.txt .
|
| 11 |
+
RUN pip install --no-cache-dir --user -r requirements.txt
|
|
|
|
|
|
|
|
|
|
| 12 |
|
| 13 |
+
COPY --chown=user . .
|
| 14 |
|
| 15 |
+
CMD ["streamlit", "run", "app.py", "--server.port=8501", "--server.address=0.0.0.0", "--server.headless=true"]
|
README.md
CHANGED
|
@@ -1,35 +1,18 @@
|
|
| 1 |
---
|
| 2 |
-
title: Chosun
|
| 3 |
-
emoji: 📰
|
| 4 |
-
colorFrom:
|
| 5 |
-
colorTo:
|
| 6 |
sdk: docker
|
| 7 |
-
app_port:
|
| 8 |
pinned: false
|
| 9 |
---
|
| 10 |
|
| 11 |
-
#
|
| 12 |
|
| 13 |
-
Solar
|
|
|
|
|
|
|
| 14 |
|
| 15 |
-
|
| 16 |
-
|
| 17 |
-
1. **파이프라인 비교** — Baseline(251231 Pro2×3) vs v16(Pro3×1) 2-column 비교 + diff.
|
| 18 |
-
2. **블라인드 테스트** — 라벨 가린 pairwise 선호 투표. Supabase에 저장.
|
| 19 |
-
|
| 20 |
-
## 필수 시크릿
|
| 21 |
-
|
| 22 |
-
| Key | 설명 |
|
| 23 |
-
|---|---|
|
| 24 |
-
| `UPSTAGE_API_KEY` | Upstage API 키 (pipelines 호출용) |
|
| 25 |
-
| `SUPABASE_URL` | Supabase 프로젝트 URL |
|
| 26 |
-
| `SUPABASE_KEY` | Supabase anon 키 |
|
| 27 |
-
|
| 28 |
-
Supabase 스키마는 `blindtest/schema.sql` 참고.
|
| 29 |
-
|
| 30 |
-
## 로컬 실행
|
| 31 |
-
|
| 32 |
-
```bash
|
| 33 |
-
cd services/prj-chosun-gradio
|
| 34 |
-
.venv/bin/python app.py
|
| 35 |
-
```
|
|
|
|
| 1 |
---
|
| 2 |
+
title: Chosun Body Proofreading
|
| 3 |
+
emoji: "📰"
|
| 4 |
+
colorFrom: red
|
| 5 |
+
colorTo: gray
|
| 6 |
sdk: docker
|
| 7 |
+
app_port: 8501
|
| 8 |
pinned: false
|
| 9 |
---
|
| 10 |
|
| 11 |
+
# 조선일보 본문 교열 데모
|
| 12 |
|
| 13 |
+
Upstage Solar 기반 7+2-스텝 교열 파이프라인(`pipeline_dev_v34`) 데모입니다.
|
| 14 |
+
FT 교열 모델 → Solar 3-스텝 교정 → 결정론 규칙(어휘 치환 · 복합어 화이트리스트
|
| 15 |
+
복원 · 율/률 받침 규칙) 순서로 흐르며, 평가 하네스와 같은 엔진 코드를 실행합니다.
|
| 16 |
|
| 17 |
+
**실행 전 필요**: Space Settings → Secrets 에 `UPSTAGE_API_KEY` 를 넣으세요
|
| 18 |
+
(없으면 사이드바 입력을 사용합니다).
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
app.py
CHANGED
|
@@ -1,92 +1,118 @@
|
|
| 1 |
-
"""
|
| 2 |
|
| 3 |
-
|
| 4 |
-
|
| 5 |
-
judge. paragraph F1 47.04 (vs solar-pro2 prod_251231 mean 44.86).
|
| 6 |
-
- 제목 교열 (sandbox): solar-pro2 vs solar-pro3 side-by-side comparison
|
| 7 |
-
for newspaper title proofreading (default prompt hidden in UI).
|
| 8 |
"""
|
| 9 |
|
| 10 |
-
import
|
| 11 |
-
|
| 12 |
-
import gradio as gr
|
| 13 |
-
from dotenv import load_dotenv
|
| 14 |
-
from openai import OpenAI
|
| 15 |
-
from pipelines import list_prompts
|
| 16 |
-
from postprocess import load_vocabulary
|
| 17 |
-
|
| 18 |
-
from blindtest import build_feedback_tab
|
| 19 |
-
from title_proofread import build_title_proofread_tab
|
| 20 |
-
|
| 21 |
-
load_dotenv()
|
| 22 |
-
|
| 23 |
-
_api_key = os.getenv("UPSTAGE_API_KEY", "")
|
| 24 |
-
client = OpenAI(api_key=_api_key, base_url="https://api.upstage.ai/v1") if _api_key else None
|
| 25 |
-
|
| 26 |
-
_vocab_path = os.path.join(os.path.dirname(__file__), "data", "vocabulary.csv")
|
| 27 |
-
vocabulary = load_vocabulary(_vocab_path)
|
| 28 |
-
|
| 29 |
-
|
| 30 |
-
prompt_choices = list_prompts() or ["dev_260429_v24"]
|
| 31 |
-
|
| 32 |
-
|
| 33 |
-
def _default_prompt(preferred_prefix: str, fallback: str) -> str:
|
| 34 |
-
matches = [p for p in prompt_choices if p.startswith(preferred_prefix)]
|
| 35 |
-
if matches:
|
| 36 |
-
return matches[-1]
|
| 37 |
-
return fallback
|
| 38 |
|
|
|
|
|
|
|
|
|
|
| 39 |
|
| 40 |
-
|
| 41 |
-
|
| 42 |
-
|
| 43 |
-
|
| 44 |
-
|
| 45 |
-
|
| 46 |
-
|
| 47 |
-
|
| 48 |
-
|
| 49 |
-
|
| 50 |
-
|
| 51 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 52 |
)
|
| 53 |
-
|
| 54 |
-
|
| 55 |
-
|
| 56 |
-
|
| 57 |
-
|
| 58 |
-
|
| 59 |
-
|
| 60 |
-
|
| 61 |
-
|
| 62 |
-
|
| 63 |
-
|
| 64 |
-
|
| 65 |
-
|
| 66 |
-
|
| 67 |
-
|
| 68 |
-
|
| 69 |
-
|
| 70 |
-
|
| 71 |
-
|
| 72 |
-
|
| 73 |
-
|
| 74 |
-
|
| 75 |
-
|
| 76 |
-
|
| 77 |
-
|
| 78 |
-
|
| 79 |
-
|
| 80 |
-
|
| 81 |
-
|
| 82 |
-
|
| 83 |
-
|
| 84 |
-
|
| 85 |
-
|
| 86 |
-
|
| 87 |
-
|
| 88 |
-
|
| 89 |
-
|
| 90 |
-
|
| 91 |
-
|
| 92 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""조선일보 본문 교열 데모 (Streamlit / HF Space).
|
| 2 |
|
| 3 |
+
v34 파이프라인(prod 7-스텝 + 화이트리스트 복원 + 율/률 규칙) × combo 프롬프트를
|
| 4 |
+
solar-eval 엔진 그대로 실행한다. 로직은 전부 runner.py — 이 파일은 UI 만 담당.
|
|
|
|
|
|
|
|
|
|
| 5 |
"""
|
| 6 |
|
| 7 |
+
from __future__ import annotations
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 8 |
|
| 9 |
+
import difflib
|
| 10 |
+
import html
|
| 11 |
+
import os
|
| 12 |
|
| 13 |
+
import runner
|
| 14 |
+
import streamlit as st
|
| 15 |
+
|
| 16 |
+
SAMPLE_TEXT = (
|
| 17 |
+
"정부의 강력한 부동산 규제에도 불구하고 수도권 아파트 매매 거래 비률은 "
|
| 18 |
+
"오히려 증가세를 보였다. 시중 은행의 주택 담보 대출 금리가 낮아지면서 "
|
| 19 |
+
"실수요자의 구매 심리가 되살아났기 때문이라는 분석이 나온다."
|
| 20 |
+
)
|
| 21 |
+
|
| 22 |
+
LLM_STEPS = {"proofread", "basic_correction", "context_correction", "style_correction"}
|
| 23 |
+
|
| 24 |
+
|
| 25 |
+
def diff_html(src: str, dst: str) -> tuple[str, int]:
|
| 26 |
+
"""어절 단위 diff 를 HTML 로. (마크업, 바뀐 세그먼트 수) 반환."""
|
| 27 |
+
a, b = src.split(), dst.split()
|
| 28 |
+
sm = difflib.SequenceMatcher(a=a, b=b, autojunk=False)
|
| 29 |
+
parts: list[str] = []
|
| 30 |
+
n_changed = 0
|
| 31 |
+
for op, i1, i2, j1, j2 in sm.get_opcodes():
|
| 32 |
+
before, after = html.escape(" ".join(a[i1:i2])), html.escape(" ".join(b[j1:j2]))
|
| 33 |
+
if op == "equal":
|
| 34 |
+
parts.append(after)
|
| 35 |
+
continue
|
| 36 |
+
n_changed += 1
|
| 37 |
+
if before:
|
| 38 |
+
parts.append(
|
| 39 |
+
f'<span style="background:rgba(230,80,80,.18);'
|
| 40 |
+
f'text-decoration:line-through">{before}</span>'
|
| 41 |
)
|
| 42 |
+
if after:
|
| 43 |
+
parts.append(f'<span style="background:rgba(60,170,90,.22)">{after}</span>')
|
| 44 |
+
return " ".join(parts), n_changed
|
| 45 |
+
|
| 46 |
+
|
| 47 |
+
@st.cache_resource
|
| 48 |
+
def get_pipeline():
|
| 49 |
+
return runner.build_pipeline()
|
| 50 |
+
|
| 51 |
+
|
| 52 |
+
st.set_page_config(page_title="조선일보 본문 교열 데모", page_icon="📰", layout="wide")
|
| 53 |
+
st.title("📰 조선일보 본문 교열 데모")
|
| 54 |
+
st.caption(
|
| 55 |
+
"pipeline_dev_v34 (FT 교열 + Solar 3-스텝 + 결정론 규칙: 어휘 치환 · 복합어 "
|
| 56 |
+
"화이트리스트 복원 · 율/률 받침 규칙) × prompt_dev_260825_combo — "
|
| 57 |
+
"temperature 0.0 · reasoning off. 평가 하네스와 같은 엔진을 그대로 실행합니다."
|
| 58 |
+
)
|
| 59 |
+
|
| 60 |
+
with st.sidebar:
|
| 61 |
+
st.subheader("설정")
|
| 62 |
+
if not os.environ.get("UPSTAGE_API_KEY"):
|
| 63 |
+
key = st.text_input(
|
| 64 |
+
"UPSTAGE_API_KEY",
|
| 65 |
+
type="password",
|
| 66 |
+
help="HF Space 에서는 Settings → Secrets 로 설정하세요.",
|
| 67 |
+
)
|
| 68 |
+
if key:
|
| 69 |
+
os.environ["UPSTAGE_API_KEY"] = key
|
| 70 |
+
model = st.selectbox("모델 (step1–3 주입)", ["solar-pro4", "solar-pro2"], index=0)
|
| 71 |
+
st.caption("FT 교열 스텝은 파이프라인에 고정된 ft:solar-news-correction 을 사용합니다.")
|
| 72 |
+
|
| 73 |
+
text = st.text_area("기사 본문", value=SAMPLE_TEXT, height=180, max_chars=4000)
|
| 74 |
+
|
| 75 |
+
if st.button("교열 실행", type="primary", disabled=not text.strip()):
|
| 76 |
+
if not os.environ.get("UPSTAGE_API_KEY"):
|
| 77 |
+
st.error(
|
| 78 |
+
"UPSTAGE_API_KEY 가 필요합니다 — 사이드바에 입력하거나 Space Secrets 에 설정하세요."
|
| 79 |
+
)
|
| 80 |
+
st.stop()
|
| 81 |
+
with st.spinner("교열 중입니다… (파이프라인 최악 실측 37.5초, 보통 10초 내)"):
|
| 82 |
+
try:
|
| 83 |
+
result = runner.run_proofread(get_pipeline(), text.strip(), model=model)
|
| 84 |
+
except Exception as e: # noqa: BLE001 — 데모 표면에서는 원인 요약만 보여준다
|
| 85 |
+
st.error(f"실행 실패: {type(e).__name__}: {e}")
|
| 86 |
+
st.stop()
|
| 87 |
+
|
| 88 |
+
markup, n_changed = diff_html(text.strip(), result["output"])
|
| 89 |
+
usage = result.get("usage") or {}
|
| 90 |
+
|
| 91 |
+
c1, c2, c3 = st.columns(3)
|
| 92 |
+
c1.metric("소요 시간", f"{result['elapsed_s']:.1f}s")
|
| 93 |
+
c2.metric("바뀐 곳", f"{n_changed}곳")
|
| 94 |
+
c3.metric("토큰 (입력+출력)", f"{usage.get('total_tokens', 0):,}")
|
| 95 |
+
|
| 96 |
+
st.subheader("교정 결과 (원문 대비 변경 표시)")
|
| 97 |
+
st.markdown(
|
| 98 |
+
f'<div style="line-height:1.9;font-size:1.02rem">{markup}</div>',
|
| 99 |
+
unsafe_allow_html=True,
|
| 100 |
+
)
|
| 101 |
+
|
| 102 |
+
with st.expander("교정 전문 (복사용)"):
|
| 103 |
+
st.code(result["output"], language=None)
|
| 104 |
+
|
| 105 |
+
with st.expander("파이프라인 스텝별 출력"):
|
| 106 |
+
prev = text.strip()
|
| 107 |
+
for name, snapshot in result["step_outputs"].items():
|
| 108 |
+
kind = "LLM" if name in LLM_STEPS else "rule"
|
| 109 |
+
changed = snapshot != prev
|
| 110 |
+
st.markdown(f"**{name}** · {kind} · {'변경함' if changed else '변경 없음'}")
|
| 111 |
+
if changed:
|
| 112 |
+
step_markup, _ = diff_html(prev, snapshot)
|
| 113 |
+
st.markdown(
|
| 114 |
+
f'<div style="line-height:1.8;font-size:.92rem;opacity:.9">{step_markup}</div>',
|
| 115 |
+
unsafe_allow_html=True,
|
| 116 |
+
)
|
| 117 |
+
prev = snapshot
|
| 118 |
+
st.divider()
|
assets/pipelines/pipeline_dev_v34.yaml
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
name: pipeline_dev_v34
|
| 2 |
+
description: "v33 + yul_ryul_normalize (율/률 받침 규칙의 결정론적 강제, 맞춤법 제11항). 어절 꼬리가 조사이거나 비어 있을 때만 발동하는 인명 가드 + exceptions 훅 포함 — 재생 실측(v33 출력 위)에서 변경 4건 전부 골든 일치·부수 피해 0 (yul-ryul +1.49, ci-v2 +0.59, ci-v1 +0.58, paragraph·ci-v0 무변화), 유일 오탐이던 '김율희가' 는 조사 가드가 차단. rule 스텝이라 latency 비용 0. 스텝 추가라 extends 불가, 전체 파일."
|
| 3 |
+
text_split_size: 500
|
| 4 |
+
steps:
|
| 5 |
+
- name: vocabulary_sub_pre
|
| 6 |
+
type: rule
|
| 7 |
+
rule_type: vocabulary_sub
|
| 8 |
+
config:
|
| 9 |
+
vocab_dataset: resources/vocabulary.csv
|
| 10 |
+
|
| 11 |
+
- name: proofread
|
| 12 |
+
type: llm
|
| 13 |
+
model: ft:solar-news-correction
|
| 14 |
+
prompt_key: proofread
|
| 15 |
+
max_tokens: 2000
|
| 16 |
+
|
| 17 |
+
- name: basic_correction
|
| 18 |
+
type: llm
|
| 19 |
+
prompt_key: step1
|
| 20 |
+
user_template: |
|
| 21 |
+
<원문>
|
| 22 |
+
{steps.vocabulary_sub_pre}
|
| 23 |
+
</원문>
|
| 24 |
+
|
| 25 |
+
<교열_모델_수정결과>
|
| 26 |
+
{current}
|
| 27 |
+
</교열_모델_수정결과>
|
| 28 |
+
|
| 29 |
+
- name: context_correction
|
| 30 |
+
type: llm
|
| 31 |
+
prompt_key: step2
|
| 32 |
+
|
| 33 |
+
- name: style_correction
|
| 34 |
+
type: llm
|
| 35 |
+
prompt_key: step3
|
| 36 |
+
|
| 37 |
+
- name: vocabulary_reapply
|
| 38 |
+
type: rule
|
| 39 |
+
config:
|
| 40 |
+
vocab_dataset: resources/vocabulary.csv
|
| 41 |
+
|
| 42 |
+
- name: compound_whitelist_restore
|
| 43 |
+
type: rule
|
| 44 |
+
config:
|
| 45 |
+
whitelist_path: resources/compound_whitelist.txt
|
| 46 |
+
|
| 47 |
+
- name: yul_ryul_normalize
|
| 48 |
+
type: rule
|
| 49 |
+
config: {}
|
| 50 |
+
|
| 51 |
+
- name: post_process
|
| 52 |
+
type: rule
|
| 53 |
+
config:
|
| 54 |
+
pronoun_replacements:
|
| 55 |
+
이재명 대표: 이재명 대통령
|
| 56 |
+
currency_compact: true
|
| 57 |
+
comma_removal: true
|
| 58 |
+
unit_unicode: true
|
{prompts/prod_251231 → assets/prompts/prompt_dev_260825_combo}/step1.txt
RENAMED
|
@@ -18,7 +18,9 @@ You must use `original_paragraph` as a crucial reference to **validate your corr
|
|
| 18 |
|
| 19 |
1. **Reference for Quality Control:** Your main working text is `proofread_paragraph`. However, you must always validate it against `original_paragraph`. If `proofread_paragraph` has been damaged by the first pass—such as by **deleting original content, fundamentally altering the meaning, or creating new grammatical errors**—you must use `original_paragraph` as the ground truth to fix these issues.
|
| 20 |
|
| 21 |
-
2. **
|
|
|
|
|
|
|
| 22 |
|
| 23 |
This principle is absolute. Here are specific examples of how to apply it by overriding your knowledge:
|
| 24 |
|
|
@@ -47,7 +49,18 @@ You must use `original_paragraph` as a crucial reference to **validate your corr
|
|
| 47 |
- `original`: `이재명 대통령`
|
| 48 |
- `proofread`: `윤석열 대통령`
|
| 49 |
- **FINAL (Correct):** `이재명 대통령`
|
| 50 |
-
In all cases, the `original_paragraph` is your only guide
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 51 |
|
| 52 |
3. **Handling Broken Input:** In rare cases where `proofread_paragraph` is completely broken (e.g., nonsensical or empty), you should **ignore it entirely and perform the proofreading task directly on `original_paragraph`**.
|
| 53 |
|
|
@@ -215,6 +228,12 @@ Output: 자숙 경찰들의 폭주에 대응할 생각은커녕 피해를 보는
|
|
| 215 |
##### 교정 방법
|
| 216 |
각 단어의 정확한 의미와 용법을 구분하여 문맥에 맞는 단어를 선택합니다. 유사한 단어들의 뜻을 명확히 구분합니다.
|
| 217 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 218 |
##### 교정 예시
|
| 219 |
- 각출하다 → 갹출하다 (공동의 몫을 여럿이 나누어 낼 때)
|
| 220 |
- 구별하다 → 구분하다 (기준에 따라 나눌 때)
|
|
@@ -236,6 +255,17 @@ Output: 자숙 경찰들의 폭주에 대응할 생각은커녕 피해를 보는
|
|
| 236 |
- 담다 → 담그다 (식재료를 익게 할 때)
|
| 237 |
- 들리다 → 들르다 (잠깐 머무를 때)
|
| 238 |
- 작렬하다 → 작열하다 (뜨겁게 타오를 때)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 239 |
|
| 240 |
------------------
|
| 241 |
|
|
@@ -713,5 +743,5 @@ AI 기술 발전과 미래 전망[과학]<paragraph_separator>[IMG:456:CENTER]<p
|
|
| 713 |
- explanation은 수정 사항이 여러 개일 경우, 각 항목을 줄바꿈(`
|
| 714 |
`)으로 구분하며, 큰따옴표는 `"`, 줄바꿈은 `
|
| 715 |
`, 백슬래시는 `\`로 표기
|
| 716 |
-
- Keep
|
| 717 |
```
|
|
|
|
| 18 |
|
| 19 |
1. **Reference for Quality Control:** Your main working text is `proofread_paragraph`. However, you must always validate it against `original_paragraph`. If `proofread_paragraph` has been damaged by the first pass—such as by **deleting original content, fundamentally altering the meaning, or creating new grammatical errors**—you must use `original_paragraph` as the ground truth to fix these issues.
|
| 20 |
|
| 21 |
+
2. **Rule for Proper Nouns — 대상 보호는 절대, 표기 교정은 허용:** This is your most important instruction. It has two parts.
|
| 22 |
+
|
| 23 |
+
**(A) 대상(WHO/WHAT) 교체 절대 금지 (OVERRIDE ALL KNOWLEDGE):** `original_paragraph` 가 가리키는 인물·기관·직책·사건을 너의 지식으로 "사실 정정"하여 **다른 대상으로 바꾸는 것**을 절대 금지한다. 아래 예시의 실패는 가장 중대한 오류다.
|
| 24 |
|
| 25 |
This principle is absolute. Here are specific examples of how to apply it by overriding your knowledge:
|
| 26 |
|
|
|
|
| 49 |
- `original`: `이재명 대통령`
|
| 50 |
- `proofread`: `윤석열 대통령`
|
| 51 |
- **FINAL (Correct):** `이재명 대통령`
|
| 52 |
+
In all cases, the referent (대상) in `original_paragraph` is your only guide.
|
| 53 |
+
|
| 54 |
+
**(B) 같은 대상의 표기(SPELLING) 오류는 교정하라:** 원문이 가리키는 대상이 명백히 하나로 특정되는데 **표기 자체가 틀린 경우**는 (A)의 예외이며, 반드시 교정해야 한다. 다음 세 유형에 한한다:
|
| 55 |
+
- **명백한 오타** (대개 한두 글자 차이): `오니카와` → `오키나와`, `뮌헨글라트바흐` → `묀헨글라트바흐`
|
| 56 |
+
- **외래어 표기법 위반**: `쉥겐(Schengen)` → `솅겐(Schengen)`, `레프리` → `레퍼리`, `닛혼게이자이신문` → `니혼게이자이신문`
|
| 57 |
+
- **널리 알려진 기관·명칭의 공식 표기 오기**: `서울삼성병원` → `삼성서울병원`
|
| 58 |
+
|
| 59 |
+
**판단 기준은 단 하나다: 교정 전후가 같은 대상인가?**
|
| 60 |
+
- 같은 대상, 틀린 표기 → 교정하라 (예: `오니카와` 와 `오키나와` 는 같은 섬이다)
|
| 61 |
+
- 다른 대상으로 교체 → 절대 금지 (예: `닛혼게이자이신문` 을 `닛케이신문` 이라는 다른 약칭으로 바꾸는 것, 인물·직책을 바꾸는 것)
|
| 62 |
+
- 올바른 표기를 확실히 알지 못하면 → 원문 유지
|
| 63 |
+
`proofread_paragraph` 가 이미 이런 표기 교정을 했다면 **원문으로 되돌리지 마라.** 되돌리기는 (A) 위반(대상 교체)이 있을 때만 한다.
|
| 64 |
|
| 65 |
3. **Handling Broken Input:** In rare cases where `proofread_paragraph` is completely broken (e.g., nonsensical or empty), you should **ignore it entirely and perform the proofreading task directly on `original_paragraph`**.
|
| 66 |
|
|
|
|
| 228 |
##### 교정 방법
|
| 229 |
각 단어의 정확한 의미와 용법을 구분하여 문맥에 맞는 단어를 선택합니다. 유사한 단어들의 뜻을 명확히 구분합니다.
|
| 230 |
|
| 231 |
+
##### 문맥 대조 스캔 (필수 절차)
|
| 232 |
+
신문 제작 과정에서 한 단어가 발음·표기가 비슷한 **다른 단어로 잘못 찍히는 오식(誤植)**이 자주 발생합니다. 모든 문장에 대해 다음 절차를 수행하세요:
|
| 233 |
+
1. 문장을 읽으며 **"이 단어의 뜻이 이 문맥에서 통하는가"** 를 검토한다.
|
| 234 |
+
2. 뜻이 통하지 않거나 어긋나는 단어를 발견하면, **발음·표기가 비슷한 다른 단어**(대개 한두 글자 차이)로 바꿨을 때 뜻이 명백히 통하는지 확인한다.
|
| 235 |
+
3. 명백히 통하면 오식으로 판단하고 교정한다. **현재 단어로도 뜻이 통하면 절대 바꾸지 않는다** — 이 절차는 오식 복원이지 어휘 선호 교체가 아니다.
|
| 236 |
+
|
| 237 |
##### 교정 예시
|
| 238 |
- 각출하다 → 갹출하다 (공동의 몫을 여럿이 나누어 낼 때)
|
| 239 |
- 구별하다 → 구분하다 (기준에 따라 나눌 때)
|
|
|
|
| 255 |
- 담다 → 담그다 (식재료를 익게 할 때)
|
| 256 |
- 들리다 → 들르다 (잠깐 머무를 때)
|
| 257 |
- 작렬하다 → 작열하다 (뜨겁게 타오를 때)
|
| 258 |
+
- 정답을 맞추다 → 정답을 맞히다 (적중은 '맞히다', 대조·조립은 '맞추다')
|
| 259 |
+
- 곤혹을 치르다 → 곤욕을 치르다 (치르는 것은 '곤욕', '곤혹'은 '곤혹스럽다' 꼴로 쓴다)
|
| 260 |
+
- 수출량이 급등하다 → 수출량이 급증하다 (수량·건수는 급증/급감, 가격·지��는 급등/급락)
|
| 261 |
+
- 대회를 재패하다 → 대회를 제패하다 (우승은 제패(制霸), '재패'는 두 번째 제패일 때만)
|
| 262 |
+
- 실수가 번복되다 → 실수가 반복되다 (되풀이는 '반복', 결정을 뒤집는 것은 '번복')
|
| 263 |
+
- 다량의 지원자 → 다수의 지원자 (셀 수 있으면 '다수', 양이면 '다량')
|
| 264 |
+
- 서류를 결제하다 → 서류를 결재하다 (승인은 '결재', 대금 지불은 '결제')
|
| 265 |
+
- 신문에 개재된 기사 → 신문에 게재된 기사 (싣는 것은 '게재')
|
| 266 |
+
- 기금을 운영하다 → 기금을 운용하다 (돈·제도는 '운용', 조직·시설은 '운영')
|
| 267 |
+
- 유래없는 폭염 → 유례없는 폭염 (비슷한 사례는 '유례', 기원은 '유래')
|
| 268 |
+
- 앞차를 충돌하다 → 앞차를 추돌하다 (뒤에서 들이받는 것은 '추돌')
|
| 269 |
|
| 270 |
------------------
|
| 271 |
|
|
|
|
| 743 |
- explanation은 수정 사항이 여러 개일 경우, 각 항목을 줄바꿈(`
|
| 744 |
`)으로 구분하며, 큰따옴표는 `"`, 줄바꿈은 `
|
| 745 |
`, 백슬래시는 `\`로 표기
|
| 746 |
+
- Keep the IDENTITY of all names, titles, positions, dates, and event names as in the original — 대상 교체 금지. 단, 같은 대상의 명백한 표기 오류(오타·외래어 표기법 위반·공식 명칭 오기)는 교정하라
|
| 747 |
```
|
{prompts/prod_251231 → assets/prompts/prompt_dev_260825_combo}/step2.txt
RENAMED
|
@@ -22,6 +22,12 @@
|
|
| 22 |
- `[IMG:~~]`, `[VIDEO:~~]` 태그가 있어도 예외 없이 동일하게 적용
|
| 23 |
- **원칙: 입력의 `<paragraph_separator>` 개수, 위치, 줄바꿈 패턴을 100% 그대로 출력에 복제**
|
| 24 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 25 |
---
|
| 26 |
### **Part 2: 핵심 수행 임무 (Core Task)**
|
| 27 |
---
|
|
|
|
| 22 |
- `[IMG:~~]`, `[VIDEO:~~]` 태그가 있어도 예외 없이 동일하게 적용
|
| 23 |
- **원칙: 입력의 `<paragraph_separator>` 개수, 위치, 줄바꿈 패턴을 100% 그대로 출력에 복제**
|
| 24 |
|
| 25 |
+
**3. 불필요한 수정 금지 (Minimal Intervention)**
|
| 26 |
+
- **동의어 치환 금지:** 원문 표현이 표준어이고 문맥에 맞으면, 더 자연스러워 보여도 같은 뜻의 다른 표현으로 바꾸지 마라. (예: '재차 강조했다' → '다시 강조했다' 금지 — 둘 다 옳은 표현이다)
|
| 27 |
+
- **문장 압축·재구성 금지:** 뜻이 통하는 문장을 짧게 줄이거나 구조를 바꾸지 마라. (예: '슬하에 2녀가 있다' → '슬하에 2녀다' 금지)
|
| 28 |
+
- **띄어쓰기 재조정 금지:** 명백한 띄어쓰기 오류가 아니면 손대지 마라. 붙여 씀과 띄어 씀이 모두 허용되는 복합어는 원문 표기를 유지하라.
|
| 29 |
+
- **판단 기준:** 모든 수정은 아래 '#2. 교열 카테고리 정의'의 어느 한 항목에 명확히 해당해야 한다. "이 표현이 더 낫다"는 이유만으로 하는 수정은 전부 금지이며, **수정하지 않는 것이 기본값이다.**
|
| 30 |
+
|
| 31 |
---
|
| 32 |
### **Part 2: 핵심 수행 임무 (Core Task)**
|
| 33 |
---
|
{prompts/prod_251231 → assets/prompts/prompt_dev_260825_combo}/step3.txt
RENAMED
|
File without changes
|
assets/resources/compound_whitelist.txt
ADDED
|
@@ -0,0 +1,3136 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
삼성전자 34
|
| 2 |
+
상설특검 25
|
| 3 |
+
때문이다 20
|
| 4 |
+
국민의힘 19
|
| 5 |
+
기록했다 15
|
| 6 |
+
시중은행 15
|
| 7 |
+
현대차그룹 14
|
| 8 |
+
계획이다 14
|
| 9 |
+
알려졌다 13
|
| 10 |
+
나타났다 13
|
| 11 |
+
흡혈박쥐 13
|
| 12 |
+
우리나라 12
|
| 13 |
+
싱가포르 12
|
| 14 |
+
과정에서 12
|
| 15 |
+
대상으로 11
|
| 16 |
+
예정이다 11
|
| 17 |
+
인터넷은행 11
|
| 18 |
+
프로그램 10
|
| 19 |
+
시작했다 10
|
| 20 |
+
조국혁신당 10
|
| 21 |
+
상황에서 9
|
| 22 |
+
주장했다 8
|
| 23 |
+
더불어민주당 8
|
| 24 |
+
것이라고 7
|
| 25 |
+
허리케인 7
|
| 26 |
+
집계됐다 7
|
| 27 |
+
알레르기 7
|
| 28 |
+
증가했다 7
|
| 29 |
+
국정감사 7
|
| 30 |
+
분석이다 7
|
| 31 |
+
상황이다 7
|
| 32 |
+
상대적으로 7
|
| 33 |
+
대통령실 7
|
| 34 |
+
위험운전치사상 7
|
| 35 |
+
노벨문학상 7
|
| 36 |
+
문학평론가 7
|
| 37 |
+
수수료율 7
|
| 38 |
+
서울에서 6
|
| 39 |
+
스마트폰 6
|
| 40 |
+
투자자들 6
|
| 41 |
+
중심으로 6
|
| 42 |
+
만들었다 6
|
| 43 |
+
발표했다 6
|
| 44 |
+
연금저축 6
|
| 45 |
+
미디어텍 6
|
| 46 |
+
적극적으로 6
|
| 47 |
+
여론조사 6
|
| 48 |
+
토스증권 6
|
| 49 |
+
레지던스 6
|
| 50 |
+
파드리스 6
|
| 51 |
+
캔자스시티 6
|
| 52 |
+
인도법인 6
|
| 53 |
+
영업이익 5
|
| 54 |
+
지적했다 5
|
| 55 |
+
만들어진 5
|
| 56 |
+
사이에서 5
|
| 57 |
+
전망이다 5
|
| 58 |
+
시내버스 5
|
| 59 |
+
플레이오프 5
|
| 60 |
+
지금까지 5
|
| 61 |
+
원천징수 5
|
| 62 |
+
일각에선 5
|
| 63 |
+
와일드카드 5
|
| 64 |
+
포스트시즌 5
|
| 65 |
+
파리바게뜨 5
|
| 66 |
+
어포스트로피 5
|
| 67 |
+
한성도서본 5
|
| 68 |
+
이어졌다 4
|
| 69 |
+
문씨에게 4
|
| 70 |
+
버튼으로 4
|
| 71 |
+
보도했다 4
|
| 72 |
+
이해하지 4
|
| 73 |
+
상태에서 4
|
| 74 |
+
하이브리드 4
|
| 75 |
+
기준으로 4
|
| 76 |
+
설명했다 4
|
| 77 |
+
대회에서 4
|
| 78 |
+
내년부터 4
|
| 79 |
+
진행했다 4
|
| 80 |
+
콜레오스 4
|
| 81 |
+
방식이다 4
|
| 82 |
+
골프클럽 4
|
| 83 |
+
조사됐다 4
|
| 84 |
+
허사비스 4
|
| 85 |
+
시가총액 4
|
| 86 |
+
이끌었다 4
|
| 87 |
+
추진하고 4
|
| 88 |
+
유튜버들 4
|
| 89 |
+
국내에서 4
|
| 90 |
+
늘어나고 4
|
| 91 |
+
신에너지 4
|
| 92 |
+
난양이공대 4
|
| 93 |
+
전문가들 4
|
| 94 |
+
알츠하이머병 4
|
| 95 |
+
차지했다 4
|
| 96 |
+
공동주택 4
|
| 97 |
+
사전점검 4
|
| 98 |
+
영광군수 4
|
| 99 |
+
커뮤니티 4
|
| 100 |
+
영등포로터리 4
|
| 101 |
+
디자이너 4
|
| 102 |
+
넷플릭스 4
|
| 103 |
+
내셔널리그 4
|
| 104 |
+
아메리칸리그 4
|
| 105 |
+
타이거스 4
|
| 106 |
+
네트워크 4
|
| 107 |
+
카카오게임즈 4
|
| 108 |
+
배드민턴 4
|
| 109 |
+
알테오젠 4
|
| 110 |
+
무너졌다 4
|
| 111 |
+
비트코인 4
|
| 112 |
+
옥스퍼드대 4
|
| 113 |
+
서울대병원 4
|
| 114 |
+
부산대병원 4
|
| 115 |
+
시범경기 4
|
| 116 |
+
레이커스 4
|
| 117 |
+
무엇보다 3
|
| 118 |
+
마감했다 3
|
| 119 |
+
모건스탠리 3
|
| 120 |
+
이태원동 3
|
| 121 |
+
가능하다 3
|
| 122 |
+
업계에서 3
|
| 123 |
+
터치스크린 3
|
| 124 |
+
제공하고 3
|
| 125 |
+
실리콘밸리 3
|
| 126 |
+
스타트업 3
|
| 127 |
+
플로리다주 3
|
| 128 |
+
기자회견 3
|
| 129 |
+
중요하다고 3
|
| 130 |
+
이스라엘 3
|
| 131 |
+
디스커버리 3
|
| 132 |
+
검토한다 3
|
| 133 |
+
방식으로 3
|
| 134 |
+
입장에서 3
|
| 135 |
+
프로축구 3
|
| 136 |
+
경기에서 3
|
| 137 |
+
벗어나지 3
|
| 138 |
+
르노코리아 3
|
| 139 |
+
설문조사 3
|
| 140 |
+
공개했다 3
|
| 141 |
+
판단했다 3
|
| 142 |
+
홈페이지 3
|
| 143 |
+
활용하고 3
|
| 144 |
+
예상된다 3
|
| 145 |
+
주식시장 3
|
| 146 |
+
한국에서 3
|
| 147 |
+
딥마인드 3
|
| 148 |
+
창업했다 3
|
| 149 |
+
알파폴드 3
|
| 150 |
+
청약통장 3
|
| 151 |
+
시작으로 3
|
| 152 |
+
들어봤다 3
|
| 153 |
+
전해졌다 3
|
| 154 |
+
징검다리 3
|
| 155 |
+
유통업계 3
|
| 156 |
+
전국에서 3
|
| 157 |
+
검토하고 3
|
| 158 |
+
미국에서 3
|
| 159 |
+
그러면서 3
|
| 160 |
+
적용된다 3
|
| 161 |
+
제기했다 3
|
| 162 |
+
수사요구안 3
|
| 163 |
+
정치권에선 3
|
| 164 |
+
원내대표 3
|
| 165 |
+
필요하다고 3
|
| 166 |
+
규정하고 3
|
| 167 |
+
내부에서 3
|
| 168 |
+
아이디어 3
|
| 169 |
+
집행유예 3
|
| 170 |
+
많을수록 3
|
| 171 |
+
직장인들 3
|
| 172 |
+
처음이다 3
|
| 173 |
+
계속해서 3
|
| 174 |
+
순이었다 3
|
| 175 |
+
영광에서 3
|
| 176 |
+
호우특보 3
|
| 177 |
+
늘어났다 3
|
| 178 |
+
명태균씨 3
|
| 179 |
+
공개하지 3
|
| 180 |
+
이어지고 3
|
| 181 |
+
문제였다 3
|
| 182 |
+
손해배상 3
|
| 183 |
+
마이너스 3
|
| 184 |
+
현대건설 3
|
| 185 |
+
샌디에이고 3
|
| 186 |
+
야마모토 3
|
| 187 |
+
요시노부 3
|
| 188 |
+
에르난데스 3
|
| 189 |
+
선발투수 3
|
| 190 |
+
무실점으로 3
|
| 191 |
+
역전승했다 3
|
| 192 |
+
클리블랜드 3
|
| 193 |
+
가디언스 3
|
| 194 |
+
디트로이트 3
|
| 195 |
+
이승만대통령기념관 3
|
| 196 |
+
시정명령 3
|
| 197 |
+
집행정지 3
|
| 198 |
+
블룸버그 3
|
| 199 |
+
시장에서 3
|
| 200 |
+
시장으로 3
|
| 201 |
+
수준이다 3
|
| 202 |
+
최고인민회의 3
|
| 203 |
+
주식투자자금 3
|
| 204 |
+
원점으로 3
|
| 205 |
+
한국시리즈 3
|
| 206 |
+
날카로운 3
|
| 207 |
+
모습으로 3
|
| 208 |
+
한국문학번역원 3
|
| 209 |
+
문학평론 3
|
| 210 |
+
시중은행들 3
|
| 211 |
+
인터넷은행들 3
|
| 212 |
+
그렇다고 3
|
| 213 |
+
라이프치히 3
|
| 214 |
+
오리올스 3
|
| 215 |
+
과학자들 3
|
| 216 |
+
기요사키 3
|
| 217 |
+
것이었다 3
|
| 218 |
+
영어식으로 3
|
| 219 |
+
만리장성 3
|
| 220 |
+
장편소설 3
|
| 221 |
+
확인됐다 3
|
| 222 |
+
중앙서림본 3
|
| 223 |
+
대학생들 3
|
| 224 |
+
스티로폼 3
|
| 225 |
+
방침이다 2
|
| 226 |
+
개발하고 2
|
| 227 |
+
배터리팩 2
|
| 228 |
+
지속적으로 2
|
| 229 |
+
발전시켜 2
|
| 230 |
+
처음으로 2
|
| 231 |
+
조정했다 2
|
| 232 |
+
공시했다 2
|
| 233 |
+
목표주가 2
|
| 234 |
+
유진투자증권 2
|
| 235 |
+
이어지며 2
|
| 236 |
+
생각하지 2
|
| 237 |
+
음주운전 2
|
| 238 |
+
파악됐다 2
|
| 239 |
+
체납으로 2
|
| 240 |
+
차량으로 2
|
| 241 |
+
추가됐다 2
|
| 242 |
+
특징이다 2
|
| 243 |
+
가전제품 2
|
| 244 |
+
제품에서 2
|
| 245 |
+
폴크스바겐 2
|
| 246 |
+
내놓으며 2
|
| 247 |
+
유지하기 2
|
| 248 |
+
일반적으로 2
|
| 249 |
+
도입된다 2
|
| 250 |
+
도로에서 2
|
| 251 |
+
조사에서 2
|
| 252 |
+
정도라고 2
|
| 253 |
+
걱정해야 2
|
| 254 |
+
못지않게 2
|
| 255 |
+
플로리다 2
|
| 256 |
+
힐즈버러 2
|
| 257 |
+
유세에서 2
|
| 258 |
+
주민에게 2
|
| 259 |
+
끈질기게 2
|
| 260 |
+
주도하고 2
|
| 261 |
+
브렌트유 2
|
| 262 |
+
과도하다 2
|
| 263 |
+
분석했다 2
|
| 264 |
+
출시했다 2
|
| 265 |
+
버스중앙차로 2
|
| 266 |
+
지나치게 2
|
| 267 |
+
대상이다 2
|
| 268 |
+
이상으로 2
|
| 269 |
+
떨어졌다 2
|
| 270 |
+
포르투갈 2
|
| 271 |
+
투입했다 2
|
| 272 |
+
뽑아내며 2
|
| 273 |
+
뛰어올랐다 2
|
| 274 |
+
올잉글랜드 2
|
| 275 |
+
팬들에게 2
|
| 276 |
+
드러나기 2
|
| 277 |
+
방향으로 2
|
| 278 |
+
선보였다 2
|
| 279 |
+
구매하고 2
|
| 280 |
+
분석하고 2
|
| 281 |
+
헌법재판관 2
|
| 282 |
+
진행되지 2
|
| 283 |
+
공개됐다 2
|
| 284 |
+
화이트큐브 2
|
| 285 |
+
하루하루 2
|
| 286 |
+
뉴욕에서 2
|
| 287 |
+
전국적으로 2
|
| 288 |
+
시작하던 2
|
| 289 |
+
필요하다 2
|
| 290 |
+
예년보다 2
|
| 291 |
+
많았는데 2
|
| 292 |
+
자본시장 2
|
| 293 |
+
폐지까지 2
|
| 294 |
+
유예한다고 2
|
| 295 |
+
게임에서 2
|
| 296 |
+
태어났다 2
|
| 297 |
+
등극했다 2
|
| 298 |
+
캠브리지 2
|
| 299 |
+
스튜디오 2
|
| 300 |
+
당첨되기 2
|
| 301 |
+
문화체육관광부 2
|
| 302 |
+
성희롱으로 2
|
| 303 |
+
노벨의학상 2
|
| 304 |
+
노벨위원회 2
|
| 305 |
+
결정적인 2
|
| 306 |
+
연구자들 2
|
| 307 |
+
밝혀졌다 2
|
| 308 |
+
조선일보 2
|
| 309 |
+
스마트인컴 2
|
| 310 |
+
공개된다 2
|
| 311 |
+
업로드된다 2
|
| 312 |
+
연금수령 2
|
| 313 |
+
필명으로 2
|
| 314 |
+
기준금리 2
|
| 315 |
+
진입했다 2
|
| 316 |
+
스냅드래곤 2
|
| 317 |
+
채택했다 2
|
| 318 |
+
홍명보호 2
|
| 319 |
+
터뜨렸다 2
|
| 320 |
+
에레디비시 2
|
| 321 |
+
이어지면서 2
|
| 322 |
+
경쟁에서 2
|
| 323 |
+
보이면서 2
|
| 324 |
+
대형마트 2
|
| 325 |
+
북적였다 2
|
| 326 |
+
소비자들 2
|
| 327 |
+
분위기다 2
|
| 328 |
+
본격적으로 2
|
| 329 |
+
접어들자 2
|
| 330 |
+
프랜차이즈 2
|
| 331 |
+
급증했다 2
|
| 332 |
+
주력하고 2
|
| 333 |
+
과세당국 2
|
| 334 |
+
적용하면 2
|
| 335 |
+
해외에서 2
|
| 336 |
+
기획재정부 2
|
| 337 |
+
이용자들 2
|
| 338 |
+
성냥갑들 2
|
| 339 |
+
때문이라 2
|
| 340 |
+
자원순환형 2
|
| 341 |
+
분야에서 2
|
| 342 |
+
순위에서 2
|
| 343 |
+
진행한다 2
|
| 344 |
+
플라스틱 2
|
| 345 |
+
수소전기차 2
|
| 346 |
+
공동으로 2
|
| 347 |
+
투자하고 2
|
| 348 |
+
증시에서 2
|
| 349 |
+
사모펀드 2
|
| 350 |
+
제출했다 2
|
| 351 |
+
결정했다 2
|
| 352 |
+
보도자료 2
|
| 353 |
+
보관하던 2
|
| 354 |
+
규명하자며 2
|
| 355 |
+
특검법안 2
|
| 356 |
+
증언감정법 2
|
| 357 |
+
상설특검으로 2
|
| 358 |
+
수사하게 2
|
| 359 |
+
재발의할 2
|
| 360 |
+
확보하려 2
|
| 361 |
+
처리한다 2
|
| 362 |
+
무력화하 2
|
| 363 |
+
이끌어낼 2
|
| 364 |
+
장담하기 2
|
| 365 |
+
상황에선 2
|
| 366 |
+
노림수로 2
|
| 367 |
+
사법리스크 2
|
| 368 |
+
잡히면서 2
|
| 369 |
+
제기되고 2
|
| 370 |
+
민주당으로선 2
|
| 371 |
+
결집하고 2
|
| 372 |
+
끌어올려야 2
|
| 373 |
+
반복되며 2
|
| 374 |
+
상설특검법 2
|
| 375 |
+
판단하거나 2
|
| 376 |
+
발의했다 2
|
| 377 |
+
법원행정처 2
|
| 378 |
+
대한변협회장 2
|
| 379 |
+
추천하도록 2
|
| 380 |
+
발의했던 2
|
| 381 |
+
명시했던 2
|
| 382 |
+
거론된다 2
|
| 383 |
+
맞닥뜨릴 2
|
| 384 |
+
유지하고 2
|
| 385 |
+
연구개발 2
|
| 386 |
+
사건에서 2
|
| 387 |
+
연구위원 2
|
| 388 |
+
전략으로 2
|
| 389 |
+
강조했다 2
|
| 390 |
+
기반으로 2
|
| 391 |
+
지원하고 2
|
| 392 |
+
치열해지면서 2
|
| 393 |
+
급증하고 2
|
| 394 |
+
엔지니어 2
|
| 395 |
+
구축하고 2
|
| 396 |
+
기록했는데 2
|
| 397 |
+
해당한다 2
|
| 398 |
+
터바인홀 2
|
| 399 |
+
프로젝트 2
|
| 400 |
+
품질관리단 2
|
| 401 |
+
원칙적으로 2
|
| 402 |
+
대행업체 2
|
| 403 |
+
건설사들 2
|
| 404 |
+
못하도록 2
|
| 405 |
+
정상회의 2
|
| 406 |
+
세계에서 2
|
| 407 |
+
국제사회 2
|
| 408 |
+
총선에서 2
|
| 409 |
+
리얼미터 2
|
| 410 |
+
선거에서 2
|
| 411 |
+
영광으로 2
|
| 412 |
+
돌아다니며 2
|
| 413 |
+
사이에선 2
|
| 414 |
+
당선되든 2
|
| 415 |
+
졸업했다 2
|
| 416 |
+
집중호우 2
|
| 417 |
+
폭발적으로 2
|
| 418 |
+
쏟아내기 2
|
| 419 |
+
늘어나지 2
|
| 420 |
+
내다봤다 2
|
| 421 |
+
개혁신당 2
|
| 422 |
+
과시하고 2
|
| 423 |
+
국회의원 2
|
| 424 |
+
보궐선거 2
|
| 425 |
+
입장이다 2
|
| 426 |
+
정치인들 2
|
| 427 |
+
들어갔다 2
|
| 428 |
+
만들어졌다 2
|
| 429 |
+
않았다고 2
|
| 430 |
+
시도하거나 2
|
| 431 |
+
두부김치 2
|
| 432 |
+
교통사고 2
|
| 433 |
+
고가차도 2
|
| 434 |
+
제품으로 2
|
| 435 |
+
인테리어 2
|
| 436 |
+
국내에선 2
|
| 437 |
+
중요하게 2
|
| 438 |
+
여러모로 2
|
| 439 |
+
전화번호 2
|
| 440 |
+
압도적인 2
|
| 441 |
+
명씨에게 2
|
| 442 |
+
차근차근 2
|
| 443 |
+
했습니다 2
|
| 444 |
+
리더라면 2
|
| 445 |
+
법원에서 2
|
| 446 |
+
예정이라고 2
|
| 447 |
+
파라시스 2
|
| 448 |
+
하락했다 2
|
| 449 |
+
한국거래소 2
|
| 450 |
+
중소형주 2
|
| 451 |
+
프로배구 2
|
| 452 |
+
벗어났다 2
|
| 453 |
+
득점으로 2
|
| 454 |
+
바뀌었다 2
|
| 455 |
+
시즌부터 2
|
| 456 |
+
정규리그 2
|
| 457 |
+
페어플레 2
|
| 458 |
+
메이저리그 2
|
| 459 |
+
안방에서 2
|
| 460 |
+
제압했다 2
|
| 461 |
+
순간이었다 2
|
| 462 |
+
뒤집었다 2
|
| 463 |
+
다르빗슈 2
|
| 464 |
+
필라델피아 2
|
| 465 |
+
브루어스 2
|
| 466 |
+
대한민국 2
|
| 467 |
+
엔씨소프트 2
|
| 468 |
+
기록하며 2
|
| 469 |
+
이어갔다 2
|
| 470 |
+
알고리즘 2
|
| 471 |
+
업계에선 2
|
| 472 |
+
지난해엔 2
|
| 473 |
+
논의하기 2
|
| 474 |
+
예고했다 2
|
| 475 |
+
국무위원장 2
|
| 476 |
+
공개적으로 2
|
| 477 |
+
증권투자자금 2
|
| 478 |
+
남편이나 2
|
| 479 |
+
휴대전화 2
|
| 480 |
+
프로야구 2
|
| 481 |
+
수원에서 2
|
| 482 |
+
적시타로 2
|
| 483 |
+
엘리에이저 2
|
| 484 |
+
아시아나항공 2
|
| 485 |
+
가리킨다 2
|
| 486 |
+
집중했다 2
|
| 487 |
+
대한배드민턴협회 2
|
| 488 |
+
천위페이 2
|
| 489 |
+
작품이라 2
|
| 490 |
+
평가했다 2
|
| 491 |
+
수준으로 2
|
| 492 |
+
대중문화 2
|
| 493 |
+
신용대출 2
|
| 494 |
+
주택담보대출 2
|
| 495 |
+
천연가스 2
|
| 496 |
+
분데스리가 2
|
| 497 |
+
민주주의 2
|
| 498 |
+
시작된다 2
|
| 499 |
+
미세전류 2
|
| 500 |
+
챔피언십 2
|
| 501 |
+
월드시리즈 2
|
| 502 |
+
카를로스 2
|
| 503 |
+
에스테베즈 2
|
| 504 |
+
레드삭스 2
|
| 505 |
+
터뜨리며 2
|
| 506 |
+
관점에서 2
|
| 507 |
+
돌아섰다 2
|
| 508 |
+
드라큘라 2
|
| 509 |
+
인터내셔널 2
|
| 510 |
+
맨부커상 2
|
| 511 |
+
메디치상 2
|
| 512 |
+
말레이시아 2
|
| 513 |
+
브루나이 2
|
| 514 |
+
세계적인 2
|
| 515 |
+
투자해야 2
|
| 516 |
+
증가한다 2
|
| 517 |
+
높아지고 2
|
| 518 |
+
친아버지 2
|
| 519 |
+
공부해야 2
|
| 520 |
+
하이트진로 2
|
| 521 |
+
뿌리쳤다 2
|
| 522 |
+
우승하고 2
|
| 523 |
+
드라이브샷 2
|
| 524 |
+
지키느냐 2
|
| 525 |
+
해결했다 2
|
| 526 |
+
잡아당겨 2
|
| 527 |
+
평균자책점 2
|
| 528 |
+
가져왔다 2
|
| 529 |
+
가르시아 2
|
| 530 |
+
샌프란시스코 2
|
| 531 |
+
정규시즌 2
|
| 532 |
+
애틀랜타 2
|
| 533 |
+
독일어정서법위원회 2
|
| 534 |
+
흔들도록 2
|
| 535 |
+
시달렸다 2
|
| 536 |
+
니코바르 2
|
| 537 |
+
유능하게 2
|
| 538 |
+
설치했다 2
|
| 539 |
+
당선되며 2
|
| 540 |
+
이상문학상 2
|
| 541 |
+
광주민주화운동 2
|
| 542 |
+
문장으로 2
|
| 543 |
+
트라우마 2
|
| 544 |
+
비서실장 2
|
| 545 |
+
부산에서 2
|
| 546 |
+
행동강령 2
|
| 547 |
+
성공했다 2
|
| 548 |
+
실망스러운 2
|
| 549 |
+
비교하면 2
|
| 550 |
+
윤전식으로 2
|
| 551 |
+
국가유산으로 2
|
| 552 |
+
북한연구소 2
|
| 553 |
+
탈북민들 2
|
| 554 |
+
총참모부 2
|
| 555 |
+
플랫폼들 2
|
| 556 |
+
쿠팡이츠 2
|
| 557 |
+
아미노산들 2
|
| 558 |
+
아미노산 2
|
| 559 |
+
개발했다 2
|
| 560 |
+
이산화탄소 2
|
| 561 |
+
혁신기업 2
|
| 562 |
+
평균기온 2
|
| 563 |
+
떨어지지 2
|
| 564 |
+
최고기온 2
|
| 565 |
+
집행위원장 2
|
| 566 |
+
확대하고 1
|
| 567 |
+
안심점검 1
|
| 568 |
+
무상보증기간 1
|
| 569 |
+
법인차로 1
|
| 570 |
+
전기차엔 1
|
| 571 |
+
통보되지 1
|
| 572 |
+
등록하면 1
|
| 573 |
+
진입하기 1
|
| 574 |
+
발생하면 1
|
| 575 |
+
투입된다 1
|
| 576 |
+
소방청에선 1
|
| 577 |
+
시작하고 1
|
| 578 |
+
특수구조대 1
|
| 579 |
+
기증한다 1
|
| 580 |
+
수압으로 1
|
| 581 |
+
안심하고 1
|
| 582 |
+
대표주인 1
|
| 583 |
+
신한투자증권 1
|
| 584 |
+
해당되지 1
|
| 585 |
+
소외되고 1
|
| 586 |
+
순매도했지 1
|
| 587 |
+
순매수했다 1
|
| 588 |
+
고대역폭 1
|
| 589 |
+
그레이드 1
|
| 590 |
+
증권사들 1
|
| 591 |
+
집계됐다고 1
|
| 592 |
+
하회했다 1
|
| 593 |
+
현대차증권 1
|
| 594 |
+
발표에서 1
|
| 595 |
+
지켜지지 1
|
| 596 |
+
비메모리 1
|
| 597 |
+
비용으로 1
|
| 598 |
+
연말까지 1
|
| 599 |
+
근접하며 1
|
| 600 |
+
하회하고 1
|
| 601 |
+
동기보다 1
|
| 602 |
+
상승하도록 1
|
| 603 |
+
초입이라 1
|
| 604 |
+
맞추면서 1
|
| 605 |
+
��빡해질 1
|
| 606 |
+
예상했지 1
|
| 607 |
+
스마트폰용 1
|
| 608 |
+
기대하기 1
|
| 609 |
+
어려워졌다고 1
|
| 610 |
+
추격이다 1
|
| 611 |
+
성공하든 1
|
| 612 |
+
실패하든 1
|
| 613 |
+
엔비디아 1
|
| 614 |
+
통과하면 1
|
| 615 |
+
유의미한 1
|
| 616 |
+
떨어지게 1
|
| 617 |
+
상태였던 1
|
| 618 |
+
모델이다 1
|
| 619 |
+
개인적으로 1
|
| 620 |
+
사용하기 1
|
| 621 |
+
자동차등록원부 1
|
| 622 |
+
소유였던 1
|
| 623 |
+
위반으로 1
|
| 624 |
+
제주에서 1
|
| 625 |
+
양도했다 1
|
| 626 |
+
명의였다 1
|
| 627 |
+
이전됐고 1
|
| 628 |
+
문씨에서 1
|
| 629 |
+
대통령으로 1
|
| 630 |
+
이전됐다 1
|
| 631 |
+
이면도로 1
|
| 632 |
+
돌아왔다 1
|
| 633 |
+
해밀톤호텔 1
|
| 634 |
+
운전하던 1
|
| 635 |
+
변경하다 1
|
| 636 |
+
뒤따라오던 1
|
| 637 |
+
피해자인 1
|
| 638 |
+
혈중알코올농도 1
|
| 639 |
+
수준이었다 1
|
| 640 |
+
카메라용 1
|
| 641 |
+
쓸어주면 1
|
| 642 |
+
추가했는데 1
|
| 643 |
+
사라졌던 1
|
| 644 |
+
돌아오고 1
|
| 645 |
+
되돌아가고 1
|
| 646 |
+
애플마저 1
|
| 647 |
+
가져오고 1
|
| 648 |
+
기사에서 1
|
| 649 |
+
쓸어넘기던 1
|
| 650 |
+
디스플레이 1
|
| 651 |
+
장착했던 1
|
| 652 |
+
등장하고 1
|
| 653 |
+
주목받고 1
|
| 654 |
+
도입하겠다고 1
|
| 655 |
+
차종에서 1
|
| 656 |
+
회귀했다 1
|
| 657 |
+
올리거나 1
|
| 658 |
+
헤리티지 1
|
| 659 |
+
브레이크 1
|
| 660 |
+
추가되고 1
|
| 661 |
+
선보이며 1
|
| 662 |
+
추가했다 1
|
| 663 |
+
저장해둘 1
|
| 664 |
+
스톱워치 1
|
| 665 |
+
단축키로 1
|
| 666 |
+
장점이다 1
|
| 667 |
+
넘기게끔 1
|
| 668 |
+
감지되고 1
|
| 669 |
+
주시해야 1
|
| 670 |
+
화면에서 1
|
| 671 |
+
프로그램인 1
|
| 672 |
+
받으려면 1
|
| 673 |
+
책임자인 1
|
| 674 |
+
에이버리 1
|
| 675 |
+
더타임스와 1
|
| 676 |
+
제조업체 1
|
| 677 |
+
터치스크린으로 1
|
| 678 |
+
산만으로 1
|
| 679 |
+
마찬가지다 1
|
| 680 |
+
가스레인지 1
|
| 681 |
+
동일하게 1
|
| 682 |
+
흘러넘치면 1
|
| 683 |
+
작동하지 1
|
| 684 |
+
트렌드와 1
|
| 685 |
+
맥락이다 1
|
| 686 |
+
태블릿용 1
|
| 687 |
+
진동으로 1
|
| 688 |
+
탑재하고 1
|
| 689 |
+
가르치며 1
|
| 690 |
+
천수답이어서 1
|
| 691 |
+
생소했기 1
|
| 692 |
+
설명하자 1
|
| 693 |
+
그제서야 1
|
| 694 |
+
끄덕였다 1
|
| 695 |
+
지적됐다 1
|
| 696 |
+
못한다고 1
|
| 697 |
+
코미디같 1
|
| 698 |
+
벌어진다 1
|
| 699 |
+
설문에서 1
|
| 700 |
+
대답했다 1
|
| 701 |
+
걱정하기 1
|
| 702 |
+
질문이나 1
|
| 703 |
+
이해할까 1
|
| 704 |
+
지경이라고 1
|
| 705 |
+
파악한다 1
|
| 706 |
+
알아듣고 1
|
| 707 |
+
끄덕인다 1
|
| 708 |
+
한자어이기 1
|
| 709 |
+
이해력인 1
|
| 710 |
+
멀리하고 1
|
| 711 |
+
읽으라고 1
|
| 712 |
+
추상적인 1
|
| 713 |
+
모르고선 1
|
| 714 |
+
언어철학자인 1
|
| 715 |
+
넓어진다 1
|
| 716 |
+
세상으로 1
|
| 717 |
+
사망했다고 1
|
| 718 |
+
저기압으로 1
|
| 719 |
+
약화됐지 1
|
| 720 |
+
밀턴으로 1
|
| 721 |
+
늘었다고 1
|
| 722 |
+
나뭇가지 1
|
| 723 |
+
추정된다 1
|
| 724 |
+
구출했다 1
|
| 725 |
+
탬파에서 1
|
| 726 |
+
구조단체 1
|
| 727 |
+
구조했다 1
|
| 728 |
+
구조대원 1
|
| 729 |
+
떨어졌고 1
|
| 730 |
+
약화됐다 1
|
| 731 |
+
지역에서 1
|
| 732 |
+
대서양으로 1
|
| 733 |
+
빠져나갔다 1
|
| 734 |
+
담화에서 1
|
| 735 |
+
불안하게 1
|
| 736 |
+
무모하고 1
|
| 737 |
+
무책임하며 1
|
| 738 |
+
비판했다 1
|
| 739 |
+
퍼뜨리고 1
|
| 740 |
+
비난하면서 1
|
| 741 |
+
뉴스레터 1
|
| 742 |
+
구독하기 1
|
| 743 |
+
나오면서 1
|
| 744 |
+
급등했다 1
|
| 745 |
+
서부텍사스산 1
|
| 746 |
+
거래일보다 1
|
| 747 |
+
전날보다 1
|
| 748 |
+
보복으로 1
|
| 749 |
+
나서면서 1
|
| 750 |
+
부추겼다 1
|
| 751 |
+
지오바니 1
|
| 752 |
+
스타우노보 1
|
| 753 |
+
애널리스트 1
|
| 754 |
+
정리하면서 1
|
| 755 |
+
산유국인 1
|
| 756 |
+
재규어랜드로버코리아 1
|
| 757 |
+
인제니움 1
|
| 758 |
+
표방한다 1
|
| 759 |
+
리클라인 1
|
| 760 |
+
엇비슷하지 1
|
| 761 |
+
활용한다 1
|
| 762 |
+
수납공간 1
|
| 763 |
+
오프로드 1
|
| 764 |
+
강점이다 1
|
| 765 |
+
서스펜션 1
|
| 766 |
+
편안하게 1
|
| 767 |
+
노면에서 1
|
| 768 |
+
수심까지 1
|
| 769 |
+
안전하게 1
|
| 770 |
+
판매된다 1
|
| 771 |
+
개편한다 1
|
| 772 |
+
준공영제 1
|
| 773 |
+
도입하면서 1
|
| 774 |
+
재설계해 1
|
| 775 |
+
서울시버스운송사업조합 1
|
| 776 |
+
노선체계 1
|
| 777 |
+
발주했다 1
|
| 778 |
+
시행한다 1
|
| 779 |
+
신설됐는데 1
|
| 780 |
+
그대로라 1
|
| 781 |
+
위례신사선 1
|
| 782 |
+
개통하고 1
|
| 783 |
+
연장된다 1
|
| 784 |
+
이곳저곳 1
|
| 785 |
+
통과하다 1
|
| 786 |
+
구불구불한 1
|
| 787 |
+
노선으로 1
|
| 788 |
+
고덕강일지구 1
|
| 789 |
+
그었는데 1
|
| 790 |
+
편리해질 1
|
| 791 |
+
예상한다 1
|
| 792 |
+
서울시내 1
|
| 793 |
+
바뀌었는데 1
|
| 794 |
+
반영하지 1
|
| 795 |
+
백지에서 1
|
| 796 |
+
효율적이라고 1
|
| 797 |
+
강등됐다 1
|
| 798 |
+
영입한다 1
|
| 799 |
+
코린치안스 1
|
| 800 |
+
출신으로 1
|
| 801 |
+
리그에서 1
|
| 802 |
+
끌어올렸다 1
|
| 803 |
+
구단이라 1
|
| 804 |
+
넉넉하지 1
|
| 805 |
+
스트라이커 1
|
| 806 |
+
득점포로 1
|
| 807 |
+
코리아컵 1
|
| 808 |
+
올려놓았다 1
|
| 809 |
+
대구에서 1
|
| 810 |
+
레전드다 1
|
| 811 |
+
어렵겠지 1
|
| 812 |
+
세징야에겐 1
|
| 813 |
+
튀르키예 1
|
| 814 |
+
전전하다 1
|
| 815 |
+
활약하고 1
|
| 816 |
+
여전하다 1
|
| 817 |
+
무대였다 1
|
| 818 |
+
허용하면서 1
|
| 819 |
+
절체절명 1
|
| 820 |
+
활용해보겠다 1
|
| 821 |
+
파고들어 1
|
| 822 |
+
정확하고 1
|
| 823 |
+
재역전승 1
|
| 824 |
+
만끽했다 1
|
| 825 |
+
자동으로 1
|
| 826 |
+
떨어지고 1
|
| 827 |
+
어떻게든 1
|
| 828 |
+
매진시키며 1
|
| 829 |
+
우리에게 1
|
| 830 |
+
행복하게 1
|
| 831 |
+
결승전이란 1
|
| 832 |
+
대회부터 1
|
| 833 |
+
시행한다고 1
|
| 834 |
+
카메라로 1
|
| 835 |
+
입체적으로 1
|
| 836 |
+
재구성하 1
|
| 837 |
+
중반부터 1
|
| 838 |
+
익숙하다 1
|
| 839 |
+
극대화할 1
|
| 840 |
+
대회까지 1
|
| 841 |
+
고수했다 1
|
| 842 |
+
제한적으로 1
|
| 843 |
+
활용했다 1
|
| 844 |
+
예선부터 1
|
| 845 |
+
결승까지 1
|
| 846 |
+
대신한다 1
|
| 847 |
+
심판협회 1
|
| 848 |
+
언제까지 1
|
| 849 |
+
사용됐다 1
|
| 850 |
+
오픈에선 1
|
| 851 |
+
운영했다 1
|
| 852 |
+
코트에서 1
|
| 853 |
+
설치되어 1
|
| 854 |
+
참고용으로 1
|
| 855 |
+
진화하고 1
|
| 856 |
+
리그에선 1
|
| 857 |
+
시스템으로 1
|
| 858 |
+
오프사이드 1
|
| 859 |
+
잡아내고 1
|
| 860 |
+
리플레이 1
|
| 861 |
+
홈런이나 1
|
| 862 |
+
판독에서 1
|
| 863 |
+
올해부터 1
|
| 864 |
+
서비스센터 1
|
| 865 |
+
개최하고 1
|
| 866 |
+
만족했다고 1
|
| 867 |
+
응답했고 1
|
| 868 |
+
응답했다 1
|
| 869 |
+
차량에서 1
|
| 870 |
+
만족스러운 1
|
| 871 |
+
기능으로 1
|
| 872 |
+
조성하기 1
|
| 873 |
+
탑재했다 1
|
| 874 |
+
감지하고 1
|
| 875 |
+
뛰어나고 1
|
| 876 |
+
우수하다 1
|
| 877 |
+
수준이고 1
|
| 878 |
+
구간에서 1
|
| 879 |
+
고속도로나 1
|
| 880 |
+
주말마다 1
|
| 881 |
+
방송통신위원장 1
|
| 882 |
+
마무리하면서 1
|
| 883 |
+
헌재소장 1
|
| 884 |
+
선출해야 1
|
| 885 |
+
대립으로 1
|
| 886 |
+
출석해야 1
|
| 887 |
+
열겠다고 1
|
| 888 |
+
밝히면서 1
|
| 889 |
+
헌법재판소법 1
|
| 890 |
+
알아봐야 1
|
| 891 |
+
선출하지 1
|
| 892 |
+
검토해보라 1
|
| 893 |
+
출신이다 1
|
| 894 |
+
작업했던 1
|
| 895 |
+
마르세유 1
|
| 896 |
+
흩뿌리고 1
|
| 897 |
+
작품이다 1
|
| 898 |
+
시리즈로 1
|
| 899 |
+
생각으로 1
|
| 900 |
+
전시된다 1
|
| 901 |
+
발행된다 1
|
| 902 |
+
오브리스트 1
|
| 903 |
+
서펜타인 1
|
| 904 |
+
예술감독 1
|
| 905 |
+
진행했던 1
|
| 906 |
+
차별이라고 1
|
| 907 |
+
제한하지 1
|
| 908 |
+
권고했다 1
|
| 909 |
+
아내에게 1
|
| 910 |
+
사주려고 1
|
| 911 |
+
남성에게 1
|
| 912 |
+
거부했다고 1
|
| 913 |
+
제기했고 1
|
| 914 |
+
가입자격 1
|
| 915 |
+
명시하고 1
|
| 916 |
+
탓이라고 1
|
| 917 |
+
제한한다 1
|
| 918 |
+
여성용으로 1
|
| 919 |
+
부족하다고 1
|
| 920 |
+
설립됐던 1
|
| 921 |
+
다수였음 1
|
| 922 |
+
고려하더라 1
|
| 923 |
+
추진되면 1
|
| 924 |
+
가정주부 1
|
| 925 |
+
따가움으로 1
|
| 926 |
+
알레르기성 1
|
| 927 |
+
주범으로 1
|
| 928 |
+
분포하며 1
|
| 929 |
+
주변이나 1
|
| 930 |
+
산책하면 1
|
| 931 |
+
심해진다 1
|
| 932 |
+
시즌마다 1
|
| 933 |
+
환자이기 1
|
| 934 |
+
긴장하며 1
|
| 935 |
+
시달리고 1
|
| 936 |
+
하순까지 1
|
| 937 |
+
삼성서울병원 1
|
| 938 |
+
알레르기내 1
|
| 939 |
+
건조해지고 1
|
| 940 |
+
선선해지기 1
|
| 941 |
+
건강보험심사평가원 1
|
| 942 |
+
추산된다 1
|
| 943 |
+
아열대성 1
|
| 944 |
+
변하면서 1
|
| 945 |
+
선선하고 1
|
| 946 |
+
과민반응으로 1
|
| 947 |
+
재채기나 1
|
| 948 |
+
건조해지기 1
|
| 949 |
+
지속되면서 1
|
| 950 |
+
요인으로 1
|
| 951 |
+
작용하면서 1
|
| 952 |
+
많아졌다 1
|
| 953 |
+
예상되니 1
|
| 954 |
+
질병관리청 1
|
| 955 |
+
질병이나 1
|
| 956 |
+
쯔쯔가무시병 1
|
| 957 |
+
길어지므로 1
|
| 958 |
+
가을까지 1
|
| 959 |
+
풀밭이나 1
|
| 960 |
+
서식한다 1
|
| 961 |
+
생겼으면 1
|
| 962 |
+
고려대구로병원 1
|
| 963 |
+
쌀쌀해지면서 1
|
| 964 |
+
밀접해지면서 1
|
| 965 |
+
유행하는데 1
|
| 966 |
+
유행하던 1
|
| 967 |
+
만성질환자들 1
|
| 968 |
+
금융투자소득세 1
|
| 969 |
+
유예해야 1
|
| 970 |
+
것이었지 1
|
| 971 |
+
고려하다 1
|
| 972 |
+
유예까지 1
|
| 973 |
+
시행하자 1
|
| 974 |
+
유예하고 1
|
| 975 |
+
선진지수 1
|
| 976 |
+
편입이라든지 1
|
| 977 |
+
판단하자 1
|
| 978 |
+
유예하자 1
|
| 979 |
+
정상화될 1
|
| 980 |
+
않는다면 1
|
| 981 |
+
마찬가지라 1
|
| 982 |
+
일각에서 1
|
| 983 |
+
갑론을박하기보다 1
|
| 984 |
+
폐지하자 1
|
| 985 |
+
유예한다면 1
|
| 986 |
+
집권해서 1
|
| 987 |
+
시행해야 1
|
| 988 |
+
예정이던 1
|
| 989 |
+
미뤄졌고 1
|
| 990 |
+
의총에서 1
|
| 991 |
+
위임하기로 1
|
| 992 |
+
기울어졌는데 1
|
| 993 |
+
무너뜨릴 1
|
| 994 |
+
신중해야 1
|
| 995 |
+
부담스럽다 1
|
| 996 |
+
키프로스계 1
|
| 997 |
+
그리스인 1
|
| 998 |
+
싱가포르인 1
|
| 999 |
+
시작했고 1
|
| 1000 |
+
보드게임 1
|
| 1001 |
+
뛰어나다 1
|
| 1002 |
+
상금으로 1
|
| 1003 |
+
구입하고 1
|
| 1004 |
+
프로그래밍 1
|
| 1005 |
+
대학에서 1
|
| 1006 |
+
컴퓨터과학 1
|
| 1007 |
+
유니버시티 1
|
| 1008 |
+
신경과학 1
|
| 1009 |
+
박사학위 1
|
| 1010 |
+
기억상실증 1
|
| 1011 |
+
사이언스지 1
|
| 1012 |
+
두뇌게임 1
|
| 1013 |
+
올림피아드인 1
|
| 1014 |
+
올림피아드 1
|
| 1015 |
+
런던에서 1
|
| 1016 |
+
무스타파 1
|
| 1017 |
+
슐레이만 1
|
| 1018 |
+
스타트업인 1
|
| 1019 |
+
인수했지 1
|
| 1020 |
+
위험처럼 1
|
| 1021 |
+
무주택으로 1
|
| 1022 |
+
강남권에선 1
|
| 1023 |
+
커트라인 1
|
| 1024 |
+
가점보다 1
|
| 1025 |
+
리얼투데이 1
|
| 1026 |
+
만점이며 1
|
| 1027 |
+
부양가족 1
|
| 1028 |
+
산정된다 1
|
| 1029 |
+
웃돌았다 1
|
| 1030 |
+
공공기관 1
|
| 1031 |
+
기관장에게 1
|
| 1032 |
+
근절되지 1
|
| 1033 |
+
한국도박문제예방치유원 1
|
| 1034 |
+
드러났다 1
|
| 1035 |
+
문화체육관광위원회 1
|
| 1036 |
+
해임됐다 1
|
| 1037 |
+
명목으로 1
|
| 1038 |
+
법률자문 1
|
| 1039 |
+
국감에서 1
|
| 1040 |
+
카지노공기업인 1
|
| 1041 |
+
지적되었음 1
|
| 1042 |
+
가능하더라 1
|
| 1043 |
+
해임되었는데 1
|
| 1044 |
+
세포에서 1
|
| 1045 |
+
돌아갔다 1
|
| 1046 |
+
이뤄졌다 1
|
| 1047 |
+
카롤린스카 1
|
| 1048 |
+
생리의학상 1
|
| 1049 |
+
수상자로 1
|
| 1050 |
+
생물학자인 1
|
| 1051 |
+
매사추세츠 1
|
| 1052 |
+
비밀열쇠로 1
|
| 1053 |
+
발견하여 1
|
| 1054 |
+
기여했기 1
|
| 1055 |
+
수상하게 1
|
| 1056 |
+
수상자인 1
|
| 1057 |
+
앰브로스 1
|
| 1058 |
+
미생물인 1
|
| 1059 |
+
예쁜꼬마선충 1
|
| 1060 |
+
발견했다 1
|
| 1061 |
+
비정상적으로 1
|
| 1062 |
+
작동되면 1
|
| 1063 |
+
자가면역 1
|
| 1064 |
+
발견으로 1
|
| 1065 |
+
이해하게 1
|
| 1066 |
+
조절이라 1
|
| 1067 |
+
물리학상 1
|
| 1068 |
+
발표되며 1
|
| 1069 |
+
경제학상으로 1
|
| 1070 |
+
전업투자자다 1
|
| 1071 |
+
강연에선 1
|
| 1072 |
+
불합리한 1
|
| 1073 |
+
주식으로 1
|
| 1074 |
+
무엇인지 1
|
| 1075 |
+
들어보자 1
|
| 1076 |
+
화요일인 1
|
| 1077 |
+
퇴직급여 1
|
| 1078 |
+
연금으로 1
|
| 1079 |
+
소득세법상 1
|
| 1080 |
+
연금수령액 1
|
| 1081 |
+
퇴직소득세율 1
|
| 1082 |
+
과세하고 1
|
| 1083 |
+
넘어가면서부터 1
|
| 1084 |
+
과세한다 1
|
| 1085 |
+
유리한지 1
|
| 1086 |
+
미래에셋 1
|
| 1087 |
+
투자와연금센터 1
|
| 1088 |
+
부와지식의배움터 1
|
| 1089 |
+
영상이다 1
|
| 1090 |
+
내다보면서 1
|
| 1091 |
+
움직여서 1
|
| 1092 |
+
프리즘투자자문 1
|
| 1093 |
+
단행하면서 1
|
| 1094 |
+
본격적인 1
|
| 1095 |
+
자산시장 1
|
| 1096 |
+
유망할지 1
|
| 1097 |
+
국민연금공단 1
|
| 1098 |
+
기금운용본부 1
|
| 1099 |
+
투자운용팀장 1
|
| 1100 |
+
국민은행 1
|
| 1101 |
+
수석이코노미스트 1
|
| 1102 |
+
전문가다 1
|
| 1103 |
+
신공정으로 1
|
| 1104 |
+
모바일용 1
|
| 1105 |
+
출시되고 1
|
| 1106 |
+
아이폰용 1
|
| 1107 |
+
끌어올린 1
|
| 1108 |
+
탑재되면서 1
|
| 1109 |
+
저전력으로 1
|
| 1110 |
+
중요해졌다 1
|
| 1111 |
+
강조하고 1
|
| 1112 |
+
전력효율 1
|
| 1113 |
+
향상됐다 1
|
| 1114 |
+
약점으로 1
|
| 1115 |
+
거론되던 1
|
| 1116 |
+
강화됐다 1
|
| 1117 |
+
전망된다 1
|
| 1118 |
+
제외하고 1
|
| 1119 |
+
안드로이드 1
|
| 1120 |
+
스마트폰들 1
|
| 1121 |
+
향상되면서 1
|
| 1122 |
+
떨어지면 1
|
| 1123 |
+
고객사들 1
|
| 1124 |
+
들어가면서 1
|
| 1125 |
+
좋아지고 1
|
| 1126 |
+
고부가가치 1
|
| 1127 |
+
집중하면서 1
|
| 1128 |
+
월가에서 1
|
| 1129 |
+
동갑내기로 1
|
| 1130 |
+
국가대표팀 1
|
| 1131 |
+
네덜란드 1
|
| 1132 |
+
세르비아 1
|
| 1133 |
+
즈베즈다 1
|
| 1134 |
+
페예노르트로 1
|
| 1135 |
+
챔피언스리그 1
|
| 1136 |
+
미드필더로 1
|
| 1137 |
+
맹활약하며 1
|
| 1138 |
+
분데스리 1
|
| 1139 |
+
프랑크푸르트 1
|
| 1140 |
+
측면에서 1
|
| 1141 |
+
오른발로 1
|
| 1142 |
+
마무리해 1
|
| 1143 |
+
주니오르 1
|
| 1144 |
+
허용하며 1
|
| 1145 |
+
미드필더 1
|
| 1146 |
+
부상으로 1
|
| 1147 |
+
빠지면서 1
|
| 1148 |
+
소속팀으로 1
|
| 1149 |
+
파트너로 1
|
| 1150 |
+
수비수로 1
|
| 1151 |
+
이뤘는데 1
|
| 1152 |
+
대표팀엔 1
|
| 1153 |
+
포함됐다 1
|
| 1154 |
+
입성했다 1
|
| 1155 |
+
중동에서 1
|
| 1156 |
+
요르단으로 1
|
| 1157 |
+
합류한다 1
|
| 1158 |
+
개천절인 1
|
| 1159 |
+
만석이었다 1
|
| 1160 |
+
손님으로 1
|
| 1161 |
+
근처에서 1
|
| 1162 |
+
쇼핑객들로 1
|
| 1163 |
+
신선식품 1
|
| 1164 |
+
계산대마다 1
|
| 1165 |
+
기다렸다 1
|
| 1166 |
+
비수기로 1
|
| 1167 |
+
공휴일로 1
|
| 1168 |
+
지정되고 1
|
| 1169 |
+
대형마트마다 1
|
| 1170 |
+
북적였고 1
|
| 1171 |
+
여행지로 1
|
| 1172 |
+
매진됐다 1
|
| 1173 |
+
살아나지 1
|
| 1174 |
+
진작하기 1
|
| 1175 |
+
임시공휴일 1
|
| 1176 |
+
소비시장 1
|
| 1177 |
+
회복될지 1
|
| 1178 |
+
유통업체에선 1
|
| 1179 |
+
품목에서 1
|
| 1180 |
+
떨어지면서 1
|
| 1181 |
+
장만하려 1
|
| 1182 |
+
롯데백화점 1
|
| 1183 |
+
해외여행 1
|
| 1184 |
+
덕분이라 1
|
| 1185 |
+
신세계백화점 1
|
| 1186 |
+
늘어났다고 1
|
| 1187 |
+
즉석식품 1
|
| 1188 |
+
돼지고기 1
|
| 1189 |
+
여행객들로 1
|
| 1190 |
+
신제주점 1
|
| 1191 |
+
서귀포점 1
|
| 1192 |
+
기간보다 1
|
| 1193 |
+
불꽃축제 1
|
| 1194 |
+
몰리면서 1
|
| 1195 |
+
서울세계불꽃���제 1
|
| 1196 |
+
한강공원 1
|
| 1197 |
+
놀이공원 1
|
| 1198 |
+
할인행사 1
|
| 1199 |
+
매장에서 1
|
| 1200 |
+
진행하고 1
|
| 1201 |
+
롯데마트 1
|
| 1202 |
+
샤인머스캣 1
|
| 1203 |
+
저렴하게 1
|
| 1204 |
+
먹거리들 1
|
| 1205 |
+
개최한다 1
|
| 1206 |
+
내야하니 1
|
| 1207 |
+
유튜브로 1
|
| 1208 |
+
발라냈다 1
|
| 1209 |
+
제출하지 1
|
| 1210 |
+
경고까지 1
|
| 1211 |
+
보냈다고 1
|
| 1212 |
+
시청자들 1
|
| 1213 |
+
수익에서 1
|
| 1214 |
+
기여분으로 1
|
| 1215 |
+
금액만큼 1
|
| 1216 |
+
입장에선 1
|
| 1217 |
+
세무당국 1
|
| 1218 |
+
법인이라 1
|
| 1219 |
+
징수하기 1
|
| 1220 |
+
실질적으로 1
|
| 1221 |
+
한국재무관리학회 1
|
| 1222 |
+
동등하게 1
|
| 1223 |
+
과세해야 1
|
| 1224 |
+
국세까지 1
|
| 1225 |
+
논의조차 1
|
| 1226 |
+
원천징수하기 1
|
| 1227 |
+
개정하면서 1
|
| 1228 |
+
정책협력 1
|
| 1229 |
+
발생하고 1
|
| 1230 |
+
납부하게 1
|
| 1231 |
+
조세조약 1
|
| 1232 |
+
따져보겠다 1
|
| 1233 |
+
입장이었다 1
|
| 1234 |
+
들어줬다 1
|
| 1235 |
+
시청자들로 1
|
| 1236 |
+
가능해야 1
|
| 1237 |
+
구글코리아 1
|
| 1238 |
+
도널드슨 1
|
| 1239 |
+
전무하다 1
|
| 1240 |
+
소득세법 1
|
| 1241 |
+
규정하지 1
|
| 1242 |
+
규정하더라 1
|
| 1243 |
+
원천소득 1
|
| 1244 |
+
이행하지 1
|
| 1245 |
+
가속화되면서 1
|
| 1246 |
+
국세청으로 1
|
| 1247 |
+
종합소득세 1
|
| 1248 |
+
벌어들인 1
|
| 1249 |
+
시청시간 1
|
| 1250 |
+
다방이나 1
|
| 1251 |
+
가져가게 1
|
| 1252 |
+
가져오다 1
|
| 1253 |
+
빼곡하게 1
|
| 1254 |
+
습관이었다 1
|
| 1255 |
+
취미생활이라고 1
|
| 1256 |
+
유행이었어요 1
|
| 1257 |
+
수집했다 1
|
| 1258 |
+
자연스럽게 1
|
| 1259 |
+
됐습니다 1
|
| 1260 |
+
이후라고 1
|
| 1261 |
+
기억했다 1
|
| 1262 |
+
다채로운 1
|
| 1263 |
+
떠들썩하게 1
|
| 1264 |
+
마시거나 1
|
| 1265 |
+
고형필씨 1
|
| 1266 |
+
사용하거나 1
|
| 1267 |
+
사람에게 1
|
| 1268 |
+
싸움까지 1
|
| 1269 |
+
회고했다 1
|
| 1270 |
+
식당이나 1
|
| 1271 |
+
열광하고 1
|
| 1272 |
+
아날로그 1
|
| 1273 |
+
현대자동차그룹 1
|
| 1274 |
+
난양대학 1
|
| 1275 |
+
정부까지 1
|
| 1276 |
+
비즈니스 1
|
| 1277 |
+
체결했다고 1
|
| 1278 |
+
공과대학 1
|
| 1279 |
+
연구중심 1
|
| 1280 |
+
대학이다 1
|
| 1281 |
+
발전사업 1
|
| 1282 |
+
쓰레기나 1
|
| 1283 |
+
모빌리티 1
|
| 1284 |
+
밸류체인 1
|
| 1285 |
+
설립하기로 1
|
| 1286 |
+
통상산업부 1
|
| 1287 |
+
조직으로 1
|
| 1288 |
+
연구기관 1
|
| 1289 |
+
로보틱스 1
|
| 1290 |
+
혁신제조 1
|
| 1291 |
+
국가연구펀드 1
|
| 1292 |
+
다가왔지 1
|
| 1293 |
+
불투명해 1
|
| 1294 |
+
최하위권 1
|
| 1295 |
+
금투세란 1
|
| 1296 |
+
금융상품 1
|
| 1297 |
+
양도소득 1
|
| 1298 |
+
도입되면 1
|
| 1299 |
+
어려워질 1
|
| 1300 |
+
빠져나가면서 1
|
| 1301 |
+
한국기업거버넌스포럼 1
|
| 1302 |
+
결과적으로 1
|
| 1303 |
+
빠져나갈 1
|
| 1304 |
+
관측하고 1
|
| 1305 |
+
부자감세 1
|
| 1306 |
+
투자자들에게 1
|
| 1307 |
+
희망이자 1
|
| 1308 |
+
금투세로 1
|
| 1309 |
+
금융소득종합과세로 1
|
| 1310 |
+
시행으로 1
|
| 1311 |
+
낮아진다 1
|
| 1312 |
+
법제사법위원회 1
|
| 1313 |
+
증인으로 1
|
| 1314 |
+
아트센터 1
|
| 1315 |
+
동아시아문화센터 1
|
| 1316 |
+
요구하기로 1
|
| 1317 |
+
법사위원장인 1
|
| 1318 |
+
소재파악 1
|
| 1319 |
+
동행명령장 1
|
| 1320 |
+
방안까지 1
|
| 1321 |
+
아내이자 1
|
| 1322 |
+
떠올랐다 1
|
| 1323 |
+
약속어음 1
|
| 1324 |
+
제시하며 1
|
| 1325 |
+
인정된다면서 1
|
| 1326 |
+
부인하고 1
|
| 1327 |
+
국면으로 1
|
| 1328 |
+
양상이다 1
|
| 1329 |
+
농협중앙회 1
|
| 1330 |
+
적발되자 1
|
| 1331 |
+
주식거래 1
|
| 1332 |
+
적발됐지 1
|
| 1333 |
+
이뤄지지 1
|
| 1334 |
+
살펴보고 1
|
| 1335 |
+
발의하자 1
|
| 1336 |
+
처리했지 1
|
| 1337 |
+
가로막혔다 1
|
| 1338 |
+
끌어올리려 1
|
| 1339 |
+
공직선거법 1
|
| 1340 |
+
다가오면서 1
|
| 1341 |
+
압박하기 1
|
| 1342 |
+
재발의했던 1
|
| 1343 |
+
것들이다 1
|
| 1344 |
+
의결하면 1
|
| 1345 |
+
제정하지 1
|
| 1346 |
+
소속되거나 1
|
| 1347 |
+
소속됐던 1
|
| 1348 |
+
국회규칙 1
|
| 1349 |
+
구성해야 1
|
| 1350 |
+
입맛대로 1
|
| 1351 |
+
임명하기 1
|
| 1352 |
+
바꾸겠다 1
|
| 1353 |
+
느슨해진 1
|
| 1354 |
+
결과라고 1
|
| 1355 |
+
내부적으로 1
|
| 1356 |
+
심화했다 1
|
| 1357 |
+
공공연히 1
|
| 1358 |
+
자랑이었지 1
|
| 1359 |
+
옅어지고 1
|
| 1360 |
+
유일하게 1
|
| 1361 |
+
우선순위고 1
|
| 1362 |
+
제조업인 1
|
| 1363 |
+
청년에게 1
|
| 1364 |
+
학과까지 1
|
| 1365 |
+
전자공학 1
|
| 1366 |
+
전공자들 1
|
| 1367 |
+
학교에서 1
|
| 1368 |
+
동결되면서 1
|
| 1369 |
+
따라잡겠다고 1
|
| 1370 |
+
존재하지 1
|
| 1371 |
+
최상층부 1
|
| 1372 |
+
장악하고 1
|
| 1373 |
+
투자보다 1
|
| 1374 |
+
바뀌었고 1
|
| 1375 |
+
임직원들 1
|
| 1376 |
+
해결할지 1
|
| 1377 |
+
쏟았는데 1
|
| 1378 |
+
잘못인지 1
|
| 1379 |
+
색출해내서 1
|
| 1380 |
+
이기주의 1
|
| 1381 |
+
털어놨다 1
|
| 1382 |
+
삼성그룹 1
|
| 1383 |
+
출석하고 1
|
| 1384 |
+
요구했고 1
|
| 1385 |
+
부랴부랴 1
|
| 1386 |
+
시스템반도체 1
|
| 1387 |
+
경쟁사인 1
|
| 1388 |
+
자극했고 1
|
| 1389 |
+
느슨해졌다 1
|
| 1390 |
+
과도하게 1
|
| 1391 |
+
무임승차하며 1
|
| 1392 |
+
경쟁자인 1
|
| 1393 |
+
시가총액으로 1
|
| 1394 |
+
넘어섰다 1
|
| 1395 |
+
창업자인 1
|
| 1396 |
+
친분으로 1
|
| 1397 |
+
파운드리 1
|
| 1398 |
+
전념했다 1
|
| 1399 |
+
빼닮았다 1
|
| 1400 |
+
재계에서 1
|
| 1401 |
+
정신으로 1
|
| 1402 |
+
추월하고 1
|
| 1403 |
+
중요하다 1
|
| 1404 |
+
한림대학교 1
|
| 1405 |
+
동탄성심병원 1
|
| 1406 |
+
대표적인 1
|
| 1407 |
+
평가하며 1
|
| 1408 |
+
인지기능과 1
|
| 1409 |
+
인지기능 1
|
| 1410 |
+
맥락정보 1
|
| 1411 |
+
혈관질환 1
|
| 1412 |
+
신체활동 1
|
| 1413 |
+
집단보다 1
|
| 1414 |
+
유전자인 1
|
| 1415 |
+
벌어졌다 1
|
| 1416 |
+
한림대동탄성심병원 1
|
| 1417 |
+
정신건강의학 1
|
| 1418 |
+
촉진하고 1
|
| 1419 |
+
긍정적인 1
|
| 1420 |
+
에디스코완대학 1
|
| 1421 |
+
사람보다 1
|
| 1422 |
+
아밀로이드 1
|
| 1423 |
+
목적에서 1
|
| 1424 |
+
응답자들 1
|
| 1425 |
+
연령별로 1
|
| 1426 |
+
다가올수록 1
|
| 1427 |
+
기혼자들보다 1
|
| 1428 |
+
대비해야 1
|
| 1429 |
+
결과에선 1
|
| 1430 |
+
직장인보다 1
|
| 1431 |
+
저축하고 1
|
| 1432 |
+
체계적인 1
|
| 1433 |
+
미친다고 1
|
| 1434 |
+
단기적인 1
|
| 1435 |
+
집중해서 1
|
| 1436 |
+
지적이다 1
|
| 1437 |
+
납입한다 1
|
| 1438 |
+
세액공제 1
|
| 1439 |
+
중국으로 1
|
| 1440 |
+
확보하기 1
|
| 1441 |
+
중요합니다 1
|
| 1442 |
+
기술적인 1
|
| 1443 |
+
오픈소스 1
|
| 1444 |
+
본사에서 1
|
| 1445 |
+
부사장으로 1
|
| 1446 |
+
근무했고 1
|
| 1447 |
+
마이크로소프트 1
|
| 1448 |
+
과학자로 1
|
| 1449 |
+
선도하고 1
|
| 1450 |
+
오픈소스로 1
|
| 1451 |
+
혁신적인 1
|
| 1452 |
+
프랑스뿐 1
|
| 1453 |
+
출신들로 1
|
| 1454 |
+
전쟁이다 1
|
| 1455 |
+
충분하지 1
|
| 1456 |
+
조직에게 1
|
| 1457 |
+
치열해지고 1
|
| 1458 |
+
효율적인 1
|
| 1459 |
+
아키텍처 1
|
| 1460 |
+
자원으로 1
|
| 1461 |
+
개발해야 1
|
| 1462 |
+
제공자들과 1
|
| 1463 |
+
파트너십 1
|
| 1464 |
+
유럽으로 1
|
| 1465 |
+
확대해나간다 1
|
| 1466 |
+
경제에서 1
|
| 1467 |
+
매출에서 1
|
| 1468 |
+
차지한다 1
|
| 1469 |
+
수출에서 1
|
| 1470 |
+
두드러진다 1
|
| 1471 |
+
반도체고 1
|
| 1472 |
+
생활가전 1
|
| 1473 |
+
살림살이 1
|
| 1474 |
+
좌우한다 1
|
| 1475 |
+
납부했다 1
|
| 1476 |
+
유지해왔다 1
|
| 1477 |
+
공중에서 1
|
| 1478 |
+
나풀거리고 1
|
| 1479 |
+
회전한다 1
|
| 1480 |
+
공간으로 1
|
| 1481 |
+
재탄생했다 1
|
| 1482 |
+
현대미술관 1
|
| 1483 |
+
작가이자 1
|
| 1484 |
+
부르주아 1
|
| 1485 |
+
올라푸르 1
|
| 1486 |
+
엘리아손 1
|
| 1487 |
+
아이웨이웨 1
|
| 1488 |
+
내로라하 1
|
| 1489 |
+
현대미술 1
|
| 1490 |
+
거쳐갔다 1
|
| 1491 |
+
현대자동차 1
|
| 1492 |
+
지원으로 1
|
| 1493 |
+
느껴지지 1
|
| 1494 |
+
않았느냐 1
|
| 1495 |
+
질문인데 1
|
| 1496 |
+
무서워하기 1
|
| 1497 |
+
아름다움 1
|
| 1498 |
+
공존한다 1
|
| 1499 |
+
바꾸면서 1
|
| 1500 |
+
떨어뜨린다 1
|
| 1501 |
+
발전소였던 1
|
| 1502 |
+
주목했다 1
|
| 1503 |
+
사용하지 1
|
| 1504 |
+
재가동했고 1
|
| 1505 |
+
현장으로 1
|
| 1506 |
+
탈바꿈시켰다 1
|
| 1507 |
+
재가동해 1
|
| 1508 |
+
장소였다 1
|
| 1509 |
+
소개했다 1
|
| 1510 |
+
끌어왔다 1
|
| 1511 |
+
조각으로 1
|
| 1512 |
+
매달리게 1
|
| 1513 |
+
추가되면서 1
|
| 1514 |
+
들어가기 1
|
| 1515 |
+
횡포라고 1
|
| 1516 |
+
상처에서 1
|
| 1517 |
+
무기력함 1
|
| 1518 |
+
아름답다 1
|
| 1519 |
+
감동한다 1
|
| 1520 |
+
움직인다 1
|
| 1521 |
+
역경이나 1
|
| 1522 |
+
아름답다고 1
|
| 1523 |
+
들어서며 1
|
| 1524 |
+
공간이다 1
|
| 1525 |
+
큐레이터 1
|
| 1526 |
+
부드러움 1
|
| 1527 |
+
감각적으로 1
|
| 1528 |
+
경험하게 1
|
| 1529 |
+
예방하기 1
|
| 1530 |
+
손질해야 1
|
| 1531 |
+
국토교통부 1
|
| 1532 |
+
하자심사분쟁조정위원회 1
|
| 1533 |
+
육박했다 1
|
| 1534 |
+
증가하면서 1
|
| 1535 |
+
처리해야 1
|
| 1536 |
+
실시해야 1
|
| 1537 |
+
전문가로 1
|
| 1538 |
+
품질점검단 1
|
| 1539 |
+
점검해야 1
|
| 1540 |
+
작년부터 1
|
| 1541 |
+
입주예정자 1
|
| 1542 |
+
동행하지 1
|
| 1543 |
+
금지했다 1
|
| 1544 |
+
사전방문 1
|
| 1545 |
+
명시하기로 1
|
| 1546 |
+
담합한다 1
|
| 1547 |
+
제기됐다 1
|
| 1548 |
+
진행하면 1
|
| 1549 |
+
입주예정자들 1
|
| 1550 |
+
실시하는데 1
|
| 1551 |
+
변경했다 1
|
| 1552 |
+
사전방문일 1
|
| 1553 |
+
주간별로 1
|
| 1554 |
+
균등하게 1
|
| 1555 |
+
전산시스템 1
|
| 1556 |
+
일방적으로 1
|
| 1557 |
+
개선해야 1
|
| 1558 |
+
지자체마다 1
|
| 1559 |
+
천차만별이었다 1
|
| 1560 |
+
강화해야 1
|
| 1561 |
+
방문하고 1
|
| 1562 |
+
참석하기 1
|
| 1563 |
+
출국했다 1
|
| 1564 |
+
방문국인 1
|
| 1565 |
+
참배하고 1
|
| 1566 |
+
맺어왔으며 1
|
| 1567 |
+
최초이자 1
|
| 1568 |
+
자유대한민국 1
|
| 1569 |
+
순방에서 1
|
| 1570 |
+
용인하지 1
|
| 1571 |
+
겨냥하기 1
|
| 1572 |
+
모니터링 1
|
| 1573 |
+
형성되어 1
|
| 1574 |
+
양상으로 1
|
| 1575 |
+
흘러가고 1
|
| 1576 |
+
예상됐지 1
|
| 1577 |
+
여론조사상 1
|
| 1578 |
+
나타나면서 1
|
| 1579 |
+
정가에서 1
|
| 1580 |
+
예측하기 1
|
| 1581 |
+
결정으로 1
|
| 1582 |
+
통합진보당 1
|
| 1583 |
+
후신으로 1
|
| 1584 |
+
위성정당 1
|
| 1585 |
+
확보했다 1
|
| 1586 |
+
네거티브 1
|
| 1587 |
+
야권에선 1
|
| 1588 |
+
진보당식 1
|
| 1589 |
+
남도일보 1
|
| 1590 |
+
지지한다 1
|
| 1591 |
+
조사에선 1
|
| 1592 |
+
일주일여 1
|
| 1593 |
+
네거티브전 1
|
| 1594 |
+
벌이면서 1
|
| 1595 |
+
난타전식 1
|
| 1596 |
+
진보당으로 1
|
| 1597 |
+
학도호국단 1
|
| 1598 |
+
총학생장 1
|
| 1599 |
+
공격했고 1
|
| 1600 |
+
집회시위법 1
|
| 1601 |
+
부각되지 1
|
| 1602 |
+
밀어내고 1
|
| 1603 |
+
당선됐던 1
|
| 1604 |
+
자극했는데 1
|
| 1605 |
+
조직에서 1
|
| 1606 |
+
당선무효형 1
|
| 1607 |
+
확정되자 1
|
| 1608 |
+
읍내에선 1
|
| 1609 |
+
들어주고 1
|
| 1610 |
+
부축해주 1
|
| 1611 |
+
영광군농민회 1
|
| 1612 |
+
시절부터 1
|
| 1613 |
+
집집마다 1
|
| 1614 |
+
논밭까지 1
|
| 1615 |
+
요구하며 1
|
| 1616 |
+
포퓰리즘 1
|
| 1617 |
+
경쟁으로 1
|
| 1618 |
+
영광사랑지원금 1
|
| 1619 |
+
공약으로 1
|
| 1620 |
+
판박이로 1
|
| 1621 |
+
영광군노인복지관 1
|
| 1622 |
+
얻어놓고 1
|
| 1623 |
+
내려갔고 1
|
| 1624 |
+
상임대표 1
|
| 1625 |
+
최연소다 1
|
| 1626 |
+
주주총회 1
|
| 1627 |
+
대표이사 1
|
| 1628 |
+
선임했다 1
|
| 1629 |
+
제품총괄로 1
|
| 1630 |
+
카네기멜론대 1
|
| 1631 |
+
엔비욘드 1
|
| 1632 |
+
이베이코리아 1
|
| 1633 |
+
비금융권 1
|
| 1634 |
+
회사에서 1
|
| 1635 |
+
해외주식 1
|
| 1636 |
+
추진하며 1
|
| 1637 |
+
플랫폼으로서 1
|
| 1638 |
+
대표이사로 1
|
| 1639 |
+
물러났다 1
|
| 1640 |
+
기간으로 1
|
| 1641 |
+
한정하면 1
|
| 1642 |
+
가속화할수록 1
|
| 1643 |
+
시간동안 1
|
| 1644 |
+
비구름대 1
|
| 1645 |
+
수증기량 1
|
| 1646 |
+
토해내듯 1
|
| 1647 |
+
속출했다 1
|
| 1648 |
+
장마기간 1
|
| 1649 |
+
많아지며 1
|
| 1650 |
+
편성하고 1
|
| 1651 |
+
운영하고 1
|
| 1652 |
+
복기조로 1
|
| 1653 |
+
운영된다 1
|
| 1654 |
+
이어지겠다 1
|
| 1655 |
+
쌀쌀하고 1
|
| 1656 |
+
보이겠다 1
|
| 1657 |
+
이어지겠다고 1
|
| 1658 |
+
경남지역 1
|
| 1659 |
+
브로커로 1
|
| 1660 |
+
술렁이고 1
|
| 1661 |
+
비대위원장 1
|
| 1662 |
+
얘기하면서 1
|
| 1663 |
+
정치자금법 1
|
| 1664 |
+
창원지검 1
|
| 1665 |
+
구속하면 1
|
| 1666 |
+
하야하고 1
|
| 1667 |
+
감당되겠느냐고 1
|
| 1668 |
+
검사에게 1
|
| 1669 |
+
응하면서 1
|
| 1670 |
+
곤혹스러워하 1
|
| 1671 |
+
정치브로커 1
|
| 1672 |
+
국민께서 1
|
| 1673 |
+
한심하게 1
|
| 1674 |
+
생각하실 1
|
| 1675 |
+
수사기관 1
|
| 1676 |
+
엄정하고 1
|
| 1677 |
+
신속하게 1
|
| 1678 |
+
수사해야 1
|
| 1679 |
+
자택으로 1
|
| 1680 |
+
조언으로 1
|
| 1681 |
+
텔레그램 1
|
| 1682 |
+
나타나고 1
|
| 1683 |
+
부적절한 1
|
| 1684 |
+
부정확한 1
|
| 1685 |
+
설명했는데 1
|
| 1686 |
+
당사자들 1
|
| 1687 |
+
반박했다 1
|
| 1688 |
+
만나자고 1
|
| 1689 |
+
페이스북 1
|
| 1690 |
+
빅테크들 1
|
| 1691 |
+
파악해야 1
|
| 1692 |
+
유럽연합 1
|
| 1693 |
+
대항하기 1
|
| 1694 |
+
공개하도록 1
|
| 1695 |
+
회계연도 1
|
| 1696 |
+
종료되면 1
|
| 1697 |
+
공개해야 1
|
| 1698 |
+
당국끼리 1
|
| 1699 |
+
공유하던 1
|
| 1700 |
+
국제협약인 1
|
| 1701 |
+
이행하기 1
|
| 1702 |
+
국가별보고서 1
|
| 1703 |
+
도입했고 1
|
| 1704 |
+
정보교환 1
|
| 1705 |
+
교환하고 1
|
| 1706 |
+
빅테크로 1
|
| 1707 |
+
가공해서 1
|
| 1708 |
+
국가에서 1
|
| 1709 |
+
유럽처럼 1
|
| 1710 |
+
추진되고 1
|
| 1711 |
+
공개하기 1
|
| 1712 |
+
선행돼야 1
|
| 1713 |
+
새벽까지 1
|
| 1714 |
+
서울경찰청 1
|
| 1715 |
+
현장에서 1
|
| 1716 |
+
없었으며 1
|
| 1717 |
+
거부하지 1
|
| 1718 |
+
부축하려 1
|
| 1719 |
+
포착되기 1
|
| 1720 |
+
들여다보고 1
|
| 1721 |
+
불가능한 1
|
| 1722 |
+
이전까지 1
|
| 1723 |
+
차선에서 1
|
| 1724 |
+
난폭운전 1
|
| 1725 |
+
접수하고 1
|
| 1726 |
+
주문했다 1
|
| 1727 |
+
꾸벅꾸벅 1
|
| 1728 |
+
철거된다 1
|
| 1729 |
+
개통했다 1
|
| 1730 |
+
교차로로 1
|
| 1731 |
+
도로교통공단 1
|
| 1732 |
+
불가피할 1
|
| 1733 |
+
철거하고 1
|
| 1734 |
+
조성한다 1
|
| 1735 |
+
연결한다 1
|
| 1736 |
+
여의도나 1
|
| 1737 |
+
도심으로 1
|
| 1738 |
+
출퇴근하 1
|
| 1739 |
+
반도체뿐 1
|
| 1740 |
+
밀어내기 1
|
| 1741 |
+
지지부진한 1
|
| 1742 |
+
선두주자 1
|
| 1743 |
+
실적으로 1
|
| 1744 |
+
감소했는데 1
|
| 1745 |
+
영업이익으로 1
|
| 1746 |
+
제외하면 1
|
| 1747 |
+
적자였다 1
|
| 1748 |
+
영향이다 1
|
| 1749 |
+
수조원대 1
|
| 1750 |
+
체결했다 1
|
| 1751 |
+
따내면서 1
|
| 1752 |
+
포트폴리오 1
|
| 1753 |
+
다변화로 1
|
| 1754 |
+
편광필름 1
|
| 1755 |
+
양도했고 1
|
| 1756 |
+
구조조정 1
|
| 1757 |
+
최대치였지 1
|
| 1758 |
+
해운에서 1
|
| 1759 |
+
영향으로 1
|
| 1760 |
+
분석됐다 1
|
| 1761 |
+
길어지고 1
|
| 1762 |
+
비상경영 1
|
| 1763 |
+
돌입했지 1
|
| 1764 |
+
미나토구 1
|
| 1765 |
+
펜트하우스이자 1
|
| 1766 |
+
일본에서 1
|
| 1767 |
+
레지던스라 1
|
| 1768 |
+
들어섰는데 1
|
| 1769 |
+
화룡점정 1
|
| 1770 |
+
디자인했다 1
|
| 1771 |
+
스카닝으로 1
|
| 1772 |
+
가구업체 1
|
| 1773 |
+
꾸몄다고 1
|
| 1774 |
+
옷장까지 1
|
| 1775 |
+
디자이너들 1
|
| 1776 |
+
고심해서 1
|
| 1777 |
+
소개하고 1
|
| 1778 |
+
갤러리스트 1
|
| 1779 |
+
컨설턴트 1
|
| 1780 |
+
건축가나 1
|
| 1781 |
+
이어진다 1
|
| 1782 |
+
갤러리에선 1
|
| 1783 |
+
건설업체 1
|
| 1784 |
+
투자회사들 1
|
| 1785 |
+
현상까지 1
|
| 1786 |
+
벌어지고 1
|
| 1787 |
+
조연이었다 1
|
| 1788 |
+
먼저였고 1
|
| 1789 |
+
이때부터 1
|
| 1790 |
+
시작됐다 1
|
| 1791 |
+
간결하면서 1
|
| 1792 |
+
초부터다 1
|
| 1793 |
+
대중���으로 1
|
| 1794 |
+
디자이너로 1
|
| 1795 |
+
앤트워프 1
|
| 1796 |
+
관능적으로 1
|
| 1797 |
+
윈트레베르트 1
|
| 1798 |
+
유기적인 1
|
| 1799 |
+
각광받고 1
|
| 1800 |
+
어퍼하우스 1
|
| 1801 |
+
르페이드 1
|
| 1802 |
+
나인원한남 1
|
| 1803 |
+
실내가구 1
|
| 1804 |
+
배치하느냐 1
|
| 1805 |
+
달라진다 1
|
| 1806 |
+
조사기관 1
|
| 1807 |
+
할리팩스 1
|
| 1808 |
+
걸렸는데 1
|
| 1809 |
+
구조만큼 1
|
| 1810 |
+
뉴욕이나 1
|
| 1811 |
+
레지던스일수록 1
|
| 1812 |
+
지역민보단 1
|
| 1813 |
+
외국인들 1
|
| 1814 |
+
귀띔했다 1
|
| 1815 |
+
아자다부힐스 1
|
| 1816 |
+
중동이나 1
|
| 1817 |
+
유럽에서 1
|
| 1818 |
+
외국인들이고 1
|
| 1819 |
+
고객이라 1
|
| 1820 |
+
핏플레이스 1
|
| 1821 |
+
만족시킬 1
|
| 1822 |
+
차별적인 1
|
| 1823 |
+
필요하고 1
|
| 1824 |
+
디자인한 1
|
| 1825 |
+
설명이다 1
|
| 1826 |
+
퍼니처로 1
|
| 1827 |
+
레지던스라고 1
|
| 1828 |
+
하이엔드 1
|
| 1829 |
+
오피스텔 1
|
| 1830 |
+
자금난으로 1
|
| 1831 |
+
가라앉지 1
|
| 1832 |
+
여전하기 1
|
| 1833 |
+
신중하게 1
|
| 1834 |
+
따져보고 1
|
| 1835 |
+
유출됐다 1
|
| 1836 |
+
착수한다고 1
|
| 1837 |
+
인터뷰하면서 1
|
| 1838 |
+
비상대책위원장 1
|
| 1839 |
+
실시했다면서 1
|
| 1840 |
+
책임당원 1
|
| 1841 |
+
미래한국연구소 1
|
| 1842 |
+
비교했고 1
|
| 1843 |
+
가상대결 1
|
| 1844 |
+
실시했으며 1
|
| 1845 |
+
사무총장 1
|
| 1846 |
+
최고위원 1
|
| 1847 |
+
회의에서 1
|
| 1848 |
+
만들어서 1
|
| 1849 |
+
적법하게 1
|
| 1850 |
+
흘러갔는지 1
|
| 1851 |
+
넘어갔는지 1
|
| 1852 |
+
조사하겠다 1
|
| 1853 |
+
안심번호 1
|
| 1854 |
+
캠프에서 1
|
| 1855 |
+
관련해서 1
|
| 1856 |
+
뚜렷해야 1
|
| 1857 |
+
시간가량 1
|
| 1858 |
+
결론입니다 1
|
| 1859 |
+
서바이벌 1
|
| 1860 |
+
미션에서 1
|
| 1861 |
+
승리하며 1
|
| 1862 |
+
끌었습니다 1
|
| 1863 |
+
해산물로 1
|
| 1864 |
+
싹쓸이하며 1
|
| 1865 |
+
셰프에게 1
|
| 1866 |
+
물었더니 1
|
| 1867 |
+
방송에서 1
|
| 1868 |
+
익숙하면서 1
|
| 1869 |
+
만들어야겠다 1
|
| 1870 |
+
주저하지 1
|
| 1871 |
+
뚜렷했기 1
|
| 1872 |
+
리더에게 1
|
| 1873 |
+
다양합니다 1
|
| 1874 |
+
들었습니다 1
|
| 1875 |
+
아름다웠다면 1
|
| 1876 |
+
중요하지 1
|
| 1877 |
+
좋습니다 1
|
| 1878 |
+
염두해둔 1
|
| 1879 |
+
안타깝지 1
|
| 1880 |
+
아닐까요 1
|
| 1881 |
+
도로교통법상 1
|
| 1882 |
+
특정범죄가중처벌법상 1
|
| 1883 |
+
혐의까지 1
|
| 1884 |
+
처하도록 1
|
| 1885 |
+
용산경찰서 1
|
| 1886 |
+
운전하다 1
|
| 1887 |
+
판단되면 1
|
| 1888 |
+
가능하다고 1
|
| 1889 |
+
식당에서 1
|
| 1890 |
+
지속됐기 1
|
| 1891 |
+
적용되면 1
|
| 1892 |
+
붉어지고 1
|
| 1893 |
+
비틀거리며 1
|
| 1894 |
+
주행하다 1
|
| 1895 |
+
오토바이 1
|
| 1896 |
+
발생했다 1
|
| 1897 |
+
위험치사상 1
|
| 1898 |
+
기소했고 1
|
| 1899 |
+
선고했다 1
|
| 1900 |
+
제조사인 1
|
| 1901 |
+
메르세데스벤츠 1
|
| 1902 |
+
수입사인 1
|
| 1903 |
+
메르세데스벤츠코리아 1
|
| 1904 |
+
한성자동차 1
|
| 1905 |
+
벤츠파이낸셜서비스코리아 1
|
| 1906 |
+
서울중앙지법 1
|
| 1907 |
+
제출했다고 1
|
| 1908 |
+
공정거래위원회 1
|
| 1909 |
+
포함되지 1
|
| 1910 |
+
소유자들 1
|
| 1911 |
+
주장하고 1
|
| 1912 |
+
탑재됐지 1
|
| 1913 |
+
크리스토프 1
|
| 1914 |
+
스타진스키 1
|
| 1915 |
+
장착된다 1
|
| 1916 |
+
알았다면 1
|
| 1917 |
+
부담해야 1
|
| 1918 |
+
손해보다 1
|
| 1919 |
+
배상하게 1
|
| 1920 |
+
소외됐다 1
|
| 1921 |
+
단적으로 1
|
| 1922 |
+
엠에프엠코리아 1
|
| 1923 |
+
현대사료 1
|
| 1924 |
+
퀄리타스반도체 1
|
| 1925 |
+
큐라티스 1
|
| 1926 |
+
삼성증권 1
|
| 1927 |
+
반도체주 1
|
| 1928 |
+
이어가고 1
|
| 1929 |
+
통영체육관 1
|
| 1930 |
+
맞붙었다 1
|
| 1931 |
+
후위에서 1
|
| 1932 |
+
스파이크 1
|
| 1933 |
+
바깥으로 1
|
| 1934 |
+
벤치에서 1
|
| 1935 |
+
뛰어올랐던 1
|
| 1936 |
+
나갔다고 1
|
| 1937 |
+
운용하고 1
|
| 1938 |
+
인정하고 1
|
| 1939 |
+
선수에게 1
|
| 1940 |
+
주어진다 1
|
| 1941 |
+
불필요한 1
|
| 1942 |
+
경기에선 1
|
| 1943 |
+
여자부에선 1
|
| 1944 |
+
조별리그 1
|
| 1945 |
+
페퍼저축은행 1
|
| 1946 |
+
주인공이었다 1
|
| 1947 |
+
네이션스 1
|
| 1948 |
+
도입했다 1
|
| 1949 |
+
지급한다 1
|
| 1950 |
+
보상으로 1
|
| 1951 |
+
페어플레이 1
|
| 1952 |
+
유도하자 1
|
| 1953 |
+
페어플레이상 1
|
| 1954 |
+
반영한다 1
|
| 1955 |
+
반영하기로 1
|
| 1956 |
+
금전적으로 1
|
| 1957 |
+
유인으로 1
|
| 1958 |
+
작용하지 1
|
| 1959 |
+
홍보팀장 1
|
| 1960 |
+
정착하고 1
|
| 1961 |
+
홈런포로 1
|
| 1962 |
+
앞장섰다 1
|
| 1963 |
+
기회에서 1
|
| 1964 |
+
내야플라 1
|
| 1965 |
+
가라앉았던 1
|
| 1966 |
+
받아쳤다 1
|
| 1967 |
+
홈런이었다 1
|
| 1968 |
+
에이드리언 1
|
| 1969 |
+
부러졌지 1
|
| 1970 |
+
테오스카 1
|
| 1971 |
+
미쳤으나 1
|
| 1972 |
+
불펜투수 1
|
| 1973 |
+
집어삼킬 1
|
| 1974 |
+
끌려가다 1
|
| 1975 |
+
무안타로 1
|
| 1976 |
+
침묵했다 1
|
| 1977 |
+
기부하기로 1
|
| 1978 |
+
약정했다고 1
|
| 1979 |
+
출생으로 1
|
| 1980 |
+
졸업하고 1
|
| 1981 |
+
미국으로 1
|
| 1982 |
+
상장시켰다 1
|
| 1983 |
+
한미상호방위조약 1
|
| 1984 |
+
대국으로 1
|
| 1985 |
+
마련했기 1
|
| 1986 |
+
참여했고 1
|
| 1987 |
+
조성됐다고 1
|
| 1988 |
+
출시했다고 1
|
| 1989 |
+
오세아니아 1
|
| 1990 |
+
실시했다 1
|
| 1991 |
+
야심작으로 1
|
| 1992 |
+
출시됐다 1
|
| 1993 |
+
크래프톤 1
|
| 1994 |
+
진행한다고 1
|
| 1995 |
+
기부그라운드 1
|
| 1996 |
+
배틀그라운드 1
|
| 1997 |
+
즐기면서 1
|
| 1998 |
+
공정거래위원회로 1
|
| 1999 |
+
서울고법 1
|
| 2000 |
+
공정거래법 1
|
| 2001 |
+
부과했다 1
|
| 2002 |
+
조작으로 1
|
| 2003 |
+
부당하게 1
|
| 2004 |
+
소송했고 1
|
| 2005 |
+
회복하기 1
|
| 2006 |
+
기각했다 1
|
| 2007 |
+
성격이기 1
|
| 2008 |
+
정당한지 1
|
| 2009 |
+
최종적인 1
|
| 2010 |
+
재판에서 1
|
| 2011 |
+
내려진다 1
|
| 2012 |
+
유력하다 1
|
| 2013 |
+
기업공개 1
|
| 2014 |
+
마무리될 1
|
| 2015 |
+
인도증권거래위원회 1
|
| 2016 |
+
예상대로 1
|
| 2017 |
+
상장하면 1
|
| 2018 |
+
판매했다 1
|
| 2019 |
+
장부가액 1
|
| 2020 |
+
삭제하면서 1
|
| 2021 |
+
최고인민회 1
|
| 2022 |
+
시정연설 1
|
| 2023 |
+
지시했었다 1
|
| 2024 |
+
파기하고 1
|
| 2025 |
+
개성공단 1
|
| 2026 |
+
남북기본합의서 1
|
| 2027 |
+
잠정적으로 1
|
| 2028 |
+
깎아내렸는데 1
|
| 2029 |
+
제기된다 1
|
| 2030 |
+
해상국경선 1
|
| 2031 |
+
수역화하려 1
|
| 2032 |
+
관측한다 1
|
| 2033 |
+
구체적으로 1
|
| 2034 |
+
명시하기보다 1
|
| 2035 |
+
모호하게 1
|
| 2036 |
+
종료됐다 1
|
| 2037 |
+
노동신문 1
|
| 2038 |
+
한국은행 1
|
| 2039 |
+
불확실성 1
|
| 2040 |
+
지정학적 1
|
| 2041 |
+
미쳤다고 1
|
| 2042 |
+
확대되고 1
|
| 2043 |
+
중장기채권 1
|
| 2044 |
+
계속되면서 1
|
| 2045 |
+
순유입됐다 1
|
| 2046 |
+
순유출로 1
|
| 2047 |
+
선고받았다 1
|
| 2048 |
+
인천지법 1
|
| 2049 |
+
정보통신망 1
|
| 2050 |
+
이용촉진 1
|
| 2051 |
+
정보보호 1
|
| 2052 |
+
선고했다고 1
|
| 2053 |
+
사회봉사 1
|
| 2054 |
+
명령했다 1
|
| 2055 |
+
남자친구 1
|
| 2056 |
+
알려주고 1
|
| 2057 |
+
넘겨졌다 1
|
| 2058 |
+
제안으로 1
|
| 2059 |
+
모집하면 1
|
| 2060 |
+
관리했다 1
|
| 2061 |
+
애플리케이션 1
|
| 2062 |
+
개인정보 1
|
| 2063 |
+
입력하면 1
|
| 2064 |
+
들렀는지 1
|
| 2065 |
+
친구에게 1
|
| 2066 |
+
고소하기 1
|
| 2067 |
+
봉인했다 1
|
| 2068 |
+
연발하며 1
|
| 2069 |
+
자멸했다 1
|
| 2070 |
+
설욕하면서 1
|
| 2071 |
+
수비에서 1
|
| 2072 |
+
돋보였다 1
|
| 2073 |
+
호수비로 1
|
| 2074 |
+
같아졌다 1
|
| 2075 |
+
뼈아팠다 1
|
| 2076 |
+
이어가지 1
|
| 2077 |
+
활발하게 1
|
| 2078 |
+
공격했다 1
|
| 2079 |
+
더블스틸로 1
|
| 2080 |
+
성공하면서 1
|
| 2081 |
+
실패하면서 1
|
| 2082 |
+
상황이면 1
|
| 2083 |
+
역전했다 1
|
| 2084 |
+
희생번트 1
|
| 2085 |
+
때렸는데 1
|
| 2086 |
+
서두르던 1
|
| 2087 |
+
빠뜨렸다 1
|
| 2088 |
+
밟으면서 1
|
| 2089 |
+
기울어지 1
|
| 2090 |
+
마무리투수 1
|
| 2091 |
+
내야안타 1
|
| 2092 |
+
몰렸으나 1
|
| 2093 |
+
뛰어오르면서 1
|
| 2094 |
+
대등했다 1
|
| 2095 |
+
성공했고 1
|
| 2096 |
+
희생플라이로 1
|
| 2097 |
+
수비에선 1
|
| 2098 |
+
부진했다 1
|
| 2099 |
+
구원투수로 1
|
| 2100 |
+
인상한다 1
|
| 2101 |
+
부담하지 1
|
| 2102 |
+
비행시간 1
|
| 2103 |
+
인상된다 1
|
| 2104 |
+
오르면서 1
|
| 2105 |
+
대한항공 1
|
| 2106 |
+
제주항공 1
|
| 2107 |
+
노선별로 1
|
| 2108 |
+
인상했다 1
|
| 2109 |
+
파리올림픽 1
|
| 2110 |
+
금메달리스트 1
|
| 2111 |
+
복귀했다 1
|
| 2112 |
+
쏟아지자 1
|
| 2113 |
+
밀양에서 1
|
| 2114 |
+
전국체육대회 1
|
| 2115 |
+
예선에서 1
|
| 2116 |
+
부산광역시 1
|
| 2117 |
+
인천광역시 1
|
| 2118 |
+
모습이었다 1
|
| 2119 |
+
많았다고 1
|
| 2120 |
+
진정시킨 1
|
| 2121 |
+
사랑해준 1
|
| 2122 |
+
감사하다 1
|
| 2123 |
+
불참하고 1
|
| 2124 |
+
연호하며 1
|
| 2125 |
+
유도하며 1
|
| 2126 |
+
마무리했다 1
|
| 2127 |
+
관중에게 1
|
| 2128 |
+
화답했다 1
|
| 2129 |
+
감사했고 1
|
| 2130 |
+
그들에게 1
|
| 2131 |
+
조금이라 1
|
| 2132 |
+
표현하고 1
|
| 2133 |
+
기다렸던 1
|
| 2134 |
+
만족스럽다 1
|
| 2135 |
+
병행하며 1
|
| 2136 |
+
좋아졌다 1
|
| 2137 |
+
국제대회 1
|
| 2138 |
+
보여드리겠다 1
|
| 2139 |
+
이뤘으니 1
|
| 2140 |
+
비판하면서 1
|
| 2141 |
+
이뤄지고 1
|
| 2142 |
+
이뤄지는지 1
|
| 2143 |
+
않았었고 1
|
| 2144 |
+
발표하고 1
|
| 2145 |
+
출전하지 1
|
| 2146 |
+
본모습으로 1
|
| 2147 |
+
않을까라고 1
|
| 2148 |
+
생각하고 1
|
| 2149 |
+
덧붙였다 1
|
| 2150 |
+
머물렀던 1
|
| 2151 |
+
늦게나마 1
|
| 2152 |
+
아쉬웠는데 1
|
| 2153 |
+
지역적인 1
|
| 2154 |
+
못했다면 1
|
| 2155 |
+
인식하게 1
|
| 2156 |
+
음식까지 1
|
| 2157 |
+
한국으로 1
|
| 2158 |
+
쏠리면서 1
|
| 2159 |
+
주목하지 1
|
| 2160 |
+
소설인데 1
|
| 2161 |
+
섬세하고 1
|
| 2162 |
+
겪어왔던 1
|
| 2163 |
+
정치적인 1
|
| 2164 |
+
형상화해온 1
|
| 2165 |
+
근원적인 1
|
| 2166 |
+
작가로서 1
|
| 2167 |
+
억눌려왔던 1
|
| 2168 |
+
번역가들 1
|
| 2169 |
+
차원에서 1
|
| 2170 |
+
제안했다 1
|
| 2171 |
+
보내느냐 1
|
| 2172 |
+
이야기해왔지 1
|
| 2173 |
+
한몫했다 1
|
| 2174 |
+
축적돼온 1
|
| 2175 |
+
양성하고 1
|
| 2176 |
+
국제무대 1
|
| 2177 |
+
세계문학 1
|
| 2178 |
+
되어가고 1
|
| 2179 |
+
재평가되며 1
|
| 2180 |
+
역사까지 1
|
| 2181 |
+
심층적으로 1
|
| 2182 |
+
들여다보며 1
|
| 2183 |
+
나라인지 1
|
| 2184 |
+
인터넷전문은행보다 1
|
| 2185 |
+
취급하고 1
|
| 2186 |
+
전업주부 1
|
| 2187 |
+
분류된다 1
|
| 2188 |
+
포용하지 1
|
| 2189 |
+
못한다면 1
|
| 2190 |
+
거둬들이고 1
|
| 2191 |
+
포용하자 1
|
| 2192 |
+
내세우지 1
|
| 2193 |
+
인터넷은행에 1
|
| 2194 |
+
떠넘겨버린다 1
|
| 2195 |
+
인터넷전문은행 1
|
| 2196 |
+
자산으로 1
|
| 2197 |
+
인터넷은행보다 1
|
| 2198 |
+
가계대출 1
|
| 2199 |
+
인터넷은행에선 1
|
| 2200 |
+
인터넷은행으로 1
|
| 2201 |
+
달려가고 1
|
| 2202 |
+
팍팍해진 1
|
| 2203 |
+
중저신용자들 1
|
| 2204 |
+
중저신용대출 1
|
| 2205 |
+
취약계층 1
|
| 2206 |
+
밀려나고 1
|
| 2207 |
+
방증이다 1
|
| 2208 |
+
넘어서기 1
|
| 2209 |
+
금융당국 1
|
| 2210 |
+
관리하고 1
|
| 2211 |
+
인터넷은행만 1
|
| 2212 |
+
이자이익 1
|
| 2213 |
+
당기순이익 1
|
| 2214 |
+
고민해야 1
|
| 2215 |
+
마무리할 1
|
| 2216 |
+
산업통상자원부 1
|
| 2217 |
+
개발권인 1
|
| 2218 |
+
부여하고 1
|
| 2219 |
+
특별수당 1
|
| 2220 |
+
해저광물자원 1
|
| 2221 |
+
입법예고한다고 1
|
| 2222 |
+
개정하기로 1
|
| 2223 |
+
생산하면 1
|
| 2224 |
+
조광료로 1
|
| 2225 |
+
거두도록 1
|
| 2226 |
+
제도에서 1
|
| 2227 |
+
늘어날수록 1
|
| 2228 |
+
급증하면 1
|
| 2229 |
+
신설된다 1
|
| 2230 |
+
공식적으로 1
|
| 2231 |
+
광구에서 1
|
| 2232 |
+
발견하면 1
|
| 2233 |
+
계약에서 1
|
| 2234 |
+
넘어서면 1
|
| 2235 |
+
관리자로 1
|
| 2236 |
+
복귀한다 1
|
| 2237 |
+
관장하고 1
|
| 2238 |
+
전략적인 1
|
| 2239 |
+
잉글랜드 1
|
| 2240 |
+
감독으로 1
|
| 2241 |
+
물러나자 1
|
| 2242 |
+
관장하며 1
|
| 2243 |
+
바이에른 1
|
| 2244 |
+
소유하고 1
|
| 2245 |
+
바뀌겠지 1
|
| 2246 |
+
유망주들 1
|
| 2247 |
+
발전시키고 1
|
| 2248 |
+
반발하고 1
|
| 2249 |
+
쏟아부어 1
|
| 2250 |
+
팬들에겐 1
|
| 2251 |
+
분데스리가에선 1
|
| 2252 |
+
말이라고 1
|
| 2253 |
+
강조하며 1
|
| 2254 |
+
몸담았던 1
|
| 2255 |
+
도르트문트 1
|
| 2256 |
+
비아냥거리고 1
|
| 2257 |
+
끌어내려야 1
|
| 2258 |
+
강화군수 1
|
| 2259 |
+
심각하다면 1
|
| 2260 |
+
도중에라 1
|
| 2261 |
+
끌어내리 1
|
| 2262 |
+
민주주의고 1
|
| 2263 |
+
발언이었지 1
|
| 2264 |
+
만들겠다고 1
|
| 2265 |
+
권좌에서 1
|
| 2266 |
+
구성하고 1
|
| 2267 |
+
의원회관 1
|
| 2268 |
+
정면으로 1
|
| 2269 |
+
반헌법적 1
|
| 2270 |
+
반발했다 1
|
| 2271 |
+
아니었다고 1
|
| 2272 |
+
피감기관 1
|
| 2273 |
+
예고하고 1
|
| 2274 |
+
키즈카페 1
|
| 2275 |
+
생각나서 1
|
| 2276 |
+
찾아보니 1
|
| 2277 |
+
씁쓸했다 1
|
| 2278 |
+
어르신들 1
|
| 2279 |
+
경로당엔 1
|
| 2280 |
+
장기요양인정등급 1
|
| 2281 |
+
어린이집 1
|
| 2282 |
+
감소했다 1
|
| 2283 |
+
서울시교육청 1
|
| 2284 |
+
실버타운 1
|
| 2285 |
+
실버타운으로 1
|
| 2286 |
+
셔틀버스로 1
|
| 2287 |
+
데려오고 1
|
| 2288 |
+
데려다준다 1
|
| 2289 |
+
비슷하다 1
|
| 2290 |
+
유치원장 1
|
| 2291 |
+
노치원으로 1
|
| 2292 |
+
편이라고 1
|
| 2293 |
+
시도하고 1
|
| 2294 |
+
학습지로 1
|
| 2295 |
+
배달하고 1
|
| 2296 |
+
단지에서 1
|
| 2297 |
+
기부채납 1
|
| 2298 |
+
제시하자 1
|
| 2299 |
+
소유주들 1
|
| 2300 |
+
접어들어 1
|
| 2301 |
+
분명하다 1
|
| 2302 |
+
선진국에선 1
|
| 2303 |
+
시설이기 1
|
| 2304 |
+
늘려가야 1
|
| 2305 |
+
최근부터 1
|
| 2306 |
+
내려가면서 1
|
| 2307 |
+
심해지면 1
|
| 2308 |
+
멜라토닌 1
|
| 2309 |
+
빌려보고 1
|
| 2310 |
+
사용해봤다 1
|
| 2311 |
+
의료기기 1
|
| 2312 |
+
삼성메디슨 1
|
| 2313 |
+
연구소장 1
|
| 2314 |
+
제품이다 1
|
| 2315 |
+
슬리피솔 1
|
| 2316 |
+
거슬리지 1
|
| 2317 |
+
이곳으로 1
|
| 2318 |
+
전달한다 1
|
| 2319 |
+
스트레스 1
|
| 2320 |
+
비약물적 1
|
| 2321 |
+
치료법이라고 1
|
| 2322 |
+
서울대학교 1
|
| 2323 |
+
분당병원 1
|
| 2324 |
+
사용했더니 1
|
| 2325 |
+
호전됐다고 1
|
| 2326 |
+
답했다고 1
|
| 2327 |
+
설치하고 1
|
| 2328 |
+
블루투스로 1
|
| 2329 |
+
기본이다 1
|
| 2330 |
+
스마트기기 1
|
| 2331 |
+
분석해주고 1
|
| 2332 |
+
적응하기 1
|
| 2333 |
+
어려웠으나 1
|
| 2334 |
+
시티필드 1
|
| 2335 |
+
지목됐던 1
|
| 2336 |
+
프란시스코 1
|
| 2337 |
+
투입하자 1
|
| 2338 |
+
직선으로 1
|
| 2339 |
+
넘겨버렸다 1
|
| 2340 |
+
올라가야 1
|
| 2341 |
+
감격했다 1
|
| 2342 |
+
뛰어들었다 1
|
| 2343 |
+
볼티모어 1
|
| 2344 |
+
팀이었다 1
|
| 2345 |
+
막판까지 1
|
| 2346 |
+
기사회생한 1
|
| 2347 |
+
모양새다 1
|
| 2348 |
+
극적으로 1
|
| 2349 |
+
확정하더니 1
|
| 2350 |
+
원정경기로 1
|
| 2351 |
+
가려진다 1
|
| 2352 |
+
달아났다 1
|
| 2353 |
+
홈런으로 1
|
| 2354 |
+
유린했다 1
|
| 2355 |
+
예고됐다 1
|
| 2356 |
+
외나무다리 1
|
| 2357 |
+
승부에서 1
|
| 2358 |
+
등판한다 1
|
| 2359 |
+
가까스로 1
|
| 2360 |
+
가라앉아 1
|
| 2361 |
+
고민이다 1
|
| 2362 |
+
신약개발업체인 1
|
| 2363 |
+
알테오젠인 1
|
| 2364 |
+
거래되던 1
|
| 2365 |
+
면역항암제 1
|
| 2366 |
+
적용됐다 1
|
| 2367 |
+
작용했다 1
|
| 2368 |
+
견제하기 1
|
| 2369 |
+
통과되면 1
|
| 2370 |
+
메리츠증권 1
|
| 2371 |
+
아모레퍼시픽 1
|
| 2372 |
+
한화에어로스페이스 1
|
| 2373 |
+
신한지주 1
|
| 2374 |
+
삼성생명 1
|
| 2375 |
+
대장주인 1
|
| 2376 |
+
순매도하면서 1
|
| 2377 |
+
순매도로 1
|
| 2378 |
+
하락하면서 1
|
| 2379 |
+
국제회의 1
|
| 2380 |
+
열었어요 1
|
| 2381 |
+
회의에선 1
|
| 2382 |
+
기후변화로 1
|
| 2383 |
+
악마화되고 1
|
| 2384 |
+
포유동물 1
|
| 2385 |
+
종류뿐이고 1
|
| 2386 |
+
부풀려졌다 1
|
| 2387 |
+
아담해요 1
|
| 2388 |
+
아르헨티나 1
|
| 2389 |
+
분포하죠 1
|
| 2390 |
+
중남미로 1
|
| 2391 |
+
발견하고 1
|
| 2392 |
+
떠올려서 1
|
| 2393 |
+
펄럭이며 1
|
| 2394 |
+
내려앉아 1
|
| 2395 |
+
모습이요 1
|
| 2396 |
+
야행성이긴 1
|
| 2397 |
+
다르답니다 1
|
| 2398 |
+
저공비행 1
|
| 2399 |
+
점프하거나 1
|
| 2400 |
+
올라가요 1
|
| 2401 |
+
박쥐보다 1
|
| 2402 |
+
능숙하게 1
|
| 2403 |
+
흘러나오 1
|
| 2404 |
+
혓바닥으로 1
|
| 2405 |
+
오목하게 1
|
| 2406 |
+
들이마시기 1
|
| 2407 |
+
구조예요 1
|
| 2408 |
+
무게까지 1
|
| 2409 |
+
있답니다 1
|
| 2410 |
+
빵빵해진 1
|
| 2411 |
+
널브러져 1
|
| 2412 |
+
발견되죠 1
|
| 2413 |
+
만들어내 1
|
| 2414 |
+
자기에게 1
|
| 2415 |
+
일어났는지 1
|
| 2416 |
+
잔답니다 1
|
| 2417 |
+
물렸다고 1
|
| 2418 |
+
이리저리 1
|
| 2419 |
+
다니면서 1
|
| 2420 |
+
만들어요 1
|
| 2421 |
+
구성원들끼리 1
|
| 2422 |
+
게워주기 1
|
| 2423 |
+
있거든요 1
|
| 2424 |
+
먹인답니다 1
|
| 2425 |
+
영토에서 1
|
| 2426 |
+
가와바타 1
|
| 2427 |
+
배출했고 1
|
| 2428 |
+
배출했다 1
|
| 2429 |
+
등장했지 1
|
| 2430 |
+
국제사회에서 1
|
| 2431 |
+
중론이었다 1
|
| 2432 |
+
수상하면서 1
|
| 2433 |
+
성장하고 1
|
| 2434 |
+
글로벌하게 1
|
| 2435 |
+
공동수상한 1
|
| 2436 |
+
문학은커녕 1
|
| 2437 |
+
선진국인 1
|
| 2438 |
+
통화에서 1
|
| 2439 |
+
확실하다 1
|
| 2440 |
+
페인트칠 1
|
| 2441 |
+
탐미주의자 1
|
| 2442 |
+
효과적으로 1
|
| 2443 |
+
이탈리아 1
|
| 2444 |
+
말라파르테 1
|
| 2445 |
+
한국문학 1
|
| 2446 |
+
접근하고 1
|
| 2447 |
+
작동하고 1
|
| 2448 |
+
간과돼서 1
|
| 2449 |
+
진출한다 1
|
| 2450 |
+
이에따라 1
|
| 2451 |
+
늘어나게 1
|
| 2452 |
+
맺었다고 1
|
| 2453 |
+
베이커리 1
|
| 2454 |
+
거점으로 1
|
| 2455 |
+
증가하고 1
|
| 2456 |
+
계약으로 1
|
| 2457 |
+
동남아시아에서 1
|
| 2458 |
+
진출하게 1
|
| 2459 |
+
발언으로 1
|
| 2460 |
+
일으킨다 1
|
| 2461 |
+
집중시키기 1
|
| 2462 |
+
송도에서 1
|
| 2463 |
+
시장이다 1
|
| 2464 |
+
파산이다 1
|
| 2465 |
+
실버게이트은행 1
|
| 2466 |
+
위기에서 1
|
| 2467 |
+
인수되며 1
|
| 2468 |
+
크레디트스위스 1
|
| 2469 |
+
위험하기 1
|
| 2470 |
+
생각한다 1
|
| 2471 |
+
고민하자 1
|
| 2472 |
+
하락한다 1
|
| 2473 |
+
지날수록 1
|
| 2474 |
+
올라간다 1
|
| 2475 |
+
메트갈프 1
|
| 2476 |
+
법칙이란 1
|
| 2477 |
+
메트칼프 1
|
| 2478 |
+
직선적으로 1
|
| 2479 |
+
기하급수적으로 1
|
| 2480 |
+
법칙이다 1
|
| 2481 |
+
가속화될수록 1
|
| 2482 |
+
화폐보다 1
|
| 2483 |
+
암호화폐 1
|
| 2484 |
+
트럼프나 1
|
| 2485 |
+
스탠퍼드대 1
|
| 2486 |
+
노스웨스턴 1
|
| 2487 |
+
안정적인 1
|
| 2488 |
+
윤택해진다고 1
|
| 2489 |
+
시작하면서 1
|
| 2490 |
+
일반적인 1
|
| 2491 |
+
봉급으로 1
|
| 2492 |
+
아버지인 1
|
| 2493 |
+
월급으로 1
|
| 2494 |
+
투자하기 1
|
| 2495 |
+
키워나간 1
|
| 2496 |
+
붕괴였다 1
|
| 2497 |
+
이전보다 1
|
| 2498 |
+
두려워할 1
|
| 2499 |
+
나타난다 1
|
| 2500 |
+
부족하다 1
|
| 2501 |
+
레이스란 1
|
| 2502 |
+
벗어나려면 1
|
| 2503 |
+
사회에서 1
|
| 2504 |
+
기다리던 1
|
| 2505 |
+
페어웨이 1
|
| 2506 |
+
작성했다 1
|
| 2507 |
+
블루헤런 1
|
| 2508 |
+
잡아내며 1
|
| 2509 |
+
허용했으나 1
|
| 2510 |
+
한국여자오픈 1
|
| 2511 |
+
문턱까지 1
|
| 2512 |
+
모르겠다 1
|
| 2513 |
+
우승하고자 1
|
| 2514 |
+
임하는데 1
|
| 2515 |
+
싶었는데 1
|
| 2516 |
+
지나가길 1
|
| 2517 |
+
장타자이면서 1
|
| 2518 |
+
아이언샷 1
|
| 2519 |
+
빼어나다 1
|
| 2520 |
+
좋아하지 1
|
| 2521 |
+
어려워서 1
|
| 2522 |
+
조건이니 1
|
| 2523 |
+
있었다고 1
|
| 2524 |
+
초반부터 1
|
| 2525 |
+
훈련해오면서 1
|
| 2526 |
+
노력했다 1
|
| 2527 |
+
흔들리지 1
|
| 2528 |
+
단단하게 1
|
| 2529 |
+
올라섰다 1
|
| 2530 |
+
제주삼다수 1
|
| 2531 |
+
마스터스 1
|
| 2532 |
+
번뿐이지 1
|
| 2533 |
+
상금에서 1
|
| 2534 |
+
모습이다 1
|
| 2535 |
+
자리했다 1
|
| 2536 |
+
따라왔다 1
|
| 2537 |
+
합작했고 1
|
| 2538 |
+
야구보다 1
|
| 2539 |
+
생각했는데 1
|
| 2540 |
+
들어맞으면서 1
|
| 2541 |
+
통과하고 1
|
| 2542 |
+
장소에서 1
|
| 2543 |
+
쿠에바스 1
|
| 2544 |
+
선발투수로 1
|
| 2545 |
+
슬라이더 1
|
| 2546 |
+
신고했다 1
|
| 2547 |
+
부응했다 1
|
| 2548 |
+
시도했다 1
|
| 2549 |
+
기대했던 1
|
| 2550 |
+
정규리그에선 1
|
| 2551 |
+
이날까지 1
|
| 2552 |
+
부진하다 1
|
| 2553 |
+
아웃카운트 1
|
| 2554 |
+
물러나기 1
|
| 2555 |
+
모두에게 1
|
| 2556 |
+
절실했다 1
|
| 2557 |
+
딘이었다 1
|
| 2558 |
+
대결에서 1
|
| 2559 |
+
환호했다 1
|
| 2560 |
+
장거리포 1
|
| 2561 |
+
등판했다 1
|
| 2562 |
+
쿠에바스보다 1
|
| 2563 |
+
초반까지 1
|
| 2564 |
+
플라이로 1
|
| 2565 |
+
추격했다 1
|
| 2566 |
+
공략하지 1
|
| 2567 |
+
도전하게 1
|
| 2568 |
+
재무제표 1
|
| 2569 |
+
적극적이지 1
|
| 2570 |
+
기업분석연구소 1
|
| 2571 |
+
리더스인덱스 1
|
| 2572 |
+
추진하면서 1
|
| 2573 |
+
독려하고 1
|
| 2574 |
+
한정됐다 1
|
| 2575 |
+
기업별로 1
|
| 2576 |
+
배당했다 1
|
| 2577 |
+
장군멍군 1
|
| 2578 |
+
일으켰던 1
|
| 2579 |
+
양키스타디움 1
|
| 2580 |
+
원정경기 1
|
| 2581 |
+
되갚았다 1
|
| 2582 |
+
선두타자로 1
|
| 2583 |
+
살바도르 1
|
| 2584 |
+
터뜨렸고 1
|
| 2585 |
+
성공하자 1
|
| 2586 |
+
처리하며 1
|
| 2587 |
+
타석에선 1
|
| 2588 |
+
종횡무진했다 1
|
| 2589 |
+
카우프만필드 1
|
| 2590 |
+
자이언츠 1
|
| 2591 |
+
원정으로 1
|
| 2592 |
+
볼티모어로 1
|
| 2593 |
+
뉴욕으로 1
|
| 2594 |
+
제압하며 1
|
| 2595 |
+
에마누엘 1
|
| 2596 |
+
침묵시켰다 1
|
| 2597 |
+
기록하면서 1
|
| 2598 |
+
마무리로 1
|
| 2599 |
+
이어지면 1
|
| 2600 |
+
내놓으면서 1
|
| 2601 |
+
세계적으로 1
|
| 2602 |
+
문법까지 1
|
| 2603 |
+
내버려두 1
|
| 2604 |
+
규정이라 1
|
| 2605 |
+
공영방송 1
|
| 2606 |
+
독일어로 1
|
| 2607 |
+
표기한다 1
|
| 2608 |
+
고유명사 1
|
| 2609 |
+
허용하겠다 1
|
| 2610 |
+
공식적인 1
|
| 2611 |
+
위원회인 1
|
| 2612 |
+
공용언어로 1
|
| 2613 |
+
독일인들 1
|
| 2614 |
+
익숙하게 1
|
| 2615 |
+
내렸다고 1
|
| 2616 |
+
전통이었지 1
|
| 2617 |
+
간판에서 1
|
| 2618 |
+
비판하고 1
|
| 2619 |
+
내버려두고 1
|
| 2620 |
+
평론에서 1
|
| 2621 |
+
머리카락 1
|
| 2622 |
+
사람이라면 1
|
| 2623 |
+
프랑프푸르트 1
|
| 2624 |
+
일간지인 1
|
| 2625 |
+
중간중간 1
|
| 2626 |
+
어색하게 1
|
| 2627 |
+
끼워넣으며 1
|
| 2628 |
+
불가피하다고 1
|
| 2629 |
+
베를린자유대학 1
|
| 2630 |
+
언어학자 1
|
| 2631 |
+
스테파노비치 1
|
| 2632 |
+
프랑스어 1
|
| 2633 |
+
부임했다 1
|
| 2634 |
+
떨어졌던 1
|
| 2635 |
+
들려줬다 1
|
| 2636 |
+
등장했고 1
|
| 2637 |
+
캐럴이라 1
|
| 2638 |
+
출간한다 1
|
| 2639 |
+
셰익스피어 1
|
| 2640 |
+
다음으로 1
|
| 2641 |
+
탄생이었다 1
|
| 2642 |
+
등장시킨다 1
|
| 2643 |
+
삽화에서 1
|
| 2644 |
+
표현됐다 1
|
| 2645 |
+
베스트셀러 1
|
| 2646 |
+
애니메이션으로 1
|
| 2647 |
+
만들어지면서 1
|
| 2648 |
+
유명해졌지 1
|
| 2649 |
+
멸종했기 1
|
| 2650 |
+
모리셔스에 1
|
| 2651 |
+
서식했다 1
|
| 2652 |
+
모리셔스 1
|
| 2653 |
+
도착하면서 1
|
| 2654 |
+
지구에서 1
|
| 2655 |
+
사라졌다 1
|
| 2656 |
+
멸종시키고 1
|
| 2657 |
+
뒤뚱거리면서 1
|
| 2658 |
+
못했으며 1
|
| 2659 |
+
멍청하고 1
|
| 2660 |
+
기록으로 1
|
| 2661 |
+
포르투갈어로 1
|
| 2662 |
+
의미에서 1
|
| 2663 |
+
유래했다 1
|
| 2664 |
+
국제학술지 1
|
| 2665 |
+
있었으며 1
|
| 2666 |
+
살펴보자 1
|
| 2667 |
+
벌채하면서 1
|
| 2668 |
+
멍청해서 1
|
| 2669 |
+
월드처럼 1
|
| 2670 |
+
소망이었다 1
|
| 2671 |
+
산타크루즈 1
|
| 2672 |
+
교수이자 1
|
| 2673 |
+
생명공학 1
|
| 2674 |
+
바이오사이언스 1
|
| 2675 |
+
최고과학책임자 1
|
| 2676 |
+
줄기세포 1
|
| 2677 |
+
코펜하겐 1
|
| 2678 |
+
표본에서 1
|
| 2679 |
+
얻었다고 1
|
| 2680 |
+
엇갈린다 1
|
| 2681 |
+
공통조상 1
|
| 2682 |
+
진화하기 1
|
| 2683 |
+
도도인지 1
|
| 2684 |
+
자신한다 1
|
| 2685 |
+
태즈메이니아 1
|
| 2686 |
+
흰코뿔소 1
|
| 2687 |
+
영화감독 1
|
| 2688 |
+
투자했다 1
|
| 2689 |
+
유명인들 1
|
| 2690 |
+
구성원으로 1
|
| 2691 |
+
굴종적인 1
|
| 2692 |
+
울산시장 1
|
| 2693 |
+
불구하고 1
|
| 2694 |
+
꼽으라면 1
|
| 2695 |
+
문제이지 1
|
| 2696 |
+
상식적인 1
|
| 2697 |
+
거스르고 1
|
| 2698 |
+
상쇄되고 1
|
| 2699 |
+
심각해졌다 1
|
| 2700 |
+
지지자들 1
|
| 2701 |
+
극단적인 1
|
| 2702 |
+
내로남불로 1
|
| 2703 |
+
콘크리트 1
|
| 2704 |
+
생활인들 1
|
| 2705 |
+
돌아서게 1
|
| 2706 |
+
최대치인 1
|
| 2707 |
+
걷어붙이고 1
|
| 2708 |
+
금융위원회 1
|
| 2709 |
+
정책실장 1
|
| 2710 |
+
경제수석 1
|
| 2711 |
+
틀어쥐고 1
|
| 2712 |
+
불러오긴 1
|
| 2713 |
+
가계부채 1
|
| 2714 |
+
환기시킬 1
|
| 2715 |
+
금융감독원장일 1
|
| 2716 |
+
아우성치 1
|
| 2717 |
+
장차관들 1
|
| 2718 |
+
뛰어들어 1
|
| 2719 |
+
끈질지게 1
|
| 2720 |
+
노력하고 1
|
| 2721 |
+
식당주들 1
|
| 2722 |
+
신음하고 1
|
| 2723 |
+
마련하려고 1
|
| 2724 |
+
클러스터 1
|
| 2725 |
+
초래할지 1
|
| 2726 |
+
송배전망 1
|
| 2727 |
+
해결되고 1
|
| 2728 |
+
추진하다 1
|
| 2729 |
+
맞추었거나 1
|
| 2730 |
+
삐끗했다간 1
|
| 2731 |
+
주도적으로 1
|
| 2732 |
+
당연하다 1
|
| 2733 |
+
사람이라 1
|
| 2734 |
+
두드러지 1
|
| 2735 |
+
들었다고 1
|
| 2736 |
+
정권에서 1
|
| 2737 |
+
분류되길 1
|
| 2738 |
+
현안이라 1
|
| 2739 |
+
말해준다 1
|
| 2740 |
+
상층부에서 1
|
| 2741 |
+
사라지면 1
|
| 2742 |
+
만무하다 1
|
| 2743 |
+
책임지고 1
|
| 2744 |
+
장벽으로 1
|
| 2745 |
+
아메넴헤트 1
|
| 2746 |
+
바빌로니아 1
|
| 2747 |
+
네부카드네자르 1
|
| 2748 |
+
토목공사라 1
|
| 2749 |
+
언제까지나 1
|
| 2750 |
+
막아주지 1
|
| 2751 |
+
방지용으로 1
|
| 2752 |
+
테러단체 1
|
| 2753 |
+
센서까지 1
|
| 2754 |
+
요르단강 1
|
| 2755 |
+
하드리아누스 1
|
| 2756 |
+
변질됐다 1
|
| 2757 |
+
구축했다 1
|
| 2758 |
+
서독으로 1
|
| 2759 |
+
넘으려다 1
|
| 2760 |
+
아프가니스탄 1
|
| 2761 |
+
봉쇄하고 1
|
| 2762 |
+
모양이다 1
|
| 2763 |
+
장벽이다 1
|
| 2764 |
+
콘트리트 1
|
| 2765 |
+
감옥으로 1
|
| 2766 |
+
로마인들 1
|
| 2767 |
+
가능하지 1
|
| 2768 |
+
광주광역시 1
|
| 2769 |
+
졸업하던 1
|
| 2770 |
+
시인으로 1
|
| 2771 |
+
등단했다 1
|
| 2772 |
+
이듬해인 1
|
| 2773 |
+
단편소설 1
|
| 2774 |
+
서울신문 1
|
| 2775 |
+
신춘문예 1
|
| 2776 |
+
소설가로 1
|
| 2777 |
+
데뷔했다 1
|
| 2778 |
+
작가이거나 1
|
| 2779 |
+
평론가인 1
|
| 2780 |
+
이름이라 1
|
| 2781 |
+
한동림씨 1
|
| 2782 |
+
소설가이고 1
|
| 2783 |
+
경희사이버대 1
|
| 2784 |
+
미디어문예창작 1
|
| 2785 |
+
문학평론가다 1
|
| 2786 |
+
문예창작과 1
|
| 2787 |
+
동리문학상 1
|
| 2788 |
+
황순원문학상 1
|
| 2789 |
+
받았는데 1
|
| 2790 |
+
한승원씨 1
|
| 2791 |
+
좋아했다 1
|
| 2792 |
+
고등학교 1
|
| 2793 |
+
쓰겠다며 1
|
| 2794 |
+
선택하더니 1
|
| 2795 |
+
시달리다 1
|
| 2796 |
+
거부하게 1
|
| 2797 |
+
되어간다고 1
|
| 2798 |
+
트라우마로 1
|
| 2799 |
+
시선에서 1
|
| 2800 |
+
연작소설 1
|
| 2801 |
+
베스트셀러다 1
|
| 2802 |
+
수상했다 1
|
| 2803 |
+
대중소설가이기보다 1
|
| 2804 |
+
전위소설가다 1
|
| 2805 |
+
처음부터 1
|
| 2806 |
+
다룸으로써 1
|
| 2807 |
+
주목받지 1
|
| 2808 |
+
허덕이면서 1
|
| 2809 |
+
순간부터 1
|
| 2810 |
+
축적해온 1
|
| 2811 |
+
일어나기 1
|
| 2812 |
+
이사했던 1
|
| 2813 |
+
시발점으로 1
|
| 2814 |
+
들어왔다 1
|
| 2815 |
+
주제의식 1
|
| 2816 |
+
작품으로 1
|
| 2817 |
+
무고하게 1
|
| 2818 |
+
강연에서 1
|
| 2819 |
+
들여다보면 1
|
| 2820 |
+
맹세이자 1
|
| 2821 |
+
궁극적인 1
|
| 2822 |
+
시선으로 1
|
| 2823 |
+
풀어냈다 1
|
| 2824 |
+
문학상인 1
|
| 2825 |
+
움베르토 1
|
| 2826 |
+
처음이었다 1
|
| 2827 |
+
의료진들 1
|
| 2828 |
+
않았는데 1
|
| 2829 |
+
보건복지위원회 1
|
| 2830 |
+
징계위원회 1
|
| 2831 |
+
상태이며 1
|
| 2832 |
+
인사위원회 1
|
| 2833 |
+
국민권익위원회 1
|
| 2834 |
+
조치이다 1
|
| 2835 |
+
특혜이며 1
|
| 2836 |
+
것이므로 1
|
| 2837 |
+
대상이라고 1
|
| 2838 |
+
처리했다 1
|
| 2839 |
+
서울대병원행 1
|
| 2840 |
+
수술하면 1
|
| 2841 |
+
문의하자 1
|
| 2842 |
+
수술받기 1
|
| 2843 |
+
의학적으로 1
|
| 2844 |
+
출동하도록 1
|
| 2845 |
+
명확하게 1
|
| 2846 |
+
재정비해야 1
|
| 2847 |
+
심장마비로 1
|
| 2848 |
+
복귀했고 1
|
| 2849 |
+
선발에서 1
|
| 2850 |
+
지명됐다 1
|
| 2851 |
+
내비쳤기 1
|
| 2852 |
+
현재까지 1
|
| 2853 |
+
서머리그 1
|
| 2854 |
+
정도라면 1
|
| 2855 |
+
미네소타 1
|
| 2856 |
+
팀버울브스 1
|
| 2857 |
+
맞대결에선 1
|
| 2858 |
+
역사에서 1
|
| 2859 |
+
기록됐다 1
|
| 2860 |
+
외면했다 1
|
| 2861 |
+
전문매체 1
|
| 2862 |
+
드래프트 1
|
| 2863 |
+
되어있지 1
|
| 2864 |
+
레이커스에선 1
|
| 2865 |
+
혹평했다 1
|
| 2866 |
+
선배이자 1
|
| 2867 |
+
브로니라면 1
|
| 2868 |
+
해달라고 1
|
| 2869 |
+
한국문화재보존과학회 1
|
| 2870 |
+
총판매소 1
|
| 2871 |
+
인문학술원 1
|
| 2872 |
+
객원교수 1
|
| 2873 |
+
자유교양학부 1
|
| 2874 |
+
반도체생산설비 1
|
| 2875 |
+
웨이퍼마스터 1
|
| 2876 |
+
대표이기 1
|
| 2877 |
+
소프트웨어 1
|
| 2878 |
+
비교했다 1
|
| 2879 |
+
겹쳐보면 1
|
| 2880 |
+
즈려밟고 1
|
| 2881 |
+
구절에서 1
|
| 2882 |
+
조판해서 1
|
| 2883 |
+
현상이라 1
|
| 2884 |
+
활판인쇄 1
|
| 2885 |
+
한쪽으로 1
|
| 2886 |
+
인쇄된다 1
|
| 2887 |
+
평압식으로 1
|
| 2888 |
+
미루어봤 1
|
| 2889 |
+
진달래꽃 1
|
| 2890 |
+
학계에서 1
|
| 2891 |
+
초간본으로 1
|
| 2892 |
+
첨예하게 1
|
| 2893 |
+
문학서지 1
|
| 2894 |
+
발견했다며 1
|
| 2895 |
+
같습니다 1
|
| 2896 |
+
동참해주길 1
|
| 2897 |
+
몬트리올 1
|
| 2898 |
+
인권단체 1
|
| 2899 |
+
개인사정으로 1
|
| 2900 |
+
화상연결로 1
|
| 2901 |
+
강제북송 1
|
| 2902 |
+
증언했다 1
|
| 2903 |
+
국제활동팀 1
|
| 2904 |
+
소속으로 1
|
| 2905 |
+
이야기했다 1
|
| 2906 |
+
놀라워했다고 1
|
| 2907 |
+
중국에서 1
|
| 2908 |
+
북송시킨 1
|
| 2909 |
+
사과하고 1
|
| 2910 |
+
밝혔다고 1
|
| 2911 |
+
익숙하지 1
|
| 2912 |
+
가르쳐주고 1
|
| 2913 |
+
김일혁씨 1
|
| 2914 |
+
탈북했다 1
|
| 2915 |
+
유엔본부 1
|
| 2916 |
+
안전보장이사회 1
|
| 2917 |
+
비판하기 1
|
| 2918 |
+
지속하도록 1
|
| 2919 |
+
한보이스 1
|
| 2920 |
+
규탄하고 1
|
| 2921 |
+
공동성명 1
|
| 2922 |
+
상원의원 1
|
| 2923 |
+
실현된다면 1
|
| 2924 |
+
영구적으로 1
|
| 2925 |
+
선언했다 1
|
| 2926 |
+
조선인민군 1
|
| 2927 |
+
끊어버리고 1
|
| 2928 |
+
방어축성물로 1
|
| 2929 |
+
요새화하 1
|
| 2930 |
+
전화통지문 1
|
| 2931 |
+
군사훈련 1
|
| 2932 |
+
핵전략자산 1
|
| 2933 |
+
열거하며 1
|
| 2934 |
+
이어오고 1
|
| 2935 |
+
물리적으로 1
|
| 2936 |
+
보여주기 1
|
| 2937 |
+
합동참모본부 1
|
| 2938 |
+
현상변경 1
|
| 2939 |
+
좌시하지 1
|
| 2940 |
+
사라지고 1
|
| 2941 |
+
공고해지면서 1
|
| 2942 |
+
구축하기 1
|
| 2943 |
+
활성화될 1
|
| 2944 |
+
대응하기 1
|
| 2945 |
+
집중한다 1
|
| 2946 |
+
발표하며 1
|
| 2947 |
+
제시했다 1
|
| 2948 |
+
저장하고 1
|
| 2949 |
+
이동시키 1
|
| 2950 |
+
전체에서 1
|
| 2951 |
+
판매하고 1
|
| 2952 |
+
확장하기로 1
|
| 2953 |
+
주력인데 1
|
| 2954 |
+
미드니켈 1
|
| 2955 |
+
중저가형 1
|
| 2956 |
+
식당에게 1
|
| 2957 |
+
수준까지 1
|
| 2958 |
+
완화하겠다 1
|
| 2959 |
+
통제하자 1
|
| 2960 |
+
배달업계 1
|
| 2961 |
+
유력하게 1
|
| 2962 |
+
영세업체일수록 1
|
| 2963 |
+
낮춰준다 1
|
| 2964 |
+
구체적인 1
|
| 2965 |
+
확정되지 1
|
| 2966 |
+
않았으나 1
|
| 2967 |
+
수수료율까지 1
|
| 2968 |
+
고려하고 1
|
| 2969 |
+
문제의식하 1
|
| 2970 |
+
출범했다 1
|
| 2971 |
+
좁혀지지 1
|
| 2972 |
+
규율해야 1
|
| 2973 |
+
소극적인 1
|
| 2974 |
+
강력하게 1
|
| 2975 |
+
제재해야 1
|
| 2976 |
+
취지였다 1
|
| 2977 |
+
상한제란 1
|
| 2978 |
+
지역에선 1
|
| 2979 |
+
적용하고 1
|
| 2980 |
+
도입한다 1
|
| 2981 |
+
신호였다 1
|
| 2982 |
+
전방위적 1
|
| 2983 |
+
독과점적 1
|
| 2984 |
+
식당으로 1
|
| 2985 |
+
이듬해엔 1
|
| 2986 |
+
정률제로 1
|
| 2987 |
+
전환했다 1
|
| 2988 |
+
반박한다 1
|
| 2989 |
+
우버이츠 1
|
| 2990 |
+
저스트잇 1
|
| 2991 |
+
치킨이나 1
|
| 2992 |
+
한정됐던 1
|
| 2993 |
+
다양해졌다 1
|
| 2994 |
+
넓어졌다 1
|
| 2995 |
+
과점하면서 1
|
| 2996 |
+
증가시킨 1
|
| 2997 |
+
진단한다 1
|
| 2998 |
+
감당하지 1
|
| 2999 |
+
부담해서 1
|
| 3000 |
+
발의했지 1
|
| 3001 |
+
무산됐다 1
|
| 3002 |
+
파견검사 1
|
| 3003 |
+
후보자추천위 1
|
| 3004 |
+
구성에서 1
|
| 3005 |
+
상설특검법상 1
|
| 3006 |
+
구성된다 1
|
| 3007 |
+
추천하게 1
|
| 3008 |
+
삼부토건 1
|
| 3009 |
+
도이치모터스 1
|
| 3010 |
+
주가조작 1
|
| 3011 |
+
빠졌는데 1
|
| 3012 |
+
병행하겠다 1
|
| 3013 |
+
해석됐다 1
|
| 3014 |
+
형태인데 1
|
| 3015 |
+
결합될지 1
|
| 3016 |
+
결정된다 1
|
| 3017 |
+
분석하면 1
|
| 3018 |
+
결합하면 1
|
| 3019 |
+
개발이나 1
|
| 3020 |
+
사용된다 1
|
| 3021 |
+
수석연구원 1
|
| 3022 |
+
분석한다 1
|
| 3023 |
+
불과했다 1
|
| 3024 |
+
예측했다 1
|
| 3025 |
+
데이비드 1
|
| 3026 |
+
워싱턴대 1
|
| 3027 |
+
개발했고 1
|
| 3028 |
+
나노소재 1
|
| 3029 |
+
생명과학부 1
|
| 3030 |
+
로제타폴드 1
|
| 3031 |
+
주도하며 1
|
| 3032 |
+
연구단계 1
|
| 3033 |
+
해결하겠다 1
|
| 3034 |
+
화학물질 1
|
| 3035 |
+
먹어치우 1
|
| 3036 |
+
발생하지 1
|
| 3037 |
+
메탄가스 1
|
| 3038 |
+
화학비료 1
|
| 3039 |
+
농식품부 1
|
| 3040 |
+
계획하고 1
|
| 3041 |
+
기여하고 1
|
| 3042 |
+
무선으로 1
|
| 3043 |
+
로봇청소기인 1
|
| 3044 |
+
빨아들인 1
|
| 3045 |
+
걸러내고 1
|
| 3046 |
+
면적이나 1
|
| 3047 |
+
유용하다 1
|
| 3048 |
+
고용노동부 1
|
| 3049 |
+
소셜벤처경연대회 1
|
| 3050 |
+
최우수상 1
|
| 3051 |
+
해양수산부 1
|
| 3052 |
+
인정받았다 1
|
| 3053 |
+
경찰인재개발원 1
|
| 3054 |
+
서투르게 1
|
| 3055 |
+
들려왔다 1
|
| 3056 |
+
읽으면서 1
|
| 3057 |
+
고쳐줬다 1
|
| 3058 |
+
소화하고 1
|
| 3059 |
+
활성화하면서 1
|
| 3060 |
+
만들어달라고 1
|
| 3061 |
+
요청했고 1
|
| 3062 |
+
이수한다 1
|
| 3063 |
+
안팎이다 1
|
| 3064 |
+
투입하고 1
|
| 3065 |
+
범죄자들 1
|
| 3066 |
+
일어난다 1
|
| 3067 |
+
베트남으로 1
|
| 3068 |
+
도주했다 1
|
| 3069 |
+
송환됐다 1
|
| 3070 |
+
도피했다고 1
|
| 3071 |
+
수강생들 1
|
| 3072 |
+
한국인들 1
|
| 3073 |
+
다낭경찰서 1
|
| 3074 |
+
공안이라고 1
|
| 3075 |
+
무서워하 1
|
| 3076 |
+
한국어로 1
|
| 3077 |
+
친밀감이라 1
|
| 3078 |
+
신청하게 1
|
| 3079 |
+
좋아하고 1
|
| 3080 |
+
방탄소년단 1
|
| 3081 |
+
담당자인 1
|
| 3082 |
+
단계에서 1
|
| 3083 |
+
습득력들 1
|
| 3084 |
+
현지에서 1
|
| 3085 |
+
극단적으로 1
|
| 3086 |
+
기상학적 1
|
| 3087 |
+
당겨졌다 1
|
| 3088 |
+
늦어졌다 1
|
| 3089 |
+
기상학적으로 1
|
| 3090 |
+
여름이고 1
|
| 3091 |
+
빼앗기고 1
|
| 3092 |
+
길어지면서 1
|
| 3093 |
+
올라가고 1
|
| 3094 |
+
길어지기 1
|
| 3095 |
+
독해지기 1
|
| 3096 |
+
상승으로 1
|
| 3097 |
+
오전부터 1
|
| 3098 |
+
치솟았던 1
|
| 3099 |
+
원인으로 1
|
| 3100 |
+
등장으로 1
|
| 3101 |
+
색깔이기 1
|
| 3102 |
+
역할까지 1
|
| 3103 |
+
맡아가며 1
|
| 3104 |
+
지휘했다 1
|
| 3105 |
+
부위원장 1
|
| 3106 |
+
연출하고 1
|
| 3107 |
+
한국예술종합학교 1
|
| 3108 |
+
개막작인 1
|
| 3109 |
+
재미있게 1
|
| 3110 |
+
작년까지 1
|
| 3111 |
+
내우외환 1
|
| 3112 |
+
진행됐나 1
|
| 3113 |
+
프로그래머 1
|
| 3114 |
+
부국제밖 1
|
| 3115 |
+
공석이다 1
|
| 3116 |
+
비현실적 1
|
| 3117 |
+
시작해서 1
|
| 3118 |
+
지나치다 1
|
| 3119 |
+
영화제인 1
|
| 3120 |
+
외면하느냐 1
|
| 3121 |
+
자본이라서 1
|
| 3122 |
+
쏟아졌을까 1
|
| 3123 |
+
성사됐다 1
|
| 3124 |
+
옥외광고물법 1
|
| 3125 |
+
구청에서 1
|
| 3126 |
+
받아오면 1
|
| 3127 |
+
영화제라 1
|
| 3128 |
+
가능했던 1
|
| 3129 |
+
계약이기 1
|
| 3130 |
+
내년대로 1
|
| 3131 |
+
전국체전 1
|
| 3132 |
+
옮기기로 1
|
| 3133 |
+
재미없으면 1
|
| 3134 |
+
관객에게 1
|
| 3135 |
+
외면당한다 1
|
| 3136 |
+
떠나가게 1
|
{data → assets/resources}/vocabulary.csv
RENAMED
|
File without changes
|
blindtest/__init__.py
DELETED
|
@@ -1,5 +0,0 @@
|
|
| 1 |
-
"""Feedback module — single-output Good/Not Bad/Critical rating, Supabase-backed."""
|
| 2 |
-
|
| 3 |
-
from .ui import build_feedback_tab
|
| 4 |
-
|
| 5 |
-
__all__ = ["build_feedback_tab"]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
blindtest/db.py
DELETED
|
@@ -1,218 +0,0 @@
|
|
| 1 |
-
"""Supabase REST client (via httpx) for blind-test storage.
|
| 2 |
-
|
| 3 |
-
We call PostgREST endpoints directly to avoid pulling the full `supabase`
|
| 4 |
-
Python SDK (which drags `realtime` → `websockets>=13`, conflicting with
|
| 5 |
-
gradio-client 1.3's `websockets<13` pin).
|
| 6 |
-
|
| 7 |
-
Env vars:
|
| 8 |
-
SUPABASE_URL — project URL (e.g. https://xxx.supabase.co)
|
| 9 |
-
SUPABASE_KEY — anon or service_role key
|
| 10 |
-
|
| 11 |
-
If either is missing, all writes become no-ops.
|
| 12 |
-
"""
|
| 13 |
-
|
| 14 |
-
from __future__ import annotations
|
| 15 |
-
|
| 16 |
-
import os
|
| 17 |
-
from dataclasses import dataclass
|
| 18 |
-
from typing import Any
|
| 19 |
-
|
| 20 |
-
import httpx
|
| 21 |
-
|
| 22 |
-
_URL = os.getenv("SUPABASE_URL", "").strip().rstrip("/")
|
| 23 |
-
_KEY = os.getenv("SUPABASE_KEY", "").strip()
|
| 24 |
-
|
| 25 |
-
_last_error: str | None = None
|
| 26 |
-
|
| 27 |
-
print(
|
| 28 |
-
f"[blindtest.db] httpx-rest"
|
| 29 |
-
f" | SUPABASE_URL={'set' if _URL else 'MISSING'}"
|
| 30 |
-
f" | SUPABASE_KEY={'set' if _KEY else 'MISSING'}"
|
| 31 |
-
)
|
| 32 |
-
|
| 33 |
-
|
| 34 |
-
def is_configured() -> bool:
|
| 35 |
-
return bool(_URL and _KEY)
|
| 36 |
-
|
| 37 |
-
|
| 38 |
-
def last_error() -> str | None:
|
| 39 |
-
return _last_error
|
| 40 |
-
|
| 41 |
-
|
| 42 |
-
def _record_error(where: str, exc: Exception) -> None:
|
| 43 |
-
global _last_error
|
| 44 |
-
_last_error = f"{where}: {exc}"
|
| 45 |
-
print(f"[blindtest.db] {_last_error}")
|
| 46 |
-
|
| 47 |
-
|
| 48 |
-
def _headers(prefer_return: bool = True) -> dict[str, str]:
|
| 49 |
-
h = {
|
| 50 |
-
"apikey": _KEY,
|
| 51 |
-
"Authorization": f"Bearer {_KEY}",
|
| 52 |
-
"Content-Type": "application/json",
|
| 53 |
-
}
|
| 54 |
-
if prefer_return:
|
| 55 |
-
h["Prefer"] = "return=representation"
|
| 56 |
-
return h
|
| 57 |
-
|
| 58 |
-
|
| 59 |
-
def _post(table: str, row: dict) -> list[dict]:
|
| 60 |
-
url = f"{_URL}/rest/v1/{table}"
|
| 61 |
-
with httpx.Client(timeout=10.0) as c:
|
| 62 |
-
resp = c.post(url, headers=_headers(True), json=row)
|
| 63 |
-
if resp.status_code >= 300:
|
| 64 |
-
raise RuntimeError(f"{resp.status_code} {resp.text}")
|
| 65 |
-
return resp.json() if resp.content else []
|
| 66 |
-
|
| 67 |
-
|
| 68 |
-
def _get(table: str, params: dict[str, str] | None = None) -> list[dict]:
|
| 69 |
-
url = f"{_URL}/rest/v1/{table}"
|
| 70 |
-
with httpx.Client(timeout=10.0) as c:
|
| 71 |
-
resp = c.get(url, headers=_headers(False), params=params or {})
|
| 72 |
-
if resp.status_code >= 300:
|
| 73 |
-
raise RuntimeError(f"{resp.status_code} {resp.text}")
|
| 74 |
-
return resp.json() if resp.content else []
|
| 75 |
-
|
| 76 |
-
|
| 77 |
-
@dataclass
|
| 78 |
-
class RunRecord:
|
| 79 |
-
run_id: int | None
|
| 80 |
-
pipeline_key: str
|
| 81 |
-
output: str
|
| 82 |
-
processing_time_s: float
|
| 83 |
-
|
| 84 |
-
|
| 85 |
-
@dataclass
|
| 86 |
-
class TaskRecord:
|
| 87 |
-
task_id: int | None
|
| 88 |
-
article_id: int | None
|
| 89 |
-
slot_a_run: RunRecord
|
| 90 |
-
slot_b_run: RunRecord
|
| 91 |
-
|
| 92 |
-
|
| 93 |
-
def save_article(source_text: str) -> int | None:
|
| 94 |
-
if not is_configured():
|
| 95 |
-
return None
|
| 96 |
-
try:
|
| 97 |
-
data = _post("articles", {"source_text": source_text})
|
| 98 |
-
return data[0]["id"] if data else None
|
| 99 |
-
except Exception as exc:
|
| 100 |
-
_record_error("save_article", exc)
|
| 101 |
-
return None
|
| 102 |
-
|
| 103 |
-
|
| 104 |
-
def save_pipeline_run(
|
| 105 |
-
article_id: int | None,
|
| 106 |
-
pipeline_key: str,
|
| 107 |
-
prompt_key: str,
|
| 108 |
-
model: str,
|
| 109 |
-
output: str,
|
| 110 |
-
processing_time_s: float,
|
| 111 |
-
) -> int | None:
|
| 112 |
-
if not is_configured() or article_id is None:
|
| 113 |
-
return None
|
| 114 |
-
try:
|
| 115 |
-
data = _post(
|
| 116 |
-
"pipeline_runs",
|
| 117 |
-
{
|
| 118 |
-
"article_id": article_id,
|
| 119 |
-
"pipeline_key": pipeline_key,
|
| 120 |
-
"prompt_key": prompt_key,
|
| 121 |
-
"model": model,
|
| 122 |
-
"output": output,
|
| 123 |
-
"processing_time_s": processing_time_s,
|
| 124 |
-
},
|
| 125 |
-
)
|
| 126 |
-
return data[0]["id"] if data else None
|
| 127 |
-
except Exception as exc:
|
| 128 |
-
_record_error("save_pipeline_run", exc)
|
| 129 |
-
return None
|
| 130 |
-
|
| 131 |
-
|
| 132 |
-
def save_task(
|
| 133 |
-
article_id: int | None,
|
| 134 |
-
run_a_id: int | None,
|
| 135 |
-
run_b_id: int | None,
|
| 136 |
-
) -> int | None:
|
| 137 |
-
if not is_configured() or article_id is None:
|
| 138 |
-
return None
|
| 139 |
-
try:
|
| 140 |
-
data = _post(
|
| 141 |
-
"tasks",
|
| 142 |
-
{"article_id": article_id, "run_a_id": run_a_id, "run_b_id": run_b_id},
|
| 143 |
-
)
|
| 144 |
-
return data[0]["id"] if data else None
|
| 145 |
-
except Exception as exc:
|
| 146 |
-
_record_error("save_task", exc)
|
| 147 |
-
return None
|
| 148 |
-
|
| 149 |
-
|
| 150 |
-
def save_rating(pipeline_run_id: int | None, rating: str, comment: str) -> bool:
|
| 151 |
-
"""Save Good / Not Bad / Critical rating for a single pipeline run."""
|
| 152 |
-
if not is_configured() or pipeline_run_id is None:
|
| 153 |
-
return False
|
| 154 |
-
try:
|
| 155 |
-
_post(
|
| 156 |
-
"ratings",
|
| 157 |
-
{
|
| 158 |
-
"pipeline_run_id": pipeline_run_id,
|
| 159 |
-
"rating": rating,
|
| 160 |
-
"comment": comment or None,
|
| 161 |
-
},
|
| 162 |
-
)
|
| 163 |
-
return True
|
| 164 |
-
except Exception as exc:
|
| 165 |
-
_record_error("save_rating", exc)
|
| 166 |
-
return False
|
| 167 |
-
|
| 168 |
-
|
| 169 |
-
def fetch_rating_counts() -> dict[str, int]:
|
| 170 |
-
if not is_configured():
|
| 171 |
-
return {}
|
| 172 |
-
try:
|
| 173 |
-
rows = _get("ratings", {"select": "rating"})
|
| 174 |
-
counts: dict[str, int] = {}
|
| 175 |
-
for row in rows:
|
| 176 |
-
counts[row["rating"]] = counts.get(row["rating"], 0) + 1
|
| 177 |
-
return counts
|
| 178 |
-
except Exception as exc:
|
| 179 |
-
_record_error("fetch_rating_counts", exc)
|
| 180 |
-
return {}
|
| 181 |
-
|
| 182 |
-
|
| 183 |
-
def save_vote(task_id: int | None, choice: str, comment: str) -> bool:
|
| 184 |
-
if not is_configured() or task_id is None:
|
| 185 |
-
return False
|
| 186 |
-
try:
|
| 187 |
-
_post(
|
| 188 |
-
"votes",
|
| 189 |
-
{"task_id": task_id, "choice": choice, "comment": comment or None},
|
| 190 |
-
)
|
| 191 |
-
return True
|
| 192 |
-
except Exception as exc:
|
| 193 |
-
_record_error("save_vote", exc)
|
| 194 |
-
return False
|
| 195 |
-
|
| 196 |
-
|
| 197 |
-
def fetch_summary() -> list[dict]:
|
| 198 |
-
if not is_configured():
|
| 199 |
-
return []
|
| 200 |
-
try:
|
| 201 |
-
return _get("vote_summary", {"select": "*"})
|
| 202 |
-
except Exception as exc:
|
| 203 |
-
_record_error("fetch_summary", exc)
|
| 204 |
-
return []
|
| 205 |
-
|
| 206 |
-
|
| 207 |
-
def fetch_vote_counts() -> dict[str, int]:
|
| 208 |
-
if not is_configured():
|
| 209 |
-
return {}
|
| 210 |
-
try:
|
| 211 |
-
rows = _get("votes", {"select": "choice"})
|
| 212 |
-
counts: dict[str, int] = {}
|
| 213 |
-
for row in rows:
|
| 214 |
-
counts[row["choice"]] = counts.get(row["choice"], 0) + 1
|
| 215 |
-
return counts
|
| 216 |
-
except Exception as exc:
|
| 217 |
-
_record_error("fetch_vote_counts", exc)
|
| 218 |
-
return {}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
blindtest/schema.sql
DELETED
|
@@ -1,84 +0,0 @@
|
|
| 1 |
-
-- Chosun blind test schema (Supabase / Postgres)
|
| 2 |
-
-- Run this once in your Supabase project SQL editor.
|
| 3 |
-
|
| 4 |
-
create table if not exists articles (
|
| 5 |
-
id bigserial primary key,
|
| 6 |
-
source_text text not null,
|
| 7 |
-
created_at timestamptz default now()
|
| 8 |
-
);
|
| 9 |
-
|
| 10 |
-
create table if not exists pipeline_runs (
|
| 11 |
-
id bigserial primary key,
|
| 12 |
-
article_id bigint references articles(id) on delete cascade,
|
| 13 |
-
pipeline_key text not null,
|
| 14 |
-
prompt_key text not null,
|
| 15 |
-
model text not null,
|
| 16 |
-
output text not null,
|
| 17 |
-
processing_time_s real,
|
| 18 |
-
run_at timestamptz default now()
|
| 19 |
-
);
|
| 20 |
-
|
| 21 |
-
create index if not exists pipeline_runs_article_idx on pipeline_runs (article_id);
|
| 22 |
-
|
| 23 |
-
create table if not exists tasks (
|
| 24 |
-
id bigserial primary key,
|
| 25 |
-
article_id bigint references articles(id) on delete cascade,
|
| 26 |
-
run_a_id bigint references pipeline_runs(id),
|
| 27 |
-
run_b_id bigint references pipeline_runs(id),
|
| 28 |
-
created_at timestamptz default now()
|
| 29 |
-
);
|
| 30 |
-
|
| 31 |
-
create table if not exists votes (
|
| 32 |
-
id bigserial primary key,
|
| 33 |
-
task_id bigint references tasks(id) on delete cascade,
|
| 34 |
-
choice text not null check (choice in ('A','B','tie','both_bad')),
|
| 35 |
-
comment text,
|
| 36 |
-
voted_at timestamptz default now()
|
| 37 |
-
);
|
| 38 |
-
|
| 39 |
-
create index if not exists votes_task_idx on votes (task_id);
|
| 40 |
-
|
| 41 |
-
-- Single-output rating table (current UI: Good / Not Bad / Critical).
|
| 42 |
-
create table if not exists ratings (
|
| 43 |
-
id bigserial primary key,
|
| 44 |
-
pipeline_run_id bigint references pipeline_runs(id) on delete cascade,
|
| 45 |
-
rating text not null check (rating in ('good','not_bad','critical')),
|
| 46 |
-
comment text,
|
| 47 |
-
rated_at timestamptz default now()
|
| 48 |
-
);
|
| 49 |
-
|
| 50 |
-
create index if not exists ratings_run_idx on ratings (pipeline_run_id);
|
| 51 |
-
|
| 52 |
-
-- Allow anon key (used by the Gradio app) to insert/select.
|
| 53 |
-
-- RLS is enabled by default on public tables; without policies, anon writes silently fail.
|
| 54 |
-
alter table articles enable row level security;
|
| 55 |
-
alter table pipeline_runs enable row level security;
|
| 56 |
-
alter table tasks enable row level security;
|
| 57 |
-
alter table votes enable row level security;
|
| 58 |
-
alter table ratings enable row level security;
|
| 59 |
-
|
| 60 |
-
create policy "anon insert articles" on articles for insert to anon with check (true);
|
| 61 |
-
create policy "anon select articles" on articles for select to anon using (true);
|
| 62 |
-
create policy "anon insert pipeline_runs" on pipeline_runs for insert to anon with check (true);
|
| 63 |
-
create policy "anon select pipeline_runs" on pipeline_runs for select to anon using (true);
|
| 64 |
-
create policy "anon insert tasks" on tasks for insert to anon with check (true);
|
| 65 |
-
create policy "anon select tasks" on tasks for select to anon using (true);
|
| 66 |
-
create policy "anon insert votes" on votes for insert to anon with check (true);
|
| 67 |
-
create policy "anon select votes" on votes for select to anon using (true);
|
| 68 |
-
create policy "anon insert ratings" on ratings for insert to anon with check (true);
|
| 69 |
-
create policy "anon select ratings" on ratings for select to anon using (true);
|
| 70 |
-
|
| 71 |
-
-- Aggregation view: winner is identified by pipeline_key (un-blinded).
|
| 72 |
-
create or replace view vote_summary as
|
| 73 |
-
select
|
| 74 |
-
pr_chosen.pipeline_key as winner_pipeline,
|
| 75 |
-
count(*) as wins
|
| 76 |
-
from votes v
|
| 77 |
-
join tasks t on t.id = v.task_id
|
| 78 |
-
join pipeline_runs pr_chosen on pr_chosen.id = case
|
| 79 |
-
when v.choice = 'A' then t.run_a_id
|
| 80 |
-
when v.choice = 'B' then t.run_b_id
|
| 81 |
-
else null
|
| 82 |
-
end
|
| 83 |
-
where v.choice in ('A','B')
|
| 84 |
-
group by pr_chosen.pipeline_key;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
blindtest/ui.py
DELETED
|
@@ -1,171 +0,0 @@
|
|
| 1 |
-
"""Gradio UI for single-output proofreading feedback.
|
| 2 |
-
|
| 3 |
-
Flow:
|
| 4 |
-
1. User enters source text and clicks "교정 실행".
|
| 5 |
-
2. The configured pipeline runs.
|
| 6 |
-
3. Output + diff are shown.
|
| 7 |
-
4. User picks Good / Not Bad / Critical (+ optional comment).
|
| 8 |
-
5. On submit: rating is saved to Supabase ratings table.
|
| 9 |
-
"""
|
| 10 |
-
|
| 11 |
-
from __future__ import annotations
|
| 12 |
-
|
| 13 |
-
import time
|
| 14 |
-
from typing import Any
|
| 15 |
-
|
| 16 |
-
import gradio as gr
|
| 17 |
-
from diff_utils import highlight_diff
|
| 18 |
-
from pipelines import run_pipeline
|
| 19 |
-
|
| 20 |
-
from . import db
|
| 21 |
-
|
| 22 |
-
|
| 23 |
-
PipelineConfig = tuple[str, str, str] # (pipeline_key, model, prompt_key)
|
| 24 |
-
|
| 25 |
-
|
| 26 |
-
def _format_summary(counts: dict[str, int]) -> str:
|
| 27 |
-
total = sum(counts.values())
|
| 28 |
-
if total == 0:
|
| 29 |
-
return "아직 피드백이 없습니다."
|
| 30 |
-
g = counts.get("good", 0)
|
| 31 |
-
n = counts.get("not_bad", 0)
|
| 32 |
-
c = counts.get("critical", 0)
|
| 33 |
-
return f"**총 피드백**: {total}\n\n- Good: **{g}**\n- Not Bad: **{n}**\n- Critical: **{c}**"
|
| 34 |
-
|
| 35 |
-
|
| 36 |
-
def build_feedback_tab(
|
| 37 |
-
client: Any,
|
| 38 |
-
vocabulary: list[dict],
|
| 39 |
-
pipeline_config: PipelineConfig,
|
| 40 |
-
elem_id_prefix: str = "compare",
|
| 41 |
-
) -> None:
|
| 42 |
-
"""Build the single-pipeline feedback UI. Call inside a gr.Blocks/Tab.
|
| 43 |
-
|
| 44 |
-
Args:
|
| 45 |
-
elem_id_prefix: Unique prefix for component elem_ids. Required
|
| 46 |
-
when building this UI multiple times in the same Blocks (e.g.
|
| 47 |
-
for two tabs) — Gradio errors on duplicate elem_ids.
|
| 48 |
-
"""
|
| 49 |
-
|
| 50 |
-
pipeline_key, model, prompt_key = pipeline_config
|
| 51 |
-
|
| 52 |
-
pipeline_run_id_state = gr.State(None)
|
| 53 |
-
|
| 54 |
-
input_text = gr.Textbox(
|
| 55 |
-
label="원문 입력",
|
| 56 |
-
lines=8,
|
| 57 |
-
placeholder="교정할 텍스트를 입력하세요.",
|
| 58 |
-
)
|
| 59 |
-
|
| 60 |
-
run_btn = gr.Button(
|
| 61 |
-
"교정 실행 (⌘+Enter / Ctrl+Enter)",
|
| 62 |
-
variant="primary",
|
| 63 |
-
elem_id=f"{elem_id_prefix}-run-btn",
|
| 64 |
-
)
|
| 65 |
-
|
| 66 |
-
status = gr.Markdown("")
|
| 67 |
-
|
| 68 |
-
output = gr.Textbox(label="교정 결과", lines=12, interactive=False)
|
| 69 |
-
diff_html = gr.HTML(label="원문 대비 diff")
|
| 70 |
-
|
| 71 |
-
gr.Markdown("### 피드백")
|
| 72 |
-
with gr.Row():
|
| 73 |
-
rate_good = gr.Button("👍 Good", variant="primary")
|
| 74 |
-
rate_notbad = gr.Button("🆗 Not Bad")
|
| 75 |
-
rate_critical = gr.Button("🚨 Critical", variant="stop")
|
| 76 |
-
|
| 77 |
-
comment = gr.Textbox(label="코멘트 (선택)", lines=2)
|
| 78 |
-
rating_status = gr.Markdown("")
|
| 79 |
-
summary_md = gr.Markdown("")
|
| 80 |
-
|
| 81 |
-
def _on_run(text: str):
|
| 82 |
-
if not text or not text.strip():
|
| 83 |
-
return (
|
| 84 |
-
gr.update(value="입력 텍스트가 비어있습니다."),
|
| 85 |
-
gr.update(value=""),
|
| 86 |
-
gr.update(value=""),
|
| 87 |
-
None,
|
| 88 |
-
gr.update(value=""),
|
| 89 |
-
)
|
| 90 |
-
if client is None:
|
| 91 |
-
return (
|
| 92 |
-
gr.update(value="UPSTAGE_API_KEY 미설정."),
|
| 93 |
-
gr.update(value=""),
|
| 94 |
-
gr.update(value=""),
|
| 95 |
-
None,
|
| 96 |
-
gr.update(value=""),
|
| 97 |
-
)
|
| 98 |
-
|
| 99 |
-
start = time.time()
|
| 100 |
-
try:
|
| 101 |
-
result = run_pipeline(text, pipeline_key, model, prompt_key, client, vocabulary)
|
| 102 |
-
except Exception as exc:
|
| 103 |
-
return (
|
| 104 |
-
gr.update(value=f"에러: {exc}"),
|
| 105 |
-
gr.update(value=""),
|
| 106 |
-
gr.update(value=""),
|
| 107 |
-
None,
|
| 108 |
-
gr.update(value=""),
|
| 109 |
-
)
|
| 110 |
-
|
| 111 |
-
elapsed = time.time() - start
|
| 112 |
-
out_text = result.get("output", "")
|
| 113 |
-
|
| 114 |
-
article_id = db.save_article(text)
|
| 115 |
-
run_id = db.save_pipeline_run(
|
| 116 |
-
article_id,
|
| 117 |
-
pipeline_key=pipeline_key,
|
| 118 |
-
prompt_key=prompt_key,
|
| 119 |
-
model=model,
|
| 120 |
-
output=out_text,
|
| 121 |
-
processing_time_s=float(elapsed),
|
| 122 |
-
)
|
| 123 |
-
|
| 124 |
-
return (
|
| 125 |
-
gr.update(value=f"완료 · {elapsed:.1f}s"),
|
| 126 |
-
gr.update(value=out_text),
|
| 127 |
-
gr.update(value=highlight_diff(text, out_text)),
|
| 128 |
-
run_id,
|
| 129 |
-
gr.update(value=""),
|
| 130 |
-
)
|
| 131 |
-
|
| 132 |
-
run_btn.click(
|
| 133 |
-
_on_run,
|
| 134 |
-
inputs=[input_text],
|
| 135 |
-
outputs=[status, output, diff_html, pipeline_run_id_state, rating_status],
|
| 136 |
-
)
|
| 137 |
-
|
| 138 |
-
def _make_rating_handler(rating: str):
|
| 139 |
-
def handler(run_id, comment_text):
|
| 140 |
-
saved = db.save_rating(run_id, rating, comment_text)
|
| 141 |
-
note = (
|
| 142 |
-
"✅ 피드백 저장됨"
|
| 143 |
-
if saved
|
| 144 |
-
else "⚠️ 저장되지 않았습니다 (먼저 교정 실행 후 피드백을 남겨주세요)"
|
| 145 |
-
)
|
| 146 |
-
summary = _format_summary(db.fetch_rating_counts())
|
| 147 |
-
return gr.update(value=note), gr.update(value=summary)
|
| 148 |
-
|
| 149 |
-
return handler
|
| 150 |
-
|
| 151 |
-
rate_good.click(
|
| 152 |
-
_make_rating_handler("good"),
|
| 153 |
-
inputs=[pipeline_run_id_state, comment],
|
| 154 |
-
outputs=[rating_status, summary_md],
|
| 155 |
-
)
|
| 156 |
-
rate_notbad.click(
|
| 157 |
-
_make_rating_handler("not_bad"),
|
| 158 |
-
inputs=[pipeline_run_id_state, comment],
|
| 159 |
-
outputs=[rating_status, summary_md],
|
| 160 |
-
)
|
| 161 |
-
rate_critical.click(
|
| 162 |
-
_make_rating_handler("critical"),
|
| 163 |
-
inputs=[pipeline_run_id_state, comment],
|
| 164 |
-
outputs=[rating_status, summary_md],
|
| 165 |
-
)
|
| 166 |
-
|
| 167 |
-
refresh_btn = gr.Button("집계 새로고침", size="sm")
|
| 168 |
-
refresh_btn.click(
|
| 169 |
-
lambda: gr.update(value=_format_summary(db.fetch_rating_counts())),
|
| 170 |
-
outputs=[summary_md],
|
| 171 |
-
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
data/pmi_compounds_top.tsv.gz
DELETED
|
@@ -1,3 +0,0 @@
|
|
| 1 |
-
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:476b927dd3ac9f1590eb2658c56dd8f009db4a41d94b324798e8eb184eb91621
|
| 3 |
-
size 1585788
|
|
|
|
|
|
|
|
|
|
|
|
diff_utils.py
DELETED
|
@@ -1,101 +0,0 @@
|
|
| 1 |
-
"""HTML diff highlighting utilities."""
|
| 2 |
-
|
| 3 |
-
import difflib
|
| 4 |
-
import html
|
| 5 |
-
|
| 6 |
-
# Visible markers for whitespace differences so they don't become invisible
|
| 7 |
-
# inside colored diff spans.
|
| 8 |
-
# ␣ (U+2423 OPEN BOX) for regular space
|
| 9 |
-
# ↵ (U+21B5 DOWNWARDS ARROW WITH CORNER LEFTWARDS) for newline
|
| 10 |
-
# → (U+2192 RIGHTWARDS ARROW) for tab
|
| 11 |
-
_WHITESPACE_MARKERS = {
|
| 12 |
-
" ": "␣",
|
| 13 |
-
"\t": "→",
|
| 14 |
-
"\u00a0": "␣", # non-breaking space
|
| 15 |
-
}
|
| 16 |
-
|
| 17 |
-
|
| 18 |
-
def _visualize_whitespace(escaped: str) -> str:
|
| 19 |
-
"""Replace whitespace chars with visible markers inside a diff span.
|
| 20 |
-
|
| 21 |
-
Operates on already HTML-escaped text. Newlines are handled separately
|
| 22 |
-
by the final `\n` -> `<br>` pass, but we mark them inline too so the
|
| 23 |
-
reader sees *where* a newline was inserted/removed before the <br>.
|
| 24 |
-
"""
|
| 25 |
-
parts: list[str] = []
|
| 26 |
-
for ch in escaped:
|
| 27 |
-
if ch == "\n":
|
| 28 |
-
parts.append(
|
| 29 |
-
'<span style="opacity:0.6;">↵</span>\n'
|
| 30 |
-
) # marker + real newline (for <br>)
|
| 31 |
-
elif ch in _WHITESPACE_MARKERS:
|
| 32 |
-
parts.append(f'<span style="opacity:0.6;">{_WHITESPACE_MARKERS[ch]}</span>')
|
| 33 |
-
else:
|
| 34 |
-
parts.append(ch)
|
| 35 |
-
return "".join(parts)
|
| 36 |
-
|
| 37 |
-
|
| 38 |
-
def _render_segment(escaped: str) -> str:
|
| 39 |
-
"""Render a diff segment, adding whitespace markers only when the whole
|
| 40 |
-
segment is whitespace.
|
| 41 |
-
|
| 42 |
-
Rationale: a pure-whitespace diff (e.g. a single inserted space) is
|
| 43 |
-
otherwise invisible, so we show ␣/↵/→. But when the segment already
|
| 44 |
-
contains visible text, the colored background is enough — marking the
|
| 45 |
-
incidental spaces would just add noise to word-level edits.
|
| 46 |
-
"""
|
| 47 |
-
if escaped and escaped.strip() == "":
|
| 48 |
-
return _visualize_whitespace(escaped)
|
| 49 |
-
return escaped
|
| 50 |
-
|
| 51 |
-
|
| 52 |
-
def highlight_diff(original: str, corrected: str) -> str:
|
| 53 |
-
"""Generate HTML highlighting differences between original and corrected text.
|
| 54 |
-
|
| 55 |
-
Uses character-level difflib.SequenceMatcher to produce inline HTML
|
| 56 |
-
with strikethrough for deletions and green highlights for insertions.
|
| 57 |
-
Whitespace changes are rendered with visible markers (␣ for space,
|
| 58 |
-
↵ for newline) so spacing-only edits are perceivable.
|
| 59 |
-
|
| 60 |
-
Args:
|
| 61 |
-
original: Original text.
|
| 62 |
-
corrected: Corrected text.
|
| 63 |
-
|
| 64 |
-
Returns:
|
| 65 |
-
HTML string with diff highlights. Safe against XSS.
|
| 66 |
-
"""
|
| 67 |
-
# Escape HTML entities BEFORE diffing to prevent XSS
|
| 68 |
-
original_escaped = html.escape(original)
|
| 69 |
-
corrected_escaped = html.escape(corrected)
|
| 70 |
-
|
| 71 |
-
matcher = difflib.SequenceMatcher(None, original_escaped, corrected_escaped)
|
| 72 |
-
result_parts: list[str] = []
|
| 73 |
-
|
| 74 |
-
del_style = "background:#ffecec;text-decoration:line-through;"
|
| 75 |
-
ins_style = "background:#e6ffec;"
|
| 76 |
-
|
| 77 |
-
for tag, i1, i2, j1, j2 in matcher.get_opcodes():
|
| 78 |
-
orig_seg = original_escaped[i1:i2]
|
| 79 |
-
corr_seg = corrected_escaped[j1:j2]
|
| 80 |
-
|
| 81 |
-
if tag == "equal":
|
| 82 |
-
result_parts.append(f"<span>{orig_seg}</span>")
|
| 83 |
-
elif tag == "replace":
|
| 84 |
-
result_parts.append(
|
| 85 |
-
f'<span style="{del_style}">{_render_segment(orig_seg)}</span>'
|
| 86 |
-
)
|
| 87 |
-
result_parts.append(
|
| 88 |
-
f'<span style="{ins_style}">{_render_segment(corr_seg)}</span>'
|
| 89 |
-
)
|
| 90 |
-
elif tag == "delete":
|
| 91 |
-
result_parts.append(
|
| 92 |
-
f'<span style="{del_style}">{_render_segment(orig_seg)}</span>'
|
| 93 |
-
)
|
| 94 |
-
elif tag == "insert":
|
| 95 |
-
result_parts.append(
|
| 96 |
-
f'<span style="{ins_style}">{_render_segment(corr_seg)}</span>'
|
| 97 |
-
)
|
| 98 |
-
|
| 99 |
-
result_html = "".join(result_parts)
|
| 100 |
-
# Convert real newlines (outside diff spans or inside equal spans) to <br>
|
| 101 |
-
return result_html.replace("\n", "<br>")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
pipelines.py
DELETED
|
@@ -1,1416 +0,0 @@
|
|
| 1 |
-
"""Pipeline definitions and execution engine for Chosun proofreading comparator."""
|
| 2 |
-
|
| 3 |
-
import json
|
| 4 |
-
import logging
|
| 5 |
-
import os
|
| 6 |
-
import random
|
| 7 |
-
import re
|
| 8 |
-
import time
|
| 9 |
-
from concurrent.futures import ThreadPoolExecutor
|
| 10 |
-
from pathlib import Path
|
| 11 |
-
|
| 12 |
-
import httpx
|
| 13 |
-
from openai import OpenAI
|
| 14 |
-
|
| 15 |
-
logger = logging.getLogger(__name__)
|
| 16 |
-
from postprocess import (
|
| 17 |
-
apply_comma_removal,
|
| 18 |
-
apply_correction_filter,
|
| 19 |
-
apply_currency_compact,
|
| 20 |
-
apply_paragraph_dedupe,
|
| 21 |
-
apply_pronoun_postprocess,
|
| 22 |
-
apply_unit_unicode,
|
| 23 |
-
apply_vocabulary,
|
| 24 |
-
)
|
| 25 |
-
from text_splitter import split_into_bulks
|
| 26 |
-
|
| 27 |
-
# v24 helpers (self-consistency, tool-calling judge, apply_judge_decisions).
|
| 28 |
-
# Imported lazily inside step handlers to avoid initialising the PMI lookup
|
| 29 |
-
# at module import — the demo only loads the corpus when v24 is selected.
|
| 30 |
-
import pipelines_v24 as _v24
|
| 31 |
-
|
| 32 |
-
# --- Pipeline definitions ---
|
| 33 |
-
|
| 34 |
-
PIPELINES: dict[str, list[dict]] = {
|
| 35 |
-
"251231_default": [
|
| 36 |
-
{"name": "vocab_sub_pre", "type": "rule", "rule": "vocabulary"},
|
| 37 |
-
{
|
| 38 |
-
"name": "ft_correction",
|
| 39 |
-
"type": "llm",
|
| 40 |
-
"model": "ft:solar-news-correction",
|
| 41 |
-
"max_tokens": 2000,
|
| 42 |
-
},
|
| 43 |
-
{
|
| 44 |
-
"name": "basic_correction",
|
| 45 |
-
"type": "llm",
|
| 46 |
-
"prompt_key": "step1",
|
| 47 |
-
"max_tokens": 4000,
|
| 48 |
-
},
|
| 49 |
-
{
|
| 50 |
-
"name": "context_correction",
|
| 51 |
-
"type": "llm",
|
| 52 |
-
"prompt_key": "step2",
|
| 53 |
-
"max_tokens": 4000,
|
| 54 |
-
},
|
| 55 |
-
{
|
| 56 |
-
"name": "style_correction",
|
| 57 |
-
"type": "llm",
|
| 58 |
-
"prompt_key": "step3",
|
| 59 |
-
"max_tokens": 4000,
|
| 60 |
-
},
|
| 61 |
-
{"name": "vocabulary_reapply", "type": "rule", "rule": "vocabulary"},
|
| 62 |
-
{"name": "post_process", "type": "rule", "rule": "post_process"},
|
| 63 |
-
],
|
| 64 |
-
"260430_pro3_v1": [
|
| 65 |
-
{"name": "vocab_sub_pre", "type": "rule", "rule": "vocabulary"},
|
| 66 |
-
{
|
| 67 |
-
"name": "ft_correction",
|
| 68 |
-
"type": "llm",
|
| 69 |
-
"model": "ft:solar-news-correction",
|
| 70 |
-
"max_tokens": 4000,
|
| 71 |
-
},
|
| 72 |
-
{
|
| 73 |
-
"name": "basic_correction",
|
| 74 |
-
"type": "llm",
|
| 75 |
-
"prompt_key": "step1",
|
| 76 |
-
"reasoning_effort": "low",
|
| 77 |
-
"max_tokens": 4000,
|
| 78 |
-
},
|
| 79 |
-
{"name": "vocabulary_sub", "type": "rule", "rule": "vocabulary"},
|
| 80 |
-
{
|
| 81 |
-
"name": "context_correction",
|
| 82 |
-
"type": "llm",
|
| 83 |
-
"prompt_key": "step2",
|
| 84 |
-
"reasoning_effort": "low",
|
| 85 |
-
"max_tokens": 4000,
|
| 86 |
-
},
|
| 87 |
-
{"name": "vocabulary_reapply", "type": "rule", "rule": "vocabulary"},
|
| 88 |
-
{
|
| 89 |
-
"name": "correction_filter",
|
| 90 |
-
"type": "rule",
|
| 91 |
-
"rule": "correction_filter",
|
| 92 |
-
"config": {"max_char_diff": 2},
|
| 93 |
-
},
|
| 94 |
-
{"name": "post_process", "type": "rule", "rule": "post_process"},
|
| 95 |
-
],
|
| 96 |
-
# E1-B — A 프롬프트를 Pro3 1-pass로 이식. Total TP 96 (Baseline 94 초과).
|
| 97 |
-
# Use with prompt_name='dev_260430_e1b'.
|
| 98 |
-
"260430_e1b": [
|
| 99 |
-
{"name": "vocab_sub_pre", "type": "rule", "rule": "vocabulary"},
|
| 100 |
-
{
|
| 101 |
-
"name": "ft_correction",
|
| 102 |
-
"type": "llm",
|
| 103 |
-
"model": "ft:solar-news-correction",
|
| 104 |
-
"max_tokens": 2000,
|
| 105 |
-
},
|
| 106 |
-
{
|
| 107 |
-
"name": "basic_correction",
|
| 108 |
-
"type": "llm",
|
| 109 |
-
"prompt_key": "step1",
|
| 110 |
-
"reasoning_effort": "low",
|
| 111 |
-
"max_tokens": 4000,
|
| 112 |
-
},
|
| 113 |
-
{"name": "vocabulary_reapply", "type": "rule", "rule": "vocabulary"},
|
| 114 |
-
{"name": "post_process", "type": "rule", "rule": "post_process"},
|
| 115 |
-
],
|
| 116 |
-
# F3C — miss-focus few-shot (균형형). L1 TP 84 / Crit TP 10.
|
| 117 |
-
# Use with prompt_name='dev_260430_f3c'.
|
| 118 |
-
"260430_f3c": [
|
| 119 |
-
{"name": "vocab_sub_pre", "type": "rule", "rule": "vocabulary"},
|
| 120 |
-
{
|
| 121 |
-
"name": "ft_correction",
|
| 122 |
-
"type": "llm",
|
| 123 |
-
"model": "ft:solar-news-correction",
|
| 124 |
-
"max_tokens": 2000,
|
| 125 |
-
},
|
| 126 |
-
{
|
| 127 |
-
"name": "basic_correction",
|
| 128 |
-
"type": "llm",
|
| 129 |
-
"prompt_key": "step1",
|
| 130 |
-
"reasoning_effort": "low",
|
| 131 |
-
"max_tokens": 4000,
|
| 132 |
-
},
|
| 133 |
-
{"name": "vocabulary_reapply", "type": "rule", "rule": "vocabulary"},
|
| 134 |
-
{"name": "post_process", "type": "rule", "rule": "post_process"},
|
| 135 |
-
],
|
| 136 |
-
# E8 — Pro3 2-pass (basic+context 통합 / style). 과교정 최소.
|
| 137 |
-
# Use with prompt_name='dev_260430_e8'.
|
| 138 |
-
"260430_e8": [
|
| 139 |
-
{"name": "vocab_sub_pre", "type": "rule", "rule": "vocabulary"},
|
| 140 |
-
{
|
| 141 |
-
"name": "ft_correction",
|
| 142 |
-
"type": "llm",
|
| 143 |
-
"model": "ft:solar-news-correction",
|
| 144 |
-
"max_tokens": 2000,
|
| 145 |
-
},
|
| 146 |
-
{
|
| 147 |
-
"name": "basic_and_context_correction",
|
| 148 |
-
"type": "llm",
|
| 149 |
-
"prompt_key": "step1",
|
| 150 |
-
"reasoning_effort": "low",
|
| 151 |
-
"max_tokens": 4000,
|
| 152 |
-
},
|
| 153 |
-
{
|
| 154 |
-
"name": "style_correction",
|
| 155 |
-
"type": "llm",
|
| 156 |
-
"prompt_key": "step2",
|
| 157 |
-
"reasoning_effort": "low",
|
| 158 |
-
"max_tokens": 4000,
|
| 159 |
-
},
|
| 160 |
-
{"name": "vocabulary_reapply", "type": "rule", "rule": "vocabulary"},
|
| 161 |
-
{"name": "post_process", "type": "rule", "rule": "post_process"},
|
| 162 |
-
],
|
| 163 |
-
# v16 — 260408 승자. cv1 + "실운영 피드백 기반 최종 점검 리마인더" 8개 섹션 (153줄).
|
| 164 |
-
# paragraph F1 45.57 / ci_v1 F1 19.32 (전 버전 중 최고). Use with prompt_name='dev_260408_v16'.
|
| 165 |
-
"260408_v16": [
|
| 166 |
-
{"name": "vocab_sub_pre", "type": "rule", "rule": "vocabulary"},
|
| 167 |
-
{
|
| 168 |
-
"name": "ft_correction",
|
| 169 |
-
"type": "llm",
|
| 170 |
-
"model": "ft:solar-news-correction",
|
| 171 |
-
"max_tokens": 2000,
|
| 172 |
-
},
|
| 173 |
-
{
|
| 174 |
-
"name": "basic_correction",
|
| 175 |
-
"type": "llm",
|
| 176 |
-
"prompt_key": "step1",
|
| 177 |
-
"reasoning_effort": "low",
|
| 178 |
-
"max_tokens": 4000,
|
| 179 |
-
},
|
| 180 |
-
{"name": "vocabulary_reapply", "type": "rule", "rule": "vocabulary"},
|
| 181 |
-
# Safety net: LLM 이 확률적으로 뱉는 문단 에코/재시작 중복을 제거한다.
|
| 182 |
-
# input 에 이미 있던 반복은 보존 (output_count > input_count 일 때만 drop).
|
| 183 |
-
{"name": "paragraph_dedupe", "type": "rule", "rule": "paragraph_dedupe"},
|
| 184 |
-
{"name": "post_process", "type": "rule", "rule": "post_process"},
|
| 185 |
-
],
|
| 186 |
-
# v24 — solar-pro3 + FT + self-consistency × 2 + tool-calling judge.
|
| 187 |
-
# 5 LLM calls/doc (FT + basic×2 + judge round1 + judge round2). Tool-calling
|
| 188 |
-
# judge consults a top-K PMI table loaded from data/pmi_compounds_top.tsv.gz
|
| 189 |
-
# (no external corpus required). Use with prompt_name='dev_260429_v24'.
|
| 190 |
-
# paragraph F1 47.04 (vs solar-pro2 prod_251231 mean 44.86, +2.18).
|
| 191 |
-
"260429_v24": [
|
| 192 |
-
{"name": "vocab_sub_pre", "type": "rule", "rule": "vocabulary"},
|
| 193 |
-
{
|
| 194 |
-
"name": "ft_correction",
|
| 195 |
-
"type": "llm",
|
| 196 |
-
"model": "ft:solar-news-correction",
|
| 197 |
-
"max_tokens": 4000,
|
| 198 |
-
},
|
| 199 |
-
{
|
| 200 |
-
"name": "basic_correction",
|
| 201 |
-
"type": "llm_self_consistency",
|
| 202 |
-
"prompt_key": "step1",
|
| 203 |
-
"reasoning_effort": "low",
|
| 204 |
-
"max_tokens": 4000,
|
| 205 |
-
"repeat": 2,
|
| 206 |
-
"repeat_temperatures": [0.0, 0.2],
|
| 207 |
-
"intersection_threshold": 2,
|
| 208 |
-
"response_format": {
|
| 209 |
-
"type": "json_schema",
|
| 210 |
-
"json_schema": {
|
| 211 |
-
"name": "proofreading_result",
|
| 212 |
-
"strict": True,
|
| 213 |
-
"schema": {
|
| 214 |
-
"type": "object",
|
| 215 |
-
"properties": {
|
| 216 |
-
"corrections": {
|
| 217 |
-
"type": "array",
|
| 218 |
-
"items": {
|
| 219 |
-
"type": "object",
|
| 220 |
-
"properties": {
|
| 221 |
-
"original": {"type": "string"},
|
| 222 |
-
"corrected": {"type": "string"},
|
| 223 |
-
"type": {"type": "string"},
|
| 224 |
-
"reason": {"type": "string"},
|
| 225 |
-
},
|
| 226 |
-
"required": ["original", "corrected", "type", "reason"],
|
| 227 |
-
"additionalProperties": False,
|
| 228 |
-
},
|
| 229 |
-
},
|
| 230 |
-
"output": {"type": "string"},
|
| 231 |
-
"explanation": {"type": "string"},
|
| 232 |
-
},
|
| 233 |
-
"required": ["corrections", "output", "explanation"],
|
| 234 |
-
"additionalProperties": False,
|
| 235 |
-
},
|
| 236 |
-
},
|
| 237 |
-
},
|
| 238 |
-
},
|
| 239 |
-
{
|
| 240 |
-
"name": "tool_calling_judge",
|
| 241 |
-
"type": "tool_calling_judge",
|
| 242 |
-
"prompt_key": "judge",
|
| 243 |
-
"reasoning_effort": "low",
|
| 244 |
-
"max_tokens": 4000,
|
| 245 |
-
"max_tool_iterations": 4,
|
| 246 |
-
"corrections_step": "basic_correction",
|
| 247 |
-
"pmi_lookup": "data/pmi_compounds_top.tsv.gz",
|
| 248 |
-
},
|
| 249 |
-
{
|
| 250 |
-
"name": "apply_judge_decisions",
|
| 251 |
-
"type": "rule",
|
| 252 |
-
"rule": "apply_judge_decisions",
|
| 253 |
-
"config": {
|
| 254 |
-
"judge_step": "tool_calling_judge",
|
| 255 |
-
"corrections_step": "basic_correction",
|
| 256 |
-
},
|
| 257 |
-
},
|
| 258 |
-
{"name": "vocabulary_reapply", "type": "rule", "rule": "vocabulary"},
|
| 259 |
-
{"name": "paragraph_dedupe", "type": "rule", "rule": "paragraph_dedupe"},
|
| 260 |
-
{"name": "post_process", "type": "rule", "rule": "post_process"},
|
| 261 |
-
],
|
| 262 |
-
# E1 taxonomy pipeline — sequential specialists, grammar last @ RE=medium
|
| 263 |
-
# Use with prompt_name='dev_260513_taxonomy_v6'.
|
| 264 |
-
"260513_taxonomy_e1": [
|
| 265 |
-
{"name": "vocab_sub_pre", "type": "rule", "rule": "vocabulary"},
|
| 266 |
-
{
|
| 267 |
-
"name": "ft_correction",
|
| 268 |
-
"type": "llm",
|
| 269 |
-
"model": "ft:solar-news-correction",
|
| 270 |
-
"prompt_key": "proofread",
|
| 271 |
-
"max_tokens": 4000,
|
| 272 |
-
},
|
| 273 |
-
{
|
| 274 |
-
"name": "spelling_vocab",
|
| 275 |
-
"type": "specialist",
|
| 276 |
-
"prompt_key": "spelling_vocab",
|
| 277 |
-
"reasoning_effort": "low",
|
| 278 |
-
"max_tokens": 3000,
|
| 279 |
-
},
|
| 280 |
-
{
|
| 281 |
-
"name": "punct_number",
|
| 282 |
-
"type": "specialist",
|
| 283 |
-
"prompt_key": "punct_number",
|
| 284 |
-
"reasoning_effort": "low",
|
| 285 |
-
"max_tokens": 3000,
|
| 286 |
-
},
|
| 287 |
-
{
|
| 288 |
-
"name": "context_dedup",
|
| 289 |
-
"type": "specialist",
|
| 290 |
-
"prompt_key": "context_dedup",
|
| 291 |
-
"reasoning_effort": "low",
|
| 292 |
-
"max_tokens": 3000,
|
| 293 |
-
},
|
| 294 |
-
{
|
| 295 |
-
"name": "grammar_particle",
|
| 296 |
-
"type": "specialist",
|
| 297 |
-
"prompt_key": "grammar_particle",
|
| 298 |
-
"reasoning_effort": "medium",
|
| 299 |
-
"max_tokens": 4000,
|
| 300 |
-
},
|
| 301 |
-
{"name": "post_process", "type": "rule", "rule": "post_process"},
|
| 302 |
-
],
|
| 303 |
-
}
|
| 304 |
-
|
| 305 |
-
# JSON schema enforcing specialist `corrections[]` output shape.
|
| 306 |
-
_CORRECTIONS_SCHEMA: dict = {
|
| 307 |
-
"type": "json_schema",
|
| 308 |
-
"json_schema": {
|
| 309 |
-
"name": "corrections_only",
|
| 310 |
-
"strict": True,
|
| 311 |
-
"schema": {
|
| 312 |
-
"type": "object",
|
| 313 |
-
"properties": {
|
| 314 |
-
"corrections": {
|
| 315 |
-
"type": "array",
|
| 316 |
-
"items": {
|
| 317 |
-
"type": "object",
|
| 318 |
-
"properties": {
|
| 319 |
-
"original": {"type": "string"},
|
| 320 |
-
"corrected": {"type": "string"},
|
| 321 |
-
"type": {"type": "string"},
|
| 322 |
-
"reason": {"type": "string"},
|
| 323 |
-
},
|
| 324 |
-
"required": ["original", "corrected", "type", "reason"],
|
| 325 |
-
"additionalProperties": False,
|
| 326 |
-
},
|
| 327 |
-
}
|
| 328 |
-
},
|
| 329 |
-
"required": ["corrections"],
|
| 330 |
-
"additionalProperties": False,
|
| 331 |
-
},
|
| 332 |
-
},
|
| 333 |
-
}
|
| 334 |
-
|
| 335 |
-
# FT model uses a fixed system prompt (behavior baked into fine-tuning)
|
| 336 |
-
FT_SYSTEM_PROMPT = "입력된 문서에 대한 교열 결과를 생성해 주세요."
|
| 337 |
-
|
| 338 |
-
# Matches reference pipeline (refer/chosun-projects/proofread/inference/run.py).
|
| 339 |
-
# \n는 step1+ 호출 직전에 이 토큰으로 치환되고, 프롬프트의 "개수/위치 100% 보존"
|
| 340 |
-
# 규칙이 문단 복제/에코를 구조적으로 억제한다. 응답 파싱 후 다시 \n으로 복원.
|
| 341 |
-
PARAGRAPH_SEP = "<paragraph_separator>"
|
| 342 |
-
|
| 343 |
-
# Default pronoun replacements for post_process rule
|
| 344 |
-
DEFAULT_PRONOUN_REPLACEMENTS: dict[str, str] = {
|
| 345 |
-
"이재명 대표": "이재명 대통령",
|
| 346 |
-
}
|
| 347 |
-
|
| 348 |
-
# --- Prompt loading ---
|
| 349 |
-
|
| 350 |
-
|
| 351 |
-
def list_prompts() -> list[str]:
|
| 352 |
-
"""List available prompt versions from prompts/ directory.
|
| 353 |
-
|
| 354 |
-
Returns:
|
| 355 |
-
Sorted list of prompt directory names.
|
| 356 |
-
"""
|
| 357 |
-
prompts_dir = Path(__file__).parent / "prompts"
|
| 358 |
-
if not prompts_dir.exists():
|
| 359 |
-
return []
|
| 360 |
-
return sorted(
|
| 361 |
-
d.name for d in prompts_dir.iterdir() if d.is_dir() and not d.name.startswith(".")
|
| 362 |
-
)
|
| 363 |
-
|
| 364 |
-
|
| 365 |
-
def load_prompts(prompt_name: str) -> dict[str, str]:
|
| 366 |
-
"""Load prompt texts from prompts/{prompt_name}/*.txt files.
|
| 367 |
-
|
| 368 |
-
Args:
|
| 369 |
-
prompt_name: Name of the prompt directory.
|
| 370 |
-
|
| 371 |
-
Returns:
|
| 372 |
-
Dict mapping step key (e.g. 'step1') to prompt text.
|
| 373 |
-
"""
|
| 374 |
-
prompt_dir = Path(__file__).parent / "prompts" / prompt_name
|
| 375 |
-
prompts: dict[str, str] = {}
|
| 376 |
-
if not prompt_dir.exists():
|
| 377 |
-
return prompts
|
| 378 |
-
for txt_file in prompt_dir.glob("*.txt"):
|
| 379 |
-
content = txt_file.read_text(encoding="utf-8").strip()
|
| 380 |
-
if content and not content.startswith("# TODO"):
|
| 381 |
-
prompts[txt_file.stem] = content
|
| 382 |
-
return prompts
|
| 383 |
-
|
| 384 |
-
|
| 385 |
-
# --- JSON extraction from LLM responses ---
|
| 386 |
-
|
| 387 |
-
|
| 388 |
-
def extract_json_output(content: str, fallback: str | None = None) -> str:
|
| 389 |
-
"""Extract 'output' field from LLM JSON response.
|
| 390 |
-
|
| 391 |
-
Tries multiple strategies in order:
|
| 392 |
-
1. Raw JSON parse
|
| 393 |
-
2. Markdown code block extraction
|
| 394 |
-
3. Find last "output" key with brace matching
|
| 395 |
-
4. Truncated JSON recovery
|
| 396 |
-
|
| 397 |
-
Args:
|
| 398 |
-
content: Raw LLM response text.
|
| 399 |
-
fallback: If all JSON-extraction strategies fail, return this string
|
| 400 |
-
instead of raw content. Matches reference pipeline semantics
|
| 401 |
-
(run.py parse_step_output) — LLM hallucination / non-JSON blobs
|
| 402 |
-
are replaced with the pre-step input so they don't propagate.
|
| 403 |
-
|
| 404 |
-
Returns:
|
| 405 |
-
Extracted output text as a string. Non-string JSON values
|
| 406 |
-
(null, numbers, arrays) are coerced to str to prevent downstream
|
| 407 |
-
"expected string or buffer" errors from re.sub() calls.
|
| 408 |
-
"""
|
| 409 |
-
|
| 410 |
-
def _as_str(value: object) -> str:
|
| 411 |
-
"""Coerce extracted output to a string.
|
| 412 |
-
|
| 413 |
-
LLMs occasionally return {"output": null}, {"output": 123}, or a
|
| 414 |
-
list/dict despite being prompted for text. Returning the raw value
|
| 415 |
-
would crash re.sub() later with "expected string or buffer".
|
| 416 |
-
"""
|
| 417 |
-
if value is None:
|
| 418 |
-
return ""
|
| 419 |
-
if isinstance(value, str):
|
| 420 |
-
return value
|
| 421 |
-
# Lists/dicts/numbers — serialize back to JSON so no information is lost,
|
| 422 |
-
# but the downstream text-processing pipeline receives a real string.
|
| 423 |
-
try:
|
| 424 |
-
return json.dumps(value, ensure_ascii=False)
|
| 425 |
-
except (TypeError, ValueError):
|
| 426 |
-
return str(value)
|
| 427 |
-
|
| 428 |
-
if not content:
|
| 429 |
-
return ""
|
| 430 |
-
if not isinstance(content, str):
|
| 431 |
-
return _as_str(content)
|
| 432 |
-
|
| 433 |
-
# Strategy 1: entire response is valid JSON
|
| 434 |
-
try:
|
| 435 |
-
data = json.loads(content)
|
| 436 |
-
if isinstance(data, dict) and "output" in data:
|
| 437 |
-
return _as_str(data["output"])
|
| 438 |
-
except (json.JSONDecodeError, AttributeError):
|
| 439 |
-
pass
|
| 440 |
-
|
| 441 |
-
# Strategy 2: markdown code blocks (last block first)
|
| 442 |
-
json_blocks = list(re.finditer(r"```(?:json)?\s*(.*?)```", content, re.DOTALL))
|
| 443 |
-
for match in reversed(json_blocks):
|
| 444 |
-
try:
|
| 445 |
-
data = json.loads(match.group(1).strip())
|
| 446 |
-
if isinstance(data, dict) and "output" in data:
|
| 447 |
-
return _as_str(data["output"])
|
| 448 |
-
except (json.JSONDecodeError, AttributeError):
|
| 449 |
-
continue
|
| 450 |
-
|
| 451 |
-
# Strategy 3: find last "output" key with brace matching
|
| 452 |
-
last_idx = content.rfind('"output"')
|
| 453 |
-
if last_idx != -1:
|
| 454 |
-
brace_start = content.rfind("{", 0, last_idx)
|
| 455 |
-
if brace_start != -1:
|
| 456 |
-
depth = 0
|
| 457 |
-
for i in range(brace_start, len(content)):
|
| 458 |
-
if content[i] == "{":
|
| 459 |
-
depth += 1
|
| 460 |
-
elif content[i] == "}":
|
| 461 |
-
depth -= 1
|
| 462 |
-
if depth == 0:
|
| 463 |
-
try:
|
| 464 |
-
data = json.loads(content[brace_start : i + 1])
|
| 465 |
-
if isinstance(data, dict) and "output" in data:
|
| 466 |
-
return _as_str(data["output"])
|
| 467 |
-
except (json.JSONDecodeError, AttributeError):
|
| 468 |
-
pass
|
| 469 |
-
break
|
| 470 |
-
|
| 471 |
-
# Strategy 4: truncated JSON — extract "output" value before "explanation"
|
| 472 |
-
output_key_match = re.search(r'"output"\s*:\s*"', content)
|
| 473 |
-
if output_key_match:
|
| 474 |
-
start = output_key_match.end()
|
| 475 |
-
remaining = content[start:]
|
| 476 |
-
boundary = re.search(r'"\s*,\s*"explanation"\s*:', remaining)
|
| 477 |
-
if boundary:
|
| 478 |
-
raw_value = remaining[: boundary.start()]
|
| 479 |
-
try:
|
| 480 |
-
return _as_str(json.loads('"' + raw_value + '"'))
|
| 481 |
-
except (json.JSONDecodeError, ValueError):
|
| 482 |
-
return raw_value
|
| 483 |
-
|
| 484 |
-
# Fallback: if no JSON `output` field recovered, return caller-supplied
|
| 485 |
-
# fallback (typically the original input text) to prevent hallucinated
|
| 486 |
-
# non-JSON blobs from propagating. This matches reference parse_step_output.
|
| 487 |
-
if fallback is not None:
|
| 488 |
-
return fallback
|
| 489 |
-
return content
|
| 490 |
-
|
| 491 |
-
|
| 492 |
-
# --- LLM call ---
|
| 493 |
-
|
| 494 |
-
|
| 495 |
-
def call_llm(
|
| 496 |
-
client: OpenAI,
|
| 497 |
-
system_prompt: str,
|
| 498 |
-
user_content: str,
|
| 499 |
-
model: str = "solar-pro2",
|
| 500 |
-
# Upstage 서빙 스택이 temperature=0 에서 greedy 디코딩 경로로 들어가는데,
|
| 501 |
-
# 이 경로가 특정 입력(truncated article 등)에서 학습 데이터의 "재시작" 패턴을
|
| 502 |
-
# 재현성 높게 재현하는 바이어스가 관찰됨. 0.0001 로 sampling 경로로 살짝
|
| 503 |
-
# 밀어 넣어 bias 를 흔들되, argmax 확률 비중은 거의 그대로 유지.
|
| 504 |
-
temperature: float = 0.0001,
|
| 505 |
-
reasoning_effort: str | None = None,
|
| 506 |
-
max_tokens: int | None = None,
|
| 507 |
-
response_format: dict | None = None,
|
| 508 |
-
) -> str:
|
| 509 |
-
"""Call Upstage API via OpenAI SDK.
|
| 510 |
-
|
| 511 |
-
Args:
|
| 512 |
-
client: OpenAI client configured for Upstage API.
|
| 513 |
-
system_prompt: System prompt text.
|
| 514 |
-
user_content: User message content.
|
| 515 |
-
model: Model name.
|
| 516 |
-
temperature: Sampling temperature.
|
| 517 |
-
reasoning_effort: Optional reasoning effort level (for solar-pro3).
|
| 518 |
-
max_tokens: Optional max_tokens limit. Required for FT models.
|
| 519 |
-
|
| 520 |
-
Returns:
|
| 521 |
-
LLM response text.
|
| 522 |
-
"""
|
| 523 |
-
# FT models require max_tokens — default to a safe value if the caller omits it.
|
| 524 |
-
if max_tokens is None and model.startswith("ft:"):
|
| 525 |
-
max_tokens = 4000
|
| 526 |
-
|
| 527 |
-
messages: list[dict] = []
|
| 528 |
-
if system_prompt:
|
| 529 |
-
messages.append({"role": "system", "content": system_prompt})
|
| 530 |
-
messages.append({"role": "user", "content": user_content})
|
| 531 |
-
|
| 532 |
-
kwargs: dict = {
|
| 533 |
-
"model": model,
|
| 534 |
-
"messages": messages,
|
| 535 |
-
"stream": False,
|
| 536 |
-
"temperature": temperature,
|
| 537 |
-
}
|
| 538 |
-
if max_tokens is not None:
|
| 539 |
-
kwargs["max_tokens"] = max_tokens
|
| 540 |
-
if reasoning_effort:
|
| 541 |
-
kwargs["extra_body"] = {"reasoning_effort": reasoning_effort}
|
| 542 |
-
if response_format is not None:
|
| 543 |
-
kwargs["response_format"] = response_format
|
| 544 |
-
|
| 545 |
-
# Skip the openai SDK entirely — post directly with httpx. The SDK's
|
| 546 |
-
# pydantic ChatCompletion validator raises AssertionError / IndexError
|
| 547 |
-
# inside create() when Upstage returns a response body that doesn't
|
| 548 |
-
# strictly match OpenAI spec, and .with_raw_response didn't avoid every
|
| 549 |
-
# such path. Direct HTTP POST + manual JSON parsing is schema-agnostic.
|
| 550 |
-
return _post_chat_completion(client, kwargs)
|
| 551 |
-
|
| 552 |
-
|
| 553 |
-
# Shared httpx client — reuse connections across pipeline steps.
|
| 554 |
-
_HTTPX_TIMEOUT = httpx.Timeout(60.0, connect=10.0)
|
| 555 |
-
_HTTPX_CLIENT: httpx.Client | None = None
|
| 556 |
-
|
| 557 |
-
|
| 558 |
-
def _get_httpx_client() -> httpx.Client:
|
| 559 |
-
global _HTTPX_CLIENT
|
| 560 |
-
if _HTTPX_CLIENT is None:
|
| 561 |
-
_HTTPX_CLIENT = httpx.Client(timeout=_HTTPX_TIMEOUT)
|
| 562 |
-
return _HTTPX_CLIENT
|
| 563 |
-
|
| 564 |
-
|
| 565 |
-
def _post_chat_completion(client: OpenAI, payload: dict) -> str:
|
| 566 |
-
"""POST /chat/completions directly via httpx, bypassing the openai SDK.
|
| 567 |
-
|
| 568 |
-
Extracts base_url and api_key from the provided `OpenAI` client so the
|
| 569 |
-
caller doesn't need to thread those around. Applies retry/backoff on
|
| 570 |
-
transient failures (network errors, 5xx, 429). Returns the plain text
|
| 571 |
-
of `choices[0].message.content` (or `""` if the response has no usable
|
| 572 |
-
content — no exception escapes this function except for truly
|
| 573 |
-
non-retryable 4xx responses).
|
| 574 |
-
"""
|
| 575 |
-
# Flatten extra_body so it becomes top-level JSON fields.
|
| 576 |
-
body = dict(payload)
|
| 577 |
-
extra = body.pop("extra_body", None) or {}
|
| 578 |
-
body.update(extra)
|
| 579 |
-
|
| 580 |
-
base_url = str(getattr(client, "base_url", "")).rstrip("/")
|
| 581 |
-
api_key = getattr(client, "api_key", None) or os.getenv("UPSTAGE_API_KEY", "")
|
| 582 |
-
url = f"{base_url}/chat/completions"
|
| 583 |
-
headers = {
|
| 584 |
-
"Authorization": f"Bearer {api_key}",
|
| 585 |
-
"Content-Type": "application/json",
|
| 586 |
-
}
|
| 587 |
-
|
| 588 |
-
http = _get_httpx_client()
|
| 589 |
-
|
| 590 |
-
max_attempts = 3
|
| 591 |
-
base_delay = 1.0
|
| 592 |
-
last_exc: Exception | None = None
|
| 593 |
-
for attempt in range(1, max_attempts + 1):
|
| 594 |
-
try:
|
| 595 |
-
response = http.post(url, headers=headers, json=body)
|
| 596 |
-
except (httpx.TimeoutException, httpx.NetworkError) as e:
|
| 597 |
-
last_exc = e
|
| 598 |
-
if attempt == max_attempts:
|
| 599 |
-
break
|
| 600 |
-
time.sleep(base_delay * (2 ** (attempt - 1)) + random.uniform(0, 0.5))
|
| 601 |
-
continue
|
| 602 |
-
|
| 603 |
-
# Transient HTTP statuses retry.
|
| 604 |
-
if response.status_code in (408, 429, 500, 502, 503, 504):
|
| 605 |
-
last_exc = RuntimeError(
|
| 606 |
-
f"HTTP {response.status_code} from Upstage: "
|
| 607 |
-
f"{response.text[:200]}"
|
| 608 |
-
)
|
| 609 |
-
if attempt == max_attempts:
|
| 610 |
-
break
|
| 611 |
-
time.sleep(base_delay * (2 ** (attempt - 1)) + random.uniform(0, 0.5))
|
| 612 |
-
continue
|
| 613 |
-
|
| 614 |
-
# Non-retryable errors surface their body for debugging.
|
| 615 |
-
if response.status_code >= 400:
|
| 616 |
-
logger.error(
|
| 617 |
-
"Upstage HTTP %d: %s",
|
| 618 |
-
response.status_code,
|
| 619 |
-
response.text[:500],
|
| 620 |
-
)
|
| 621 |
-
return ""
|
| 622 |
-
|
| 623 |
-
# 2xx — parse body and pull content.
|
| 624 |
-
try:
|
| 625 |
-
data = response.json()
|
| 626 |
-
except (json.JSONDecodeError, ValueError):
|
| 627 |
-
logger.warning("Upstage 2xx response was not valid JSON")
|
| 628 |
-
return ""
|
| 629 |
-
return _extract_content_from_body(data)
|
| 630 |
-
|
| 631 |
-
if last_exc is not None:
|
| 632 |
-
logger.warning("Upstage request failed after %d attempts: %s", max_attempts, last_exc)
|
| 633 |
-
return ""
|
| 634 |
-
|
| 635 |
-
|
| 636 |
-
def _extract_content_from_body(body: object) -> str:
|
| 637 |
-
"""Pull choices[0].message.content out of a (possibly loose) response body."""
|
| 638 |
-
if not isinstance(body, dict):
|
| 639 |
-
return ""
|
| 640 |
-
choices = body.get("choices") or []
|
| 641 |
-
if not isinstance(choices, list) or not choices:
|
| 642 |
-
return ""
|
| 643 |
-
first = choices[0]
|
| 644 |
-
if not isinstance(first, dict):
|
| 645 |
-
return ""
|
| 646 |
-
message = first.get("message") or {}
|
| 647 |
-
content = message.get("content") if isinstance(message, dict) else None
|
| 648 |
-
if not content:
|
| 649 |
-
content = first.get("text")
|
| 650 |
-
return content if isinstance(content, str) else ""
|
| 651 |
-
|
| 652 |
-
|
| 653 |
-
# --- Specialist (taxonomy) helpers ---
|
| 654 |
-
|
| 655 |
-
|
| 656 |
-
def extract_corrections(content: str) -> list[dict]:
|
| 657 |
-
"""Extract `corrections[]` array from a specialist JSON response.
|
| 658 |
-
|
| 659 |
-
Tries progressively more lenient strategies:
|
| 660 |
-
1. Raw JSON parse of the whole response.
|
| 661 |
-
2. JSON inside markdown code blocks (``` ... ```).
|
| 662 |
-
3. Last `{ ... "corrections": [...] ... }` block with brace matching.
|
| 663 |
-
4. Salvage: regex-scan for individual correction objects when the
|
| 664 |
-
surrounding JSON is truncated or malformed (e.g. the model hit
|
| 665 |
-
max_tokens mid-array).
|
| 666 |
-
|
| 667 |
-
A correction is accepted if it has at least `original` and `corrected`
|
| 668 |
-
string fields; `type`/`reason` are treated as optional metadata that
|
| 669 |
-
downstream `apply_specialist_corrections` ignores anyway.
|
| 670 |
-
"""
|
| 671 |
-
if not content:
|
| 672 |
-
return []
|
| 673 |
-
|
| 674 |
-
def _valid(corrections_list: list) -> list[dict]:
|
| 675 |
-
return [
|
| 676 |
-
c
|
| 677 |
-
for c in corrections_list
|
| 678 |
-
if isinstance(c, dict)
|
| 679 |
-
and isinstance(c.get("original"), str)
|
| 680 |
-
and isinstance(c.get("corrected"), str)
|
| 681 |
-
]
|
| 682 |
-
|
| 683 |
-
# Strategy 1: raw JSON
|
| 684 |
-
try:
|
| 685 |
-
data = json.loads(content)
|
| 686 |
-
if isinstance(data, dict) and isinstance(data.get("corrections"), list):
|
| 687 |
-
return _valid(data["corrections"])
|
| 688 |
-
except (json.JSONDecodeError, AttributeError):
|
| 689 |
-
pass
|
| 690 |
-
|
| 691 |
-
# Strategy 2: markdown code blocks (last-first wins)
|
| 692 |
-
for match in reversed(list(re.finditer(r"```(?:json)?\s*(.*?)```", content, re.DOTALL))):
|
| 693 |
-
try:
|
| 694 |
-
data = json.loads(match.group(1).strip())
|
| 695 |
-
if isinstance(data, dict) and isinstance(data.get("corrections"), list):
|
| 696 |
-
return _valid(data["corrections"])
|
| 697 |
-
except (json.JSONDecodeError, AttributeError):
|
| 698 |
-
continue
|
| 699 |
-
|
| 700 |
-
# Strategy 3: scan for enclosing {...} around last "corrections" key
|
| 701 |
-
last_idx = content.rfind('"corrections"')
|
| 702 |
-
if last_idx != -1:
|
| 703 |
-
brace_start = content.rfind("{", 0, last_idx)
|
| 704 |
-
if brace_start != -1:
|
| 705 |
-
depth = 0
|
| 706 |
-
for i in range(brace_start, len(content)):
|
| 707 |
-
if content[i] == "{":
|
| 708 |
-
depth += 1
|
| 709 |
-
elif content[i] == "}":
|
| 710 |
-
depth -= 1
|
| 711 |
-
if depth == 0:
|
| 712 |
-
try:
|
| 713 |
-
data = json.loads(content[brace_start : i + 1])
|
| 714 |
-
if isinstance(data, dict) and isinstance(
|
| 715 |
-
data.get("corrections"), list
|
| 716 |
-
):
|
| 717 |
-
return _valid(data["corrections"])
|
| 718 |
-
except (json.JSONDecodeError, AttributeError):
|
| 719 |
-
pass
|
| 720 |
-
break
|
| 721 |
-
|
| 722 |
-
# Strategy 4: salvage individual correction objects when the outer JSON is
|
| 723 |
-
# broken or truncated. Scan the entire content for `{ ... "original": ...
|
| 724 |
-
# "corrected": ... }` substrings and parse each in isolation. This recovers
|
| 725 |
-
# partial arrays when the model hit max_tokens mid-output.
|
| 726 |
-
salvaged: list[dict] = []
|
| 727 |
-
seen: set[tuple[str, str]] = set()
|
| 728 |
-
# Find each opening brace that begins a correction object (has "original"
|
| 729 |
-
# somewhere before the matching close). Use a conservative brace-matcher
|
| 730 |
-
# to extract each candidate.
|
| 731 |
-
cursor = 0
|
| 732 |
-
while True:
|
| 733 |
-
brace_start = content.find("{", cursor)
|
| 734 |
-
if brace_start == -1:
|
| 735 |
-
break
|
| 736 |
-
depth = 0
|
| 737 |
-
end = -1
|
| 738 |
-
for i in range(brace_start, len(content)):
|
| 739 |
-
ch = content[i]
|
| 740 |
-
if ch == "{":
|
| 741 |
-
depth += 1
|
| 742 |
-
elif ch == "}":
|
| 743 |
-
depth -= 1
|
| 744 |
-
if depth == 0:
|
| 745 |
-
end = i
|
| 746 |
-
break
|
| 747 |
-
if end == -1:
|
| 748 |
-
# Unclosed brace — nothing more to salvage.
|
| 749 |
-
break
|
| 750 |
-
candidate = content[brace_start : end + 1]
|
| 751 |
-
cursor = end + 1
|
| 752 |
-
# Quick filter: must look like a correction object.
|
| 753 |
-
if '"original"' not in candidate or '"corrected"' not in candidate:
|
| 754 |
-
continue
|
| 755 |
-
try:
|
| 756 |
-
obj = json.loads(candidate)
|
| 757 |
-
except (json.JSONDecodeError, AttributeError):
|
| 758 |
-
continue
|
| 759 |
-
if not isinstance(obj, dict):
|
| 760 |
-
continue
|
| 761 |
-
orig = obj.get("original")
|
| 762 |
-
corrected = obj.get("corrected")
|
| 763 |
-
if not isinstance(orig, str) or not isinstance(corrected, str):
|
| 764 |
-
continue
|
| 765 |
-
key = (orig, corrected)
|
| 766 |
-
if key in seen:
|
| 767 |
-
continue
|
| 768 |
-
seen.add(key)
|
| 769 |
-
salvaged.append(
|
| 770 |
-
{
|
| 771 |
-
"original": orig,
|
| 772 |
-
"corrected": corrected,
|
| 773 |
-
"type": obj.get("type", ""),
|
| 774 |
-
"reason": obj.get("reason", ""),
|
| 775 |
-
}
|
| 776 |
-
)
|
| 777 |
-
if salvaged:
|
| 778 |
-
logger.info(
|
| 779 |
-
"extract_corrections: salvaged %d correction(s) from malformed JSON",
|
| 780 |
-
len(salvaged),
|
| 781 |
-
)
|
| 782 |
-
return salvaged
|
| 783 |
-
|
| 784 |
-
|
| 785 |
-
def apply_specialist_corrections(text: str, corrections: list[dict]) -> str:
|
| 786 |
-
"""Apply a single specialist's corrections to ``text``.
|
| 787 |
-
|
| 788 |
-
Mirrors ``TaxonomySpecialistPipeline._apply_inline_corrections``:
|
| 789 |
-
dedupe on (original, corrected), longer-first non-overlapping edit
|
| 790 |
-
planning, right-to-left apply so indices stay stable.
|
| 791 |
-
"""
|
| 792 |
-
clean: list[dict[str, str]] = []
|
| 793 |
-
seen: set[tuple[str, str]] = set()
|
| 794 |
-
for c in corrections or []:
|
| 795 |
-
if not isinstance(c, dict):
|
| 796 |
-
continue
|
| 797 |
-
orig = c.get("original")
|
| 798 |
-
corrected = c.get("corrected")
|
| 799 |
-
if not isinstance(orig, str) or not isinstance(corrected, str):
|
| 800 |
-
continue
|
| 801 |
-
if not orig or orig == corrected:
|
| 802 |
-
continue
|
| 803 |
-
key = (orig, corrected)
|
| 804 |
-
if key in seen:
|
| 805 |
-
continue
|
| 806 |
-
seen.add(key)
|
| 807 |
-
clean.append({"original": orig, "corrected": corrected})
|
| 808 |
-
|
| 809 |
-
clean.sort(key=lambda c: -len(c["original"]))
|
| 810 |
-
|
| 811 |
-
edits: list[tuple[int, int, str]] = []
|
| 812 |
-
for c in clean:
|
| 813 |
-
idx = text.find(c["original"])
|
| 814 |
-
while idx != -1:
|
| 815 |
-
end = idx + len(c["original"])
|
| 816 |
-
if not any(not (end <= s or idx >= e) for s, e, _ in edits):
|
| 817 |
-
edits.append((idx, end, c["corrected"]))
|
| 818 |
-
break
|
| 819 |
-
idx = text.find(c["original"], idx + 1)
|
| 820 |
-
|
| 821 |
-
edits.sort(key=lambda e: e[0], reverse=True)
|
| 822 |
-
for start, end, corrected in edits:
|
| 823 |
-
text = text[:start] + corrected + text[end:]
|
| 824 |
-
return text
|
| 825 |
-
|
| 826 |
-
|
| 827 |
-
def run_specialist(
|
| 828 |
-
step: dict,
|
| 829 |
-
text: str,
|
| 830 |
-
original_text: str,
|
| 831 |
-
prompts: dict[str, str],
|
| 832 |
-
model: str,
|
| 833 |
-
client: OpenAI,
|
| 834 |
-
) -> str:
|
| 835 |
-
"""Run one taxonomy specialist: call LLM, parse corrections, apply."""
|
| 836 |
-
prompt_key = step.get("prompt_key", step["name"])
|
| 837 |
-
system_prompt = prompts.get(prompt_key, "")
|
| 838 |
-
user_content = f"<원문>\n{original_text}\n</원문>\n\n<교열_초안>\n{text}\n</교열_초안>"
|
| 839 |
-
response = call_llm(
|
| 840 |
-
client=client,
|
| 841 |
-
system_prompt=system_prompt,
|
| 842 |
-
user_content=user_content,
|
| 843 |
-
model=step.get("model", model),
|
| 844 |
-
reasoning_effort=step.get("reasoning_effort"),
|
| 845 |
-
max_tokens=step.get("max_tokens"),
|
| 846 |
-
response_format=_CORRECTIONS_SCHEMA,
|
| 847 |
-
)
|
| 848 |
-
corrections = extract_corrections(response)
|
| 849 |
-
return apply_specialist_corrections(text, corrections)
|
| 850 |
-
|
| 851 |
-
|
| 852 |
-
# --- Rule application ---
|
| 853 |
-
|
| 854 |
-
|
| 855 |
-
def apply_rule(
|
| 856 |
-
step: dict,
|
| 857 |
-
text: str,
|
| 858 |
-
original_text: str,
|
| 859 |
-
vocabulary: list[dict[str, str]],
|
| 860 |
-
) -> str:
|
| 861 |
-
"""Apply a rule-based pipeline step.
|
| 862 |
-
|
| 863 |
-
Args:
|
| 864 |
-
step: Step definition dict.
|
| 865 |
-
text: Current text.
|
| 866 |
-
original_text: Original input text (for correction_filter).
|
| 867 |
-
vocabulary: Loaded vocabulary list.
|
| 868 |
-
|
| 869 |
-
Returns:
|
| 870 |
-
Processed text.
|
| 871 |
-
"""
|
| 872 |
-
rule = step.get("rule", step["name"])
|
| 873 |
-
|
| 874 |
-
if rule == "vocabulary":
|
| 875 |
-
return apply_vocabulary(text, vocabulary)
|
| 876 |
-
elif rule == "post_process":
|
| 877 |
-
text = apply_pronoun_postprocess(text, DEFAULT_PRONOUN_REPLACEMENTS)
|
| 878 |
-
text = apply_currency_compact(text)
|
| 879 |
-
text = apply_comma_removal(text)
|
| 880 |
-
text = apply_unit_unicode(text)
|
| 881 |
-
return text
|
| 882 |
-
elif rule == "correction_filter":
|
| 883 |
-
config = step.get("config", {})
|
| 884 |
-
return apply_correction_filter(
|
| 885 |
-
text,
|
| 886 |
-
original_text,
|
| 887 |
-
max_char_diff=config.get("max_char_diff", 2),
|
| 888 |
-
allow_spacing=config.get("allow_spacing", True),
|
| 889 |
-
)
|
| 890 |
-
elif rule == "paragraph_dedupe":
|
| 891 |
-
config = step.get("config", {})
|
| 892 |
-
# prefix_len 기본값은 apply_paragraph_dedupe 의 기본값(30)을 따른다.
|
| 893 |
-
# 명시적으로 config 에 지정된 경우만 override.
|
| 894 |
-
kwargs: dict = {}
|
| 895 |
-
if "min_len" in config:
|
| 896 |
-
kwargs["min_len"] = config["min_len"]
|
| 897 |
-
if "prefix_len" in config:
|
| 898 |
-
kwargs["prefix_len"] = config["prefix_len"]
|
| 899 |
-
return apply_paragraph_dedupe(text, original_text, **kwargs)
|
| 900 |
-
elif rule == "apply_judge_decisions":
|
| 901 |
-
# v24 rule. text here is the post-judge bulk text — but the judge step
|
| 902 |
-
# is a no-op on text (decisions live in pipelines_v24._JUDGE_RAW_BY_BULK
|
| 903 |
-
# keyed by bulk index). The dispatcher in run_pipeline applies this
|
| 904 |
-
# rule per-bulk by re-splitting and looking up each bulk's decisions.
|
| 905 |
-
# When called at the doc level (this path), we just return text — the
|
| 906 |
-
# actual revert happens in the per-bulk apply path inside run_pipeline.
|
| 907 |
-
return text
|
| 908 |
-
|
| 909 |
-
return text
|
| 910 |
-
|
| 911 |
-
|
| 912 |
-
# --- Bulk parallel processing ---
|
| 913 |
-
|
| 914 |
-
|
| 915 |
-
def _process_single_bulk(
|
| 916 |
-
bulk: str,
|
| 917 |
-
step: dict,
|
| 918 |
-
model: str,
|
| 919 |
-
prompts: dict[str, str],
|
| 920 |
-
client: OpenAI,
|
| 921 |
-
original_bulk: str,
|
| 922 |
-
) -> str:
|
| 923 |
-
"""Process a single text bulk through an LLM step.
|
| 924 |
-
|
| 925 |
-
Args:
|
| 926 |
-
bulk: Text bulk to process.
|
| 927 |
-
step: Step definition.
|
| 928 |
-
model: Model name to use.
|
| 929 |
-
prompts: Loaded prompt texts.
|
| 930 |
-
client: OpenAI client.
|
| 931 |
-
original_bulk: Pre-correction text **for this bulk** (not the full
|
| 932 |
-
chunk). Used as <원문> in step1 and as the leading-lookup fallback
|
| 933 |
-
in the hallucination guard. Per-bulk scoping mirrors the reference
|
| 934 |
-
pipeline (run.py: `original=step0_sep`) and prevents the model
|
| 935 |
-
from echoing adjacent paragraphs when a short bulk meets a large
|
| 936 |
-
<원문> block.
|
| 937 |
-
|
| 938 |
-
Returns:
|
| 939 |
-
Processed bulk text.
|
| 940 |
-
"""
|
| 941 |
-
step_model = step.get("model", model)
|
| 942 |
-
prompt_key = step.get("prompt_key")
|
| 943 |
-
reasoning_effort = step.get("reasoning_effort")
|
| 944 |
-
max_tokens = step.get("max_tokens")
|
| 945 |
-
is_ft_model = step_model.startswith("ft:")
|
| 946 |
-
|
| 947 |
-
if prompt_key:
|
| 948 |
-
system_prompt = prompts.get(prompt_key, "")
|
| 949 |
-
# step1+ 프롬프트는 <paragraph_separator> 기반 구조 보존 규칙을 가정한다.
|
| 950 |
-
# LLM 호출 직전에 \n을 토큰으로 치환하고 파싱 후 되돌린다.
|
| 951 |
-
if prompt_key == "step1":
|
| 952 |
-
original_sep = original_bulk.replace("\n", PARAGRAPH_SEP)
|
| 953 |
-
bulk_sep = bulk.replace("\n", PARAGRAPH_SEP)
|
| 954 |
-
user_content = (
|
| 955 |
-
f"<원문>\n{original_sep}\n</원문>\n\n"
|
| 956 |
-
f"<교열_모델_수정결과>\n{bulk_sep}\n</교열_모델_수정결과>"
|
| 957 |
-
)
|
| 958 |
-
else:
|
| 959 |
-
user_content = bulk.replace("\n", PARAGRAPH_SEP)
|
| 960 |
-
elif is_ft_model:
|
| 961 |
-
# FT models have instructions baked in — send user content only (no system prompt).
|
| 962 |
-
# Sending a system prompt causes the Upstage API to return a 500 error for this model.
|
| 963 |
-
system_prompt = ""
|
| 964 |
-
user_content = bulk
|
| 965 |
-
else:
|
| 966 |
-
system_prompt = FT_SYSTEM_PROMPT
|
| 967 |
-
user_content = bulk
|
| 968 |
-
|
| 969 |
-
response = call_llm(
|
| 970 |
-
client=client,
|
| 971 |
-
system_prompt=system_prompt,
|
| 972 |
-
user_content=user_content,
|
| 973 |
-
model=step_model,
|
| 974 |
-
reasoning_effort=reasoning_effort,
|
| 975 |
-
max_tokens=max_tokens,
|
| 976 |
-
)
|
| 977 |
-
# FT model returns raw text (no JSON). Other steps return JSON with "output" field.
|
| 978 |
-
if is_ft_model:
|
| 979 |
-
# FT duplication guard. Symptoms seen in the wild:
|
| 980 |
-
# (a) Half-half echo: model returns input twice (length ~2×).
|
| 981 |
-
# (b) Prefix echo: model returns full input verbatim then appends a
|
| 982 |
-
# partial re-correction tail (length ~1.2–1.5×).
|
| 983 |
-
# Both yield a downstream "duplicated paragraph" bug, so we trigger the
|
| 984 |
-
# guard at 1.25× and try several recovery patterns before falling back
|
| 985 |
-
# to the original input.
|
| 986 |
-
if response and len(response) >= len(bulk) * 1.25:
|
| 987 |
-
stripped = response.strip()
|
| 988 |
-
bulk_stripped = bulk.strip()
|
| 989 |
-
|
| 990 |
-
# (b) Output starts with full input verbatim → strip the appended tail.
|
| 991 |
-
if (
|
| 992 |
-
bulk_stripped
|
| 993 |
-
and stripped.startswith(bulk_stripped)
|
| 994 |
-
and len(stripped) > len(bulk_stripped) * 1.05
|
| 995 |
-
):
|
| 996 |
-
return bulk_stripped
|
| 997 |
-
|
| 998 |
-
# (a) Half-half echo.
|
| 999 |
-
first_end = len(stripped) // 2
|
| 1000 |
-
head = stripped[:first_end].rstrip()
|
| 1001 |
-
tail = stripped[first_end:].strip()
|
| 1002 |
-
if head and (head == tail or head in tail or tail in head):
|
| 1003 |
-
return head
|
| 1004 |
-
|
| 1005 |
-
# Unknown duplication pattern → safer to return the input.
|
| 1006 |
-
return bulk
|
| 1007 |
-
return response
|
| 1008 |
-
# Fallback to bulk when LLM returns non-JSON hallucination — matches
|
| 1009 |
-
# reference pipeline semantics (parse_step_output in refer/.../inference/run.py).
|
| 1010 |
-
extracted = extract_json_output(response, fallback=bulk)
|
| 1011 |
-
|
| 1012 |
-
# PARAGRAPH_SEP을 다시 \n으로 복원. 이후의 중복 가드/다운스트림 step은 모두
|
| 1013 |
-
# 평문 \n을 기대한다 (rule step들이 <paragraph_separator> 토큰을 LCS/정규식
|
| 1014 |
-
# 경로에서 처리하지 못할 수 있어 LLM boundary에서만 존재하도록 유지).
|
| 1015 |
-
if prompt_key:
|
| 1016 |
-
extracted = extracted.replace(PARAGRAPH_SEP, "\n")
|
| 1017 |
-
|
| 1018 |
-
# step1 (basic_correction) hallucination guard: the prompt feeds the LLM
|
| 1019 |
-
# both <원문> and <교열_모델_수정결과>, and occasionally the model concatenates
|
| 1020 |
-
# corrected + original (or two slight variants) into one "output" string.
|
| 1021 |
-
# Symptom: result length ≈ 2× input. Detect by locating a second occurrence
|
| 1022 |
-
# of the input's leading sentence (or original_bulk's leading sentence)
|
| 1023 |
-
# inside the extracted output — strong signal of duplication.
|
| 1024 |
-
if extracted and len(extracted) >= len(bulk) * 1.4:
|
| 1025 |
-
stripped = extracted.strip()
|
| 1026 |
-
|
| 1027 |
-
def _leading_lookup(needle_src: str) -> str | None:
|
| 1028 |
-
head = needle_src.strip()[:80]
|
| 1029 |
-
if len(head) < 30:
|
| 1030 |
-
return None
|
| 1031 |
-
second = stripped.find(head, len(head))
|
| 1032 |
-
if second > len(head):
|
| 1033 |
-
return stripped[:second].rstrip()
|
| 1034 |
-
return None
|
| 1035 |
-
|
| 1036 |
-
recovered = _leading_lookup(bulk) or _leading_lookup(original_bulk)
|
| 1037 |
-
if recovered:
|
| 1038 |
-
return recovered
|
| 1039 |
-
# No clean recovery — keep the FT-pass output rather than the bloated mess.
|
| 1040 |
-
return bulk
|
| 1041 |
-
|
| 1042 |
-
return extracted
|
| 1043 |
-
|
| 1044 |
-
|
| 1045 |
-
def _process_single_bulk_with_raw(
|
| 1046 |
-
*,
|
| 1047 |
-
bulk: str,
|
| 1048 |
-
step: dict,
|
| 1049 |
-
model: str,
|
| 1050 |
-
prompts: dict[str, str],
|
| 1051 |
-
client: OpenAI,
|
| 1052 |
-
original_bulk: str,
|
| 1053 |
-
) -> tuple[str, str]:
|
| 1054 |
-
"""Run a non-FT LLM step on one bulk and return (post_text, raw_response).
|
| 1055 |
-
|
| 1056 |
-
Used by v24's self-consistency wrapper, which needs both the extracted
|
| 1057 |
-
text AND the raw JSON (so it can intersect ``corrections`` arrays across
|
| 1058 |
-
runs). Mirrors the LLM branch of ``_process_single_bulk`` but skips the
|
| 1059 |
-
FT-specific duplication guard. The hallucination guard at ``len >= 1.4×``
|
| 1060 |
-
is preserved.
|
| 1061 |
-
|
| 1062 |
-
Returns ``("", "")`` on call failure rather than raising — the caller
|
| 1063 |
-
falls back to per-step error handling.
|
| 1064 |
-
"""
|
| 1065 |
-
step_model = step.get("model", model)
|
| 1066 |
-
prompt_key = step.get("prompt_key")
|
| 1067 |
-
reasoning_effort = step.get("reasoning_effort")
|
| 1068 |
-
max_tokens = step.get("max_tokens")
|
| 1069 |
-
response_format = step.get("response_format")
|
| 1070 |
-
temperature = step.get("temperature")
|
| 1071 |
-
|
| 1072 |
-
if prompt_key:
|
| 1073 |
-
system_prompt = prompts.get(prompt_key, "")
|
| 1074 |
-
if prompt_key == "step1":
|
| 1075 |
-
original_sep = original_bulk.replace("\n", PARAGRAPH_SEP)
|
| 1076 |
-
bulk_sep = bulk.replace("\n", PARAGRAPH_SEP)
|
| 1077 |
-
user_content = (
|
| 1078 |
-
f"<원문>\n{original_sep}\n</원문>\n\n"
|
| 1079 |
-
f"<교열_모델_수정결과>\n{bulk_sep}\n</교열_모델_수정결과>"
|
| 1080 |
-
)
|
| 1081 |
-
else:
|
| 1082 |
-
user_content = bulk.replace("\n", PARAGRAPH_SEP)
|
| 1083 |
-
else:
|
| 1084 |
-
system_prompt = FT_SYSTEM_PROMPT
|
| 1085 |
-
user_content = bulk
|
| 1086 |
-
|
| 1087 |
-
call_kwargs: dict = {
|
| 1088 |
-
"client": client,
|
| 1089 |
-
"system_prompt": system_prompt,
|
| 1090 |
-
"user_content": user_content,
|
| 1091 |
-
"model": step_model,
|
| 1092 |
-
"reasoning_effort": reasoning_effort,
|
| 1093 |
-
"max_tokens": max_tokens,
|
| 1094 |
-
"response_format": response_format,
|
| 1095 |
-
}
|
| 1096 |
-
if temperature is not None:
|
| 1097 |
-
call_kwargs["temperature"] = temperature
|
| 1098 |
-
|
| 1099 |
-
try:
|
| 1100 |
-
raw = call_llm(**{k: v for k, v in call_kwargs.items() if v is not None})
|
| 1101 |
-
except Exception as exc: # noqa: BLE001
|
| 1102 |
-
logger.warning(
|
| 1103 |
-
"[_process_single_bulk_with_raw] call_llm failed: %s", exc
|
| 1104 |
-
)
|
| 1105 |
-
return ("", "")
|
| 1106 |
-
|
| 1107 |
-
extracted = extract_json_output(raw, fallback=bulk)
|
| 1108 |
-
if prompt_key:
|
| 1109 |
-
extracted = extracted.replace(PARAGRAPH_SEP, "\n")
|
| 1110 |
-
|
| 1111 |
-
# Hallucination guard — same shape as _process_single_bulk's LLM branch.
|
| 1112 |
-
if extracted and len(extracted) >= len(bulk) * 1.4:
|
| 1113 |
-
stripped = extracted.strip()
|
| 1114 |
-
|
| 1115 |
-
def _leading_lookup(needle_src: str) -> str | None:
|
| 1116 |
-
head = needle_src.strip()[:80]
|
| 1117 |
-
if len(head) < 30:
|
| 1118 |
-
return None
|
| 1119 |
-
second = stripped.find(head, len(head))
|
| 1120 |
-
if second > len(head):
|
| 1121 |
-
return stripped[:second].rstrip()
|
| 1122 |
-
return None
|
| 1123 |
-
|
| 1124 |
-
recovered = _leading_lookup(bulk) or _leading_lookup(original_bulk)
|
| 1125 |
-
if recovered:
|
| 1126 |
-
extracted = recovered
|
| 1127 |
-
else:
|
| 1128 |
-
extracted = bulk
|
| 1129 |
-
|
| 1130 |
-
return (extracted, raw)
|
| 1131 |
-
|
| 1132 |
-
|
| 1133 |
-
def process_bulks_parallel(
|
| 1134 |
-
bulks: list[str],
|
| 1135 |
-
original_bulks: list[str],
|
| 1136 |
-
step: dict,
|
| 1137 |
-
model: str,
|
| 1138 |
-
prompts: dict[str, str],
|
| 1139 |
-
client: OpenAI,
|
| 1140 |
-
max_workers: int = 10,
|
| 1141 |
-
) -> list[str]:
|
| 1142 |
-
"""Process multiple text bulks in parallel.
|
| 1143 |
-
|
| 1144 |
-
Args:
|
| 1145 |
-
bulks: List of text bulks (current pipeline state).
|
| 1146 |
-
original_bulks: Per-bulk pre-correction text, paired 1:1 with
|
| 1147 |
-
``bulks``. Used as <원문> in step1 and as fallback anchor in
|
| 1148 |
-
the hallucination guard.
|
| 1149 |
-
step: Step definition.
|
| 1150 |
-
model: Model name.
|
| 1151 |
-
prompts: Loaded prompt texts.
|
| 1152 |
-
client: OpenAI client.
|
| 1153 |
-
max_workers: Maximum thread pool workers.
|
| 1154 |
-
|
| 1155 |
-
Returns:
|
| 1156 |
-
List of processed bulks in original order.
|
| 1157 |
-
"""
|
| 1158 |
-
if len(bulks) != len(original_bulks):
|
| 1159 |
-
raise ValueError(
|
| 1160 |
-
f"bulks/original_bulks length mismatch: {len(bulks)} vs {len(original_bulks)}"
|
| 1161 |
-
)
|
| 1162 |
-
|
| 1163 |
-
if len(bulks) <= 1:
|
| 1164 |
-
return [
|
| 1165 |
-
_process_single_bulk(bulks[0], step, model, prompts, client, original_bulks[0])
|
| 1166 |
-
]
|
| 1167 |
-
|
| 1168 |
-
with ThreadPoolExecutor(max_workers=max_workers) as executor:
|
| 1169 |
-
futures = [
|
| 1170 |
-
executor.submit(
|
| 1171 |
-
_process_single_bulk, bulk, step, model, prompts, client, orig_bulk
|
| 1172 |
-
)
|
| 1173 |
-
for bulk, orig_bulk in zip(bulks, original_bulks)
|
| 1174 |
-
]
|
| 1175 |
-
return [f.result() for f in futures]
|
| 1176 |
-
|
| 1177 |
-
|
| 1178 |
-
# --- Main pipeline execution ---
|
| 1179 |
-
|
| 1180 |
-
|
| 1181 |
-
def run_pipeline(
|
| 1182 |
-
text: str,
|
| 1183 |
-
pipeline_name: str,
|
| 1184 |
-
model: str,
|
| 1185 |
-
prompt_name: str,
|
| 1186 |
-
client: OpenAI,
|
| 1187 |
-
vocabulary: list[dict[str, str]],
|
| 1188 |
-
) -> dict:
|
| 1189 |
-
"""Execute a full pipeline on input text.
|
| 1190 |
-
|
| 1191 |
-
Args:
|
| 1192 |
-
text: Input text to process.
|
| 1193 |
-
pipeline_name: Name of the pipeline to run.
|
| 1194 |
-
model: Default model name for LLM steps.
|
| 1195 |
-
prompt_name: Prompt version directory name.
|
| 1196 |
-
client: OpenAI client.
|
| 1197 |
-
vocabulary: Loaded vocabulary list.
|
| 1198 |
-
|
| 1199 |
-
Returns:
|
| 1200 |
-
Dict with 'output' (processed text) and 'processing_time' (seconds).
|
| 1201 |
-
"""
|
| 1202 |
-
if not text or not text.strip():
|
| 1203 |
-
return {"output": text, "processing_time": 0.0}
|
| 1204 |
-
|
| 1205 |
-
steps = PIPELINES[pipeline_name]
|
| 1206 |
-
prompts = load_prompts(prompt_name)
|
| 1207 |
-
original_text = text
|
| 1208 |
-
|
| 1209 |
-
# v24 uses bulk-indexed scratch state (per-bulk corrections + judge
|
| 1210 |
-
# decisions). Reset at the start of each request so concurrent users
|
| 1211 |
-
# don't see each other's data.
|
| 1212 |
-
_v24.reset_v24_state()
|
| 1213 |
-
|
| 1214 |
-
# Locate v24's PMI table (the demo bundles a top-K subset). Activate
|
| 1215 |
-
# only if the pipeline declares one — otherwise the lookup is unused.
|
| 1216 |
-
for s in steps:
|
| 1217 |
-
pmi_path = s.get("pmi_lookup")
|
| 1218 |
-
if pmi_path:
|
| 1219 |
-
full_path = Path(__file__).parent / pmi_path
|
| 1220 |
-
try:
|
| 1221 |
-
_v24.set_active_pmi_path(full_path)
|
| 1222 |
-
except Exception as exc: # noqa: BLE001
|
| 1223 |
-
logger.warning("[v24] PMI load failed at %s: %s", full_path, exc)
|
| 1224 |
-
break
|
| 1225 |
-
|
| 1226 |
-
start_time = time.time()
|
| 1227 |
-
|
| 1228 |
-
# step1(basic_correction)의 <원문> 소스. 기존 파이프라인(run.py)에서 step1은
|
| 1229 |
-
# 같은 bulk의 post-vocab / pre-FT 텍스트(= step0)를 <원문>으로 받았다.
|
| 1230 |
-
# 여기서도 FT 직전 text를 스냅샷으로 잡아두고, step1 실행 시 현재 bulk들과
|
| 1231 |
-
# 같은 splitter로 쪼개서 index-align된 per-bulk 원문을 넘긴다.
|
| 1232 |
-
pre_ft_snapshot = text
|
| 1233 |
-
|
| 1234 |
-
# Per-step fallback: if any step raises, keep the previous `text` and
|
| 1235 |
-
# move on. A single failing step (transient API issue, template
|
| 1236 |
-
# mismatch, empty response in mid-pipeline) shouldn't nuke the whole
|
| 1237 |
-
# output. Specialist steps already had this guard; now rule/llm do too.
|
| 1238 |
-
step_errors: list[str] = []
|
| 1239 |
-
for step in steps:
|
| 1240 |
-
prev_text = text
|
| 1241 |
-
step_name = step.get("name", step["type"])
|
| 1242 |
-
try:
|
| 1243 |
-
# v24 apply_judge_decisions handled BEFORE the generic rule
|
| 1244 |
-
# branch so the per-bulk revert path (which needs index-aligned
|
| 1245 |
-
# bulks) wins over apply_rule's no-op.
|
| 1246 |
-
if step["type"] == "rule" and step.get("rule") == "apply_judge_decisions":
|
| 1247 |
-
cfg = step.get("config", {})
|
| 1248 |
-
bulks = split_into_bulks(text)
|
| 1249 |
-
if bulks:
|
| 1250 |
-
judge_step_name = cfg.get("judge_step", "tool_calling_judge")
|
| 1251 |
-
corr_step_name = cfg.get("corrections_step", "basic_correction")
|
| 1252 |
-
reverted: list[str] = []
|
| 1253 |
-
for i, b in enumerate(bulks):
|
| 1254 |
-
try:
|
| 1255 |
-
reverted.append(
|
| 1256 |
-
_v24.apply_judge_decisions_for_bulk(
|
| 1257 |
-
bulk_idx=i,
|
| 1258 |
-
bulk=b,
|
| 1259 |
-
judge_step_name=judge_step_name,
|
| 1260 |
-
corrections_step_name=corr_step_name,
|
| 1261 |
-
)
|
| 1262 |
-
)
|
| 1263 |
-
except Exception as exc: # noqa: BLE001
|
| 1264 |
-
logger.warning(
|
| 1265 |
-
"[apply_judge_decisions] bulk %d failed (%s); keeping",
|
| 1266 |
-
i,
|
| 1267 |
-
exc,
|
| 1268 |
-
)
|
| 1269 |
-
reverted.append(b)
|
| 1270 |
-
text = "\n".join(reverted)
|
| 1271 |
-
elif step["type"] == "rule":
|
| 1272 |
-
text = apply_rule(step, text, original_text, vocabulary)
|
| 1273 |
-
elif step["type"] == "llm":
|
| 1274 |
-
step_model_name = step.get("model", model)
|
| 1275 |
-
# FT 직전 text를 스냅샷 — 다음 step1이 이를 <원문>으로 소비한다.
|
| 1276 |
-
if step_model_name.startswith("ft:"):
|
| 1277 |
-
pre_ft_snapshot = text
|
| 1278 |
-
|
| 1279 |
-
bulks = split_into_bulks(text)
|
| 1280 |
-
if bulks:
|
| 1281 |
-
# step1은 pre-FT 스냅샷을 per-bulk 원문으로 사용.
|
| 1282 |
-
# 그 외 LLM step은 <원문>을 쓰지 않으므로 현재 bulk을 그대로
|
| 1283 |
-
# 원문으로 넘겨도 무해(hallucination 가드의 fallback 앵커로만 쓰임).
|
| 1284 |
-
if step.get("prompt_key") == "step1":
|
| 1285 |
-
orig_candidate = split_into_bulks(pre_ft_snapshot)
|
| 1286 |
-
if len(orig_candidate) == len(bulks):
|
| 1287 |
-
original_bulks = orig_candidate
|
| 1288 |
-
else:
|
| 1289 |
-
# Splitter 출력이 FT 전후로 어긋난 경우(문단 수 변동 등):
|
| 1290 |
-
# chunk-wide pre-FT 텍스트를 모든 bulk에 공통으로 사용 →
|
| 1291 |
-
# 기존 동작과 동일. 적어도 retreat, never regress.
|
| 1292 |
-
original_bulks = [pre_ft_snapshot] * len(bulks)
|
| 1293 |
-
else:
|
| 1294 |
-
original_bulks = list(bulks)
|
| 1295 |
-
|
| 1296 |
-
processed = process_bulks_parallel(
|
| 1297 |
-
bulks, original_bulks, step, model, prompts, client
|
| 1298 |
-
)
|
| 1299 |
-
# Bulk 경계는 원본에서 \n 로 분리돼 있었으므로 합칠 때도 \n 로
|
| 1300 |
-
# 연결한다. "".join 으로 붙이면 인접 bulk 의 문단이 한 줄로
|
| 1301 |
-
# 뭉개지고, 이후 split_into_bulks 재실행 시 문단 수가 줄어
|
| 1302 |
-
# step1 의 <원문>↔<교열_모델_수정결과> 정렬이 어긋나며 구조
|
| 1303 |
-
# 보존 규칙까지 깨진다 (참조: run.py:326 "\n".join).
|
| 1304 |
-
text = "\n".join(
|
| 1305 |
-
str(p) if not isinstance(p, str) else p for p in processed
|
| 1306 |
-
)
|
| 1307 |
-
elif step["type"] == "specialist":
|
| 1308 |
-
text = run_specialist(step, text, original_text, prompts, model, client)
|
| 1309 |
-
elif step["type"] == "llm_self_consistency":
|
| 1310 |
-
# v24 basic_correction: per-bulk × N runs, intersect corrections.
|
| 1311 |
-
# Splits like a normal LLM step (per-paragraph bulks), but each
|
| 1312 |
-
# bulk runs through pipelines_v24.run_self_consistency_for_bulk
|
| 1313 |
-
# which calls _process_single_bulk_with_raw N times and emits
|
| 1314 |
-
# the synthesized post-text + raw JSON.
|
| 1315 |
-
bulks = split_into_bulks(text)
|
| 1316 |
-
if bulks:
|
| 1317 |
-
if step.get("prompt_key") == "step1":
|
| 1318 |
-
orig_candidate = split_into_bulks(pre_ft_snapshot)
|
| 1319 |
-
if len(orig_candidate) == len(bulks):
|
| 1320 |
-
original_bulks = orig_candidate
|
| 1321 |
-
else:
|
| 1322 |
-
original_bulks = [pre_ft_snapshot] * len(bulks)
|
| 1323 |
-
else:
|
| 1324 |
-
original_bulks = list(bulks)
|
| 1325 |
-
|
| 1326 |
-
def _sc_one(idx_bulk):
|
| 1327 |
-
i, b = idx_bulk
|
| 1328 |
-
return _v24.run_self_consistency_for_bulk(
|
| 1329 |
-
bulk_idx=i,
|
| 1330 |
-
bulk=b,
|
| 1331 |
-
original_bulk=original_bulks[i],
|
| 1332 |
-
step=step,
|
| 1333 |
-
model=model,
|
| 1334 |
-
prompts=prompts,
|
| 1335 |
-
client=client,
|
| 1336 |
-
process_single_bulk_fn=_process_single_bulk_with_raw,
|
| 1337 |
-
)
|
| 1338 |
-
|
| 1339 |
-
if len(bulks) == 1:
|
| 1340 |
-
processed = [_sc_one((0, bulks[0]))]
|
| 1341 |
-
else:
|
| 1342 |
-
with ThreadPoolExecutor(max_workers=10) as ex:
|
| 1343 |
-
processed = list(
|
| 1344 |
-
ex.map(_sc_one, list(enumerate(bulks)))
|
| 1345 |
-
)
|
| 1346 |
-
text = "\n".join(
|
| 1347 |
-
str(p) if not isinstance(p, str) else p for p in processed
|
| 1348 |
-
)
|
| 1349 |
-
elif step["type"] == "tool_calling_judge":
|
| 1350 |
-
# v24 judge: per-bulk 2-round emulation. Decisions are stashed
|
| 1351 |
-
# in _JUDGE_RAW_BY_BULK keyed by bulk index. text passes
|
| 1352 |
-
# through unchanged — the apply_judge_decisions rule reverts.
|
| 1353 |
-
bulks = split_into_bulks(text)
|
| 1354 |
-
if bulks:
|
| 1355 |
-
# Always anchor on pre-FT snapshot for <원문> since the
|
| 1356 |
-
# judge is reasoning about whether each correction was
|
| 1357 |
-
# over-correction relative to the source article.
|
| 1358 |
-
orig_candidate = split_into_bulks(pre_ft_snapshot)
|
| 1359 |
-
if len(orig_candidate) == len(bulks):
|
| 1360 |
-
original_bulks = orig_candidate
|
| 1361 |
-
else:
|
| 1362 |
-
original_bulks = [pre_ft_snapshot] * len(bulks)
|
| 1363 |
-
corrections_step = step.get("corrections_step", "basic_correction")
|
| 1364 |
-
|
| 1365 |
-
def _judge_one(idx_bulk):
|
| 1366 |
-
i, b = idx_bulk
|
| 1367 |
-
return _v24.run_tool_calling_judge_for_bulk(
|
| 1368 |
-
bulk_idx=i,
|
| 1369 |
-
bulk=b,
|
| 1370 |
-
original_bulk=original_bulks[i],
|
| 1371 |
-
corrections_step_name=corrections_step,
|
| 1372 |
-
step=step,
|
| 1373 |
-
model=model,
|
| 1374 |
-
prompts=prompts,
|
| 1375 |
-
client=client,
|
| 1376 |
-
call_llm_fn=call_llm,
|
| 1377 |
-
)
|
| 1378 |
-
|
| 1379 |
-
if len(bulks) == 1:
|
| 1380 |
-
_judge_one((0, bulks[0]))
|
| 1381 |
-
else:
|
| 1382 |
-
with ThreadPoolExecutor(max_workers=10) as ex:
|
| 1383 |
-
list(ex.map(_judge_one, list(enumerate(bulks))))
|
| 1384 |
-
# text unchanged
|
| 1385 |
-
# If a step produced an unusably short output (< 10% of input), the
|
| 1386 |
-
# model likely truncated or refused. Treat as no-op so downstream
|
| 1387 |
-
# steps see a sensible baseline.
|
| 1388 |
-
if (
|
| 1389 |
-
step["type"] in ("llm", "specialist", "llm_self_consistency")
|
| 1390 |
-
and len(prev_text) > 50
|
| 1391 |
-
and len(text) < len(prev_text) * 0.1
|
| 1392 |
-
):
|
| 1393 |
-
logger.warning(
|
| 1394 |
-
"Step '%s' produced suspiciously short output (%d → %d chars); "
|
| 1395 |
-
"falling back to previous text.",
|
| 1396 |
-
step_name,
|
| 1397 |
-
len(prev_text),
|
| 1398 |
-
len(text),
|
| 1399 |
-
)
|
| 1400 |
-
text = prev_text
|
| 1401 |
-
step_errors.append(f"{step_name}: short_output")
|
| 1402 |
-
except Exception as e:
|
| 1403 |
-
logger.exception(
|
| 1404 |
-
"Step '%s' failed (%s); falling back to previous text and continuing.",
|
| 1405 |
-
step_name,
|
| 1406 |
-
type(e).__name__,
|
| 1407 |
-
)
|
| 1408 |
-
text = prev_text
|
| 1409 |
-
step_errors.append(f"{step_name}: {type(e).__name__}")
|
| 1410 |
-
|
| 1411 |
-
elapsed = time.time() - start_time
|
| 1412 |
-
return {
|
| 1413 |
-
"output": text,
|
| 1414 |
-
"processing_time": elapsed,
|
| 1415 |
-
"step_errors": step_errors,
|
| 1416 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
postprocess.py
DELETED
|
@@ -1,460 +0,0 @@
|
|
| 1 |
-
"""Standalone post-processing rules extracted from solar-eval multi_step pipeline."""
|
| 2 |
-
|
| 3 |
-
import csv
|
| 4 |
-
import re
|
| 5 |
-
from collections import Counter
|
| 6 |
-
from pathlib import Path
|
| 7 |
-
|
| 8 |
-
# --- Vocabulary substitution ---
|
| 9 |
-
|
| 10 |
-
|
| 11 |
-
def load_vocabulary(csv_path: str) -> list[dict[str, str]]:
|
| 12 |
-
"""Load vocabulary CSV with wrong/correct columns.
|
| 13 |
-
|
| 14 |
-
Supports both:
|
| 15 |
-
- Headered CSV with columns 'wrong'/'before' and 'correct'/'after'
|
| 16 |
-
- Headerless CSV where first two columns are (wrong, correct)
|
| 17 |
-
|
| 18 |
-
Args:
|
| 19 |
-
csv_path: Path to vocabulary CSV file.
|
| 20 |
-
|
| 21 |
-
Returns:
|
| 22 |
-
List of dicts with 'wrong' and 'correct' keys.
|
| 23 |
-
"""
|
| 24 |
-
path = Path(csv_path)
|
| 25 |
-
if not path.exists():
|
| 26 |
-
return []
|
| 27 |
-
|
| 28 |
-
vocab: list[dict[str, str]] = []
|
| 29 |
-
header_names = {"wrong", "correct", "before", "after"}
|
| 30 |
-
|
| 31 |
-
with open(path, encoding="utf-8") as f:
|
| 32 |
-
rows = list(csv.reader(f))
|
| 33 |
-
|
| 34 |
-
if not rows:
|
| 35 |
-
return []
|
| 36 |
-
|
| 37 |
-
# Detect header: first row contains any of the expected column names
|
| 38 |
-
first_row_lower = [c.strip().lower() for c in rows[0]]
|
| 39 |
-
has_header = any(name in first_row_lower for name in header_names)
|
| 40 |
-
|
| 41 |
-
if has_header:
|
| 42 |
-
wrong_idx = next((i for i, c in enumerate(first_row_lower) if c in {"wrong", "before"}), 0)
|
| 43 |
-
correct_idx = next(
|
| 44 |
-
(i for i, c in enumerate(first_row_lower) if c in {"correct", "after"}), 1
|
| 45 |
-
)
|
| 46 |
-
data_rows = rows[1:]
|
| 47 |
-
else:
|
| 48 |
-
wrong_idx, correct_idx = 0, 1
|
| 49 |
-
data_rows = rows
|
| 50 |
-
|
| 51 |
-
for row in data_rows:
|
| 52 |
-
if len(row) <= max(wrong_idx, correct_idx):
|
| 53 |
-
continue
|
| 54 |
-
wrong = row[wrong_idx].strip()
|
| 55 |
-
correct = row[correct_idx].strip()
|
| 56 |
-
if wrong and correct:
|
| 57 |
-
vocab.append({"wrong": wrong, "correct": correct})
|
| 58 |
-
return vocab
|
| 59 |
-
|
| 60 |
-
|
| 61 |
-
def apply_vocabulary(text: str, vocab: list[dict[str, str]]) -> str:
|
| 62 |
-
"""Apply vocabulary substitutions.
|
| 63 |
-
|
| 64 |
-
Args:
|
| 65 |
-
text: Input text.
|
| 66 |
-
vocab: List of {wrong, correct} dicts.
|
| 67 |
-
|
| 68 |
-
Returns:
|
| 69 |
-
Text with vocabulary corrections applied.
|
| 70 |
-
"""
|
| 71 |
-
for entry in vocab:
|
| 72 |
-
text = text.replace(entry["wrong"], entry["correct"])
|
| 73 |
-
return text
|
| 74 |
-
|
| 75 |
-
|
| 76 |
-
# --- Pronoun/title post-processing ---
|
| 77 |
-
|
| 78 |
-
# Korean particle correction map: vowel-ending -> consonant-ending
|
| 79 |
-
PARTICLE_CORRECTION_MAP: dict[str, str] = {
|
| 80 |
-
"는": "은",
|
| 81 |
-
"가": "이",
|
| 82 |
-
"를": "을",
|
| 83 |
-
"와": "과",
|
| 84 |
-
"로": "으로",
|
| 85 |
-
"여": "이여",
|
| 86 |
-
"라": "이라",
|
| 87 |
-
"랑": "이랑",
|
| 88 |
-
"다": "이다",
|
| 89 |
-
"였다": "이었다",
|
| 90 |
-
"라면": "이라면",
|
| 91 |
-
"라서": "이라서",
|
| 92 |
-
"로부터": "으로부터",
|
| 93 |
-
}
|
| 94 |
-
|
| 95 |
-
# Particles that are valid for both vowel and consonant endings
|
| 96 |
-
NEUTRAL_PARTICLES = {"만", "도", "께서"}
|
| 97 |
-
|
| 98 |
-
|
| 99 |
-
def _ends_with_consonant(char: str) -> bool:
|
| 100 |
-
"""Check if a Korean character ends with a consonant (has jongseong)."""
|
| 101 |
-
if not char:
|
| 102 |
-
return False
|
| 103 |
-
code = ord(char)
|
| 104 |
-
if 0xAC00 <= code <= 0xD7A3:
|
| 105 |
-
return (code - 0xAC00) % 28 != 0
|
| 106 |
-
return False
|
| 107 |
-
|
| 108 |
-
|
| 109 |
-
def apply_pronoun_postprocess(text: str, replacements: dict[str, str]) -> str:
|
| 110 |
-
"""Replace words and correct trailing Korean particles.
|
| 111 |
-
|
| 112 |
-
Args:
|
| 113 |
-
text: Input text.
|
| 114 |
-
replacements: Mapping of old_word -> new_word.
|
| 115 |
-
|
| 116 |
-
Returns:
|
| 117 |
-
Text with replacements and corrected particles.
|
| 118 |
-
"""
|
| 119 |
-
# Build all particles sorted by length (longest first for greedy match)
|
| 120 |
-
all_particles = sorted(
|
| 121 |
-
list(PARTICLE_CORRECTION_MAP.keys())
|
| 122 |
-
+ list(PARTICLE_CORRECTION_MAP.values())
|
| 123 |
-
+ list(NEUTRAL_PARTICLES),
|
| 124 |
-
key=len,
|
| 125 |
-
reverse=True,
|
| 126 |
-
)
|
| 127 |
-
# Deduplicate while preserving order
|
| 128 |
-
seen: set[str] = set()
|
| 129 |
-
unique_particles: list[str] = []
|
| 130 |
-
for p in all_particles:
|
| 131 |
-
if p not in seen:
|
| 132 |
-
seen.add(p)
|
| 133 |
-
unique_particles.append(p)
|
| 134 |
-
|
| 135 |
-
particle_pattern = "|".join(re.escape(p) for p in unique_particles)
|
| 136 |
-
|
| 137 |
-
for old, new in replacements.items():
|
| 138 |
-
regex = re.compile(f"({re.escape(old)})({particle_pattern})?")
|
| 139 |
-
|
| 140 |
-
def _replace(match: re.Match, new_word: str = new) -> str:
|
| 141 |
-
particle = match.group(2)
|
| 142 |
-
if particle is None:
|
| 143 |
-
return new_word
|
| 144 |
-
# If the new word ends with consonant and old particle is vowel form, correct it
|
| 145 |
-
if new_word and _ends_with_consonant(new_word[-1]):
|
| 146 |
-
corrected = PARTICLE_CORRECTION_MAP.get(particle, particle)
|
| 147 |
-
return new_word + corrected
|
| 148 |
-
return new_word + particle
|
| 149 |
-
|
| 150 |
-
text = regex.sub(_replace, text)
|
| 151 |
-
|
| 152 |
-
return text
|
| 153 |
-
|
| 154 |
-
|
| 155 |
-
# --- Currency compact ---
|
| 156 |
-
|
| 157 |
-
_CURRENCY_UNITS = r"(원|명|개|대|위안|달러|유로|엔|톤|권|건|회|장|마리|그루|송이|필)"
|
| 158 |
-
_BOUNDARY = r'(?=[\s.,!?()"\'가-힣]|$)'
|
| 159 |
-
_NUMBER = r"(\d+(?:\.\d+)?)"
|
| 160 |
-
_SCALE = r"(만|억|조)"
|
| 161 |
-
|
| 162 |
-
# Multi-digit: "3억 5000만 원" -> "3억5000만원"
|
| 163 |
-
_CURRENCY_MULTI_RE = re.compile(
|
| 164 |
-
rf"{_NUMBER}{_SCALE}\s*(\d+){_SCALE}\s*{_CURRENCY_UNITS}{_BOUNDARY}"
|
| 165 |
-
)
|
| 166 |
-
# Single: "3억 원" -> "3억원"
|
| 167 |
-
_CURRENCY_SINGLE_RE = re.compile(rf"{_NUMBER}{_SCALE}\s*{_CURRENCY_UNITS}{_BOUNDARY}")
|
| 168 |
-
|
| 169 |
-
|
| 170 |
-
def apply_currency_compact(text: str) -> str:
|
| 171 |
-
"""Remove spaces between numbers and currency/unit markers.
|
| 172 |
-
|
| 173 |
-
Args:
|
| 174 |
-
text: Input text.
|
| 175 |
-
|
| 176 |
-
Returns:
|
| 177 |
-
Text with compacted currency expressions.
|
| 178 |
-
"""
|
| 179 |
-
text = _CURRENCY_MULTI_RE.sub(r"\1\2\3\4\5", text)
|
| 180 |
-
text = _CURRENCY_SINGLE_RE.sub(r"\1\2\3", text)
|
| 181 |
-
return text
|
| 182 |
-
|
| 183 |
-
|
| 184 |
-
# --- Comma removal ---
|
| 185 |
-
|
| 186 |
-
_COMMA_RE = re.compile(r"(?<=\d),(?=\d)")
|
| 187 |
-
|
| 188 |
-
|
| 189 |
-
def apply_comma_removal(text: str) -> str:
|
| 190 |
-
"""Remove thousand-separator commas from numbers.
|
| 191 |
-
|
| 192 |
-
Args:
|
| 193 |
-
text: Input text.
|
| 194 |
-
|
| 195 |
-
Returns:
|
| 196 |
-
Text with commas removed from numbers.
|
| 197 |
-
"""
|
| 198 |
-
return _COMMA_RE.sub("", text)
|
| 199 |
-
|
| 200 |
-
|
| 201 |
-
# --- Unit unicode conversion ---
|
| 202 |
-
|
| 203 |
-
# Regex-based unit substitution matching the production Gradio reference.
|
| 204 |
-
# Each pattern requires a digit prefix and enforces a non-letter boundary so
|
| 205 |
-
# "mm" inside "mmol" or "cm" inside "cmH2O" is not mistakenly converted.
|
| 206 |
-
_UNIT_PATTERNS: list[tuple[str, str]] = [
|
| 207 |
-
# Area (squared)
|
| 208 |
-
(r"(?P<num>\d+(?:\.\d+)?)\s*(?:mm(?:\^?2|²))\b(?![A-Za-zµ])", r"\g<num>㎟"),
|
| 209 |
-
(r"(?P<num>\d+(?:\.\d+)?)\s*(?:cm(?:\^?2|²))\b(?![A-Za-zµ])", r"\g<num>㎠"),
|
| 210 |
-
(r"(?P<num>\d+(?:\.\d+)?)\s*(?:km(?:\^?2|²))\b(?![A-Za-zµ])", r"\g<num>㎢"),
|
| 211 |
-
(r"(?P<num>\d+(?:\.\d+)?)\s*(?:m(?:\^?2|²))\b(?![A-Za-zµ])", r"\g<num>㎡"),
|
| 212 |
-
# Volume (cubed)
|
| 213 |
-
(r"(?P<num>\d+(?:\.\d+)?)\s*(?:mm(?:\^?3|³))\b(?![A-Za-zµ])", r"\g<num>㎣"),
|
| 214 |
-
(r"(?P<num>\d+(?:\.\d+)?)\s*(?:cm(?:\^?3|³))\b(?![A-Za-zµ])", r"\g<num>㎤"),
|
| 215 |
-
(r"(?P<num>\d+(?:\.\d+)?)\s*(?:km(?:\^?3|³))\b(?![A-Za-zµ])", r"\g<num>㎦"),
|
| 216 |
-
(r"(?P<num>\d+(?:\.\d+)?)\s*(?:m(?:\^?3|³))\b(?![A-Za-zµ])", r"\g<num>㎥"),
|
| 217 |
-
# Length
|
| 218 |
-
(r"(?P<num>\d+(?:\.\d+)?)\s*(?:μm|um)\b(?![A-Za-zµ])", r"\g<num>㎛"),
|
| 219 |
-
(r"(?P<num>\d+(?:\.\d+)?)\s*(?:mm)\b(?![A-Za-zµ])", r"\g<num>㎜"),
|
| 220 |
-
(r"(?P<num>\d+(?:\.\d+)?)\s*(?:cm)\b(?![A-Za-zµ])", r"\g<num>㎝"),
|
| 221 |
-
(r"(?P<num>\d+(?:\.\d+)?)\s*(?:km)\b(?![A-Za-zµ])", r"\g<num>㎞"),
|
| 222 |
-
# Mass
|
| 223 |
-
(r"(?P<num>\d+(?:\.\d+)?)\s*kg\b(?![A-Za-zµ])", r"\g<num>㎏"),
|
| 224 |
-
(r"(?P<num>\d+(?:\.\d+)?)\s*mg\b(?![A-Za-zµ])", r"\g<num>㎎"),
|
| 225 |
-
]
|
| 226 |
-
_UNIT_COMPILED = [(re.compile(p), r) for p, r in _UNIT_PATTERNS]
|
| 227 |
-
|
| 228 |
-
|
| 229 |
-
def apply_unit_unicode(text: str) -> str:
|
| 230 |
-
"""Convert `<number> + unit` tokens to compact Unicode equivalents.
|
| 231 |
-
|
| 232 |
-
Only substitutes when preceded by a digit and followed by a non-letter
|
| 233 |
-
boundary, so tokens like "mmol" / "cmH2O" are left alone. Matches the
|
| 234 |
-
production Gradio regex set (area/volume/length/mass).
|
| 235 |
-
|
| 236 |
-
Args:
|
| 237 |
-
text: Input text.
|
| 238 |
-
|
| 239 |
-
Returns:
|
| 240 |
-
Text with unit strings replaced by Unicode characters.
|
| 241 |
-
"""
|
| 242 |
-
for pat, rep in _UNIT_COMPILED:
|
| 243 |
-
text = pat.sub(rep, text)
|
| 244 |
-
return text
|
| 245 |
-
|
| 246 |
-
|
| 247 |
-
# --- Correction filter ---
|
| 248 |
-
|
| 249 |
-
|
| 250 |
-
def _compute_lcs_indices(orig_tokens: list[str], pred_tokens: list[str]) -> list[tuple[int, int]]:
|
| 251 |
-
"""Compute LCS matching indices between two token lists using DP."""
|
| 252 |
-
m, n = len(orig_tokens), len(pred_tokens)
|
| 253 |
-
if m == 0 or n == 0:
|
| 254 |
-
return []
|
| 255 |
-
|
| 256 |
-
# DP table
|
| 257 |
-
dp = [[0] * (n + 1) for _ in range(m + 1)]
|
| 258 |
-
for i in range(1, m + 1):
|
| 259 |
-
for j in range(1, n + 1):
|
| 260 |
-
if orig_tokens[i - 1] == pred_tokens[j - 1]:
|
| 261 |
-
dp[i][j] = dp[i - 1][j - 1] + 1
|
| 262 |
-
else:
|
| 263 |
-
dp[i][j] = max(dp[i - 1][j], dp[i][j - 1])
|
| 264 |
-
|
| 265 |
-
# Backtrack to find matching pairs
|
| 266 |
-
pairs: list[tuple[int, int]] = []
|
| 267 |
-
i, j = m, n
|
| 268 |
-
while i > 0 and j > 0:
|
| 269 |
-
if orig_tokens[i - 1] == pred_tokens[j - 1]:
|
| 270 |
-
pairs.append((i - 1, j - 1))
|
| 271 |
-
i -= 1
|
| 272 |
-
j -= 1
|
| 273 |
-
elif dp[i - 1][j] >= dp[i][j - 1]:
|
| 274 |
-
i -= 1
|
| 275 |
-
else:
|
| 276 |
-
j -= 1
|
| 277 |
-
pairs.reverse()
|
| 278 |
-
return pairs
|
| 279 |
-
|
| 280 |
-
|
| 281 |
-
def apply_correction_filter(
|
| 282 |
-
text: str,
|
| 283 |
-
original: str,
|
| 284 |
-
max_char_diff: int = 2,
|
| 285 |
-
allow_spacing: bool = True,
|
| 286 |
-
) -> str:
|
| 287 |
-
"""Filter corrections, reverting changes that exceed max_char_diff.
|
| 288 |
-
|
| 289 |
-
Tokenizes both texts, computes LCS, and for each gap between matching
|
| 290 |
-
tokens, checks if the correction is "safe" (small enough change).
|
| 291 |
-
Unsafe corrections are reverted to original.
|
| 292 |
-
|
| 293 |
-
Args:
|
| 294 |
-
text: Corrected text.
|
| 295 |
-
original: Original text before correction.
|
| 296 |
-
max_char_diff: Maximum allowed character-level differences.
|
| 297 |
-
allow_spacing: Whether to allow spacing-only changes.
|
| 298 |
-
|
| 299 |
-
Returns:
|
| 300 |
-
Filtered text with unsafe corrections reverted.
|
| 301 |
-
"""
|
| 302 |
-
orig_tokens = original.split()
|
| 303 |
-
pred_tokens = text.split()
|
| 304 |
-
|
| 305 |
-
if not orig_tokens or not pred_tokens:
|
| 306 |
-
return text
|
| 307 |
-
|
| 308 |
-
lcs_pairs = _compute_lcs_indices(orig_tokens, pred_tokens)
|
| 309 |
-
|
| 310 |
-
def is_safe(o_text: str, c_text: str) -> bool:
|
| 311 |
-
if o_text == c_text:
|
| 312 |
-
return True
|
| 313 |
-
if allow_spacing and o_text.replace(" ", "") == c_text.replace(" ", ""):
|
| 314 |
-
return True
|
| 315 |
-
if abs(len(o_text) - len(c_text)) <= 1:
|
| 316 |
-
min_len = min(len(o_text), len(c_text))
|
| 317 |
-
d = sum(1 for i in range(min_len) if o_text[i] != c_text[i])
|
| 318 |
-
d += abs(len(o_text) - len(c_text))
|
| 319 |
-
if d <= max_char_diff:
|
| 320 |
-
return True
|
| 321 |
-
return False
|
| 322 |
-
|
| 323 |
-
result_tokens: list[str] = []
|
| 324 |
-
prev_orig = -1
|
| 325 |
-
prev_pred = -1
|
| 326 |
-
|
| 327 |
-
for oi, pi in lcs_pairs:
|
| 328 |
-
# Handle gap before this LCS match
|
| 329 |
-
orig_gap = " ".join(orig_tokens[prev_orig + 1 : oi])
|
| 330 |
-
pred_gap = " ".join(pred_tokens[prev_pred + 1 : pi])
|
| 331 |
-
|
| 332 |
-
if orig_gap or pred_gap:
|
| 333 |
-
if is_safe(orig_gap, pred_gap):
|
| 334 |
-
result_tokens.append(pred_gap)
|
| 335 |
-
else:
|
| 336 |
-
result_tokens.append(orig_gap)
|
| 337 |
-
|
| 338 |
-
# Add the matched token
|
| 339 |
-
result_tokens.append(pred_tokens[pi])
|
| 340 |
-
prev_orig = oi
|
| 341 |
-
prev_pred = pi
|
| 342 |
-
|
| 343 |
-
# Handle trailing gap
|
| 344 |
-
orig_gap = " ".join(orig_tokens[prev_orig + 1 :])
|
| 345 |
-
pred_gap = " ".join(pred_tokens[prev_pred + 1 :])
|
| 346 |
-
if orig_gap or pred_gap:
|
| 347 |
-
if is_safe(orig_gap, pred_gap):
|
| 348 |
-
result_tokens.append(pred_gap)
|
| 349 |
-
else:
|
| 350 |
-
result_tokens.append(orig_gap)
|
| 351 |
-
|
| 352 |
-
return " ".join(t for t in result_tokens if t)
|
| 353 |
-
|
| 354 |
-
|
| 355 |
-
# --- Paragraph-level duplication removal -------------------------------------
|
| 356 |
-
|
| 357 |
-
_PARA_SPLIT_RE = re.compile(r"\n+")
|
| 358 |
-
_WS_RE = re.compile(r"\s+")
|
| 359 |
-
|
| 360 |
-
|
| 361 |
-
def _normalize_paragraph(p: str) -> str:
|
| 362 |
-
"""공백/탭/개행 압축 정규형. 중복 매칭용."""
|
| 363 |
-
return _WS_RE.sub(" ", p).strip()
|
| 364 |
-
|
| 365 |
-
|
| 366 |
-
def _split_output_paragraphs(text: str) -> list[str]:
|
| 367 |
-
"""Output 텍스트를 \\n+ 경계로 쪼개 비어있지 않은 문단 리스트 반환.
|
| 368 |
-
|
| 369 |
-
정규화하지 않은 원본 조각을 그대로 넘겨서, 재조립 시 모델이 쓴 구두점/
|
| 370 |
-
스페이싱 디테일이 최대한 보존되도록 한다 (strip 은 조립 시 \\n 으로
|
| 371 |
-
다시 감싸므로 안전).
|
| 372 |
-
"""
|
| 373 |
-
if not text:
|
| 374 |
-
return []
|
| 375 |
-
parts = _PARA_SPLIT_RE.split(text)
|
| 376 |
-
return [p.strip() for p in parts if p.strip()]
|
| 377 |
-
|
| 378 |
-
|
| 379 |
-
def apply_paragraph_dedupe(
|
| 380 |
-
text: str,
|
| 381 |
-
original: str,
|
| 382 |
-
min_len: int = 40,
|
| 383 |
-
prefix_len: int = 30,
|
| 384 |
-
) -> str:
|
| 385 |
-
"""LLM이 뱉은 중복 문단을 제거한다.
|
| 386 |
-
|
| 387 |
-
**언제 제거하는가**
|
| 388 |
-
- 같은 문단(정규화 후 완전일치) 이 output 에서 `input 등장 횟수 + 1`
|
| 389 |
-
이상 등장하면 뒤쪽 것을 drop.
|
| 390 |
-
- 앞 ``prefix_len`` 자가 동일한 문단이 out > in 로 반복되면 drop
|
| 391 |
-
(모델이 미세 교정으로 다르게 뱉은 echo 잡기).
|
| 392 |
-
|
| 393 |
-
**언제 보존하는가**
|
| 394 |
-
- 문단 길이 < ``min_len`` (◇소제목, 한 줄 인용 등 합법적 반복).
|
| 395 |
-
- ``output_count <= input_count`` (저자가 의도해서 원문에 이미 반복
|
| 396 |
-
포함. 저자 의도를 훼손하지 않음).
|
| 397 |
-
- 첫 등장은 항상 유지. 두 번째 이후 등장부터 조건에 맞으면 drop.
|
| 398 |
-
|
| 399 |
-
Args:
|
| 400 |
-
text: 파이프라인 출력 텍스트.
|
| 401 |
-
original: 파이프라인 입력 (저자 원문). None 이면 빈 문자열로 간주해
|
| 402 |
-
input_count=0. 이 경우 output 에서 2 회 이상 동일 문단 등장 →
|
| 403 |
-
모두 drop.
|
| 404 |
-
min_len: 이 길이 미만 정규화 문단은 dedupe 에서 제외.
|
| 405 |
-
prefix_len: near-dup 탐지에 쓰는 앞자르기 길이.
|
| 406 |
-
|
| 407 |
-
Returns:
|
| 408 |
-
Dedupe 된 텍스트. 문단 구분자는 ``\\n`` 으로 재조립 (기존 파이프라인
|
| 409 |
-
출력 관례와 동일). 중복이 없으면 입력을 그대로 돌려준다.
|
| 410 |
-
"""
|
| 411 |
-
if not text:
|
| 412 |
-
return text
|
| 413 |
-
|
| 414 |
-
# Input 은 "normalized 전체 문자열" 로 두고 substring count 를 쓴다.
|
| 415 |
-
# 이전 구현은 input 을 문단 Counter 로 셌는데, LLM 이 문단 경계를 재구조화
|
| 416 |
-
# (예: 줄바꿈 없이 중복 문장이 들어있던 한 문단을 여러 문단으로 쪼갬) 하면
|
| 417 |
-
# output 문단이 input 문단과 exact match 가 안 되어 input_count=0 으로 잡혀,
|
| 418 |
-
# 정당한 중복 (저자/원본이 의도한 반복) 까지 drop 되는 버그가 있었다.
|
| 419 |
-
in_norm = _normalize_paragraph(original or "")
|
| 420 |
-
|
| 421 |
-
out_paras = _split_output_paragraphs(text)
|
| 422 |
-
out_exact_seen: Counter[str] = Counter()
|
| 423 |
-
out_prefix_seen: Counter[str] = Counter()
|
| 424 |
-
|
| 425 |
-
kept: list[str] = []
|
| 426 |
-
any_dropped = False
|
| 427 |
-
for para in out_paras:
|
| 428 |
-
norm = _normalize_paragraph(para)
|
| 429 |
-
if len(norm) < min_len:
|
| 430 |
-
kept.append(para)
|
| 431 |
-
continue
|
| 432 |
-
|
| 433 |
-
prefix = norm[:prefix_len]
|
| 434 |
-
out_exact_seen[norm] += 1
|
| 435 |
-
out_prefix_seen[prefix] += 1
|
| 436 |
-
|
| 437 |
-
# input 문자열 전체에서 해당 문단(또는 prefix)이 몇 번 substring 으로
|
| 438 |
-
# 등장하는지 집계. output_count 가 input_count 를 초과할 때만 drop.
|
| 439 |
-
in_exact_count = in_norm.count(norm) if in_norm else 0
|
| 440 |
-
in_prefix_count = in_norm.count(prefix) if in_norm else 0
|
| 441 |
-
|
| 442 |
-
exact_dup = (
|
| 443 |
-
out_exact_seen[norm] > in_exact_count
|
| 444 |
-
and out_exact_seen[norm] >= 2
|
| 445 |
-
)
|
| 446 |
-
near_dup = (
|
| 447 |
-
out_prefix_seen[prefix] > in_prefix_count
|
| 448 |
-
and out_prefix_seen[prefix] >= 2
|
| 449 |
-
)
|
| 450 |
-
|
| 451 |
-
if exact_dup or near_dup:
|
| 452 |
-
any_dropped = True
|
| 453 |
-
continue
|
| 454 |
-
|
| 455 |
-
kept.append(para)
|
| 456 |
-
|
| 457 |
-
if not any_dropped:
|
| 458 |
-
return text
|
| 459 |
-
|
| 460 |
-
return "\n".join(kept)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
prompts/dev_260408_v16/step1.txt
DELETED
|
@@ -1,153 +0,0 @@
|
|
| 1 |
-
## Role
|
| 2 |
-
당신은 한국어 뉴스 기사 전문 교열가입니다. 오직 명백한 띄어쓰기, 조사, 맞춤법 등의 교열 오류만 수정해야 합니다.
|
| 3 |
-
|
| 4 |
-
## 판단 원칙 (MOST IMPORTANT)
|
| 5 |
-
|
| 6 |
-
불필요하게 수정하는 것은 교열가로서 가장 큰 실수입니다.
|
| 7 |
-
오류를 놓치는 것보다, 맞는 것을 틀리다고 수정하는 것이 더 나쁜 결과를 만듭니다.
|
| 8 |
-
|
| 9 |
-
"이 표현이 오류임이 100% 확실한가?"라고 자문하고, 그렇지 않으면 원문을 유지해주세요.
|
| 10 |
-
|
| 11 |
-
## 제약 조건 (모든 규칙보다 최우선)
|
| 12 |
-
|
| 13 |
-
입력:
|
| 14 |
-
- <원문>: 원본 텍스트
|
| 15 |
-
- <교열_모델_수정결과>: 1차 교정 모델 출력
|
| 16 |
-
|
| 17 |
-
임무: <교열_모델_수정결과>에서 맞춤법/오탈자/띄어쓰기 오류만 교정. 그 외 수정 금지.
|
| 18 |
-
|
| 19 |
-
### 금지 사항
|
| 20 |
-
- 원문에 없는 내용을 추가하지 마라
|
| 21 |
-
- 표현을 다른 표현으로 대체하지 마라
|
| 22 |
-
- 축약형(됐다, 줬다)을 풀어쓰지 마라
|
| 23 |
-
- 조사를 변경하지 마라 (명백한 조사 오류 제외)
|
| 24 |
-
- 따옴표 종류를 변경하지 마라
|
| 25 |
-
- 고유명사를 변경하지 마라 — 내부 지식을 무시하고 <원문>을 따르라
|
| 26 |
-
- 문체와 어투를 변경하지 마라
|
| 27 |
-
- 텍스트를 늘리거나 반복하지 마라
|
| 28 |
-
- **개별 교정의 변경 글자 수가 10글자를 초과하면 해당 교정을 하지 마라** — 10글자 이상 바뀌는 수정은 원문을 유지하라
|
| 29 |
-
- 수정이 필요 없으면 원문을 그대로 반환하라. 수정을 만들어내지 마라.
|
| 30 |
-
|
| 31 |
-
### <paragraph_separator> 구조
|
| 32 |
-
- 입력의 <paragraph_separator> 개수, 위치를 100% 그대로 출력에 복제하라
|
| 33 |
-
- <교열_모델_수정결과>의 <paragraph_separator> 개수가 <원문>과 다르면, <원문>의 문단 구조를 따르라
|
| 34 |
-
- 문단이 반복/중복되면 <원문>의 문단 수에 맞춰 제거하라
|
| 35 |
-
- 원문에 N개이면 출력에도 정확히 N개
|
| 36 |
-
|
| 37 |
-
## 교정 유형
|
| 38 |
-
- spacing: 한글 맞춤법 명시된 확실한 오류만 (수천년→수천 년, 할수→할 수)
|
| 39 |
-
- saisiot: 사이시옷 (코수염→콧수염)
|
| 40 |
-
- spelling: 맞춤법/오탈자 (댓가→대가)
|
| 41 |
-
- foreign: 외래어 표기 (로얄→로열)
|
| 42 |
-
- particle: 명백한 조사 오류
|
| 43 |
-
|
| 44 |
-
## 띄어쓰기 판단 기준 — 아래 예시를 반드시 참고하라
|
| 45 |
-
|
| 46 |
-
### 교정하는 경우 (한글 맞춤법 규정 위반)
|
| 47 |
-
입력: "사건이 발생한지 수천년이 흘렀다."
|
| 48 |
-
출력: "사건이 발생한 지 수천 년이 흘렀다."
|
| 49 |
-
근거: "지"는 의존명사로 앞말과 띄어 쓴다(맞춤법 제42조). "년"은 단위명사로 수사 뒤에 띄어 쓴다(제43조).
|
| 50 |
-
|
| 51 |
-
입력: "이날 할수있는건 아무것도 없었다."
|
| 52 |
-
출력: "이날 할 수 있는 건 아무것도 없었다."
|
| 53 |
-
근거: "수", "것"은 의존명사로 앞말과 띄어 쓴다(맞춤법 제42조).
|
| 54 |
-
|
| 55 |
-
### 교정하지 않는 경우 (뉴스 문체 관행상 허용)
|
| 56 |
-
입력: "이종석 헌재소장과 이영진 재판관의 임기가 끝난다."
|
| 57 |
-
출력: "이종석 헌재소장과 이영진 재판관의 임기가 끝난다."
|
| 58 |
-
근거: "헌재소장"은 기관명+직함 복합어로, 뉴스 보도에서 붙여 쓰는 것이 관행이다. 원문을 따른다.
|
| 59 |
-
|
| 60 |
-
입력: "골프클럽이 설립됐던 1980년대에 남성 회원이 다수였다."
|
| 61 |
-
출력: "골프클럽이 설립됐던 1980년대에 남성 회원이 다수였다."
|
| 62 |
-
근거: "골프클럽"은 외래어 복합명사로, 원문의 띄어쓰기를 따른다.
|
| 63 |
-
|
| 64 |
-
입력: "코 점막 과민반응으로 재채기나 콧물을 훌쩍이는 증세를 보인다."
|
| 65 |
-
출력: "코 점막 과민반응으로 재채기나 콧물을 훌쩍이는 증세를 보인다."
|
| 66 |
-
근거: "과민반응"은 한 단어로 굳어진 전문용어이다. 원문을 따른다.
|
| 67 |
-
|
| 68 |
-
## 작업 방식
|
| 69 |
-
반드시 아래 JSON 형식으로 출력하라:
|
| 70 |
-
|
| 71 |
-
{
|
| 72 |
-
"corrections": [
|
| 73 |
-
{"original": "오류 구절", "corrected": "수정 구절", "type": "오류유형", "reason": "근거"}
|
| 74 |
-
],
|
| 75 |
-
"output": "모든 수정이 적용된 최종 텍스트",
|
| 76 |
-
"explanation": "'원래'->'수정' (유형) 형식의 변경 요약"
|
| 77 |
-
}
|
| 78 |
-
|
| 79 |
-
수정이 없으면:
|
| 80 |
-
{"corrections": [], "output": "원문 그대로", "explanation": "수정된 내용이 없습니다."}
|
| 81 |
-
|
| 82 |
-
## 문단 구조 검증 예시
|
| 83 |
-
|
| 84 |
-
입력 원문 (separator 2개):
|
| 85 |
-
가나다라.<paragraph_separator>마바사.<paragraph_separator>아자차카.
|
| 86 |
-
|
| 87 |
-
CORRECT — separator 2개 유지:
|
| 88 |
-
{"corrections": [], "output": "가나다라.<paragraph_separator>마바사.<paragraph_separator>아자차카.", "explanation": "수정된 내용이 없습니다."}
|
| 89 |
-
|
| 90 |
-
WRONG — separator가 늘어남 (문단 반복):
|
| 91 |
-
{"corrections": [], "output": "가나다라.<paragraph_separator>마바사.<paragraph_separator>아자차카.<paragraph_separator>마바사.<paragraph_separator>아자차카.", "explanation": "..."}
|
| 92 |
-
→ 이런 출력은 절대 금지. 원문의 separator 개수를 반드시 맞춰라.
|
| 93 |
-
|
| 94 |
-
## 최종 점검 리마인더 (실운영 피드백 기반)
|
| 95 |
-
|
| 96 |
-
아래 유형은 실운영에서 반복적으로 놓친 오류다. 명백한 경우 교정을 누락하지 마라.
|
| 97 |
-
이 섹션의 목적은 누락된 recall을 보완하는 것이지, 새로운 교정을 만들어내는 것이 아니다.
|
| 98 |
-
각 유형은 "고정 패턴 + 일반 원리"로 기술되어 있으니, 특정 단어만 외우지 말고 원리를 적용하라.
|
| 99 |
-
|
| 100 |
-
### 1. 잘못된 축약형 (맞춤법 제40항)
|
| 101 |
-
어간 끝음절 '하' 앞 받침이 **무성음(ㄱ/ㅂ/ㅅ)**이면 '하'가 통째로 탈락한다.
|
| 102 |
-
- 섭섭치 않다 → 섭섭지 않다 (받침 ㅂ)
|
| 103 |
-
- 생각컨대 → 생각건대 (받침 ㄱ)
|
| 104 |
-
- 추측컨대 → 추측건대 (받침 ㄱ)
|
| 105 |
-
|
| 106 |
-
### 2. 사이시옷 누락
|
| 107 |
-
합성어에서 뒷말 첫소리가 된소리로 나면 사이시옷을 받쳐 적는다.
|
| 108 |
-
- 제사날 → 제삿날
|
| 109 |
-
- 뒤일 → 뒷일
|
| 110 |
-
- 뒤벽 → 뒷벽
|
| 111 |
-
|
| 112 |
-
### 3. 두음법칙 율/률
|
| 113 |
-
- **모음 뒤 / ㄴ 받침 뒤**: 율 (비율, 백분율, 선율)
|
| 114 |
-
- **그 외 자음 뒤**: 률 (합격률, 성공률, 불량률)
|
| 115 |
-
- 예: 불량율 → 불량률
|
| 116 |
-
|
| 117 |
-
### 4. 명백한 고정 오자
|
| 118 |
-
의미가 명확히 구분되는 고정 패턴은 반드시 교정한다.
|
| 119 |
-
- 금새 → 금세 (시간 부사 "얼마 지나지 않아")
|
| 120 |
-
- 색체 → 색채
|
| 121 |
-
|
| 122 |
-
### 5. 연속 중복 제거
|
| 123 |
-
같은 문장이나 어구가 **바로 이어서** 반복되면 하나만 남긴다. 문장 전체가 반복되는 경우도 포함한다.
|
| 124 |
-
- 입력: `...여력이 있다"고 덧붙였다. 덧붙였다.`
|
| 125 |
-
- 출력: `...여력이 있다"고 덧붙였다.`
|
| 126 |
-
- 이는 "텍스트 반복 금지" 원칙의 특수 케이스이며, 중복은 오히려 제거해야 한다.
|
| 127 |
-
|
| 128 |
-
### 6. 괄호와 조사의 호응
|
| 129 |
-
괄호 뒤에 오는 조사는 **괄호 앞 단어**에 호응한다. 조사를 괄호 안에 포함시키지 마라.
|
| 130 |
-
- 입력: `비상행동(비상행동은) 이날`
|
| 131 |
-
- 출력: `비상행동(비상행동)은 이날` (앞 단어 '비상행동'의 받침 ㅇ에 호응)
|
| 132 |
-
|
| 133 |
-
- 입력: `서울고법 행정7부(재판장 구회근)은 10일`
|
| 134 |
-
- 출력: `서울고법 행정7부(재판장 구회근)는 10일` (앞 단어 '부'가 모음으로 끝나므로 '는')
|
| 135 |
-
|
| 136 |
-
### 7. 숫자 보존 — FT 모델 실수 되돌리기
|
| 137 |
-
`<교열_모델_수정결과>`의 숫자가 `<원문>`의 숫자와 다르면, 이는 FT 모델의 기계적 실수다.
|
| 138 |
-
숫자는 사실 정보이며 교열 대상이 아니다. 반드시 `<원문>`의 숫자로 되돌려라.
|
| 139 |
-
`<원문>`과 `<교열_모델_수정결과>`의 모든 숫자를 자릿수 하나까지 대조하라.
|
| 140 |
-
- 원문: `전년 대비 32.3% 증가, 실업률은 18.7%`
|
| 141 |
-
- 교열_모델_수정결과: `전년 대비 32.4% 증가, 실업률은 18.8%`
|
| 142 |
-
- 출력: `전년 대비 32.3% 증가, 실업률은 18.7%` (원문 숫자 복원)
|
| 143 |
-
- 소수점, 퍼센트, 연도, 단위 수치 모두 동일하게 적용.
|
| 144 |
-
|
| 145 |
-
### 8. 한글 따옴표 복원 — FT 모델 실수 되돌리기
|
| 146 |
-
`<원문>`이 한글 따옴표(큰따옴표 “ ”, 작은따옴표 ‘ ’)를 쓰는데
|
| 147 |
-
`<교열_모델_수정결과>`에서 영문 따옴표(`"`, `'`)로 바뀌어 있으면,
|
| 148 |
-
이는 FT 모델이 기계적으로 변환한 실수다. 반드시 `<원문>`의 한글 따옴표로 복원하라.
|
| 149 |
-
- 원문: `그는 “안녕”이라고 말했다.`
|
| 150 |
-
- 교열_모델_수정결과: `그는 "안녕"이라고 말했다.`
|
| 151 |
-
- 출력: `그는 “안녕”이라고 말했다.` (원문 한글 따옴표 복원)
|
| 152 |
-
- 작은따옴표도 동일: `‘강조’` → `'강조'`로 바뀌었다면 `‘강조’`로 되돌린다.
|
| 153 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
prompts/dev_260429_v24/judge.txt
DELETED
|
@@ -1,95 +0,0 @@
|
|
| 1 |
-
## Role
|
| 2 |
-
당신은 한국어 뉴스 교정의 **per-correction 검토자(judge)** 입니다. basic_correction
|
| 3 |
-
이 만든 corrections 리스트를 한 항목씩 검토하여 `keep` 또는 `revert` 를 결정합니다.
|
| 4 |
-
|
| 5 |
-
이 단계는 **두 라운드** 로 진행됩니다.
|
| 6 |
-
|
| 7 |
-
- **Round 1 (도구 단계)**: 의심스러운 합성명사 띄어쓰기 교정에 한해 lookup
|
| 8 |
-
도구를 호출하라. 응답 스키마: `{"lookups": [{tool, args, note}]}`.
|
| 9 |
-
- **Round 2 (판정 단계)**: 도구 결과 (`<도구_호출_결과>` 블록) 를 보고 모든
|
| 10 |
-
corrections 의 keep/revert 를 결정. 응답 스키마: `{"decisions": [{...}],
|
| 11 |
-
"output": ""}`.
|
| 12 |
-
|
| 13 |
-
## 사용 가능한 도구 (Round 1 에서만 호출)
|
| 14 |
-
|
| 15 |
-
- `lookup_pmi(left, right)` — 한국어 bigram 의 PMI 와 코퍼스 빈도 (count) 반환.
|
| 16 |
-
- `pmi >= 7.0 && count >= 30` → 진짜 합성명사 가능성 매우 높음 → **revert**.
|
| 17 |
-
- `pmi >= 4.0 && count >= 10` → 합성명사일 가능성 중간 → 다른 신호 참고.
|
| 18 |
-
- `count < 5` 또는 `pmi == null` → 신호 부족 → 텍스트 단서로 판정.
|
| 19 |
-
- `lookup_pmi_joined(joined)` — 분할 위치를 모를 때 joined 형 전체에 대해
|
| 20 |
-
최대 PMI 위치 반환. left/right 둘 다 모를 때 사용.
|
| 21 |
-
- `lookup_unigram_freq(token)` — 코퍼스 단일 토큰 빈도. 분리된 형태가
|
| 22 |
-
코퍼스에서 자주 단일 토큰으로 나오면 (count >= 50) 합성명사로 굳어진 것.
|
| 23 |
-
- `lookup_chosun_dict(word)` — 조선일보의 error.dict / mis.dict 에 등재된
|
| 24 |
-
단어인지 확인. `mapping` 이 있으면 그 매핑을 따른다.
|
| 25 |
-
|
| 26 |
-
## Round 1 출력 형식 (JSON only)
|
| 27 |
-
|
| 28 |
-
```
|
| 29 |
-
{
|
| 30 |
-
"lookups": [
|
| 31 |
-
{"tool": "lookup_pmi", "args": {"left": "헌재", "right": "소장",
|
| 32 |
-
"joined": "", "token": "", "word": ""}, "note": "헌재소장 분리 의심"},
|
| 33 |
-
{"tool": "lookup_pmi_joined", "args": {"left": "", "right": "",
|
| 34 |
-
"joined": "사법리스크", "token": "", "word": ""},
|
| 35 |
-
"note": "사법리스크 분리 의심"}
|
| 36 |
-
]
|
| 37 |
-
}
|
| 38 |
-
```
|
| 39 |
-
|
| 40 |
-
규칙:
|
| 41 |
-
- args 객체에는 모든 키 (`left, right, joined, token, word`) 가 있어야 한다.
|
| 42 |
-
사용 안 하는 키는 빈 문자열 `""`.
|
| 43 |
-
- 호출은 최대 4 개. 합성명사 띄어쓰기 (≥ 4 글자) 의심 케이스만 우선.
|
| 44 |
-
- corrections 가 모두 자명한 keep 이면 `{"lookups": []}` 만 출력.
|
| 45 |
-
|
| 46 |
-
## Round 2 출력 형식 (JSON only)
|
| 47 |
-
|
| 48 |
-
```
|
| 49 |
-
{
|
| 50 |
-
"decisions": [
|
| 51 |
-
{"correction_index": 0, "verdict": "keep", "reason": "사이시옷 교정 — 무조건 keep"},
|
| 52 |
-
{"correction_index": 1, "verdict": "revert", "reason": "PMI 7.8, count 45 → 합성명사"}
|
| 53 |
-
],
|
| 54 |
-
"output": ""
|
| 55 |
-
}
|
| 56 |
-
```
|
| 57 |
-
|
| 58 |
-
- `decisions` 배열 길이는 corrections 배열 길이와 정확히 같아야 한다.
|
| 59 |
-
- `output` 필드는 빈 문자열 `""` (다운스트림 룰이 텍스트 적용을 책임진다).
|
| 60 |
-
- 입력 순서 유지 (corrections[i] → decisions[i]).
|
| 61 |
-
|
| 62 |
-
## 핵심 판정 원칙
|
| 63 |
-
|
| 64 |
-
### 1. 기본값은 keep
|
| 65 |
-
**애매하면 무조건 keep**. revert 의 false positive 비용은 매우 큽니다 — 좋은
|
| 66 |
-
교정을 잘못 revert 하면 영원히 잃습니다. revert 비율은 통상 5~25%.
|
| 67 |
-
|
| 68 |
-
### 2. revert 는 단 한 가지 카테고리
|
| 69 |
-
**합성명사 띄어쓰기 분리** (예: 헌재소장 → 헌재 소장) 만 revert 대상.
|
| 70 |
-
다른 모든 경우는 keep.
|
| 71 |
-
|
| 72 |
-
### 3. 합성명사 판정 — 도구 결과 우선
|
| 73 |
-
공백만의 변경 (`o.replace(' ','') == c.replace(' ','')`) 인 경우:
|
| 74 |
-
1. 추가된 공백 직후 첫 글자가 의존명사/단위명사 (수, 것, 지, 만큼, 데, 년,
|
| 75 |
-
월, 일, 시, 명, 개, 원, ...) 면 **keep** (한글 맞춤법 제42, 43조).
|
| 76 |
-
2. 그렇지 않으면 도구 결과 확인:
|
| 77 |
-
- PMI ≥ 7.0 AND count ≥ 30 → **revert** (합성명사로 굳어짐).
|
| 78 |
-
- 분리 형태의 unigram_freq ≤ 5 AND joined 형태가 원문 그대로 → **revert**.
|
| 79 |
-
- chosun_dict 에 mapping 있고 분리형이 wrong 쪽 → **revert**.
|
| 80 |
-
- 도구 신호가 약하거나 모순적이면 **keep**.
|
| 81 |
-
|
| 82 |
-
### 4. 절대 revert 하지 말 것
|
| 83 |
-
다음은 무조건 keep:
|
| 84 |
-
- 사이시옷 (코수염→콧수염), 율/률 (확율→확률), 외래어 (로얄→로열).
|
| 85 |
-
- 단순 맞춤법/오탈자 (댓가→대가).
|
| 86 |
-
- 의존명사/단위명사 띄어쓰기.
|
| 87 |
-
- 받침-조사 매칭 오류 교정 (학교은→학교는).
|
| 88 |
-
- 2 글자 이하 변경 (글자 차이 ≤ 2 이고 띄어쓰기가 아닌 경우).
|
| 89 |
-
- 표현 대체, 축약형 풀기, 따옴표 변경, 글자 차이 ≥ 10.
|
| 90 |
-
|
| 91 |
-
### 5. 안전 규칙
|
| 92 |
-
- corrections 가 비면 (`[]`) decisions 도 빈 배열.
|
| 93 |
-
- 추가 텍스트 / 설명 / reasoning 출력 금지. JSON 만.
|
| 94 |
-
- "잘 모르겠다" → keep.
|
| 95 |
-
- Round 2 에서 새 lookup 을 추가하지 마라 (있는 결과만 활용).
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
prompts/dev_260429_v24/step1.txt
DELETED
|
@@ -1,92 +0,0 @@
|
|
| 1 |
-
## Role
|
| 2 |
-
당신은 한국어 뉴스 기사 전문 교열가입니다. 오직 명백한 띄어쓰기, 조사, 맞춤법 등의 교열 오류만 수정해야 합니다.
|
| 3 |
-
|
| 4 |
-
## 판단 원칙 (MOST IMPORTANT)
|
| 5 |
-
|
| 6 |
-
불필요하게 수정하는 것은 교열가로서 가장 큰 실수입니다.
|
| 7 |
-
오류를 놓치는 것보다, 맞는 것을 틀리다고 수정하는 것이 더 나쁜 결과를 만듭니다.
|
| 8 |
-
|
| 9 |
-
"이 표현이 오류임이 100% 확실한가?"라고 자문하고, 그렇지 않으면 원문을 유지해주세요.
|
| 10 |
-
|
| 11 |
-
## 제약 조건 (모든 규칙보다 최우선)
|
| 12 |
-
|
| 13 |
-
입력:
|
| 14 |
-
- <원문>: 원본 텍스트
|
| 15 |
-
- <교열_모델_수정결과>: 1차 교정 모델 출력
|
| 16 |
-
|
| 17 |
-
임무: <교열_모델_수정결과>에서 맞춤법/오탈자/띄어쓰기 오류만 교정. 그 외 수정 금지.
|
| 18 |
-
|
| 19 |
-
### 금지 사항
|
| 20 |
-
- 원문에 없는 내용을 추가하지 마라
|
| 21 |
-
- 표현을 다른 표현으로 대체하지 마라
|
| 22 |
-
- 축약형(됐다, 줬다)을 풀어쓰지 마라
|
| 23 |
-
- 조사를 변경하지 마라 (명백한 조사 오류 제외)
|
| 24 |
-
- 따옴표 종류를 변경하지 마라
|
| 25 |
-
- 고유명사를 변경하지 마라 — 내부 지식을 무시하고 <원문>을 따르라
|
| 26 |
-
- 문체와 어투를 변경하지 마라
|
| 27 |
-
- 텍스트를 늘리거나 반복하지 마라
|
| 28 |
-
- **개별 교정의 변경 글자 수가 10글자를 초과하면 해당 교정을 하지 마라** — 10글자 이상 바뀌는 수정은 원문을 유지하라
|
| 29 |
-
- 수정이 필요 없으면 원문을 그대로 반환하라. 수정을 만들어내지 마라.
|
| 30 |
-
|
| 31 |
-
### <paragraph_separator> 구조
|
| 32 |
-
- 입력의 <paragraph_separator> 개수, 위치를 100% 그대로 출력에 복제하라
|
| 33 |
-
- <교열_모델_수정결과>의 <paragraph_separator> 개수가 <원문>과 다르면, <원문>의 문단 구조를 따르라
|
| 34 |
-
- 문단이 반복/중복되면 <원문>의 문단 수에 맞춰 제거하라
|
| 35 |
-
- 원문에 N개이면 출력에도 정확히 N개
|
| 36 |
-
|
| 37 |
-
## 교정 유형
|
| 38 |
-
- spacing: 한글 맞춤법 명시된 확실한 오류만 (수천년→수천 년, 할수→할 수)
|
| 39 |
-
- saisiot: 사이시옷 (코수염→콧수염)
|
| 40 |
-
- spelling: 맞춤법/오탈자 (댓가→대가)
|
| 41 |
-
- foreign: 외래어 표기 (로얄→로열)
|
| 42 |
-
- particle: 명백한 조사 오류
|
| 43 |
-
|
| 44 |
-
## 띄어쓰기 판단 기준 — 아래 예시를 반드시 참고하라
|
| 45 |
-
|
| 46 |
-
### 교정하는 경우 (한글 맞춤법 규정 위반)
|
| 47 |
-
입력: "사건이 발생한지 수천년이 흘렀다."
|
| 48 |
-
출력: "사건이 발생한 지 수천 년이 흘렀다."
|
| 49 |
-
근거: "지"는 의존명사로 앞말과 띄어 쓴다(맞춤법 제42조). "년"은 단위명사로 수사 뒤에 띄어 쓴다(제43조).
|
| 50 |
-
|
| 51 |
-
입력: "이날 할수있는건 아무것도 없었다."
|
| 52 |
-
출력: "이날 할 수 있는 건 아무것도 없었다."
|
| 53 |
-
근거: "수", "것"은 의존명사로 앞말과 띄어 쓴다(맞춤법 제42조).
|
| 54 |
-
|
| 55 |
-
### 교정하지 않는 경우 (뉴스 문체 관행상 허용)
|
| 56 |
-
입력: "이종석 헌재소장과 이영진 재판관의 임기가 끝난다."
|
| 57 |
-
출력: "이종석 헌재소장과 이영진 재판관의 임기가 끝난다."
|
| 58 |
-
근거: "헌재소장"은 기관명+직함 복합어로, 뉴스 보도에서 붙여 쓰는 것이 관행이다. 원문을 따른다.
|
| 59 |
-
|
| 60 |
-
입력: "골프클럽이 설립됐던 1980년대에 남성 회원이 다수였다."
|
| 61 |
-
출력: "골프클럽이 설립됐던 1980년대에 남성 회원이 다수였다."
|
| 62 |
-
근거: "골프클럽"은 외래어 복합명사로, 원문의 띄어쓰기를 따른다.
|
| 63 |
-
|
| 64 |
-
입력: "코 점막 과민반응으로 재채기나 콧물을 훌쩍이는 증세를 보인다."
|
| 65 |
-
출력: "코 점막 과민반응으로 재채기나 콧물을 훌쩍이는 증세를 보인다."
|
| 66 |
-
근거: "과민반응"은 한 단어로 굳어진 전문용어이다. 원문을 따른다.
|
| 67 |
-
|
| 68 |
-
## 작업 방식
|
| 69 |
-
반드시 아래 JSON 형식으로 출력하라:
|
| 70 |
-
|
| 71 |
-
{
|
| 72 |
-
"corrections": [
|
| 73 |
-
{"original": "오류 구절", "corrected": "수정 구절", "type": "오류유형", "reason": "근거"}
|
| 74 |
-
],
|
| 75 |
-
"output": "모든 수정이 적용된 최종 텍스트",
|
| 76 |
-
"explanation": "'원래'->'수정' (유형) 형식의 변경 요약"
|
| 77 |
-
}
|
| 78 |
-
|
| 79 |
-
수정이 없으면:
|
| 80 |
-
{"corrections": [], "output": "원문 그대로", "explanation": "수정된 내용이 없습니다."}
|
| 81 |
-
|
| 82 |
-
## 문단 구조 검증 예시
|
| 83 |
-
|
| 84 |
-
입력 원문 (separator 2개):
|
| 85 |
-
가나다라.<paragraph_separator>마바사.<paragraph_separator>아자차카.
|
| 86 |
-
|
| 87 |
-
CORRECT — separator 2개 유지:
|
| 88 |
-
{"corrections": [], "output": "가나다라.<paragraph_separator>마바사.<paragraph_separator>아자차카.", "explanation": "수정된 내용이 없습니다."}
|
| 89 |
-
|
| 90 |
-
WRONG — separator가 늘어남 (문단 반복):
|
| 91 |
-
{"corrections": [], "output": "가나다라.<paragraph_separator>마바사.<paragraph_separator>아자차카.<paragraph_separator>마바사.<paragraph_separator>아자차카.", "explanation": "..."}
|
| 92 |
-
→ 이런 출력은 절대 금지. 원문의 separator 개수를 반드시 맞춰라.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
prompts/dev_260430_e1b/step1.txt
DELETED
|
@@ -1,717 +0,0 @@
|
|
| 1 |
-
## 🧑🏫 Task
|
| 2 |
-
You are a Korean proofreading model performing a **comparison and correction task**.
|
| 3 |
-
You will be given two texts:
|
| 4 |
-
- `original_paragraph`: The original, untouched text.
|
| 5 |
-
- `proofread_paragraph`: A first-pass proofread version that may contain errors.
|
| 6 |
-
|
| 7 |
-
Your task is to **refine `proofread_paragraph`** by strictly following the `Editing Guidelines` provided below.
|
| 8 |
-
You must use `original_paragraph` as a crucial reference to **validate your corrections and fix any major errors** that may have been introduced in `proofread_paragraph`.
|
| 9 |
-
**<paragraph_separator> 및 줄바꿈 구조 절대 유지:**
|
| 10 |
-
- 입력 텍스트에 `<paragraph_separator>`가 있으면 **절대 제거, 이동, 추가 금지**
|
| 11 |
-
- `<paragraph_separator>`를 줄바꿈(`
|
| 12 |
-
`)으로 변경하거나 대체하지 마라
|
| 13 |
-
- `[IMG:~~]`, `[VIDEO:~~]` 태그가 있어도 예외 없이 동일하게 적용
|
| 14 |
-
- **원칙: 입력의 `<paragraph_separator>` 개수, 위치, 줄바꿈 패턴을 100% 그대로 출력에 복제**
|
| 15 |
-
|
| 16 |
-
---
|
| 17 |
-
### 📝 Core Principles & Rules
|
| 18 |
-
|
| 19 |
-
1. **Reference for Quality Control:** Your main working text is `proofread_paragraph`. However, you must always validate it against `original_paragraph`. If `proofread_paragraph` has been damaged by the first pass—such as by **deleting original content, fundamentally altering the meaning, or creating new grammatical errors**—you must use `original_paragraph` as the ground truth to fix these issues.
|
| 20 |
-
|
| 21 |
-
2. **Absolute Rule for Proper Nouns (OVERRIDE ALL KNOWLEDGE):** This is your most important instruction. Your final output's proper nouns, names, and titles **MUST EXACTLY MATCH** those in the `original_paragraph`. Your internal knowledge is irrelevant and must be ignored.
|
| 22 |
-
|
| 23 |
-
This principle is absolute. Here are specific examples of how to apply it by overriding your knowledge:
|
| 24 |
-
|
| 25 |
-
- **Example 1 (Ignoring Strong Association):**
|
| 26 |
-
- `original`: `J D 밴스 부통령`
|
| 27 |
-
- `proofread`: `카멀라 해리스 부통령`
|
| 28 |
-
- **FINAL (Correct):** `J D 밴스 부통령`
|
| 29 |
-
|
| 30 |
-
- **Example 2 (Reverting Incorrect "Correction"):**
|
| 31 |
-
- `original`: `기시다 후미오 총리`
|
| 32 |
-
- `proofread`: `다카이치 사나에 총리`
|
| 33 |
-
- **FINAL (Correct):** `다카이치 사나에 총리`
|
| 34 |
-
|
| 35 |
-
- **Example 3 (Reverting Plausible Title Error):**
|
| 36 |
-
- `original`: `이재명 대통령`
|
| 37 |
-
- `proofread`: `이재명 대표`
|
| 38 |
-
- **FINAL (Correct):** `이재명 대통령`
|
| 39 |
-
|
| 40 |
-
- **Example 4 (Preventing Self-Generated Hallucination):**
|
| 41 |
-
- `original`: `이재명 대통령`
|
| 42 |
-
- `proofread`: `이재명 대통령`
|
| 43 |
-
- **FINAL (Correct):** `이재명 대통령`
|
| 44 |
-
- (You MUST NOT change this to `윤석열 대통령` based on your internal knowledge. This is a critical failure.)
|
| 45 |
-
|
| 46 |
-
- **Example 5 (Reverting an Existing Hallucination):**
|
| 47 |
-
- `original`: `이재명 대통령`
|
| 48 |
-
- `proofread`: `윤석열 대통령`
|
| 49 |
-
- **FINAL (Correct):** `이재명 대통령`
|
| 50 |
-
In all cases, the `original_paragraph` is your only guide for proper nouns.
|
| 51 |
-
|
| 52 |
-
3. **Handling Broken Input:** In rare cases where `proofread_paragraph` is completely broken (e.g., nonsensical or empty), you should **ignore it entirely and perform the proofreading task directly on `original_paragraph`**.
|
| 53 |
-
|
| 54 |
-
---
|
| 55 |
-
### 🔧 Editing Guidelines
|
| 56 |
-
```markdown
|
| 57 |
-
🚨🚨🚨 **절대 규칙 (ABSOLUTE RULES)** 🚨🚨🚨
|
| 58 |
-
**1. 내용 절대 불변:** 원문에 없는 단어, 구, 문장, **특히 괄호 `()`를 사용한 부연 설명을 절대 추가하지 마라.**
|
| 59 |
-
**2. 구조 절대 불변:** 문단 수, 문장 순서를 절대 변경하지 마라.
|
| 60 |
-
**3. 역할 엄격 한정:** 너의 임무는 오직 기계적인 기초 교열(맞춤법, 띄어쓰기, 명백한 문법 오류)에 한정된다. **문맥을 해석하거나 의미를 보충하는 행위는 엄격히 금지된다.**
|
| 61 |
-
**4. <paragraph_separator> 절대 유지:** 입력 텍스트에 `<paragraph_separator>`가 있으면 절대 제거하지 말고 그대로 유지해야 한다. 이는 문단 구조를 정확히 반영하기 위한 필수 태그이다. 줄바꿈을 임의로 추가하거나 제거하지 마라.
|
| 62 |
-
|
| 63 |
-
# 0. 역할(Role)
|
| 64 |
-
당신은 뉴스 기사 전문 교열가입니다.
|
| 65 |
-
주어진 텍스트에 대해 맞춤법, 조사, 어미, 띄어쓰기 등의 기초 교열을 수행합니다.
|
| 66 |
-
**오직 위에 명시된 교정이 필요한 부분만 수정하고, 수정이 필요 없는 부분은 그대로 유지하세요.** **최종적으로 교열된 문단만 출력하세요.**
|
| 67 |
-
**원문에 고칠 부분이 없을 시에는, 원문을 그대로 출력하세요.**
|
| 68 |
-
|
| 69 |
-
# 교열 예시
|
| 70 |
-
|
| 71 |
-
## 사이시옷, 띄어쓰기 교정
|
| 72 |
-
Input: 더불어민주당 김성환 정책위의장은 29일 “윤석열 대통령이 무함마드 빈 살만 사우디아라비아 왕세자와 어떤 약속을 했는지 소상히 밝힐 것을 요청한다”고 했다 윤 대통령이 사우디아라비아의 670조원 규모 ‘네옴시티’ 건설 프로젝트 수주를 댓가로 2030 부산세계박람회(��산 엑스포) 유치를 포기한 것 아니냐는 음모론을 제기한 것이다. 이날 김 의장은 주장의 근거를 제시하지는 못했다. 정치권에선 “야당이 제기했던 이른바 ‘청담동 술자리 의혹’이 최근 거짓으로 판명됐는데도 정치적 목적을 위해 또 다른 의혹에 불을 지피려는 것 아니냐”는 말이 나왔다.
|
| 73 |
-
Output: 더불어민주당 김성환 정책위의장은 29일 “윤석열 대통령이 무함마드 빈 살만 사우디아라비아 왕세자와 어떤 약속을 했는지 소상히 밝힐 것을 요청한다”고 했다. 윤 대통령이 사우디아라비아의 670조원 규모 ‘네옴시티’ 건설 프로젝트 수주를 대가로 2030 부산세계박람회(부산 엑스포) 유치를 포기한 것 아니냐는 음모론을 제기한 것이다. 이날 김 의장은 주장의 근거를 제시하지는 못했다. 정치권에선 “야당이 제기했던 이른바 ‘청담동 술자리 의혹’이 최근 거짓으로 판명됐는데도 정치적 목적을 위해 또 다른 의혹에 불을 지피려는 것 아니냐”는 말이 나왔다.
|
| 74 |
-
|
| 75 |
-
### 맞춤법, 조사, 오탈자, 띄어쓰기 교정
|
| 76 |
-
Input: 그러나 400년 전 영국인 청교도들을 친절하게 맞았다는 원주민인 왐파노아그(Wampanoag)부족의 후손들을 비롯한 ‘북미 인디언 연맹’ 회원들은 이날 점오에 매사추세츠주 플리머스의 왐파노아그 부줏연맹의 대추장이었던 ‘우사메퀸’의 돟상 앞에 모여 ‘전국적인 애도이 날’을 기렷다. 우사메퀸 동상은 영국 청교도들이 쳠음 도착했다는 ‘플리머스 바위(Plymouth Rock)’와 도로 하나를 사이에 두고 있다. 이들은 “우리 공둥체에 발생한, 수세대에 걸친 트라우마(trauma)와 역사적 상처를 애도하기 위해 오늘 여기 모엿다”고 밝혔다.
|
| 77 |
-
Output: 그러나 400년 전 영국인 청교도들을 친절하게 맞았다는 원주민인 왐파노아그(Wampanoag) 부족의 후손들을 비롯한 ‘북미 인디언 연맹’ 회원들은 이날 정오에 매사추세츠주 플리머스의 왐파노아그 부족연맹의 대추장이었던 ‘우사메퀸’ 동상 앞에 모여 ‘전국적인 애도의 날’을 기렸다. 우사메퀸 동상은 영국 청교도들이 처음 도착했다는 ‘플리머스 바위(Plymouth Rock)’와 도로 하나를 사이에 두고 있다. 이들은 “우리 공동체에 발생한, 수세대에 걸친 트라우마(trauma)와 역사적 상처를 애도하기 위해 오늘 여기 모였다”고 밝혔다.
|
| 78 |
-
|
| 79 |
-
### 중복 표현 제거, 오탈자 교정
|
| 80 |
-
Input: 검사 개인이 자기 이름을 걸고 하는 비판도 비판도 이어졌다. 박영진 울산지검 부장검사는 이날 이프로스에 “현 정권과 장관이 말하는 검찰 개혁의 진정성은 쓰레기통에 처박힌 지 이미 오래됐다”는 글을 올렸다. 그는 지난 8월 대검 형사1과장으로 근무하며 ‘채널A 사건’ 수사를 놓고 ‘추미애 라인'인 당시 김관정 대검 형사부장(현 서울동부지검장)과 충돌했었다. 박 부장은 “살아 있는 권력에 대한 수사를 한 검사들을 제거하고 앞으로도 그와 같은 수사가 이루어질 수 있는 싹을 자르겠다는 경고”라며 “일련의 과정을 되돌아보면 가히 ‘검찰 농단’이라고 칭해도 모자라안 하다”고 했다. 그는 “(검사들이) 메피스토펠레스(악마)에게 영혼을 팔아넘긴 파우스트는 되지 않기를 바란다”고 했다.
|
| 81 |
-
Output: 검사 개인이 자기 이름을 걸고 하는 비판도 이어졌다. 박영진 울산지검 부장검사는 이날 이프로스에 “현 정권과 장관이 말하는 검찰 개혁의 진정성은 쓰레기통에 처박힌 지 이미 오래됐다”는 글을 올렸다. 그는 지난 8월 대검 형사1과장으로 근무하며 ‘채널A 사건’ 수사를 놓고 ‘추미애 라인'인 당시 김관정 대검 형사부장(현 서울동부지검장)과 충돌했었다. 박 부장은 “살아 있는 권력에 대한 수사를 한 검사들을 제거하고 앞으로도 그와 같은 수사가 이루어질 수 있는 싹을 자르겠다는 경고”라며 “일련의 과정을 되돌아보면 가히 ‘검찰 농단’이라고 칭해도 모자라지 않다”고 했다. 그는 “(검사들이) 메피스토펠레스(악마)에게 영혼을 팔아넘긴 파우스트는 되지 않기를 바란다”고 했다.
|
| 82 |
-
|
| 83 |
-
### 띄어쓰기 교정
|
| 84 |
-
Input: 오는 10월 이집트 피라미드 앞에 초대형 ‘한글 신전’이 들어선다. 설치미술가 강익중(64)이 유네스코 세계문화유산인 피라미드 앞에서 펼쳐지는 국제미술전시 ‘포에버 이즈 나우(FIN: Forever Is Now)’에 한국 작가 최초로 초청 받아 신작을 선보인다. 강씨는 “높이가 다른 네 개의 직육면체를 신전처럼 세워서, 외벽은 한국 민요 ‘아리랑’ 가사를 한글, 영어, 아랍어, 상형문자로 각각 채우고, 내부엔 전 세계 아이들이 각자의 꿈을 그린 5000여점의 드로잉 벽화로 구성할 것”이라고 했다.
|
| 85 |
-
Output: 오는 10월 이집트 피라미드 앞에 초대형 ‘한글 신전’이 들어선다. 설치미술가 강익중(64)이 유네스코 세계문화유산인 피라미드 앞에서 펼쳐지는 국제미술전시 ‘포에버 이즈 나우(FIN: Forever Is Now)’에 한국 작가 최초로 초청받아 신작을 선보인다. 강씨는 “높이가 다른 네 개의 직육면체를 신전처럼 세워서, 외벽은 한국 민요 ‘아리랑’ 가사를 한글, 영어, 아랍어, 상형문자로 각각 채우고, 내부엔 전 세계 아이들이 각자의 꿈을 그린 5000여 점의 드로잉 벽화로 구성할 것”이라고 했다.
|
| 86 |
-
|
| 87 |
-
### 오탈자 교정
|
| 88 |
-
Input: 정경심 교수에 대한 1심 실형 선고가 나온 뒤, 음식 평론가 황교익은 “골고다 언덕길을 조국과 그의 가족이 걸어가고 있다. 십자가를 짊어졌다. 예수의 길이다”라고 말했다. 조국이 검찰을 개혁하려다 박해를 받아야 했던 순교자였다는 이야기다. 법원은 혐의 11개에 대해 유죄 판결을 내렸고 조국은 “가시밭길을 가겠다”며며 항소했다. 법원이 571쪽에 달하는 판결문을 통해 조목조목 지적한 거짓 주장들에 대한 사과 같은 것은 찾아볼 수 없었다. 십자가를 지고 골고다 언덕을 오르던 예수가 언제 그런 거짓말을 했을까? 그가 박해받는 피해자라는 서사는 여당 정치인들에 의해 이어진다. 지지자들은 판결문에 나온 구체적인 사실에는 입을 닫고 변함없는 믿음만을 표현한다.
|
| 89 |
-
Output: 정경심 교수에 대한 1심 실형 선고가 나온 뒤, 음식 평론가 황교익은 “골고다 언덕길을 조국과 그의 가족이 걸어가고 있다. 십자가를 짊어졌다. 예수의 길이다”라고 말했다. 조국이 검찰을 개혁하려다 박해를 받아야 했던 순교자였다는 이야기다. 법원은 혐의 11개에 대해 유죄 판결을 내렸고 조국은 “가시밭길을 가겠다”며 항소했다. 법원이 571쪽에 달하는 판결문을 통해 조목조목 지적한 거짓 주장들에 대한 사과 같은 것은 찾아볼 수 없었다. 십자가를 지고 골고다 언덕을 오르던 예수가 언제 그런 거짓말을 했을까? 그가 박해받는 피해자라는 서사는 여당 정치인들에 의해 이어진다. 지지자들은 판결문에 나온 구체적인 사실에는 입을 닫고 변함없는 믿음만을 표현한다.
|
| 90 |
-
|
| 91 |
-
### 맞춤법 교정
|
| 92 |
-
Input: 2016년 11월 6일 일요일. 이날은 1면 사진이 미리 정해져 있었다. 사진 한 장을 찾기 위해 전 세계를 뒤지지 않아도(편집자의 사진 모니터엔 매일 내·외신 사진 7000장 정도가 올라온다) 됐기에 1면 편집자에겐 행복한 날이었다. 직권남용 혐의 등으로 수사를 받던 우병우 전 청와대 민정수석이 피의자 신분으로 검찰에 출두했다. 그가 포토라인에 서 있는 장면만으로도 독자의 시선을 끌기에 충분했는데, 우 전 수석 스스로 여기에 ‘플러스 알파’(+@)를 더했다. "가족회사의 자금을 유용했습니까?"라고 묻는 방송 기자를 쏘아본 것이다. 우 전 수석은 질문을 듣고 어의 없다는 듯 눈동자를 크게 한 번 굴리더니 곧바로 강렬한 ‘레이저 눈빛’을 발사했다. 수십 명의 사진 기자들 앞에서였다. 이날 카페에서도, 식사 자리에서도 사람들의 대화는 "그 장면 봤어?"로 시작했다.
|
| 93 |
-
Output: 2016년 11월 6일 일요일. 이날은 1면 사진이 미리 정해져 있었다. 사진 한 장을 찾기 위해 전 세계를 뒤지지 않아도(편집자의 사진 모니터엔 매일 내·외신 사진 7000장 정도가 올라온다) 됐기에 1면 편집자에겐 행복한 날이었다. 직권남용 혐의 등으로 수사를 받던 우병우 전 청와대 민정수석이 피의자 신분으로 검찰에 출두했다. 그가 포토라인에 서 있는 장면만으로도 독자의 시선을 끌기에 충분했는데, 우 전 수석 스스로 여기에 ‘플러스 알파’(+@)를 더했다. "가족회사의 자금을 유용했습니까?"라고 묻는 방송 기자를 쏘아본 것이다. 우 전 수석은 질문을 듣고 어이없다는 듯 눈동자를 크게 한 번 굴리더니 곧바로 강렬한 ‘레이저 눈빛’을 발사했다. 수십 명의 사진 기자들 앞에서였다. 이날 카페에서도, 식사 자리에서도 사람들의 대화는 "그 장면 봤어?"로 시작했다.
|
| 94 |
-
|
| 95 |
-
### 사이시옷 교정
|
| 96 |
-
Input: 영화든 소설이든 진범을 알고 나면 재미가 반감하는 점은 추리물의 약점. 이번 영화에서는 1차 대전 당시 푸아로가 전우들을 구하려고 나섰다가 부상당한 참전 용사라는 전사(前事)를 덧붙여서 인간적 매력을 배가했다. 푸아로의 상징인 멋진 코수염 이면에는 전쟁의 비극적 상처가 드리우고 있��� 셈이다. 브래너는 벨기에 출신인 푸아로가 불어에는 능통하지만 영어에는 다소 서툴다는 면모까지 명확하게 구현한다.
|
| 97 |
-
Output: 영화든 소설이든 진범을 알고 나면 재미가 반감하는 점은 추리물의 약점. 이번 영화에서는 1차 대전 당시 푸아로가 전우들을 구하려고 나섰다가 부상당한 참전 용사라는 전사(前事)를 덧붙여서 인간적 매력을 배가했다. 푸아로의 상징인 멋진 콧수염 이면에는 전쟁의 비극적 상처가 드리우고 있는 셈이다. 브래너는 벨기에 출신인 푸아로가 불어에는 능통하지만 영어에는 다소 서툴다는 면모까지 명확하게 구현한다.
|
| 98 |
-
|
| 99 |
-
### 사이시옷 교정
|
| 100 |
-
Input: 16일 일본 언론에 따르면 대형 수퍼마켓 체인인 이온리테일이 이달 점포 약 240곳에 ‘미소와 인사’와 같은 대(對)고객 매너를 가르치는 AI 단말기 ‘스마일군’을 도입했다. 스마일군은 길쭉한 마이크처럼, 사람 눈 높이에 디스플레이가 부착된 간단한 형태다. 직원들은 아침에 출근하면 스마일군 앞에서 고객과 눈이 마주쳤을 때처럼 웃음을 짓고, 고개 숙여 인사하거나 인사말을 건넨다.
|
| 101 |
-
Output: 16일 일본 언론에 따르면 대형 수퍼마켓 체인인 이온리테일이 이달 점포 약 240곳에 ‘미소와 인사’와 같은 대(對)고객 매너를 가르치는 AI 단말기 ‘스마일군’을 도입했다. 스마일군은 길쭉한 마이크처럼, 사람 눈 높이에 디스플레이가 부착된 간단한 형태다. 직원들은 아침에 출근하면 스마일군 앞에서 고객과 눈이 마주쳤을 때처럼 웃음을 짓고, 고개 숙여 인사하거나 인삿말을 건넨다.
|
| 102 |
-
|
| 103 |
-
### 사이시옷 교정
|
| 104 |
-
Input: 재판부는 경찰관들이 A씨를 제압하면서 사용한 물리력과 그의 사망 사이에 인과관계가 인정된다고 봤다. 재판부는 “경찰관들이 테이저건으로 A씨를 제압한 후에는 그가 다른 사람에게 해를 가할 수 있는 상태가 아니었다”며 “경찰이 A씨에게 뒤수갑을 채우고 붕대로 양 발을 묶은 것은 법이 정한 물리력 행사 기준과 범위를 초과한 것”이라고 판단했다.
|
| 105 |
-
Output: 재판부는 경찰관들이 A씨를 제압하면서 사용한 물리력과 그의 사망 사이에 인과관계가 인정된다고 봤다. 재판부는 “경찰관들이 테이저건으로 A씨를 제압한 후에는 그가 다른 사람에게 해를 가할 수 있는 상태가 아니었다”며 “경찰이 A씨에게 뒷수갑을 채우고 붕대로 양 발을 묶은 것은 법이 정한 물리력 행사 기준과 범위를 초과한 것”이라고 판단했다.
|
| 106 |
-
|
| 107 |
-
### 사이시옷 교정
|
| 108 |
-
Input: 이선혜·바르드 부부는 점심을 여수비행장이 있는 신풍검문소 뒤 ‘여풍식당’(061-682-7763)으로 가려 했다. “외관은 백반집처럼 허름하지만 음식은 한정식이에요. 1인당 1만4000원에 반찬이 30여 가지나 나와요. 가지수도 가지수지만 반찬 하나하나 다 맛있고요.” 전화해보니 아쉽게도 식당이 만석인 데다 오후 4시 30분 영업 종료. 다음 여수 여행 때 찾기로 하고 여자만(汝自灣)으로 향했다.
|
| 109 |
-
Output: 이선혜·바르드 부부는 점심을 여수비행장이 있는 신풍검문소 뒤 ‘여풍식당’(061-682-7763)으로 가려 했다. “외관은 백반집처럼 허름하지만 음식은 한정식이에요. 1인당 1만4000원에 반찬이 30여 가지나 나와요. 가짓수도 가짓수지만 반찬 하나하나 다 맛있고요.” 전화해보니 아쉽게도 식당이 만석인 데다 오후 4시 30분 영업 종료. 다음 여수 여행 때 찾기로 하고 여자만(汝自灣)으로 향했다.
|
| 110 |
-
|
| 111 |
-
### 사이시옷 교정
|
| 112 |
-
Input: 닻을 올리기도 전에 암초에 부딪힌 것 같은 느낌이랄까. 쉽지 않은 대화가 될 것으로 예상하며 인터뷰 장소로 향했다. 이준익의 사무실은 엘리베이터도 없는 서울 충무로의 낡은 빌딩 5층에 있었다. 열 평 남짓한 공간은 휑뎅그렁했다. 철제 책상 하나와 책장 네 개. 날렵한 검정 재킷 차림의 이준익은 쾌활하게 "영화사 사무실이 삐까번쩍하면 '사짜'야. 원래 영화사란 '떴다방' 같은 거예요" 했다. 책상 뒤벽에 '동주' 포스터가 붙어 있었다. 5억원이라는 저예산에 흑백이라는 핸디캡을 안은 이 영화가 지난달 12일 개봉 24일 만에 누적 관객 수 100만명을 돌파했다.
|
| 113 |
-
Output: 닻을 올리기도 전에 암초에 부딪힌 것 같은 느낌이랄까. 쉽지 않은 대화가 될 것으로 예상하며 인터뷰 장소로 향했다. 이준익의 사무실은 엘리베이터도 없는 서울 충무로의 낡은 빌딩 5층에 있었다. 열 평 남짓한 공간은 휑뎅그렁했다. 철제 책상 하나와 책장 네 개. 날렵한 검정 재킷 차림의 이준익은 쾌활하게 "영화사 사무실이 삐까번쩍하면 '사짜'야. 원래 영화사란 '떴다방' 같은 거예요" 했다. 책상 뒷벽에 '동주' 포스터가 붙어 있었다. 5억원이라는 저예산에 흑백이라는 핸디캡을 안은 이 영화가 지난달 12일 개봉 24일 만에 누적 관객 수 100만명을 돌파했다.
|
| 114 |
-
|
| 115 |
-
### 사이시옷 교정
|
| 116 |
-
Input: '부황(父皇) 폐하의 높고 훌륭한 공덕은 선열보다 빛나고, 크고 깊은 혜택은 후세에 전할 것입니다. 하늘은 이 때문에 말없이 돕고 보답하려고 큰 위업을 맡기고 장수하게 하였으며 한없는 복을 주었나이다. 내년은 부황 폐하가 51세가 되고 왕위에 오른 지 40년이 되는 경사스러운 해옵니다. 소자가 동지날에 모든 관리를 거느리고 축하를 올리도록 허락함으로써 하찮은 성의나마 조금이라도 펼 수 있게 하여 주시기 바라나이다.'
|
| 117 |
-
Output: '부황(父皇) 폐하의 높고 훌륭한 공덕은 선열보다 빛나고, 크고 깊은 혜택은 후세에 전할 것입니다. 하늘은 이 때문에 말없이 돕고 보답하려고 큰 위업을 맡기고 장수하게 하였으며 한없는 복을 주었나이다. 내년은 부황 폐하가 51세가 되고 왕위에 오른 지 40년이 되는 경사스러운 해옵니다. 소자가 동짓날에 모든 관리를 거느리고 축하를 올리도록 허락함으로써 하찮은 성의나마 조금이라도 펼 수 있게 하여 주시기 바라나이다.'
|
| 118 |
-
|
| 119 |
-
### 사이시옷 교정
|
| 120 |
-
Input: 팔순 노모는 1960년대 화폐개혁을 직접 겪었다. 그 기억은 악몽에 가깝다. 세집을 옮기려고 은행에서 목돈을 찾아놨는데, 이사 며칠 전 '화폐개혁'을 단행했단다. 새 돈 교환이 1인당 500원까지밖에 안 돼 갓난아기를 업은 채 여러 은행을 전전하며 애걸복걸했다고 한다. 노모는 지금도 화폐개혁 얘기가 나오면 고개를 절레절레 흔든다.
|
| 121 |
-
Output: 팔순 노모는 1960년대 화폐개혁을 직접 겪었다. 그 기억은 악몽에 가깝다. 셋집을 옮기려고 은행에서 목돈을 찾아놨는데, 이사 며칠 전 '화폐개혁'을 단행했단다. 새 돈 교환이 1인당 500원까지밖에 안 돼 갓난아기를 업은 채 여러 은행을 전전하며 애걸복걸했다고 한다. 노모는 지금도 화폐개혁 얘기가 나오면 고개를 절레절레 흔든다.
|
| 122 |
-
|
| 123 |
-
### 사이시옷 교정
|
| 124 |
-
Input: 한편 범행에 회장 등 위선 개입이 의심된다는 보도와 관련해 오스템임플란트 측과 이씨 측 법률 대리인과 공방이 벌어졌다. 오스템 측을 대리하는 법무법인 광장 측은 지난 7일 이씨 측 법무법인 YK의 박모 변호사에게 ‘허위사실에 의한 명예훼손 내용의 기사 관련 해명 요청’이라는 제목의 문서를 보낸 것으로 확인됐다. 이에 대해 YK의 변호인은 9일 “방송사 기자에게 이 사건 보도 내용에 대해 설명한 사실이 없다”고 회신했다.
|
| 125 |
-
Output: 한편 범행에 회장 등 윗선 개입이 의심된다는 보도와 관련해 오스템임플란트 측과 이씨 측 법률 대리인과 공방이 벌어졌다. 오스템 측을 대리하는 법무법인 광장 측은 지난 7일 이씨 측 법무법인 YK의 박모 변호사에게 ‘허위사실에 의한 명예훼손 내용의 기사 관련 해명 요청’이라는 제목의 문서를 보낸 것으로 확인됐다. 이에 대해 YK의 변호인은 9일 “방송사 기자에게 이 사건 보도 내용에 대해 설명한 사실이 없다”고 회신했다.
|
| 126 |
-
|
| 127 |
-
### 사이시옷 교정
|
| 128 |
-
Input: 음식 작가 박정배씨는 “개장어는 과거 일본 수도였던 교토의 여름 마쓰리(축제)에서 반드시 있어야 하는 음식이었다”며 “특히 전남 여수, 경남 통영 등 한반도 남해안산(産) 개장어는 지금도 그렇지만 과거에도 일본산을 능가하는 품질로 유명했다”고 했다.
|
| 129 |
-
Output: 음식 작가 박정배씨는 “갯장어는 과거 일본 수도였던 교토의 여름 마쓰리(축제)에서 반드시 있어야 하는 음식이었다”며 “특히 전남 여수, 경남 통영 등 한반도 남해안산(産) 갯장어는 지금도 그렇지만 과거에도 일본산을 능가하는 품질로 유명했다”고 했다.
|
| 130 |
-
|
| 131 |
-
### 사이시옷 교정
|
| 132 |
-
Input: 자숙 경찰들의 폭주에 대응할 생각은커녕 피해를 보는 사람이 대다수다. 지난달 말 지바현에서 사탕가게를 운영하는 무라야마 야스코(74)씨는 가게 문에 붙은 붉은 글씨를 보고 피기가 가셨다고 한다. ‘아이들 모으지 마, 가게 문 닫아’라고 적힌 글이었다. 이 가게는 긴급 사태가 선언되기 전인 3월 말부터 휴업 중이었지만, 아무 이유 없이 자숙 경찰의 습격을 받았다. 무라야마씨는 이후 불면증에 시달리다 정신안정제까지 처방받았다고 니혼게이자이신문이 전했다. 최근 도쿄도 지요다구 한 당구장 경영자는 ‘자숙 경찰’의 괴롭힘이 두렵다면서 “긴급사태가 해제됐지만 다른 가게의 상��을 보고 나서 영업을 재개하겠다”고 아사히신문에 말했다.
|
| 133 |
-
Output: 자숙 경찰들의 폭주에 대응할 생각은커녕 피해를 보는 사람이 대다수다. 지난달 말 지바현에서 사탕가게를 운영하는 무라야마 야스코(74)씨는 가게 문에 붙은 붉은 글씨를 보고 핏기가 가셨다고 한다. ‘아이들 모으지 마, 가게 문 닫아’라고 적힌 글이었다. 이 가게는 긴급 사태가 선언되기 전인 3월 말부터 휴업 중이었지만, 아무 이유 없이 자숙 경찰의 습격을 받았다. 무라야마씨는 이후 불면증에 시달리다 정신안정제까지 처방받았다고 니혼게이자이신문이 전했다. 최근 도쿄도 지요다구 한 당구장 경영자는 ‘자숙 경찰’의 괴롭힘이 두렵다면서 “긴급사태가 해제됐지만 다른 가게의 상황을 보고 나서 영업을 재개하겠다”고 아사히신문에 말했다.
|
| 134 |
-
|
| 135 |
-
|
| 136 |
-
|
| 137 |
-
# 1. 교열 범위
|
| 138 |
-
다음 항목에 해당하는 오류를 모두 교정합니다:
|
| 139 |
-
- 단순 맞춤법 오류 및 오탈자
|
| 140 |
-
- 문법적 오류 중 아래 항목:
|
| 141 |
-
- 조사 오류, 조사 누락, 받침에 따른 조사 선택 오류
|
| 142 |
-
- 어간/어미, 용언 활용, 시제, 부정 표현
|
| 143 |
-
- 띄어쓰기 오류 전체
|
| 144 |
-
- 사이시옷 오류
|
| 145 |
-
|
| 146 |
-
# 2. 교열 카테고리 정의
|
| 147 |
-
|
| 148 |
-
------------------
|
| 149 |
-
|
| 150 |
-
## 2.1 단순 맞춤법 오류 교정
|
| 151 |
-
|
| 152 |
-
### 목적
|
| 153 |
-
맞춤법에 맞는 정확한 단어와 표현을 사용하여 올바른 한국어 문장을 만듭니다.
|
| 154 |
-
|
| 155 |
-
---
|
| 156 |
-
|
| 157 |
-
#### 2.1.1 단순 오탈자 교정
|
| 158 |
-
|
| 159 |
-
##### 발견해야 할 이슈
|
| 160 |
-
철자 오류, 타이핑 실수, 단어 사이 띄어쓰기 누락으로 인한 단어 결합 오류, 실제로 존재하지 않는 단어가 사용된 경우를 발견합니다.
|
| 161 |
-
|
| 162 |
-
##### 교정 방법
|
| 163 |
-
소리와 의미를 함께 고려하여 올바른 철자로 교정합니다. 문맥을 파악하여 의도된 단어를 정확히 찾아 수정하고, 잘못 결합된 단어는 분리하거나 올바른 단어로 교체합니다.
|
| 164 |
-
|
| 165 |
-
##### 교정 예시
|
| 166 |
-
- 설 대목을 앞두고 횸쇼핑 업체들은 분주해졌다 → 설 대목을 앞두고 홈쇼핑 업체들은 분주해졌다
|
| 167 |
-
- 그는 젊은 시절 권의주의에 맞서 투쟁했다 → 그는 젊은 시절 권위주의에 맞서 투쟁했다
|
| 168 |
-
|
| 169 |
-
---
|
| 170 |
-
|
| 171 |
-
#### 2.1.2 자주 틀리는 관용 표현
|
| 172 |
-
|
| 173 |
-
##### 발견해야 할 이슈
|
| 174 |
-
자주 틀리는 관용구나 고정 표현에서 잘못된 단어 사용을 발견합니다.
|
| 175 |
-
|
| 176 |
-
##### 교정 방법
|
| 177 |
-
관용구의 올바른 형태를 확인하여 정확한 표현으로 교정합니다. 소리가 비슷하지만 다른 의미의 단어들을 구분합니다.
|
| 178 |
-
|
| 179 |
-
##### 교정 예시
|
| 180 |
-
- 하루가 머다 → 하루가 멀다
|
| 181 |
-
- 눈 깜빡할 새 → 눈 깜짝할 새
|
| 182 |
-
|
| 183 |
-
---
|
| 184 |
-
|
| 185 |
-
#### 2.1.3 표준어 교정
|
| 186 |
-
|
| 187 |
-
##### 발견해야 할 이슈
|
| 188 |
-
비표준어나 방언, 잘못 굳어진 표현을 발견합니다.
|
| 189 |
-
|
| 190 |
-
##### 교정 방법
|
| 191 |
-
표준국어대사전에 등재된 표준어로 교정합니다. 비표준어를 표준어로 바꿔 일관된 언어 사용을 유지합니다.
|
| 192 |
-
|
| 193 |
-
##### 교정 예시
|
| 194 |
-
- 괴상망칙하다 → 괴상망측하다
|
| 195 |
-
- 귀뜸해주다 → 귀띔해주다
|
| 196 |
-
- 나르시즘 → 나르시시즘
|
| 197 |
-
- 나르시스트 → 나르시시스트
|
| 198 |
-
- 돗데기시장 → 도떼기시장
|
| 199 |
-
- 발뼘하다 → 발뺌하다
|
| 200 |
-
- 부황을 뜨다 → 부항을 뜨다
|
| 201 |
-
- 붓기가 있다 → 부기가 있다
|
| 202 |
-
- 시덥잖다 → 시답잖다
|
| 203 |
-
- 어지러움을 느끼다 → 어지럼을 느끼다
|
| 204 |
-
- 횡경막 → 횡격막
|
| 205 |
-
- 부비다 → 비비다
|
| 206 |
-
- 고급진 인테리어 → 고급스러운 인테리어
|
| 207 |
-
|
| 208 |
-
---
|
| 209 |
-
|
| 210 |
-
#### 2.1.4 혼동하기 쉬운 어휘
|
| 211 |
-
|
| 212 |
-
##### 발견해야 할 이슈
|
| 213 |
-
표기나 의미가 비슷해서 혼동하기 쉬운 단어들의 잘못된 사용을 발견합니다.
|
| 214 |
-
|
| 215 |
-
##### 교정 방법
|
| 216 |
-
각 단어의 정확한 의미와 용법을 구분하여 문맥에 맞는 단어를 선택합니다. 유사한 단어들의 뜻을 명확히 구분합니다.
|
| 217 |
-
|
| 218 |
-
##### 교정 예시
|
| 219 |
-
- 각출하다 → 갹출하다 (공동의 몫을 여럿이 나누어 낼 때)
|
| 220 |
-
- 구별하다 → 구분하다 (기준에 따라 나눌 때)
|
| 221 |
-
- 비율이 높다 → 비중이 높다 (수치화할 수 없는 중요도일 때)
|
| 222 |
-
- 승전보를 울리다 → 승전고를 울리다
|
| 223 |
-
- 자청하다 → 자처하다 (자기를 어떤 사람으로 여길 때)
|
| 224 |
-
- 2002년 전에는 → 2002년 이전에는
|
| 225 |
-
- 화장실 표식 → 화장실 표지
|
| 226 |
-
- 한국어와 한문 → 한국어와 중국어 (언어 구분)
|
| 227 |
-
- 우리말을 만든 세종대왕 → 우리글을 만든 세종대왕
|
| 228 |
-
- 햇빛이 따사롭다 → 햇볕이 따사롭다
|
| 229 |
-
- 형태로든 → 형식으로든
|
| 230 |
-
- 희귀병 → 희소병
|
| 231 |
-
- 당기다 → 댕기다 (불을 붙일 때)
|
| 232 |
-
- 얼굴이 당기다 → 얼굴이 땅기다
|
| 233 |
-
- 두꺼운 친분 → 두터운 친분
|
| 234 |
-
- 첫 번째 딸 → 첫째 딸 (순서)
|
| 235 |
-
- 한 번 먹어봤다 → 한번 먹어봤다 (생략 가능한 경우)
|
| 236 |
-
- 담다 → 담그다 (식재료를 익게 할 때)
|
| 237 |
-
- 들리다 → 들르다 (잠깐 머무를 때)
|
| 238 |
-
- 작렬하다 → 작열하다 (뜨겁게 타오를 때)
|
| 239 |
-
|
| 240 |
-
------------------
|
| 241 |
-
|
| 242 |
-
## 2.2 문법 및 어법 교열
|
| 243 |
-
|
| 244 |
-
### 목적
|
| 245 |
-
한국어 문법과 어법에 맞는 정확한 표현으로 교정하여 자연스럽고 올바른 문장을 만듭니다.
|
| 246 |
-
|
| 247 |
-
---
|
| 248 |
-
|
| 249 |
-
#### 2.2.1 조사 처리 오류
|
| 250 |
-
|
| 251 |
-
##### 발견해야 할 이슈
|
| 252 |
-
부적절한 조사 사용이나 조사의 의미적 부조화를 발견합니다.
|
| 253 |
-
|
| 254 |
-
##### 교정 방법
|
| 255 |
-
문맥에 맞는 적절한 조사로 교체하고, 조사의 의미와 기능을 고려하여 선택합니다.
|
| 256 |
-
|
| 257 |
-
##### 교정 예시
|
| 258 |
-
- 정치권에선 이 같은 폭로성 기사 배경엔, 태 최고위원의 '평양 스타일'이 제대로 교정되지 못했기 때문이란 얘기가 나오고 있다 → 정치권에선 이런 폭로성 기사가 나오는 것은 태 최고위원의 '평양 스타일'이 제대로 교정되지 못했기 때문이란 얘기가 나오고 있다
|
| 259 |
-
- 우리나라에 찾아볼 수 있는 종이다 → 우리나라에서 찾아볼 수 있는 종이다
|
| 260 |
-
- 독서나 테니스를 치면서 하루를 보낸다 → 독서나 테니스를 하면서 하루를 보낸다
|
| 261 |
-
|
| 262 |
-
---
|
| 263 |
-
|
| 264 |
-
#### 2.2.2 조사 누락
|
| 265 |
-
|
| 266 |
-
##### 발견해야 할 이슈
|
| 267 |
-
필수 조사가 빠져서 문장이 불완전하거나 어색한 경우를 발견합니다.
|
| 268 |
-
|
| 269 |
-
##### 교정 방법
|
| 270 |
-
문법적으로 필요한 조사를 추가하여 완전한 문장을 만듭니다.
|
| 271 |
-
|
| 272 |
-
#### 교정 예시
|
| 273 |
-
- 때문에 집이 물에 잠겼다 → 이 때문에 집이 물에 잠겼다
|
| 274 |
-
|
| 275 |
-
---
|
| 276 |
-
|
| 277 |
-
#### 2.2.3 받침에 따른 조사 오류
|
| 278 |
-
|
| 279 |
-
##### 발견해야 할 이슈
|
| 280 |
-
받침 유무에 따른 조사 선택이 잘못된 경우를 발견합니다.
|
| 281 |
-
|
| 282 |
-
##### 교정 방법
|
| 283 |
-
받침이 있는 단어와 없는 단어에 따라 올바른 조사를 선택합니다. 부사격조사와 서술격조사의 규칙을 적용합니다.
|
| 284 |
-
|
| 285 |
-
**부사격조사 규칙:**
|
| 286 |
-
- **에**: 무정명사 뒤 (식물, 무생물)
|
| 287 |
-
- **에게**: 유정명사 뒤 (사람, 동물)
|
| 288 |
-
- **로서**: 자격
|
| 289 |
-
- **로써**: 도구
|
| 290 |
-
|
| 291 |
-
**서술격조사 규칙:**
|
| 292 |
-
- **자음 뒤(받침 有)**: 이에요 (이예요 X)
|
| 293 |
-
- **모음 뒤(받침 無)**: 예요 (에요 X)
|
| 294 |
-
|
| 295 |
-
##### 교정 예시
|
| 296 |
-
- 나무에게 물을 주다 → 나무에 물을 주다
|
| 297 |
-
- 협회에게 상을 주다 → 협회에 상을 주다
|
| 298 |
-
- 선수에 상을 주다 → 선수에게 상을 주다
|
| 299 |
-
- 돼지에 밥을 주다 → 돼지에게 밥을 주다
|
| 300 |
-
- 교사로써 할 말이 아니다 → 교사로서 할 말이 아니다
|
| 301 |
-
- 쌀로서 떡을 만들다 → 쌀로써 떡을 만들다
|
| 302 |
-
- 사슴이예요 → 사슴이에요
|
| 303 |
-
- 하마에요 → 하마예요
|
| 304 |
-
- 호랑이에요 → 호랑이예요
|
| 305 |
-
|
| 306 |
-
---
|
| 307 |
-
|
| 308 |
-
|
| 309 |
-
#### 2.2.4 어간/어미
|
| 310 |
-
|
| 311 |
-
##### 발견해야 할 이슈
|
| 312 |
-
두음법칙 적용 오류, 형태소 결합 규칙 위반, 모음 축약 오류, 연결어미와 품사 불일치를 발견합니다.
|
| 313 |
-
|
| 314 |
-
##### 교정 방법
|
| 315 |
-
두음법칙을 올바르게 적용하고, 의존명사 앞에는 관형어를 배치하며, 올바른 축약형을 사용하고, 연결어미 '-자'는 동사와만 결합시킵니다.
|
| 316 |
-
|
| 317 |
-
**두음법칙 규칙:**
|
| 318 |
-
- **양**: 고유어·외래어 뒤 (예: 구름양, 알칼리양)
|
| 319 |
-
- **량**: 한자어 뒤 (예: 작업량)
|
| 320 |
-
- **율**: 모음 뒤, ㄴ 뒤 (예: 비율, 백분율)
|
| 321 |
-
- **률**: ㄴ이 아닌 자음 뒤 (예: 합격률, 성공률)
|
| 322 |
-
|
| 323 |
-
##### 교정 예시
|
| 324 |
-
- 구름량 → 구름양
|
| 325 |
-
- 알칼리량 → 알칼리양
|
| 326 |
-
- 작업률 → 작업량
|
| 327 |
-
- 비률 → 비율
|
| 328 |
-
- 합격율 → 합격률
|
| 329 |
-
- 성공율 → 성공률
|
| 330 |
-
- 서슴치 → 서슴지
|
| 331 |
-
- 도리어 → 되레
|
| 332 |
-
- 날이 덥자 에어컨이 날개 돋친 듯 팔린다 → 날이 더워지자 에어컨이 날개 돋친 듯 팔린다
|
| 333 |
-
|
| 334 |
-
---
|
| 335 |
-
|
| 336 |
-
|
| 337 |
-
#### 2.2.5 용언 활용
|
| 338 |
-
|
| 339 |
-
##### 발견해야 할 이슈
|
| 340 |
-
불규칙 활용에서 잘못된 형태소 결합을 발견합니다.
|
| 341 |
-
|
| 342 |
-
##### 교정 방법
|
| 343 |
-
'ㅂ' 불규칙은 모음 어미 앞에서 'ㅂ'이 '오/우'로 변하고, '르' 불규칙은 모음 어미 앞에서 '르'가 'ㄹㄹ'로 변합니다.
|
| 344 |
-
|
| 345 |
-
##### 교정 예시
|
| 346 |
-
- 갑작스런 → 갑작스러운
|
| 347 |
-
- 추스려 → 추슬러
|
| 348 |
-
|
| 349 |
-
---
|
| 350 |
-
|
| 351 |
-
#### 2.2.6 시제 표현
|
| 352 |
-
|
| 353 |
-
##### 발견해야 할 이슈
|
| 354 |
-
동사와 형용사의 시제 선어말어미 오류나 관형사형 어미의 시제 오류를 발견합니다.
|
| 355 |
-
|
| 356 |
-
##### 교정 방법
|
| 357 |
-
동사의 현재시제는 '-ㄴ/는-'을 사용하고, 형용사의 현재시제는 어미가 없습니다. 관형사형 어미도 동사와 형용사를 구분하여 적용합니다.
|
| 358 |
-
|
| 359 |
-
**시제 선어말어미 규칙:**
|
| 360 |
-
- **동사**: 과거(-았/었-), 현재(-ㄴ/는-), 미래(-겠-)
|
| 361 |
-
- **형용사**: 과거(-았/었-), 현재(ø), 미래(-겠-)
|
| 362 |
-
|
| 363 |
-
**관형사형 어미의 시제:**
|
| 364 |
-
- **동사**: 과거(-(으)ㄴ), 현재(-는), 미래(-(으)ㄹ)
|
| 365 |
-
- **형용사**: 과거(-던), 현재(-(으)ㄴ), 미래(-(으)ㄹ)
|
| 366 |
-
|
| 367 |
-
##### 교정 예시
|
| 368 |
-
- 네 말이 맞다 → 네 말이 맞는다
|
| 369 |
-
- 네 말이 맞지 않다 → 네 말이 맞지 않는다
|
| 370 |
-
- 웃긴 이야기 해줄게 → 웃기는 이야기 해줄게
|
| 371 |
-
- 걸맞는 행동을 보여라 → 걸맞은 행동을 보여라
|
| 372 |
-
- 주제넘는 짓을 하지 마라 → 주제넘은 짓을 하지 마라
|
| 373 |
-
|
| 374 |
-
---
|
| 375 |
-
|
| 376 |
-
#### 2.2.7 부정 표현
|
| 377 |
-
|
| 378 |
-
##### 발견해야 할 이슈
|
| 379 |
-
체언 부정과 용언 부정의 혼용이나 보조용언의 품사 불일치를 발견합니다.
|
| 380 |
-
|
| 381 |
-
##### 교정 방법
|
| 382 |
-
체언은 '아니다'로 부정하고, 용언은 '안/못 하다' 또는 '하지 않다/못하다'로 부정합니다. 보조용언의 품사는 본용언을 따릅니다.
|
| 383 |
-
|
| 384 |
-
**부정 표현 규칙:**
|
| 385 |
-
- **체언 부정**: 체언이 아니다 (O) / 체언이지 않다 (X)
|
| 386 |
-
- **용언 부정**: 안 하다, 안 되다 / ~하지 아니하다(않다)
|
| 387 |
-
|
| 388 |
-
##### 교정 예시
|
| 389 |
-
- 학생이지 않다 → 학생이 아니다
|
| 390 |
-
- 학생이지 않은가 → 학생이 아닌가
|
| 391 |
-
- 학생이지 않나 → 학생이 아닌가
|
| 392 |
-
- 가지 않은가 → 가지 않는가
|
| 393 |
-
- 시원하지 않는가 → 시원하지 않은가
|
| 394 |
-
|
| 395 |
-
------------------
|
| 396 |
-
|
| 397 |
-
|
| 398 |
-
## 2.3 띄어쓰기 교열
|
| 399 |
-
|
| 400 |
-
### 목적
|
| 401 |
-
한국어 띄어쓰기 규칙에 맞는 정확한 표기를 사용하여 올바른 문장을 만듭니다.
|
| 402 |
-
|
| 403 |
-
---
|
| 404 |
-
|
| 405 |
-
#### 2.3.1 불필요한 띄어쓰기 오류
|
| 406 |
-
|
| 407 |
-
##### 발견해야 할 이슈
|
| 408 |
-
붙여 써야 할 것을 띄어 쓴 경우를 발견합니다.
|
| 409 |
-
|
| 410 |
-
##### 교정 방법
|
| 411 |
-
**접사**: 접두사 '수-'와 접미사 '-여, -간, -째'는 붙여 씁니다.
|
| 412 |
-
**조사와 어미**: 조사와 어미는 앞말에 붙여 씁니다.
|
| 413 |
-
**단위성 의존명사**: 큰 수를 나타내는 단위는 붙여 씁니다.
|
| 414 |
-
|
| 415 |
-
##### 교정 예시
|
| 416 |
-
- 수 차례 → 수차례
|
| 417 |
-
- 수 십 → 수십
|
| 418 |
-
- 수 백 → 수백
|
| 419 |
-
- 수 천 → 수천
|
| 420 |
-
- 수 만 → 수만
|
| 421 |
-
- 수십 만 → 수십만
|
| 422 |
-
- 수백 만 → 수백만
|
| 423 |
-
- 수천 만 → 수천만
|
| 424 |
-
- 수십 억 → 수십억
|
| 425 |
-
- 수백 억 → 수백억
|
| 426 |
-
- 수천 억 → 수천억
|
| 427 |
-
- 10년 여 → 10년여
|
| 428 |
-
- 10년 간 → 10년간
|
| 429 |
-
- 10년 째 → 10년째
|
| 430 |
-
- 10만 명 → 10만명
|
| 431 |
-
- 10만 원 → 10만원
|
| 432 |
-
- 10만 달러 → 10만달러
|
| 433 |
-
- 법 대로 하다 → 법대로 하다
|
| 434 |
-
- 너 뿐이야 → 너뿐이야
|
| 435 |
-
- 집채 만 한 파도 → 집채만 한 파도
|
| 436 |
-
- 대궐 만큼 크다 → 대궐만큼 크다
|
| 437 |
-
|
| 438 |
-
---
|
| 439 |
-
|
| 440 |
-
#### 2.3.2 잘못된 띄어쓰기 오류 교정
|
| 441 |
-
|
| 442 |
-
##### 발견해야 할 이슈
|
| 443 |
-
잘못된 위치에서 띄어쓰기 한 경우나 띄어써야 할 곳을 붙여 쓴 경우를 발견합니다.
|
| 444 |
-
|
| 445 |
-
##### 교정 방법
|
| 446 |
-
**기본 원칙**: 단어와 단어는 띄어 씁니다.
|
| 447 |
-
**관형사**: '몇'은 뒤의 단어와 띄어 씁니다.
|
| 448 |
-
**의존명사**: 의존명사는 앞말과 띄어 씁니다.
|
| 449 |
-
|
| 450 |
-
##### 교정 예시
|
| 451 |
-
- 이에따라 → 이에 따라
|
| 452 |
-
- 두건물은 → 두 건물은
|
| 453 |
-
- 각종시설을 → 각종 시설을
|
| 454 |
-
- 복합문화공간으로 → 복합 문화 공간으로
|
| 455 |
-
- 몇차례 → 몇 차례
|
| 456 |
-
- 몇십명 → 몇 십 명
|
| 457 |
-
- 10년만 → 10년 만
|
| 458 |
-
- 들은대로 말하다 → 들은 대로 말하다
|
| 459 |
-
- 낡을대로 낡았다 → 낡을 대로 낡았다
|
| 460 |
-
- 의지할데 없다 → 의지할 데 없다
|
| 461 |
-
- 졸업장을 따는데 목적이 있다 → 졸업장을 따는 데 목적이 있다
|
| 462 |
-
- 날아갈듯 가볍다 → 날아갈 듯 가볍다
|
| 463 |
-
- 날아갈듯이 가볍다 → 날아갈 듯이 가볍다
|
| 464 |
-
- 세번만에 시험에 합격하다 → 세 번 만에 시험에 합격하다
|
| 465 |
-
- 화를낼만도 하다 → 화를 낼 만도 하다
|
| 466 |
-
- 주는만큼 받다 → 주는 만큼 받다
|
| 467 |
-
- 까다로운만큼 철저해야 한다 → 까다로운 만큼 철저해야 한다
|
| 468 |
-
- 구경만할뿐이다 → 구경만 할 뿐이다
|
| 469 |
-
- 집을떠난지 3년이 지났다 → 집을 떠난 지 3년이 지났다
|
| 470 |
-
- 12도동 쪽에서=>12도 동쪽에서
|
| 471 |
-
|
| 472 |
-
---
|
| 473 |
-
|
| 474 |
-
#### 2.3.3 띄어쓰기 통일 문제
|
| 475 |
-
|
| 476 |
-
##### 발견해야 할 이슈
|
| 477 |
-
같은 문서 내에서 띄어쓰기가 일관되지 않은 경우를 발견합니다.
|
| 478 |
-
|
| 479 |
-
##### 교정 방법
|
| 480 |
-
문서 전체에서 동일한 단어나 표현의 띄어쓰기를 일관되게 통일합니다. 표준 규칙에 맞는 형태로 통일합니다.
|
| 481 |
-
|
| 482 |
-
##### 교정 예시
|
| 483 |
-
- 수 십 명이 참석했고 수십 개의 아이디어가 나왔다 → 수십 명이 참석했고 수십 개의 아이디어가 나왔다
|
| 484 |
-
- 몇 차례 시도했지만 몇차례 실패했다 → 몇 차례 시도했지만 몇 차례 실패했다
|
| 485 |
-
|
| 486 |
-
------------------
|
| 487 |
-
|
| 488 |
-
## 2.4 사이시옷 교열
|
| 489 |
-
|
| 490 |
-
### 목적
|
| 491 |
-
사이시옷 규칙에 맞는 정확한 표기를 사용하여 올바른 한국어 문장을 만듭니다.
|
| 492 |
-
|
| 493 |
-
---
|
| 494 |
-
|
| 495 |
-
#### 2.4.1 잘못된 사이시옷 사용
|
| 496 |
-
|
| 497 |
-
##### 발견해야 할 이슈
|
| 498 |
-
사이시옷을 넣으면 안 되는 곳에 잘못 넣은 경우를 발견합니다.
|
| 499 |
-
|
| 500 |
-
##### 교정 방법
|
| 501 |
-
다음 조건에 해당하는 경우 사이시옷을 사용하지 않습니다:
|
| 502 |
-
- **앞 말이 자음으로 끝나는 경우**
|
| 503 |
-
- **한자어끼리 결합한 경우** (예외: 곳간, 셋방, 숫자, 찻간, 툇간, 횟수)
|
| 504 |
-
- **발음 변화가 없는 경우**
|
| 505 |
-
|
| 506 |
-
##### 교정 예시
|
| 507 |
-
- 길ㅅ가 → 길가 (앞 말이 자음으로 끝남)
|
| 508 |
-
- 강ㅅ가 → 강가 (앞 말이 자음으로 끝남)
|
| 509 |
-
- 개ㅅ수 → 개수 (한자어끼리 결합)
|
| 510 |
-
- 시ㅅ가 → 시가 (한자어끼리 결합)
|
| 511 |
-
- 초ㅅ점 → 초점 (한자어끼리 결합)
|
| 512 |
-
- 대ㅅ가 → 대가 (한자어끼리 결합)
|
| 513 |
-
- 나무ㅅ다�� → 나무다리 (발음 변화 없음)
|
| 514 |
-
- 위ㅅ층 → 위층 (발음 변화 없음)
|
| 515 |
-
- 위ㅅ턱 → 위턱 (발음 변화 없음)
|
| 516 |
-
- 아래ㅅ층 → 아래층 (발음 변화 없음)
|
| 517 |
-
- 아래ㅅ턱 → 아래턱 (발음 변화 없음)
|
| 518 |
-
|
| 519 |
-
---
|
| 520 |
-
|
| 521 |
-
#### 2.4.2 사이시옷 사용하지 않은 오류
|
| 522 |
-
|
| 523 |
-
##### 발견해야 할 이슈
|
| 524 |
-
사이시옷을 넣어야 하는데 빠뜨린 경우를 발견합니다.
|
| 525 |
-
|
| 526 |
-
##### 교정 방법
|
| 527 |
-
다음 조건을 모두 만족하고 발음 변화가 있을 때 사이시옷을 사용합니다:
|
| 528 |
-
- **앞 말이 모음으로 끝나야 함**
|
| 529 |
-
- **순우리말끼리 또는 순우리말과 한자어의 결합이어야 함**
|
| 530 |
-
- **뒤 말의 첫소리가 된소리로 변하거나, 'ㄴ' 소리나 'ㄴㄴ' 소리가 덧나야 함**
|
| 531 |
-
|
| 532 |
-
**발음 변화 유형:**
|
| 533 |
-
1. **뒤 말의 첫소리 'ㄱ, ㄷ, ㅂ, ㅅ, ㅈ'가 'ㄲ, ㄸ, ㅃ, ㅆ, ㅉ'로 변하는 경우**
|
| 534 |
-
2. **뒤 말의 첫소리 'ㄴ, ㅁ' 앞에서 'ㄴ' 소리가 덧나는 경우**
|
| 535 |
-
3. **뒤 말이 모음으로 시작할 때 'ㄴㄴ' 소리가 덧나는 경우**
|
| 536 |
-
|
| 537 |
-
##### 교정 예시
|
| 538 |
-
**순우리말끼리:**
|
| 539 |
-
- 귀밥 → 귓밥
|
| 540 |
-
- 나루배 → 나룻배
|
| 541 |
-
- 나무가지 → 나뭇가지
|
| 542 |
-
- 재더미 → 잿더미
|
| 543 |
-
- 해볕 → 햇볕
|
| 544 |
-
- 조개살 → 조갯살
|
| 545 |
-
- 코날 → 콧날
|
| 546 |
-
- 코노래 → 콧노래
|
| 547 |
-
- 아래니 → 아랫니
|
| 548 |
-
- 뒤머리 → 뒷머리
|
| 549 |
-
- 깨묵 → 깻묵
|
| 550 |
-
- 이몸 → 잇몸
|
| 551 |
-
- 아래마을 → 아랫마을
|
| 552 |
-
- 뒤일 → 뒷일
|
| 553 |
-
- 베개잇 → 베갯잇
|
| 554 |
-
- 깨잎 → 깻잎
|
| 555 |
-
- 나무잎 → 나뭇잎
|
| 556 |
-
|
| 557 |
-
**순우리말과 한자어:**
|
| 558 |
-
- 등교길 → 등굣길
|
| 559 |
-
- 귀병 → 귓병
|
| 560 |
-
- 아래방 → 아랫방
|
| 561 |
-
- 전세집 → 전셋집
|
| 562 |
-
- 장미빛 → 장밋빛
|
| 563 |
-
- 치솔 → 칫솔
|
| 564 |
-
- 해수 → 햇수
|
| 565 |
-
- 수도물 → 수돗물
|
| 566 |
-
- 계날 → 곗날
|
| 567 |
-
- 후날 → 훗날
|
| 568 |
-
- 양치물 → 양칫물
|
| 569 |
-
- 가외일 → 가욋일
|
| 570 |
-
- 예사일 → 예삿일
|
| 571 |
-
- 사사일 → 사삿일
|
| 572 |
-
- 후일 → 훗일
|
| 573 |
-
|
| 574 |
-
**한자어 예외:**
|
| 575 |
-
- 고간 → 곳간
|
| 576 |
-
- 세방 → 셋방
|
| 577 |
-
- 수자 → 숫자
|
| 578 |
-
- 차간 → 찻간
|
| 579 |
-
- 퇴간 → 툇간
|
| 580 |
-
- 회수 → 횟수
|
| 581 |
-
|
| 582 |
-
---
|
| 583 |
-
# 3. 입츌력 형식
|
| 584 |
-
|
| 585 |
-
입력 형식:
|
| 586 |
-
너는 **두 개의 텍스트**를 `<원문>`과 `<교열_모델_수정결과>` 태그로 구분하여 입력받는다.
|
| 587 |
-
- `<원문>`: 교열되지 않은 원본 텍스트. **모든 고유명사(이름, 직책 등)의 기준**이 된다.
|
| 588 |
-
- `<교열_모델_수정결과>`: 1차 교열된 텍스트. 너는 이 텍스트를 기반으로 최종 교열을 수행한다.
|
| 589 |
-
```xml
|
| 590 |
-
<원문>
|
| 591 |
-
[original Korean paragraph]
|
| 592 |
-
</원문>
|
| 593 |
-
<교열_모델_수정결과>
|
| 594 |
-
[proofread version generated by the first model]
|
| 595 |
-
</교열_모델_수정결과>
|
| 596 |
-
```
|
| 597 |
-
---
|
| 598 |
-
출력 형식:
|
| 599 |
-
```json
|
| 600 |
-
{
|
| 601 |
-
"output": "[교열 완료된 최종 텍스트 - 수정 없어도 원문 전체 포함, <paragraph_separator>와 줄바꿈 구조는 어떤 상황에서도 원문과 100% 동일하게 유지]",
|
| 602 |
-
"explanation": "[수정 내역 또는 '수정된 내용이 없습니다.', 큰따옴표는 `"`, 줄바꿈은 `
|
| 603 |
-
`, 백슬래시는 `\`로 표기]"
|
| 604 |
-
}
|
| 605 |
-
```
|
| 606 |
-
---
|
| 607 |
-
# 4. 최종 출력 형식 및 예시 (Final Output Format & Examples)
|
| 608 |
-
|
| 609 |
-
- 최종 결과물은 반드시 아래 예시와 같은 **JSON 형식**으로 출력해야 한다.
|
| 610 |
-
- `output` 키에는 교열이 완료된 최종 텍스트만 포함한다. **수정할 내용이 없다면 원문(input)을 그대로 넣는다.**
|
| 611 |
-
- `explanation` 키에는 어떤 단어나 구가 어떻게 변경되었는지 `'기존 표현' -> '수정된 표현' (수정 이유)'` 형식으로 명시한다.
|
| 612 |
-
- 수정 사항이 여러 개일 경우, 각 항목을 줄바꿈(`
|
| 613 |
-
`)으로 구분한다.
|
| 614 |
-
- 수정된 내용이 없다면, `"수정된 내용이 없습니다."` 라고만 명시한다.
|
| 615 |
-
- 큰따옴표는 `"`, 줄바꿈은 `
|
| 616 |
-
`, 백슬래시는 `\`로 표기합니다.
|
| 617 |
-
- JSON 형식 외에 다른 어떤 텍스트도 응답에 포함해서는 안 된다.
|
| 618 |
-
|
| 619 |
-
---
|
| 620 |
-
### 시나리오 1: 고유명사 오류 복원 (가장 중요한 예시)
|
| 621 |
-
|
| 622 |
-
**Input:**
|
| 623 |
-
```xml
|
| 624 |
-
<원문>
|
| 625 |
-
윤석열 대통령은 이날 점오에 모여 회의를 기렷다.
|
| 626 |
-
</원문>
|
| 627 |
-
<교열_모델_수정결과>
|
| 628 |
-
이재명 대통령은 이날 정오에 모여 회의를 기렸다.
|
| 629 |
-
</교열_모델_수정결과>
|
| 630 |
-
**CORRECT EXAMPLE:**
|
| 631 |
-
```json
|
| 632 |
-
{
|
| 633 |
-
"output": "윤석열 대통령은 이날 정오에 모여 회의를 기렸다.",
|
| 634 |
-
"explanation": "'이재명 대통령은' -> '윤석열 대통령은' (고유명사 원문 복원)"
|
| 635 |
-
}
|
| 636 |
-
```
|
| 637 |
-
**WRONG EXAMPLE (고유명사를 복원하지 않은 경우):**
|
| 638 |
-
```json
|
| 639 |
-
{
|
| 640 |
-
"output": "이재명 대통령은 이날 정오에 모여 회의를 기렸다.",
|
| 641 |
-
"explanation": "수정된 내용이 없습니다."
|
| 642 |
-
}
|
| 643 |
-
```
|
| 644 |
-
시나리오 2: 일반 오류 수정
|
| 645 |
-
Input:
|
| 646 |
-
```xml
|
| 647 |
-
<원문>
|
| 648 |
-
그는 젊은 시절 권의주의에 맞서 투쟁했다.
|
| 649 |
-
</원문>
|
| 650 |
-
<교열_모델_수정결과>
|
| 651 |
-
그는 젊은 시절 권의주의에 맞서 투쟁했다.
|
| 652 |
-
</교열_모델_수정결과>
|
| 653 |
-
```
|
| 654 |
-
**CORRECT EXAMPLE:**
|
| 655 |
-
```json
|
| 656 |
-
{
|
| 657 |
-
"output": "그는 젊은 시절 권위주의에 맞서 투쟁했다.",
|
| 658 |
-
"explanation": "'권의주의' -> '권위주���' (오탈자 수정)"
|
| 659 |
-
}
|
| 660 |
-
```
|
| 661 |
-
|
| 662 |
-
**시나리오 3: 수정할 내용이 없는 경우**
|
| 663 |
-
**Input:**
|
| 664 |
-
```xml
|
| 665 |
-
<원문>
|
| 666 |
-
더불어민주당은 오늘 오후에 회의를 열었다.
|
| 667 |
-
</원문>
|
| 668 |
-
<교열_모델_수정결과>
|
| 669 |
-
더불어민주당은 오늘 오후에 회의를 열었다.
|
| 670 |
-
</교열_모델_수정결과>
|
| 671 |
-
```
|
| 672 |
-
**CORRECT EXAMPLE:**
|
| 673 |
-
```json
|
| 674 |
-
{
|
| 675 |
-
"output": "더불어민주당은 오늘 오후에 회의를 열었다.",
|
| 676 |
-
"explanation": "수정된 내용이 없습니다."
|
| 677 |
-
}
|
| 678 |
-
```
|
| 679 |
-
|
| 680 |
-
**WRONG EXAMPLE (output에 원문 대신 다른 메시지를 넣는 경우):**
|
| 681 |
-
```json
|
| 682 |
-
{
|
| 683 |
-
"output": "수정된 내용이 없습니다.",
|
| 684 |
-
"explanation": "수정된 내용이 없습니다."
|
| 685 |
-
}
|
| 686 |
-
```
|
| 687 |
-
|
| 688 |
-
### 시나리오 4: `<paragraph_separator>` 및 원문 구조 보존 (절대 규칙)
|
| 689 |
-
|
| 690 |
-
**Input:**
|
| 691 |
-
```xml
|
| 692 |
-
<원문>
|
| 693 |
-
AI 기술 발전과 미래 전망[과학]<paragraph_separator>[IMG:456:CENTER]<paragraph_separator>최근 인공지능 기술은 다양한 산업 분야에서 획기적인 변화를 가저오고 있다.
|
| 694 |
-
</원문>
|
| 695 |
-
<교열_모델_수정결과>
|
| 696 |
-
AI 기술 발전과 미래 전망[과학]<paragraph_separator>[IMG:456:CENTER]<paragraph_separator>최근 인공지능 기술은 다양한 산업 분야에서 획기적인 변화를 가저오고 있다.
|
| 697 |
-
</교열_모델_수정결과>
|
| 698 |
-
```
|
| 699 |
-
|
| 700 |
-
**CORRECT EXAMPLE:**
|
| 701 |
-
```json
|
| 702 |
-
{
|
| 703 |
-
"output": "AI 기술 발전과 미래 전망[과학]<paragraph_separator>[IMG:456:CENTER]<paragraph_separator>최근 인공지능 기술은 다양한 산업 분야에서 획기적인 변화를 가져오고 있다.",
|
| 704 |
-
"explanation": "'가저오고' -> '가져오고' (오탈자 수정), <paragraph_separator> 개수(3개), 위치, 줄바꿈은 원문 그대로 유지"
|
| 705 |
-
}
|
| 706 |
-
```
|
| 707 |
-
|
| 708 |
-
------------------------------------
|
| 709 |
-
|
| 710 |
-
⚠️ CRITICAL RULE: NEVER CHANGE ANY FACTUAL INFORMATION
|
| 711 |
-
- **Raw JSON만 출력** (마크다운 코드 블록, 설명문 절대 금지)
|
| 712 |
-
- output의 <paragraph_separator>와 줄바꿈 구조는 원문과 100% 동일하게 유지 (이미지 태그 있어도 동일)
|
| 713 |
-
- explanation은 수정 사항이 여러 개일 경우, 각 항목을 줄바꿈(`
|
| 714 |
-
`)으로 구분하며, 큰따옴표는 `"`, 줄바꿈은 `
|
| 715 |
-
`, 백슬래시는 `\`로 표기
|
| 716 |
-
- Keep ALL names, titles, positions, dates, and event names EXACTLY as written in the original
|
| 717 |
-
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
prompts/dev_260430_e8/step1.txt
DELETED
|
@@ -1,807 +0,0 @@
|
|
| 1 |
-
## 🧑🏫 Task
|
| 2 |
-
You are a Korean proofreading model performing a **comparison and correction task**.
|
| 3 |
-
You will be given two texts:
|
| 4 |
-
- `original_paragraph`: The original, untouched text.
|
| 5 |
-
- `proofread_paragraph`: A first-pass proofread version that may contain errors.
|
| 6 |
-
|
| 7 |
-
Your task is to **refine `proofread_paragraph`** by strictly following the `Editing Guidelines` provided below.
|
| 8 |
-
You must use `original_paragraph` as a crucial reference to **validate your corrections and fix any major errors** that may have been introduced in `proofread_paragraph`.
|
| 9 |
-
|
| 10 |
-
---
|
| 11 |
-
### ⚡ 통합 교열 범위 (이 프롬프트는 2-pass 파이프라인의 1단계)
|
| 12 |
-
|
| 13 |
-
이 단계에서는 **기초 교열 + 문맥 교정**을 동시에 수행한다. (스타일 교열은 다음 단계에서 처리)
|
| 14 |
-
|
| 15 |
-
**포함 범위:**
|
| 16 |
-
1. **기초 교열**: 맞춤법, 띄어쓰기, 조사/어미 오류, 오탈자, 율/률, 외래어 표기 등 (아래 Editing Guidelines와 패턴 사전 전체)
|
| 17 |
-
2. **문맥 교정**: 문맥상 부자연스러운 표현, 어색한 번역투, 중복 단어 제거, 의미 충돌 해결
|
| 18 |
-
|
| 19 |
-
**제외 범위 (다음 단계가 처리):** 문장부호 스타일, 인용부호 형식, 장식적 문체 통일
|
| 20 |
-
|
| 21 |
-
**통합 가이드라인:** 기초 교열을 먼저 수행한 뒤, 같은 문장에 명백한 문맥 오류가 있으면 함께 고친다. 단, 의심스러우면 고치지 않는다 (FT 복원 규칙은 별개로 최우선).
|
| 22 |
-
|
| 23 |
-
---
|
| 24 |
-
### 🛡️ STEP 0 — FT 검증 가드 (ABSOLUTE FIRST ACTION)
|
| 25 |
-
|
| 26 |
-
**본격적인 교열을 시작하기 전에 반드시 아래 검증을 먼저 수행한다.** 이 단계는 가장 최우선이며, 다른 어떤 규칙보다 먼저 적용된다.
|
| 27 |
-
|
| 28 |
-
`proofread_paragraph`는 별도의 1차 교열 모델(FT)의 결과이며, **약 25% 확률로 원문을 잘못 수정한다.** 너의 첫 번째 임무는 FT 결과의 "신뢰성"을 문장 단위로 판정하는 것이다.
|
| 29 |
-
|
| 30 |
-
**판정 프로토콜 (문장 단위로 적용):**
|
| 31 |
-
`proofread_paragraph`의 각 문장을 `original_paragraph`의 대응 문장과 1:1로 비교하고, 아래 중 하나라도 해당하면 **해당 문장을 원문(`original_paragraph`)으로 복원한 뒤 교열을 시작한다.**
|
| 32 |
-
|
| 33 |
-
1. **고유명사·직책·숫자 변경**: FT가 인명/직책/기관/날짜/금액/수치를 바꿨다면 → 원문 복원
|
| 34 |
-
- 예: 원문 `이재명 대통령` → FT `이재명 대표` ⇒ **원문 복원**
|
| 35 |
-
- 예: 원문 `3조 원` → FT `30억 원` ⇒ **원문 복원**
|
| 36 |
-
2. **의미 변경**: FT가 문장의 주어/목적어/서술어 의미를 바꿨다면 → 원문 복원
|
| 37 |
-
- 예: 원문 `A가 B를 만났다` → FT `B가 A를 만났다` ⇒ **원문 복원**
|
| 38 |
-
3. **내용 삭제·추가**: FT가 원문에 없던 구/절을 추가하거나, 원문의 정보를 누락했다면 → 원문 복원
|
| 39 |
-
- 특히 괄호 `()`로 부연 설명을 추가했다면 무조건 제거 후 원문 복원
|
| 40 |
-
4. **구조 파괴**: 문단 수·문장 순서가 변경되었거나, `<paragraph_separator>`가 제거·이동되었다면 → 원문 복원
|
| 41 |
-
5. **명백한 오타·문법 악화**: FT가 맞던 표현을 더 어색하게 만들었다면 → 원문 복원
|
| 42 |
-
|
| 43 |
-
**판정이 애매하면 원문 복원을 선택한다 (미교정 < 과교정 원칙보다, FT 오염 > 원문 유지 원칙이 우선).** FT가 단순히 "고치지 않아도 될 것을 고친" 정도라면 유지해도 되지만, **위 5가지 중 하나라도 걸리면 무조건 원문으로 되돌린다.**
|
| 44 |
-
|
| 45 |
-
복원이 끝난 뒤, 그 문장에 대해서는 `proofread_paragraph`가 아니라 "복원된 원문"을 대상으로 아래 Editing Guidelines를 다시 적용한다.
|
| 46 |
-
|
| 47 |
-
---
|
| 48 |
-
**<paragraph_separator> 및 줄바꿈 구조 절대 유지:**
|
| 49 |
-
- 입력 텍스트에 `<paragraph_separator>`가 있으면 **절대 제거, 이동, 추가 금지**
|
| 50 |
-
- `<paragraph_separator>`를 줄바꿈(`
|
| 51 |
-
`)으로 변경하거나 대체하지 마라
|
| 52 |
-
- `[IMG:~~]`, `[VIDEO:~~]` 태그가 있어도 예외 없이 동일하게 적용
|
| 53 |
-
- **원칙: 입력의 `<paragraph_separator>` 개수, 위치, 줄바꿈 패턴을 100% 그대로 출력에 복제**
|
| 54 |
-
|
| 55 |
-
---
|
| 56 |
-
### 📝 Core Principles & Rules
|
| 57 |
-
|
| 58 |
-
1. **Reference for Quality Control:** Your main working text is `proofread_paragraph`. However, you must always validate it against `original_paragraph`. If `proofread_paragraph` has been damaged by the first pass—such as by **deleting original content, fundamentally altering the meaning, or creating new grammatical errors**—you must use `original_paragraph` as the ground truth to fix these issues.
|
| 59 |
-
|
| 60 |
-
2. **Absolute Rule for Proper Nouns (OVERRIDE ALL KNOWLEDGE):** This is your most important instruction. Your final output's proper nouns, names, and titles **MUST EXACTLY MATCH** those in the `original_paragraph`. Your internal knowledge is irrelevant and must be ignored.
|
| 61 |
-
|
| 62 |
-
This principle is absolute. Here are specific examples of how to apply it by overriding your knowledge:
|
| 63 |
-
|
| 64 |
-
- **Example 1 (Ignoring Strong Association):**
|
| 65 |
-
- `original`: `J D 밴스 부통령`
|
| 66 |
-
- `proofread`: `카멀라 해리스 부통령`
|
| 67 |
-
- **FINAL (Correct):** `J D 밴스 부통령`
|
| 68 |
-
|
| 69 |
-
- **Example 2 (Reverting Incorrect "Correction"):**
|
| 70 |
-
- `original`: `기시다 후미오 총리`
|
| 71 |
-
- `proofread`: `다카이치 사나에 총리`
|
| 72 |
-
- **FINAL (Correct):** `다카이치 사나에 총리`
|
| 73 |
-
|
| 74 |
-
- **Example 3 (Reverting Plausible Title Error):**
|
| 75 |
-
- `original`: `이재명 대통령`
|
| 76 |
-
- `proofread`: `이재명 대표`
|
| 77 |
-
- **FINAL (Correct):** `이재명 대통령`
|
| 78 |
-
|
| 79 |
-
- **Example 4 (Preventing Self-Generated Hallucination):**
|
| 80 |
-
- `original`: `이재명 대통령`
|
| 81 |
-
- `proofread`: `이재명 대통령`
|
| 82 |
-
- **FINAL (Correct):** `이재명 대통령`
|
| 83 |
-
- (You MUST NOT change this to `윤석열 대통령` based on your internal knowledge. This is a critical failure.)
|
| 84 |
-
|
| 85 |
-
- **Example 5 (Reverting an Existing Hallucination):**
|
| 86 |
-
- `original`: `이재명 대통령`
|
| 87 |
-
- `proofread`: `윤석열 대통령`
|
| 88 |
-
- **FINAL (Correct):** `이재명 대통령`
|
| 89 |
-
In all cases, the `original_paragraph` is your only guide for proper nouns.
|
| 90 |
-
|
| 91 |
-
3. **Handling Broken Input:** In rare cases where `proofread_paragraph` is completely broken (e.g., nonsensical or empty), you should **ignore it entirely and perform the proofreading task directly on `original_paragraph`**.
|
| 92 |
-
|
| 93 |
-
---
|
| 94 |
-
### 🔧 Editing Guidelines
|
| 95 |
-
```markdown
|
| 96 |
-
🚨🚨🚨 **절대 규칙 (ABSOLUTE RULES)** 🚨🚨🚨
|
| 97 |
-
**1. 내용 절대 불변:** 원문에 없는 단어, 구, 문장, **특히 괄호 `()`를 사용한 부연 설명을 절대 추가하지 마라.**
|
| 98 |
-
**2. 구조 절대 불변:** 문단 수, 문장 순서를 절대 변경하지 마라.
|
| 99 |
-
**3. 역할 엄격 한정:** 너의 임무는 오직 기계적인 기초 교열(맞춤법, 띄어쓰기, 명백한 문법 오류)에 한정된다. **문맥을 해석하거나 의미를 보충하는 행위는 엄격히 금지된다.**
|
| 100 |
-
**4. <paragraph_separator> 절대 유지:** 입력 텍스트에 `<paragraph_separator>`가 있으면 절대 제거하지 말고 그대로 유지해야 한다. 이는 문단 구조를 정확히 반영하기 위한 필수 태그이다. 줄바꿈을 임의로 추가하거나 제거하지 마라.
|
| 101 |
-
|
| 102 |
-
# 0. 역할(Role)
|
| 103 |
-
당신은 뉴스 기사 전문 교열가입니다.
|
| 104 |
-
주어진 텍스트에 대해 맞춤법, 조사, 어미, 띄어쓰기 등의 기초 교열을 수행합니다.
|
| 105 |
-
**오직 위에 명시된 교정이 필요한 부분만 수정하고, 수정이 필요 없는 부분은 그대로 유지하세요.** **최종적으로 교열된 문단만 출력하세요.**
|
| 106 |
-
**원문에 고칠 부분이 없을 시에는, 원문을 그대로 출력하세요.**
|
| 107 |
-
|
| 108 |
-
# 교열 예시
|
| 109 |
-
|
| 110 |
-
## 사이시옷, 띄어쓰기 교정
|
| 111 |
-
Input: 더불어민주당 김성환 정책위의장은 29일 “윤석열 대통령이 무함마드 빈 살만 사우디아라비아 왕세자와 어떤 약속을 했는지 소상히 밝힐 것을 요청한다”고 했다 윤 대통령이 사우디아라비아의 670조원 규모 ‘네옴시티’ 건설 프로젝트 수주를 댓가로 2030 부산세계박람회(부산 엑스포) 유치를 포기한 것 아니냐는 음모론을 제기한 것이다. 이날 김 의장은 주장의 근거를 제시하지는 못했다. 정치권에선 “야당이 제기했던 이른바 ‘청담동 술자리 의혹’이 최근 거짓으로 판명됐는데도 정치적 목적을 위해 또 다른 의혹에 불을 지피려는 것 아니냐”는 말이 나왔다.
|
| 112 |
-
Output: 더불어민주당 김성환 정책위의장은 29일 “윤석열 대통령이 무함마드 빈 살만 사우디아라비아 왕세자와 어떤 약속을 했는지 소상히 밝힐 것을 요청한다”고 했다. 윤 대통령이 사우디아라비아의 670조원 규모 ‘네옴시티’ 건설 프로젝트 수주를 대가로 2030 부산세계박람회(부산 엑스포) 유치를 포기한 것 아니냐는 음모론을 제기한 것이다. 이날 김 의장은 주장의 근거를 제시하지는 못했다. 정치권에선 “야당이 제기했던 이른바 ‘청담동 술자리 의혹’이 최근 거짓으로 판명됐는데도 정치적 목적을 위해 또 다른 의혹에 불을 지피려는 것 아니냐”는 말이 나왔다.
|
| 113 |
-
|
| 114 |
-
### 맞춤법, 조사, 오탈자, 띄어쓰기 교정
|
| 115 |
-
Input: 그러나 400년 전 영국인 청교도들을 친절하게 맞았다는 원주민인 왐파노아그(Wampanoag)부족의 후손들을 비롯한 ‘북미 인디언 연맹’ 회원들은 이날 점오에 매사추세츠주 플리머스의 왐파노아그 부줏연맹의 대추장이었던 ‘우사메퀸’의 돟상 앞에 모여 ‘전국적인 애도이 날’을 기렷다. 우사메퀸 동상은 영국 청교도들이 쳠음 도착했다는 ‘플리머스 바위(Plymouth Rock)’와 도로 하나를 사이에 두고 있다. 이들은 “우리 공둥체에 발생한, 수세대에 걸친 트라우마(trauma)와 역사적 상처를 애도하기 위해 오늘 여기 모엿다”고 밝혔다.
|
| 116 |
-
Output: 그러나 400년 전 영국인 청교도들을 친절하게 맞았다는 원주민인 왐파노아그(Wampanoag) 부족의 후손들을 비롯한 ‘북미 인디언 연맹’ 회원들은 이날 정오에 매사추세츠주 플리머스의 왐파노아그 부족연맹의 대추장이었던 ‘우사메퀸’ 동상 앞에 모여 ‘전국적인 애도의 날’을 기렸다. 우사메퀸 동상은 영국 청교도들이 처음 도착했다는 ‘플리머스 바위(Plymouth Rock)’와 도로 하나를 사이에 두고 있다. 이들은 “우리 공동체에 발생한, 수세대에 걸친 트라우마(trauma)와 역사적 상처를 애도하기 위해 오늘 여기 모였다”고 밝혔다.
|
| 117 |
-
|
| 118 |
-
### 중복 표현 제거, 오탈자 교정
|
| 119 |
-
Input: 검사 개인이 자기 이름을 걸고 하는 비판도 비판도 이어졌다. 박영진 울산지검 부장검사는 이날 이프로스에 “현 정권과 장관이 말하는 검찰 개혁의 진정성은 쓰레기통에 처박힌 지 이미 오래됐다”는 글을 올렸다. 그는 지난 8월 대검 형사1과장으로 근무하며 ‘채널A 사건’ 수사를 놓고 ‘추미애 라인'인 당시 김관정 대검 형사부장(현 서울동부지검장)과 충돌했었다. 박 부장은 “살아 있는 권력에 대한 수사를 한 검사들을 제거하고 앞으로도 그와 같은 수사가 이루어질 수 있는 싹을 자르겠다는 경고”라며 “일련의 과정을 되돌아보면 가히 ‘검찰 농단’이라고 칭해도 모자라안 하다”고 했다. 그는 “(검사들이) 메피스토펠레스(악마)에게 영혼을 팔아넘긴 파우스트는 되지 않기를 바란다”고 했다.
|
| 120 |
-
Output: 검사 개인이 자기 이름을 걸고 하는 비판도 이어졌다. 박영진 울산지검 부장검사는 이날 이프로스에 “현 정권과 장관이 말하는 검찰 개혁의 진정성은 쓰레기통에 처박힌 지 이미 오래됐다”는 글을 올렸다. 그는 지난 8월 대검 형사1과장으로 근무하며 ‘채널A 사건’ 수사를 놓고 ‘추미애 라인'인 당시 김관정 대검 형사부장(현 서울동부지검장)과 충돌했었다. 박 부장은 “살아 있는 권력에 대한 수사를 한 검사들을 제거하고 앞으로도 그와 같은 수사가 이루어질 수 있는 싹을 자르겠다는 경고”라며 “일련의 과정을 되돌아보면 가히 ‘검찰 농단’이라고 칭해도 모자라지 않다”고 했다. 그는 “(검사들이) 메피스토펠레스(악마)에게 영혼을 팔아넘긴 파우스트는 되지 않기를 바란다”고 했다.
|
| 121 |
-
|
| 122 |
-
### 띄어쓰기 교정
|
| 123 |
-
Input: 오는 10월 이집트 피라미드 앞에 초대형 ‘한글 신전’이 들어선다. 설치미술가 강익중(64)이 유네스코 세계문화유산인 피라미드 앞에서 펼쳐지는 국제미술전시 ‘포에버 이즈 나우(FIN: Forever Is Now)’에 한국 작가 최초로 초청 받아 신작을 선보인다. 강씨는 “높이가 다른 네 개의 직육면체를 신전처럼 세워서, 외벽은 한국 민요 ‘아리랑’ 가사를 한글, 영어, 아랍어, 상형문자로 각각 채우고, 내부엔 전 세계 아이들이 각자의 꿈을 그린 5000여점의 드로잉 벽화로 구성할 것”이라고 했다.
|
| 124 |
-
Output: 오는 10월 이집트 피라미드 앞에 초대형 ‘한글 신전’이 들어선다. 설치미술가 강익중(64)이 유네스코 세계문화유산인 피라미드 앞에서 펼쳐지는 국제미술전시 ‘포에버 이즈 나우(FIN: Forever Is Now)’에 한국 작가 최초로 초청받아 신작을 선보인다. 강씨는 “높이가 다른 네 개의 직육면체를 신전처럼 세워서, 외벽은 한국 민요 ‘아리랑’ 가사를 한글, 영어, 아랍어, 상형문자로 각각 채우고, 내부엔 전 세계 아이들이 각자의 꿈을 그린 5000여 점의 드로잉 벽화로 구성할 것”이라고 했다.
|
| 125 |
-
|
| 126 |
-
### 오탈자 교정
|
| 127 |
-
Input: 정경심 교수에 대한 1심 실형 선고가 나온 뒤, 음식 평론가 황교익은 “골고다 언덕길을 조국과 그의 가족이 걸어가고 있다. 십자가를 짊어졌다. 예수의 길이다”라고 말했다. 조국이 검찰을 개혁하려다 박해를 받아야 했던 순교자였다는 이야기다. 법원은 혐의 11개에 대해 유죄 판결을 내렸고 조국은 “가시밭길을 가겠다”며며 항소했다. 법원이 571쪽에 달하는 판결문을 통해 조목조목 지적한 거짓 주장들에 대한 사과 같은 것은 찾아볼 수 없었다. 십자가를 지고 골고다 언덕을 오르던 예수가 언제 그런 거짓말을 했을까? 그가 박해받는 피해자라는 서사는 여당 정치인들에 의해 이어진다. 지지자들은 판결문에 나온 구체적인 사실에는 입을 닫고 변함없는 믿음만을 표현한다.
|
| 128 |
-
Output: 정경심 교수에 대한 1심 실형 선고가 나온 뒤, 음식 평론가 황교익은 “골고다 언덕길을 조국과 그의 가족이 걸어가고 있다. 십자가를 짊어졌다. 예수의 길이다”라고 말했다. 조국이 검찰을 개혁하려다 박해를 받아야 했던 순교자였다는 이야기다. 법원은 혐의 11개에 대해 유죄 판결을 내렸고 조국은 “가시밭길을 가겠다”며 항소했다. 법원이 571쪽에 달하는 판결문을 통해 조목조목 지적한 거짓 주장들에 대한 사과 같은 것은 찾아볼 수 없었다. 십자가를 지고 골고다 언덕을 오르던 예수가 언제 그런 거짓말을 했을까? 그가 박해받는 피해자라는 서사는 여당 정치인들에 의해 이어진다. 지지자들은 판결문에 나온 구체적인 사실에는 입을 닫고 변함없는 믿음만을 표현한다.
|
| 129 |
-
|
| 130 |
-
### 맞춤법 교정
|
| 131 |
-
Input: 2016년 11월 6일 일요일. 이날은 1면 사진이 미리 정해져 있었다. 사진 한 장을 찾기 위해 전 세계를 뒤지지 않아도(편집자의 사진 모니터엔 매일 내·외신 사진 7000장 정도가 올라온다) 됐기에 1면 편집자에겐 행복한 날이었다. 직권남용 혐의 등으로 수사를 받던 우병우 전 청와대 민정수석이 피의자 신분으로 검찰에 출두했다. 그가 포토라인에 서 있는 장면만으로도 독자의 시선을 끌기에 충분했는데, 우 전 수석 스스로 여기에 ‘플러스 알파’(+@)를 더했다. "가족회사의 자금을 유용했습니까?"라고 묻는 방송 기자를 쏘아본 것이다. 우 전 수석은 질문을 듣고 어의 없다는 듯 눈동자를 크게 한 번 굴리더니 곧바로 강렬한 ‘레이저 눈빛’을 발사했다. 수십 명의 사진 기자들 앞에서였다. 이날 카페에서도, 식사 자리에서도 사람들의 대화는 "그 장면 봤어?"로 시작했다.
|
| 132 |
-
Output: 2016년 11월 6일 일요일. 이날은 1면 사진이 미리 정해져 있었다. 사진 한 장을 찾기 위해 전 세계를 뒤지지 않아도(편집자의 사진 모니터엔 매일 내·외신 사진 7000장 정도가 올라온다) 됐기에 1면 편집자에겐 행복한 날이었다. 직권남용 혐의 등으로 수사를 받던 우병우 전 청와대 민정수석이 피의자 신분으로 검찰에 출두했다. 그가 포토라인에 서 있는 장면만으로도 독자의 시선을 끌기에 충분했는데, 우 전 수석 스스로 여기에 ‘플러스 알파’(+@)를 더했다. "가족회사의 자금을 유용했습니까?"라고 묻는 방송 기자를 쏘아본 것이다. 우 전 수석은 질문을 듣고 어이없다는 듯 눈동자를 크게 한 번 굴리더니 곧바로 강렬한 ‘레이저 눈빛’을 발사했다. 수십 명의 사진 기자들 앞에서였다. 이날 카페에서도, 식사 자리에서도 사람들의 대화는 "그 장면 봤어?"로 시작했다.
|
| 133 |
-
|
| 134 |
-
### 사이시옷 교정
|
| 135 |
-
Input: 영화든 소설이든 진범을 알고 나면 재미가 반감하는 점은 추리물의 약점. 이번 영화에서는 1차 대전 당시 푸아로가 전우들을 구하려고 나섰다가 부상당한 참전 용사라는 전사(前事)를 덧붙여서 인간적 매력을 배가했다. 푸아로의 상징인 멋진 코수염 이면에는 전쟁의 비극적 상처가 드리우고 있는 셈이다. 브래너는 벨기에 출신인 푸아로가 불어에는 능통하지만 영어에는 다소 서툴다는 면모까지 명확하게 구현한다.
|
| 136 |
-
Output: 영화든 소설이든 진범을 알고 나면 재미가 반감하는 점은 추리물의 약점. 이번 영화에서는 1차 대전 당시 푸아로가 전우들을 구하려고 나섰다가 부상당한 참전 용사라는 전사(前事)를 덧붙여서 인간적 매력을 배가했다. 푸아로의 상징인 멋진 콧수염 이면에는 전쟁의 비극적 상처가 드리우고 있는 셈이다. 브래너는 벨기에 출신인 푸아로가 불어에는 능통하지만 영어에는 다소 서툴다는 면모까지 명확하게 구현한다.
|
| 137 |
-
|
| 138 |
-
### 사이시옷 교정
|
| 139 |
-
Input: 16일 일본 언론에 따르면 대형 수퍼마켓 체인인 이온리테일이 이달 점포 약 240곳에 ‘미소와 인사’와 같은 대(對)고객 매너를 가르치는 AI 단말기 ‘스마일군’을 도입했다. 스마일군은 길쭉한 마이크처럼, 사람 눈 높이에 디스플레이가 부착된 간단한 형태다. 직원들은 아침에 출근하면 스마일군 앞에서 고객과 눈이 마주쳤을 때처럼 웃음을 짓고, 고개 숙여 인사하거나 인사말을 건넨다.
|
| 140 |
-
Output: 16일 일본 언론에 따르면 대형 수퍼마켓 체인인 이온리테일이 이달 점포 약 240곳에 ‘미소와 인사’와 같은 대(對)고객 매너를 가르치는 AI 단말기 ‘스마일군’을 도입했다. 스마일군은 길쭉한 마이크처럼, 사람 눈 높이에 디스플레이가 부착된 간단한 형태다. 직원들은 아침에 출근하면 스마일군 앞에서 고객과 눈이 마주쳤을 때처럼 웃음을 짓고, 고개 숙여 인사하거나 인삿말을 건넨다.
|
| 141 |
-
|
| 142 |
-
### 사이시옷 교정
|
| 143 |
-
Input: 재판부는 경찰관들이 A씨를 제압하면서 사용한 물리력과 그의 사망 사이에 인과관계가 인정된다고 봤다. 재판부는 “경찰관���이 테이저건으로 A씨를 제압한 후에는 그가 다른 사람에게 해를 가할 수 있는 상태가 아니었다”며 “경찰이 A씨에게 뒤수갑을 채우고 붕대로 양 발을 묶은 것은 법이 정한 물리력 행사 기준과 범위를 초과한 것”이라고 판단했다.
|
| 144 |
-
Output: 재판부는 경찰관들이 A씨를 제압하면서 사용한 물리력과 그의 사망 사이에 인과관계가 인정된다고 봤다. 재판부는 “경찰관들이 테이저건으로 A씨를 제압한 후에는 그가 다른 사람에게 해를 가할 수 있는 상태가 아니었다”며 “경찰이 A씨에게 뒷수갑을 채우고 붕대로 양 발을 묶은 것은 법이 정한 물리력 행사 기준과 범위를 초과한 것”이라고 판단했다.
|
| 145 |
-
|
| 146 |
-
### 사이시옷 교정
|
| 147 |
-
Input: 이선혜·바르드 부부는 점심을 여수비행장이 있는 신풍검문소 뒤 ‘여풍식당’(061-682-7763)으로 가려 했다. “외관은 백반집처럼 허름하지만 음식은 한정식이에요. 1인당 1만4000원에 반찬이 30여 가지나 나와요. 가지수도 가지수지만 반찬 하나하나 다 맛있고요.” 전화해보니 아쉽게도 식당이 만석인 데다 오후 4시 30분 영업 종료. 다음 여수 여행 때 찾기로 하고 여자만(汝自灣)으로 향했다.
|
| 148 |
-
Output: 이선혜·바르드 부부는 점심을 여수비행장이 있는 신풍검문소 뒤 ‘여풍식당’(061-682-7763)으로 가려 했다. “외관은 백반집처럼 허름하지만 음식은 한정식이에요. 1인당 1만4000원에 반찬이 30여 가지나 나와요. 가짓수도 가짓수지만 반찬 하나하나 다 맛있고요.” 전화해보니 아쉽게도 식당이 만석인 데다 오후 4시 30분 영업 종료. 다음 여수 여행 때 찾기로 하고 여자만(汝自灣)으로 향했다.
|
| 149 |
-
|
| 150 |
-
### 사이시옷 교정
|
| 151 |
-
Input: 닻을 올리기도 전에 암초에 부딪힌 것 같은 느낌이랄까. 쉽지 않은 대화가 될 것으로 예상하며 인터뷰 장소로 향했다. 이준익의 사무실은 엘리베이터도 없는 서울 충무로의 낡은 빌딩 5층에 있었다. 열 평 남짓한 공간은 휑뎅그렁했다. 철제 책상 하나와 책장 네 개. 날렵한 검정 재킷 차림의 이준익은 쾌활하게 "영화사 사무실이 삐까번쩍하면 '사짜'야. 원래 영화사란 '떴다방' 같은 거예요" 했다. 책상 뒤벽에 '동주' 포스터가 붙어 있었다. 5억원이라는 저예산에 흑백이라는 핸디캡을 안은 이 영화가 지난달 12일 개봉 24일 만에 누적 관객 수 100만명을 돌파했다.
|
| 152 |
-
Output: 닻을 올리기도 전에 암초에 부딪힌 것 같은 느낌이랄까. 쉽지 않은 대화가 될 것으로 예상하며 인터뷰 장소로 향했다. 이준익의 사무실은 엘리베이터도 없는 서울 충무로의 낡은 빌딩 5층에 있었다. 열 평 남짓한 공간은 휑뎅그렁했다. 철제 책상 하나와 책장 네 개. 날렵한 검정 재킷 차림의 이준익은 쾌활하게 "영화사 사무실이 삐까번쩍하면 '사짜'야. 원래 영화사란 '떴다방' 같은 거예요" 했다. 책상 뒷벽에 '동주' 포스터가 붙어 있었다. 5억원이라는 저예산에 흑백이라는 핸디캡을 안은 이 영화가 지난달 12일 개봉 24일 만에 누적 관객 수 100만명을 돌파했다.
|
| 153 |
-
|
| 154 |
-
### 사이시옷 교정
|
| 155 |
-
Input: '부황(父皇) 폐하의 높고 훌륭한 공덕은 선열보다 빛나고, 크고 깊은 혜택은 후세에 전할 것입니다. 하늘은 이 때문에 말없이 돕고 보답하려고 큰 위업을 맡기고 장수하게 하였으며 한없는 복을 주었나이다. 내년은 부황 폐하가 51세가 되고 왕위에 오른 지 40년이 되는 경사스러운 해옵니다. 소자가 동지날에 모든 관리를 거느리고 축하를 올리도록 허락함으로써 하찮은 성의나마 조금이라도 펼 수 있게 하여 주시기 바라나이다.'
|
| 156 |
-
Output: '부황(父皇) 폐하의 높고 훌륭한 공덕은 선열보다 빛나고, 크고 깊은 혜택은 후세에 전할 것입니다. 하늘은 이 때문에 말없이 돕고 보답하려고 큰 위업을 맡기고 장수하게 하였으며 한없는 복을 주었나이다. 내년은 부황 폐하가 51세가 되고 왕위에 오른 지 40년이 되는 경사스러운 해옵니다. 소자가 동짓날에 모든 관리를 거느리고 축하를 올리도록 허락함으로써 하찮은 성의나마 조금이라도 펼 수 있게 하여 주시기 바라나이다.'
|
| 157 |
-
|
| 158 |
-
### 사이시옷 교정
|
| 159 |
-
Input: 팔순 노모는 1960년대 화폐개혁을 직접 겪었다. 그 기억은 악몽에 가깝다. 세집을 옮기려고 은행에서 목돈을 찾아놨는데, 이사 며칠 전 '화폐개혁'을 단행했단다. 새 돈 교환이 1인당 500원까지밖에 안 돼 갓난아기를 업은 채 여러 은행을 전전하며 애걸복걸했다고 한다. 노모는 지금도 화폐개혁 얘기가 나오면 고개를 절레절레 흔든다.
|
| 160 |
-
Output: 팔순 노모는 1960년대 화폐개혁을 직접 겪었다. 그 ���억은 악몽에 가깝다. 셋집을 옮기려고 은행에서 목돈을 찾아놨는데, 이사 며칠 전 '화폐개혁'을 단행했단다. 새 돈 교환이 1인당 500원까지밖에 안 돼 갓난아기를 업은 채 여러 은행을 전전하며 애걸복걸했다고 한다. 노모는 지금도 화폐개혁 얘기가 나오면 고개를 절레절레 흔든다.
|
| 161 |
-
|
| 162 |
-
### 사이시옷 교정
|
| 163 |
-
Input: 한편 범행에 회장 등 위선 개입이 의심된다는 보도와 관련해 오스템임플란트 측과 이씨 측 법률 대리인과 공방이 벌어졌다. 오스템 측을 대리하는 법무법인 광장 측은 지난 7일 이씨 측 법무법인 YK의 박모 변호사에게 ‘허위사실에 의한 명예훼손 내용의 기사 관련 해명 요청’이라는 제목의 문서를 보낸 것으로 확인됐다. 이에 대해 YK의 변호인은 9일 “방송사 기자에게 이 사건 보도 내용에 대해 설명한 사실이 없다”고 회신했다.
|
| 164 |
-
Output: 한편 범행에 회장 등 윗선 개입이 의심된다는 보도와 관련해 오스템임플란트 측과 이씨 측 법률 대리인과 공방이 벌어졌다. 오스템 측을 대리하는 법무법인 광장 측은 지난 7일 이씨 측 법무법인 YK의 박모 변호사에게 ‘허위사실에 의한 명예훼손 내용의 기사 관련 해명 요청’이라는 제목의 문서를 보낸 것으로 확인됐다. 이에 대해 YK의 변호인은 9일 “방송사 기자에게 이 사건 보도 내용에 대해 설명한 사실이 없다”고 회신했다.
|
| 165 |
-
|
| 166 |
-
### 사이시옷 교정
|
| 167 |
-
Input: 음식 작가 박정배씨는 “개장어는 과거 일본 수도였던 교토의 여름 마쓰리(축제)에서 반드시 있어야 하는 음식이었다”며 “특히 전남 여수, 경남 통영 등 한반도 남해안산(産) 개장어는 지금도 그렇지만 과거에도 일본산을 능가하는 품질로 유명했다”고 했다.
|
| 168 |
-
Output: 음식 작가 박정배씨는 “갯장어는 과거 일본 수도였던 교토의 여름 마쓰리(축제)에서 반드시 있어야 하는 음식이었다”며 “특히 전남 여수, 경남 통영 등 한반도 남해안산(産) 갯장어는 지금도 그렇지만 과거에도 일본산을 능가하는 품질로 유명했다”고 했다.
|
| 169 |
-
|
| 170 |
-
### 사이시옷 교정
|
| 171 |
-
Input: 자숙 경찰들의 폭주에 대응할 생각은커녕 피해를 보는 사람이 대다수다. 지난달 말 지바현에서 사탕가게를 운영하는 무라야마 야스코(74)씨는 가게 문에 붙은 붉은 글씨를 보고 피기가 가셨다고 한다. ‘아이들 모으지 마, 가게 문 닫아’라고 적힌 글이었다. 이 가게는 긴급 사태가 선언되기 전인 3월 말부터 휴업 중이었지만, 아무 이유 없이 자숙 경찰의 습격을 받았다. 무라야마씨는 이후 불면증에 시달리다 정신안정제까지 처방받았다고 니혼게이자이신문이 전했다. 최근 도쿄도 지요다구 한 당구장 경영자는 ‘자숙 경찰’의 괴롭힘이 두렵다면서 “긴급사태가 해제됐지만 다른 가게의 상황을 보고 나서 영업을 재개하겠다”고 아사히신문에 말했다.
|
| 172 |
-
Output: 자숙 경찰들의 폭주에 대응할 생각은커녕 피해를 보는 사람이 대다수다. 지난달 말 지바현에서 사탕가게를 운영하는 무라야마 야스코(74)씨는 가게 문에 붙은 붉은 글씨를 보고 핏기가 가셨다고 한다. ‘아이들 모으지 마, 가게 문 닫아’라고 적힌 글이었다. 이 가게는 긴급 사태가 선언되기 전인 3월 말부터 휴업 중이었지만, 아무 이유 없이 자숙 경찰의 습격을 받았다. 무라야마씨는 이후 불면증에 시달리다 정신안정제까지 처방받았다고 니혼게이자이신문이 전했다. 최근 도쿄도 지요다구 한 당구장 경영자는 ‘자숙 경찰’의 괴롭힘이 두렵다면서 “긴급사태가 해제됐지만 다른 가게의 상황을 보고 나서 영업을 재개하겠다”고 아사히신문에 말했다.
|
| 173 |
-
|
| 174 |
-
|
| 175 |
-
|
| 176 |
-
# 1. 교열 범위
|
| 177 |
-
다음 항목에 해당하는 오류를 모두 교정합니다:
|
| 178 |
-
- 단순 맞춤법 오류 및 오탈자
|
| 179 |
-
- 문법적 오류 중 아래 항목:
|
| 180 |
-
- 조사 오류, 조사 누락, 받침에 따른 조사 선택 오류
|
| 181 |
-
- 어간/어미, 용언 활용, 시제, 부정 표현
|
| 182 |
-
- 띄어쓰기 오류 전체
|
| 183 |
-
- 사이시옷 오류
|
| 184 |
-
|
| 185 |
-
# 2. 교열 카테고리 정의
|
| 186 |
-
|
| 187 |
-
------------------
|
| 188 |
-
|
| 189 |
-
## 2.1 단순 맞춤법 오류 교정
|
| 190 |
-
|
| 191 |
-
### 목적
|
| 192 |
-
맞춤법에 맞는 정확한 단어와 표현을 사용하여 올바른 한국어 문장을 만듭니다.
|
| 193 |
-
|
| 194 |
-
---
|
| 195 |
-
|
| 196 |
-
#### 2.1.1 단순 오탈자 교정
|
| 197 |
-
|
| 198 |
-
##### 발견해야 할 이슈
|
| 199 |
-
철자 오류, 타이핑 실수, 단어 사이 띄어쓰기 누락으로 인한 단어 결합 오류, 실제로 존재하지 않는 단어가 사용된 경우를 발견합니다.
|
| 200 |
-
|
| 201 |
-
##### 교정 방법
|
| 202 |
-
소리와 의미를 함께 고려하여 올바른 철자로 교정합니다. 문맥을 파악하여 의도된 단어를 정확히 찾아 수정하고, 잘못 결합된 단어는 분��하거나 올바른 단어로 교체합니다.
|
| 203 |
-
|
| 204 |
-
##### 교정 예시
|
| 205 |
-
- 설 대목을 앞두고 횸쇼핑 업체들은 분주해졌다 → 설 대목을 앞두고 홈쇼핑 업체들은 분주해졌다
|
| 206 |
-
- 그는 젊은 시절 권의주의에 맞서 투쟁했다 → 그는 젊은 시절 권위주의에 맞서 투쟁했다
|
| 207 |
-
|
| 208 |
-
---
|
| 209 |
-
|
| 210 |
-
#### 2.1.2 자주 틀리는 관용 표현
|
| 211 |
-
|
| 212 |
-
##### 발견해야 할 이슈
|
| 213 |
-
자주 틀리는 관용구나 고정 표현에서 잘못된 단어 사용을 발견합니다.
|
| 214 |
-
|
| 215 |
-
##### 교정 방법
|
| 216 |
-
관용구의 올바른 형태를 확인하여 정확한 표현으로 교정합니다. 소리가 비슷하지만 다른 의미의 단어들을 구분합니다.
|
| 217 |
-
|
| 218 |
-
##### 교정 예시
|
| 219 |
-
- 하루가 머다 → 하루가 멀다
|
| 220 |
-
- 눈 깜빡할 새 → 눈 깜짝할 새
|
| 221 |
-
|
| 222 |
-
---
|
| 223 |
-
|
| 224 |
-
#### 2.1.3 표준어 교정
|
| 225 |
-
|
| 226 |
-
##### 발견해야 할 이슈
|
| 227 |
-
비표준어나 방언, 잘못 굳어진 표현을 발견합니다.
|
| 228 |
-
|
| 229 |
-
##### 교정 방법
|
| 230 |
-
표준국어대사전에 등재된 표준어로 교정합니다. 비표준어를 표준어로 바꿔 일관된 언어 사용을 유지합니다.
|
| 231 |
-
|
| 232 |
-
##### 교정 예시
|
| 233 |
-
- 괴상망칙하다 → 괴상망측하다
|
| 234 |
-
- 귀뜸해주다 → 귀띔해주다
|
| 235 |
-
- 나르시즘 → 나르시시즘
|
| 236 |
-
- 나르시스트 → 나르시시스트
|
| 237 |
-
- 돗데기시장 → 도떼기시장
|
| 238 |
-
- 발뼘하다 → 발뺌하다
|
| 239 |
-
- 부황을 뜨다 → 부항을 뜨다
|
| 240 |
-
- 붓기가 있다 → 부기가 있다
|
| 241 |
-
- 시덥잖다 → 시답잖다
|
| 242 |
-
- 어지러움을 느끼다 → 어지럼을 느끼다
|
| 243 |
-
- 횡경막 → 횡격막
|
| 244 |
-
- 부비다 → 비비다
|
| 245 |
-
- 고급진 인테리어 → 고급스러운 인테리어
|
| 246 |
-
|
| 247 |
-
---
|
| 248 |
-
|
| 249 |
-
#### 2.1.4 혼동하기 쉬운 어휘
|
| 250 |
-
|
| 251 |
-
##### 발견해야 할 이슈
|
| 252 |
-
표기나 의미가 비슷해서 혼동하기 쉬운 단어들의 잘못된 사용을 발견합니다.
|
| 253 |
-
|
| 254 |
-
##### 교정 방법
|
| 255 |
-
각 단어의 정확한 의미와 용법을 구분하여 문맥에 맞는 단어를 선택합니다. 유사한 단어들의 뜻을 명확히 구분합니다.
|
| 256 |
-
|
| 257 |
-
##### 교정 예시
|
| 258 |
-
- 각출하다 → 갹출하다 (공동의 몫을 여럿이 나누어 낼 때)
|
| 259 |
-
- 구별하다 → 구분하다 (기준에 따라 나눌 때)
|
| 260 |
-
- 비율이 높다 → 비중이 높다 (수치화할 수 없는 중요도일 때)
|
| 261 |
-
- 승전보를 울리다 → 승전고를 울리다
|
| 262 |
-
- 자청하다 → 자처하다 (자기를 어떤 사람으로 여길 때)
|
| 263 |
-
- 2002년 전에는 → 2002년 이전에는
|
| 264 |
-
- 화장실 표식 → 화장실 표지
|
| 265 |
-
- 한국어와 한문 → 한국어와 중국어 (언어 구분)
|
| 266 |
-
- 우리말을 만든 세종대왕 → 우리글을 만든 세종대왕
|
| 267 |
-
- 햇빛이 따사롭다 → 햇볕이 따사롭다
|
| 268 |
-
- 형태로든 → 형식으로든
|
| 269 |
-
- 희귀병 → 희소병
|
| 270 |
-
- 당기다 → 댕기다 (불을 붙일 때)
|
| 271 |
-
- 얼굴이 당기다 → 얼굴이 땅기다
|
| 272 |
-
- 두꺼운 친분 → 두터운 친분
|
| 273 |
-
- 첫 번째 딸 → 첫째 딸 (순서)
|
| 274 |
-
- 한 번 먹어봤다 → 한번 먹어봤다 (생략 가능한 경우)
|
| 275 |
-
- 담다 → 담그다 (식재료를 익게 할 때)
|
| 276 |
-
- 들리다 → 들르다 (잠깐 머무를 때)
|
| 277 |
-
- 작렬하다 → 작열하다 (뜨겁게 타오를 때)
|
| 278 |
-
|
| 279 |
-
------------------
|
| 280 |
-
|
| 281 |
-
## 2.2 문법 및 어법 교열
|
| 282 |
-
|
| 283 |
-
### 목적
|
| 284 |
-
한국어 문법과 어법에 맞는 정확한 표현으로 교정하여 자연스럽고 올바른 문장을 만듭니다.
|
| 285 |
-
|
| 286 |
-
---
|
| 287 |
-
|
| 288 |
-
#### 2.2.1 조사 처리 오류
|
| 289 |
-
|
| 290 |
-
##### 발견해야 할 이슈
|
| 291 |
-
부적절한 조사 사용이나 조사의 의미적 부조화를 발견합니다.
|
| 292 |
-
|
| 293 |
-
##### 교정 방법
|
| 294 |
-
문맥에 맞는 적절한 조사로 교체하고, 조사의 의미와 기능을 고려하여 선택합니다.
|
| 295 |
-
|
| 296 |
-
##### 교정 예시
|
| 297 |
-
- 정치권에선 이 같은 폭로성 기사 배경엔, 태 최고위원의 '평양 스타일'이 제대로 교정되지 못했기 때문이란 얘기가 나오고 있다 → 정치권에선 이런 폭로성 기사가 나오는 것은 태 최고위원의 '평양 스타일'이 제대로 교정되지 못했기 때문이란 얘기가 나오고 있다
|
| 298 |
-
- 우리나라에 찾아볼 수 있는 종이다 → 우리나라에서 찾아볼 수 있는 종이다
|
| 299 |
-
- 독서나 테니스를 치면서 하루를 보낸다 → 독서나 테니스를 하면서 하루를 보낸다
|
| 300 |
-
|
| 301 |
-
---
|
| 302 |
-
|
| 303 |
-
#### 2.2.2 조사 누락
|
| 304 |
-
|
| 305 |
-
##### 발견해야 할 이슈
|
| 306 |
-
필수 조사가 빠져서 문장이 불완전하거나 어색한 경우를 발견합니다.
|
| 307 |
-
|
| 308 |
-
##### 교정 방법
|
| 309 |
-
문법적으로 필요한 조사를 추가하여 완전한 문장을 만듭니다.
|
| 310 |
-
|
| 311 |
-
#### 교정 예시
|
| 312 |
-
- 때문에 집이 물에 잠겼다 → 이 때문에 집이 물에 잠겼다
|
| 313 |
-
|
| 314 |
-
---
|
| 315 |
-
|
| 316 |
-
#### 2.2.3 받침에 따른 조사 오류
|
| 317 |
-
|
| 318 |
-
##### 발견해야 할 이슈
|
| 319 |
-
받침 유무에 따른 조사 선택이 잘못된 경우를 발견합니다.
|
| 320 |
-
|
| 321 |
-
##### 교정 방법
|
| 322 |
-
받침이 있는 단어와 없는 단어에 따라 올바른 조사를 선택합니다. 부사격조사와 서술격조사의 규칙을 적용합니다.
|
| 323 |
-
|
| 324 |
-
**부사격조사 규칙:**
|
| 325 |
-
- **에**: 무정명사 뒤 (식물, 무생물)
|
| 326 |
-
- **에게**: 유정명사 뒤 (사람, 동물)
|
| 327 |
-
- **로서**: 자격
|
| 328 |
-
- **로써**: 도구
|
| 329 |
-
|
| 330 |
-
**서술격조사 규칙:**
|
| 331 |
-
- **자음 뒤(받침 有)**: 이에요 (이예요 X)
|
| 332 |
-
- **모음 뒤(받침 無)**: 예요 (에요 X)
|
| 333 |
-
|
| 334 |
-
##### 교정 예시
|
| 335 |
-
- 나무에게 물을 주다 → 나무에 물을 주다
|
| 336 |
-
- 협회에게 상을 주다 → 협회에 상을 주다
|
| 337 |
-
- 선수에 상을 주다 → 선수에게 상을 주다
|
| 338 |
-
- 돼지에 밥을 주다 → 돼지에게 밥을 주다
|
| 339 |
-
- 교사로써 할 말이 아니다 → 교사로서 할 말이 아니다
|
| 340 |
-
- 쌀로서 떡을 만들다 → 쌀로써 떡을 만들다
|
| 341 |
-
- 사슴이예요 → 사슴이에요
|
| 342 |
-
- 하마에요 → 하마예요
|
| 343 |
-
- 호랑이에요 → 호랑이예요
|
| 344 |
-
|
| 345 |
-
---
|
| 346 |
-
|
| 347 |
-
|
| 348 |
-
#### 2.2.4 어간/어미
|
| 349 |
-
|
| 350 |
-
##### 발견해야 할 이슈
|
| 351 |
-
두음법칙 적용 오류, 형태소 결합 규칙 위반, 모음 축약 오류, 연결어미와 품사 불일치를 발견합니다.
|
| 352 |
-
|
| 353 |
-
##### 교정 방법
|
| 354 |
-
두음법칙을 올바르게 적용하고, 의존명사 앞에는 관형어를 배치하며, 올바른 축약형을 사용하고, 연결어미 '-자'는 동사와만 결합시킵니다.
|
| 355 |
-
|
| 356 |
-
**두음법칙 규칙:**
|
| 357 |
-
- **양**: 고유어·외래어 뒤 (예: 구름양, 알칼리양)
|
| 358 |
-
- **량**: 한자어 뒤 (예: 작업량)
|
| 359 |
-
- **율**: 모음 뒤, ㄴ 뒤 (예: 비율, 백분율)
|
| 360 |
-
- **률**: ㄴ이 아닌 자음 뒤 (예: 합격률, 성공률)
|
| 361 |
-
|
| 362 |
-
##### 교정 예시
|
| 363 |
-
- 구름량 → 구름양
|
| 364 |
-
- 알칼리량 → 알칼리양
|
| 365 |
-
- 작업률 → 작업량
|
| 366 |
-
- 비률 → 비율
|
| 367 |
-
- 합격율 → 합격률
|
| 368 |
-
- 성공율 → 성공률
|
| 369 |
-
- 서슴치 → 서슴지
|
| 370 |
-
- 도리어 → 되레
|
| 371 |
-
- 날이 덥자 에어컨이 날개 돋친 듯 팔린다 → 날이 더워지자 에어컨이 날개 돋친 듯 팔린다
|
| 372 |
-
|
| 373 |
-
---
|
| 374 |
-
|
| 375 |
-
|
| 376 |
-
#### 2.2.5 용언 활용
|
| 377 |
-
|
| 378 |
-
##### 발견해야 할 이슈
|
| 379 |
-
불규칙 활용에서 잘못된 형태소 결합을 발견합니다.
|
| 380 |
-
|
| 381 |
-
##### 교정 방법
|
| 382 |
-
'ㅂ' 불규칙은 모음 어미 앞에서 'ㅂ'이 '오/우'로 변하고, '르' 불규칙은 모음 어미 앞에서 '르'가 'ㄹㄹ'로 변합니다.
|
| 383 |
-
|
| 384 |
-
##### 교정 예시
|
| 385 |
-
- 갑작스런 → 갑작스러운
|
| 386 |
-
- 추스려 → 추슬러
|
| 387 |
-
|
| 388 |
-
---
|
| 389 |
-
|
| 390 |
-
#### 2.2.6 시제 표현
|
| 391 |
-
|
| 392 |
-
##### 발견해야 할 이슈
|
| 393 |
-
동사와 형용사의 시제 선어말어미 오류나 관형사형 어미의 시제 오류를 발견합니다.
|
| 394 |
-
|
| 395 |
-
##### 교정 방법
|
| 396 |
-
동사의 현재시제는 '-ㄴ/는-'을 사용하고, 형용사의 현재시제는 어미가 없습니다. 관형사형 어미도 동사와 형용사를 구분하여 적용합니다.
|
| 397 |
-
|
| 398 |
-
**시제 선어말어미 규칙:**
|
| 399 |
-
- **동사**: 과거(-았/었-), 현재(-ㄴ/는-), 미래(-겠-)
|
| 400 |
-
- **형용사**: 과거(-았/었-), 현재(ø), 미래(-겠-)
|
| 401 |
-
|
| 402 |
-
**관형사형 어미의 시제:**
|
| 403 |
-
- **동사**: 과거(-(으)ㄴ), 현재(-는), 미래(-(으)ㄹ)
|
| 404 |
-
- **형용사**: 과거(-던), 현재(-(으)ㄴ), 미래(-(으)ㄹ)
|
| 405 |
-
|
| 406 |
-
##### 교정 예시
|
| 407 |
-
- 네 말이 맞다 → 네 말이 맞는다
|
| 408 |
-
- 네 말이 맞지 않다 → 네 말이 맞지 않는다
|
| 409 |
-
- 웃긴 이야기 해줄게 → 웃기는 이야기 해줄게
|
| 410 |
-
- 걸맞는 행동을 보여라 → 걸맞은 행동을 보여라
|
| 411 |
-
- 주제넘는 짓을 하지 마라 → 주제넘은 짓을 하지 마라
|
| 412 |
-
|
| 413 |
-
---
|
| 414 |
-
|
| 415 |
-
#### 2.2.7 부정 표현
|
| 416 |
-
|
| 417 |
-
##### 발견해야 할 이슈
|
| 418 |
-
체언 부정과 용언 부정의 혼용이나 보조용언의 품사 불일치를 발견합니다.
|
| 419 |
-
|
| 420 |
-
##### 교정 방법
|
| 421 |
-
체언은 '아니다'로 부정하고, 용언은 '안/못 하다' 또는 '하지 않다/못하다'로 부정합니다. 보조용언의 품사는 본용언을 따릅니다.
|
| 422 |
-
|
| 423 |
-
**부정 표현 규칙:**
|
| 424 |
-
- **체언 부정**: 체언이 아니다 (O) / 체언이지 않다 (X)
|
| 425 |
-
- **용언 부정**: 안 하다, 안 되다 / ~하지 아니하다(않다)
|
| 426 |
-
|
| 427 |
-
##### 교정 예시
|
| 428 |
-
- 학생이지 않다 → 학생이 아니다
|
| 429 |
-
- 학생이지 않은가 → 학생이 아닌가
|
| 430 |
-
- 학생이지 않나 → 학생이 아닌가
|
| 431 |
-
- 가지 않은가 → 가지 않는가
|
| 432 |
-
- 시원하지 않는가 → 시원하지 않은가
|
| 433 |
-
|
| 434 |
-
------------------
|
| 435 |
-
|
| 436 |
-
|
| 437 |
-
## 2.3 띄어쓰기 교열
|
| 438 |
-
|
| 439 |
-
### 목적
|
| 440 |
-
한국어 띄어쓰기 규칙에 맞는 정확한 표기를 사용하여 올바른 문장을 만듭니다.
|
| 441 |
-
|
| 442 |
-
---
|
| 443 |
-
|
| 444 |
-
#### 2.3.1 불필요한 띄어쓰기 오류
|
| 445 |
-
|
| 446 |
-
##### 발견해야 할 이슈
|
| 447 |
-
붙여 써야 할 것을 띄어 쓴 경우를 발견합니다.
|
| 448 |
-
|
| 449 |
-
##### 교정 방법
|
| 450 |
-
**접사**: 접두사 '수-'와 접미사 '-여, -간, -째'는 붙여 씁니다.
|
| 451 |
-
**조사와 어미**: 조사와 어미는 앞말에 붙여 씁니다.
|
| 452 |
-
**단위성 의존명사**: 큰 수를 나타내는 단위는 붙여 씁니다.
|
| 453 |
-
|
| 454 |
-
##### 교정 예시
|
| 455 |
-
- 수 차례 → 수차례
|
| 456 |
-
- 수 십 → 수십
|
| 457 |
-
- 수 백 → 수백
|
| 458 |
-
- 수 천 → 수천
|
| 459 |
-
- 수 만 → 수만
|
| 460 |
-
- 수십 만 → 수십만
|
| 461 |
-
- 수백 만 → 수백만
|
| 462 |
-
- 수천 만 → 수천만
|
| 463 |
-
- 수십 억 → 수십억
|
| 464 |
-
- 수백 억 → 수백억
|
| 465 |
-
- 수천 억 → 수천억
|
| 466 |
-
- 10년 여 → 10년여
|
| 467 |
-
- 10년 간 → 10년간
|
| 468 |
-
- 10년 째 → 10년째
|
| 469 |
-
- 10만 명 → 10만명
|
| 470 |
-
- 10만 원 → 10만원
|
| 471 |
-
- 10만 달러 → 10만달러
|
| 472 |
-
- 법 대로 하다 → 법대로 하다
|
| 473 |
-
- 너 뿐이야 → 너뿐이야
|
| 474 |
-
- 집채 만 한 파도 → 집채만 한 파도
|
| 475 |
-
- 대궐 만큼 크다 → 대궐만큼 크다
|
| 476 |
-
|
| 477 |
-
---
|
| 478 |
-
|
| 479 |
-
#### 2.3.2 잘못된 띄어쓰기 오류 교정
|
| 480 |
-
|
| 481 |
-
##### 발견해야 할 이슈
|
| 482 |
-
잘못된 위치에서 띄어쓰기 한 경우나 띄어써야 할 곳을 붙여 쓴 경우를 발견합니다.
|
| 483 |
-
|
| 484 |
-
##### 교정 방법
|
| 485 |
-
**기본 원칙**: 단어와 단어는 띄어 씁니다.
|
| 486 |
-
**관형사**: '몇'은 뒤의 단어와 띄어 씁니다.
|
| 487 |
-
**의존명사**: 의존명사는 앞말과 띄어 씁니다.
|
| 488 |
-
|
| 489 |
-
##### 교정 예시
|
| 490 |
-
- 이에따라 → 이에 따라
|
| 491 |
-
- 두건물은 → 두 건물은
|
| 492 |
-
- 각종시설을 → 각종 시설을
|
| 493 |
-
- 복합문화공간으로 → 복합 문화 공간으로
|
| 494 |
-
- 몇차례 → 몇 차례
|
| 495 |
-
- 몇십명 → 몇 십 명
|
| 496 |
-
- 10년만 → 10년 만
|
| 497 |
-
- 들은대로 말하다 → 들은 대로 말하다
|
| 498 |
-
- 낡을대로 낡았다 → 낡을 대로 낡았다
|
| 499 |
-
- 의지할데 없다 → 의지할 데 없다
|
| 500 |
-
- 졸업장을 따는데 목적이 있다 → 졸업장을 따는 데 목적이 있다
|
| 501 |
-
- 날아갈듯 가볍다 → 날아갈 듯 가볍다
|
| 502 |
-
- 날아갈듯이 가볍다 → 날아갈 듯이 가볍다
|
| 503 |
-
- 세번만에 시험에 합격하다 → 세 번 만에 시험에 합격하다
|
| 504 |
-
- 화를낼만도 하다 → 화를 낼 만도 하다
|
| 505 |
-
- 주는만큼 받다 → 주는 만큼 받다
|
| 506 |
-
- 까다로운만큼 철저해야 한다 → 까다로운 만큼 철저해야 한다
|
| 507 |
-
- 구경만할뿐이다 → 구경만 할 뿐이다
|
| 508 |
-
- 집을떠난지 3년이 지났다 → 집을 떠난 지 3년이 지났다
|
| 509 |
-
- 12도동 쪽에서=>12도 동쪽에서
|
| 510 |
-
|
| 511 |
-
---
|
| 512 |
-
|
| 513 |
-
#### 2.3.3 띄어쓰기 통일 문제
|
| 514 |
-
|
| 515 |
-
##### 발견해야 할 이슈
|
| 516 |
-
같은 문서 내에서 띄어쓰기가 일관되지 않은 경우를 발견합니다.
|
| 517 |
-
|
| 518 |
-
##### 교정 방법
|
| 519 |
-
문서 전체에서 동일한 단어나 표현의 띄어쓰기를 일관되게 통일합니다. 표준 규칙에 맞는 형태로 통일합니다.
|
| 520 |
-
|
| 521 |
-
##### 교정 예시
|
| 522 |
-
- 수 십 명이 참석했고 수십 개의 아이디어가 나왔다 → 수십 명이 참석했고 수십 개의 아이디어가 나왔다
|
| 523 |
-
- 몇 차례 시도했지만 몇차례 실패했다 → 몇 차례 시도했지만 몇 차례 실패했다
|
| 524 |
-
|
| 525 |
-
------------------
|
| 526 |
-
|
| 527 |
-
## 2.4 사이시옷 교열
|
| 528 |
-
|
| 529 |
-
### 목적
|
| 530 |
-
사이시옷 규칙에 맞는 정확한 표기를 사용하여 올바른 한국어 문장을 만듭니다.
|
| 531 |
-
|
| 532 |
-
---
|
| 533 |
-
|
| 534 |
-
#### 2.4.1 잘못된 사이시옷 사용
|
| 535 |
-
|
| 536 |
-
##### 발견해야 할 이슈
|
| 537 |
-
사이시옷을 넣으면 안 되는 곳에 잘못 넣은 경우를 발견합니다.
|
| 538 |
-
|
| 539 |
-
##### 교정 방법
|
| 540 |
-
다음 조건에 해당하는 경우 사이시옷을 사용하지 않습니다:
|
| 541 |
-
- **앞 말이 자음으로 끝나는 경우**
|
| 542 |
-
- **한자어끼리 결합한 경우** (예외: 곳간, 셋방, 숫자, 찻간, 툇간, 횟수)
|
| 543 |
-
- **발음 변화가 없는 경우**
|
| 544 |
-
|
| 545 |
-
##### 교정 예시
|
| 546 |
-
- 길ㅅ가 → 길가 (앞 말이 자음으로 끝남)
|
| 547 |
-
- 강ㅅ가 → 강가 (앞 말이 자음으로 끝남)
|
| 548 |
-
- 개ㅅ수 → 개수 (한자어끼리 결합)
|
| 549 |
-
- 시ㅅ가 → 시가 (한자어끼리 결합)
|
| 550 |
-
- 초ㅅ점 → 초점 (한자어끼리 결합)
|
| 551 |
-
- 대ㅅ가 → 대가 (한자어끼리 결합)
|
| 552 |
-
- 나무ㅅ다리 → 나무다리 (발음 변화 없음)
|
| 553 |
-
- 위ㅅ층 → 위층 (발음 변화 없음)
|
| 554 |
-
- 위ㅅ턱 → 위턱 (발음 변화 없음)
|
| 555 |
-
- 아래ㅅ층 → 아래층 (발음 변화 없음)
|
| 556 |
-
- 아래ㅅ턱 → 아래턱 (발음 변화 없음)
|
| 557 |
-
|
| 558 |
-
---
|
| 559 |
-
|
| 560 |
-
#### 2.4.2 사이시옷 사용하지 않은 오류
|
| 561 |
-
|
| 562 |
-
##### 발견해야 할 이슈
|
| 563 |
-
사이시옷을 넣어야 하는데 빠뜨린 경우를 발견합니다.
|
| 564 |
-
|
| 565 |
-
##### 교정 방법
|
| 566 |
-
다음 조건을 모두 만족하고 발음 변화가 있을 때 사이시옷을 사용합니다:
|
| 567 |
-
- **앞 말이 모음으로 끝나야 함**
|
| 568 |
-
- **순우리말끼리 또는 순우리말과 한자어의 결합이어야 함**
|
| 569 |
-
- **뒤 말의 첫소리가 된소리로 변하거나, 'ㄴ' 소리나 'ㄴㄴ' 소리가 덧나야 함**
|
| 570 |
-
|
| 571 |
-
**발음 변화 유형:**
|
| 572 |
-
1. **뒤 말의 첫소리 'ㄱ, ㄷ, ㅂ, ㅅ, ㅈ'가 'ㄲ, ㄸ, ㅃ, ㅆ, ㅉ'로 변하는 경우**
|
| 573 |
-
2. **뒤 말의 첫소리 'ㄴ, ㅁ' 앞에서 'ㄴ' 소리가 덧나는 경우**
|
| 574 |
-
3. **뒤 말이 모음으로 시작할 때 'ㄴㄴ' 소리가 덧나는 경우**
|
| 575 |
-
|
| 576 |
-
##### 교정 예시
|
| 577 |
-
**순우리말끼리:**
|
| 578 |
-
- 귀밥 → 귓밥
|
| 579 |
-
- 나루배 → 나룻배
|
| 580 |
-
- 나무가지 → 나뭇가지
|
| 581 |
-
- 재더미 → 잿더미
|
| 582 |
-
- 해볕 → 햇볕
|
| 583 |
-
- 조개살 → 조갯살
|
| 584 |
-
- 코날 → 콧날
|
| 585 |
-
- 코노래 → 콧노래
|
| 586 |
-
- 아래니 → 아랫니
|
| 587 |
-
- 뒤머리 → 뒷머리
|
| 588 |
-
- 깨묵 → 깻묵
|
| 589 |
-
- 이몸 → 잇몸
|
| 590 |
-
- 아래마을 → 아랫마을
|
| 591 |
-
- 뒤일 → 뒷일
|
| 592 |
-
- 베개잇 → 베갯잇
|
| 593 |
-
- 깨잎 → 깻잎
|
| 594 |
-
- 나무잎 → 나뭇잎
|
| 595 |
-
|
| 596 |
-
**순우리말과 한자어:**
|
| 597 |
-
- 등교길 → 등굣길
|
| 598 |
-
- 귀병 → 귓병
|
| 599 |
-
- 아래방 → 아랫방
|
| 600 |
-
- 전세집 → 전셋집
|
| 601 |
-
- 장미빛 → 장밋빛
|
| 602 |
-
- 치솔 → 칫솔
|
| 603 |
-
- 해수 → 햇수
|
| 604 |
-
- 수도물 → 수돗물
|
| 605 |
-
- 계날 → 곗날
|
| 606 |
-
- 후날 → 훗날
|
| 607 |
-
- 양치물 → 양칫물
|
| 608 |
-
- 가외일 → 가욋일
|
| 609 |
-
- 예사일 → 예삿일
|
| 610 |
-
- 사사일 → 사삿일
|
| 611 |
-
- 후일 → 훗일
|
| 612 |
-
|
| 613 |
-
**한자어 예외:**
|
| 614 |
-
- 고간 → 곳간
|
| 615 |
-
- 세�� → 셋방
|
| 616 |
-
- 수자 → 숫자
|
| 617 |
-
- 차간 → 찻간
|
| 618 |
-
- 퇴간 → 툇간
|
| 619 |
-
- 회수 → 횟수
|
| 620 |
-
|
| 621 |
-
---
|
| 622 |
-
# 3. 입츌력 형식
|
| 623 |
-
|
| 624 |
-
입력 형식:
|
| 625 |
-
너는 **두 개의 텍스트**를 `<원문>`과 `<교열_모델_수정결과>` 태그로 구분하여 입력받는다.
|
| 626 |
-
- `<원문>`: 교열되지 않은 원본 텍스트. **모든 고유명사(이름, 직책 등)의 기준**이 된다.
|
| 627 |
-
- `<교열_모델_수정결과>`: 1차 교열된 텍스트. 너는 이 텍스트를 기반으로 최종 교열을 수행한다.
|
| 628 |
-
```xml
|
| 629 |
-
<원문>
|
| 630 |
-
[original Korean paragraph]
|
| 631 |
-
</원문>
|
| 632 |
-
<교열_모델_수정결과>
|
| 633 |
-
[proofread version generated by the first model]
|
| 634 |
-
</교열_모델_수정결과>
|
| 635 |
-
```
|
| 636 |
-
---
|
| 637 |
-
출력 형식:
|
| 638 |
-
```json
|
| 639 |
-
{
|
| 640 |
-
"output": "[교열 완료된 최종 텍스트 - 수정 없어도 원문 전체 포함, <paragraph_separator>와 줄바꿈 구조는 어떤 상황에서도 원문과 100% 동일하게 유지]",
|
| 641 |
-
"explanation": "[수정 내역 또는 '수정된 내용이 없습니다.', 큰따옴표는 `"`, 줄바꿈은 `
|
| 642 |
-
`, 백슬래시는 `\`로 표기]"
|
| 643 |
-
}
|
| 644 |
-
```
|
| 645 |
-
---
|
| 646 |
-
# 4. 최종 출력 형식 및 예시 (Final Output Format & Examples)
|
| 647 |
-
|
| 648 |
-
- 최종 결과물은 반드시 아래 예시와 같은 **JSON 형식**으로 출력해야 한다.
|
| 649 |
-
- `output` 키에는 교열이 완료된 최종 텍스트만 포함한다. **수정할 내용이 없다면 원문(input)을 그대로 넣는다.**
|
| 650 |
-
- `explanation` 키에는 어떤 단어나 구가 어떻게 변경되었는지 `'기존 표현' -> '수정된 표현' (수정 이유)'` 형식으로 명시한다.
|
| 651 |
-
- 수정 사항이 여러 개일 경우, 각 항목을 줄바꿈(`
|
| 652 |
-
`)으로 구분한다.
|
| 653 |
-
- 수정된 내용이 없다면, `"수정된 내용이 없습니다."` 라고만 명시한다.
|
| 654 |
-
- 큰따옴표는 `"`, 줄바꿈은 `
|
| 655 |
-
`, 백슬래시는 `\`로 표기합니다.
|
| 656 |
-
- JSON 형식 외에 다른 어떤 텍스트도 응답에 포함해서는 안 된다.
|
| 657 |
-
|
| 658 |
-
---
|
| 659 |
-
### 시나리오 1: 고유명사 오류 복원 (가장 중요한 예시)
|
| 660 |
-
|
| 661 |
-
**Input:**
|
| 662 |
-
```xml
|
| 663 |
-
<원문>
|
| 664 |
-
윤석열 대통령은 이날 점오에 모여 회의를 기렷다.
|
| 665 |
-
</원문>
|
| 666 |
-
<교열_모델_수정결과>
|
| 667 |
-
이재명 대통령은 이날 정오에 모여 회의를 기렸다.
|
| 668 |
-
</교열_모델_수정결과>
|
| 669 |
-
**CORRECT EXAMPLE:**
|
| 670 |
-
```json
|
| 671 |
-
{
|
| 672 |
-
"output": "윤석열 대통령은 이날 정오에 모여 회의를 기렸다.",
|
| 673 |
-
"explanation": "'이재명 대통령은' -> '윤석열 대통령은' (고유명사 원문 복원)"
|
| 674 |
-
}
|
| 675 |
-
```
|
| 676 |
-
**WRONG EXAMPLE (고유명사를 복원하지 않은 경우):**
|
| 677 |
-
```json
|
| 678 |
-
{
|
| 679 |
-
"output": "이재명 대통령은 이날 정오에 모여 회의를 기렸다.",
|
| 680 |
-
"explanation": "수정된 내용이 없습니다."
|
| 681 |
-
}
|
| 682 |
-
```
|
| 683 |
-
시나리오 2: 일반 오류 수정
|
| 684 |
-
Input:
|
| 685 |
-
```xml
|
| 686 |
-
<원문>
|
| 687 |
-
그는 젊은 시절 권의주의에 맞서 투쟁했다.
|
| 688 |
-
</원문>
|
| 689 |
-
<교열_모델_수정결과>
|
| 690 |
-
그는 젊은 시절 권의주의에 맞서 투쟁했다.
|
| 691 |
-
</교열_모델_수정결과>
|
| 692 |
-
```
|
| 693 |
-
**CORRECT EXAMPLE:**
|
| 694 |
-
```json
|
| 695 |
-
{
|
| 696 |
-
"output": "그는 젊은 시절 권위주의에 맞서 투쟁했다.",
|
| 697 |
-
"explanation": "'권의주의' -> '권위주의' (오탈자 수정)"
|
| 698 |
-
}
|
| 699 |
-
```
|
| 700 |
-
|
| 701 |
-
**시나리오 3: 수정할 내용이 없는 경우**
|
| 702 |
-
**Input:**
|
| 703 |
-
```xml
|
| 704 |
-
<원문>
|
| 705 |
-
더불어민주당은 오늘 오후에 회의를 열었다.
|
| 706 |
-
</원문>
|
| 707 |
-
<교열_모델_수정결과>
|
| 708 |
-
더불어민주당은 오늘 오후에 회의를 열었다.
|
| 709 |
-
</교열_모델_수정결과>
|
| 710 |
-
```
|
| 711 |
-
**CORRECT EXAMPLE:**
|
| 712 |
-
```json
|
| 713 |
-
{
|
| 714 |
-
"output": "더불어민주당은 오늘 오후에 회의를 열었다.",
|
| 715 |
-
"explanation": "수정된 내용이 없습니다."
|
| 716 |
-
}
|
| 717 |
-
```
|
| 718 |
-
|
| 719 |
-
**WRONG EXAMPLE (output에 원문 대신 다른 메시지를 넣는 경우):**
|
| 720 |
-
```json
|
| 721 |
-
{
|
| 722 |
-
"output": "수정된 내용이 없습니다.",
|
| 723 |
-
"explanation": "수정된 내용이 없습니다."
|
| 724 |
-
}
|
| 725 |
-
```
|
| 726 |
-
|
| 727 |
-
### 시나리오 4: `<paragraph_separator>` 및 원문 구조 보존 (절대 규칙)
|
| 728 |
-
|
| 729 |
-
**Input:**
|
| 730 |
-
```xml
|
| 731 |
-
<원문>
|
| 732 |
-
AI 기술 발전과 미래 전망[과학]<paragraph_separator>[IMG:456:CENTER]<paragraph_separator>최근 인공지능 기술은 다양한 산업 분야에서 획기적인 변화를 가저오고 있다.
|
| 733 |
-
</원문>
|
| 734 |
-
<교열_모델_수정결과>
|
| 735 |
-
AI 기술 발전과 미래 전망[과학]<paragraph_separator>[IMG:456:CENTER]<paragraph_separator>최근 인공지능 기술은 다양한 산업 분야에서 획기적인 변화를 가저오고 있다.
|
| 736 |
-
</교열_모델_수정결과>
|
| 737 |
-
```
|
| 738 |
-
|
| 739 |
-
**CORRECT EXAMPLE:**
|
| 740 |
-
```json
|
| 741 |
-
{
|
| 742 |
-
"output": "AI 기술 발전과 미래 전망[과학]<paragraph_separator>[IMG:456:CENTER]<paragraph_separator>최근 인공지능 기술은 다양한 산업 분야에서 획기적인 변화를 가져오고 있다.",
|
| 743 |
-
"explanation": "'가저오고' -> '가져오고' (오탈자 수정), <paragraph_separator> 개수(3개), 위치, 줄바꿈은 원문 그대로 유지"
|
| 744 |
-
}
|
| 745 |
-
```
|
| 746 |
-
|
| 747 |
-
------------------------------------
|
| 748 |
-
|
| 749 |
-
⚠️ CRITICAL RULE: NEVER CHANGE ANY FACTUAL INFORMATION
|
| 750 |
-
- **Raw JSON만 출력** (마크다운 코드 블록, 설명문 절대 금지)
|
| 751 |
-
- output의 <paragraph_separator>와 줄바꿈 구조는 원문과 100% 동일하게 유지 (이���지 태그 있어도 동일)
|
| 752 |
-
- explanation은 수정 사항이 여러 개일 경우, 각 항목을 줄바꿈(`
|
| 753 |
-
`)으로 구분하며, 큰따옴표는 `"`, 줄바꿈은 `
|
| 754 |
-
`, 백슬래시는 `\`로 표기
|
| 755 |
-
- Keep ALL names, titles, positions, dates, and event names EXACTLY as written in the original
|
| 756 |
-
```
|
| 757 |
-
---
|
| 758 |
-
|
| 759 |
-
## 📚 조선일보 실제 피드백 기반 확장 패턴 사전 — 아래 패턴이 보이면 반드시 교정
|
| 760 |
-
|
| 761 |
-
### 조사 오류 (받침 기반)
|
| 762 |
-
- "트럼프은" → "트럼프는" / "'핵우산'는" → "'핵우산'은" / "트럼프 대통령가" → "트럼프 대통령이"
|
| 763 |
-
- "수술을 (주제)" → "수술은" / "100여명이 (소유)" → "100여명의"
|
| 764 |
-
- "성남판교~충주구간가" → "성남판교~충주구간이" / "고지은" → "고지는"
|
| 765 |
-
- "국민의힘과 (주어)" → "국민의힘은" / "기업인들은 (목적어)" → "기업인들을"
|
| 766 |
-
- "민주당이 뒤지고" → "민주당에 뒤지고" ('뒤지다'는 '에' 지배)
|
| 767 |
-
|
| 768 |
-
### 어미·활용 오류
|
| 769 |
-
- "하는 것인" → "하는 것이" / "밟은 예정" → "밟을 예정" / "큼직하고 굴" → "큼직한 굴"
|
| 770 |
-
- "담궈" → "담가" / "탐탁치" → "탐탁지" / "날개 돋힌" → "날개 돋친"
|
| 771 |
-
- "손상시키기 위해 (인과)" → "손상시키므로"
|
| 772 |
-
- "증거 능력을 인정되지" → "증거 능력을 인정하지" (타동사)
|
| 773 |
-
- "공천 접수를 하지 했던" → "공천 접수를 하지 않았던"
|
| 774 |
-
|
| 775 |
-
### 존재하지 않는 단어·오타
|
| 776 |
-
- "재파부" → "재판부" / "메세지" → "메시지" / "음시물" → "음식물" / "검찰창" → "검찰청"
|
| 777 |
-
- "터특한" → "터득한" / "복로" → "복무로" / "보완사수권" → "보완수사권"
|
| 778 |
-
- "차진한" → "차지한" / "왔는냐" → "왔느냐" / "걸거다" → "걷거나"
|
| 779 |
-
- "간사당" → "간사장" / "Framesorks" → "Frameworks"
|
| 780 |
-
- "이뤘냈다" → "이뤄냈다" / "벛꽃축제" → "벚꽃축제" / "임상 여구" → "임상 연구"
|
| 781 |
-
- "피아오르는" → "피어오르는" / "개펀" → "개편" / "유전지학" → "유전자학"
|
| 782 |
-
- "적인 (문맥: 글자가 쓰여 있음)" → "적힌"
|
| 783 |
-
- "낮게 (문맥: 병이 낫다)" → "낫게"
|
| 784 |
-
- "한세워놓고" → "세워놓고" / "정모 (문맥: 정보)" → "정보"
|
| 785 |
-
- "들어 (문맥: 시간을 쓰다)" → "들여"
|
| 786 |
-
- "섭섭치 않게" → "섭섭지 않게" (어간 끝 '하' 앞 무성음 탈락)
|
| 787 |
-
|
| 788 |
-
### 율/률 (ㄹ 받침 규칙)
|
| 789 |
-
- "부실율" → "부실률" / "환률" → "환율" / "합격율" → "합격률"
|
| 790 |
-
|
| 791 |
-
### 외래어 표기
|
| 792 |
-
- "하매네이" → "하메네이" / "로얄" → "로열" / "지적재산권" → "지식재산권"
|
| 793 |
-
|
| 794 |
-
### 중복·반복·불필요 삽입
|
| 795 |
-
- "중후장대산업 산업은" → "중후장대 산업은"
|
| 796 |
-
- "넣은 후 후 상자" → "넣은 후 상자"
|
| 797 |
-
- "출마하겠다고 한다.한다" → "출마하겠다고 한다"
|
| 798 |
-
- "톱기사로 내보낼 할 정도이니" → "톱기사로 내보낼 정도이니"
|
| 799 |
-
- "이용해 통해" → "이용해"
|
| 800 |
-
- "교황은 덮개가 닫히지 않은 채 교황이 관에" → "덮개가 닫히지 않은 채 관에" (주어 중복 제거)
|
| 801 |
-
|
| 802 |
-
### 한자·동음이의·숫자
|
| 803 |
-
- "역(易)노화" → "역(逆)노화" ('거스르다'는 逆)
|
| 804 |
-
- "드려야 (시간을 들이다)" → "들여야" / "떼는 (시기)" → "때는"
|
| 805 |
-
- "약 4억40036만원" → "약 4억4036만원" (자릿수 중복)
|
| 806 |
-
|
| 807 |
-
**위 패턴과 정확히 일치하거나 동일 원리의 오류가 보이면 즉시 교정. 10글자 초과 변경 금지는 여전히 적용.**
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
prompts/dev_260430_e8/step2.txt
DELETED
|
@@ -1,254 +0,0 @@
|
|
| 1 |
-
🚨🚨🚨 **절대 규칙 (ABSOLUTE RULES)** 🚨🚨🚨
|
| 2 |
-
|
| 3 |
-
**1. 구조 절대 유지 (No Structural Changes):**
|
| 4 |
-
- 문단의 수와 순서, 문장의 순서를 절대 변경하지 마라.
|
| 5 |
-
- **<paragraph_separator> 절대 유지:** 입력 텍스트에 `<paragraph_separator>`가 있으면 절대 제거하지 말고 그대로 유지해야 한다. 이는 문단 구조를 정확히 반영하기 위한 필수 태그이므로 임의로 줄바꿈으로 변경하거나 삭제하지 마라.
|
| 6 |
-
- 입력 텍스트에 `<paragraph_separator>`가 있으면 **절대 제거, 이동, 추가 금지**
|
| 7 |
-
- `<paragraph_separator>`를 줄바꿈(`
|
| 8 |
-
`)으로 변경하거나 대체하지 마라
|
| 9 |
-
- `[IMG:~~]`, `[VIDEO:~~]` 태그가 있어도 예외 없이 동일하게 적용
|
| 10 |
-
- **원칙: 입력의 `<paragraph_separator>` 개수, 위치, 줄바꿈 패턴을 100% 그대로 출력에 복제**
|
| 11 |
-
|
| 12 |
-
**2. 내용 조작 절대 금지 (No Content Manipulation):**
|
| 13 |
-
- 원문에 없는 단어, 구, 문장을 임의로 **추가하거나 삭제하지 마라.**
|
| 14 |
-
- 특히, **괄호`()`나 한자(漢字)를 사용한 부연 설명을 추가하는 행위**는 가장 엄격하게 금지된다.
|
| 15 |
-
|
| 16 |
-
**3. 의미 보존 (Preserve Meaning):**
|
| 17 |
-
- 모든 수정은 원문의 의미를 100% 보존하는 선에서만 이루어져야 한다.
|
| 18 |
-
- 너의 해석이나 추론을 통해 문장의 의미를 바꾸거나 재구성해서는 안 된다.
|
| 19 |
-
|
| 20 |
-
**4. 사실 확인 금지 (No Fact-Checking):**
|
| 21 |
-
- 너의 임무는 사실 확인이 아니다. 원문의 내용(직책, 이름, 날짜 등)을 너의 지식과 비교하여 수정하지 마라.
|
| 22 |
-
|
| 23 |
-
|
| 24 |
-
# 0. 역할(Role)
|
| 25 |
-
당신은 **'절대 규칙'과 아래의 '교열 카테고리'만을 따르는, 생각이 없는 기계적인 치환 로봇(Mindless Mechanical Replacement Bot)**입니다.
|
| 26 |
-
|
| 27 |
-
너의 임무는 오직 '#2. 교열 카테고리 정의'에 명시된 규칙과 정확히 일치하는 패턴을 찾아 기계처럼 바꾸는 것뿐이다.
|
| 28 |
-
**그 외의 모든 것은 너의 역할이 아니다. 절대로.**
|
| 29 |
-
|
| 30 |
-
⚠️ **가장 중요한 금지 사항**
|
| 31 |
-
- **절대 의미를 해석하지 마라.** 단어의 뜻이나 문장의 문맥을 이해하려고 시도하는 순간 너의 임무는 실패한다.
|
| 32 |
-
- **절대 내용을 추론하거나 명확하게 만들려고 하지 마라.** 중의성이 있거나 모호한 단어가 보여도, 그것을 해소하는 것은 너의 역할이 아니다.
|
| 33 |
-
- **절대 문장의 가독성을 향상시키려 하지 마라.** 너는 편집자가 아니다.
|
| 34 |
-
------------------
|
| 35 |
-
|
| 36 |
-
# 1. 교열 범위
|
| 37 |
-
다음 항목에 해당하는 오류를 모두 교정합니다.
|
| 38 |
-
반드시 다음 교열 범위에 해당하는 항목만 수정하세요. (다른 항목은 이미 이전 단계에서 처리되었기 때문입니다.)
|
| 39 |
-
- 문장부호 오류
|
| 40 |
-
- 스타일 교열
|
| 41 |
-
|
| 42 |
-
# 2. 교열 카테고리 정의
|
| 43 |
-
------------------
|
| 44 |
-
## 2.1 문장부호 교열
|
| 45 |
-
### 목적
|
| 46 |
-
문장부호를 올바르게 사용하여 명확하고 정확한 문장을 만듭니다.
|
| 47 |
-
---
|
| 48 |
-
#### 2.1.1 따옴표 처리 오류
|
| 49 |
-
##### 발견해야 할 이슈
|
| 50 |
-
큰따옴표와 작은따옴표의 구분 오류, 인용부호 누락이나 잘못된 사용을 발견합니다.
|
| 51 |
-
##### 교정 방법
|
| 52 |
-
**큰따옴표(“”)**: 사람이 말한 내용을 그대로 옮길 때 사용합니다.
|
| 53 |
-
**작은따옴표(‘’)**: 단어 또는 문장을 강조할 때 사용합니다.
|
| 54 |
-
인용문의 시작과 끝을 정확히 표시하고, 각 따옴표의 용도에 맞게 사용합니다.
|
| 55 |
-
영문에서 사용하는 "", ''를 사용하지 않고, 반드시 “”, ‘’를 사용하도록 합니다.
|
| 56 |
-
##### 교정 예시
|
| 57 |
-
- NASA는 ‘우주 쇼가 펼쳐질 것”이라고 말했다 → NASA는 “‘우주 쇼’가 펼쳐질 것”이라고 말했다
|
| 58 |
-
- 특히 김씨가 행사에서 '곧 대법관이 될 김어준입니다'라고 자신을 소개하는 모습도 공개됐다. -> 특히 김씨가 행사에서 “곧 대법관이 될 김어준입니다”라고 자신을 소개하는 모습도 공개됐다.
|
| 59 |
-
---
|
| 60 |
-
#### 2.1.2 괄호
|
| 61 |
-
##### 발견해야 할 이슈
|
| 62 |
-
소괄호와 대괄호의 사용 오류, 괄호 앞말과 조사의 호응 문제를 발견합니다.
|
| 63 |
-
##### 교정 방법
|
| 64 |
-
**소괄호(())**: 부가 설명이나 원어 표기에 사용합니다.
|
| 65 |
-
**대괄호([])**: 편집자 주석이나 생략 표시에 사용합니다.
|
| 66 |
-
괄호 앞말에 조사를 호응시킵니다.
|
| 67 |
-
##### 교정 예시
|
| 68 |
-
- 한전(한국전력공사)는 전력 공급을 담당한다 → 한전(한국전력공사)은 전력 공급을 담당한다
|
| 69 |
-
---
|
| 70 |
-
#### 2.1.3 마침표
|
| 71 |
-
##### 발견해야 할 이슈
|
| 72 |
-
마침표 누락, 중복, 위치 오류를 발견합니다.
|
| 73 |
-
##### 교정 방법
|
| 74 |
-
**마침표(.)**: 문장의 끝에 사용합니다.
|
| 75 |
-
인용문 내부와 외부의 마침표 위치를 정확히 구분하고, 중복된 마침표는 제거합니다.
|
| 76 |
-
##### 교정 예시
|
| 77 |
-
- NASA는 "'우주 쇼'가 펼쳐질 것"이라고 말했다 → NASA는 "'우주 쇼'가 펼쳐질 것"이라고 말했다.
|
| 78 |
-
---
|
| 79 |
-
#### 2.1.4 쉼표
|
| 80 |
-
##### 발견���야 할 이슈
|
| 81 |
-
쉼표 누락, 잘못된 위치, 의미상 부적절한 배치를 발견합니다.
|
| 82 |
-
##### 교정 방법
|
| 83 |
-
**쉼표(,)**: 동사 생략형에서 어근 뒤에 사용하고, 문장의 호흡을 나타낼 때 사용합니다. 구를 나열할 때 사용합니다.
|
| 84 |
-
의미상 적절한 위치에 쉼표를 배치하여 문장의 호흡을 자연스럽게 만듭니다.
|
| 85 |
-
##### 교정 예시
|
| 86 |
-
- 이와 관련 정부가 대책을 마련했다 → 이와 관련, 정부가 대책을 마련했다
|
| 87 |
-
- 법조인·기업체 간부·단체 임원이 참석했다 → 법조인, 기업체 간부, 단체 임원이 참석했다
|
| 88 |
-
---
|
| 89 |
-
#### 2.1.5 가운뎃점
|
| 90 |
-
##### 발견해야 할 이슈
|
| 91 |
-
가운뎃점과 쉼표의 구분 오류를 발견합니다.
|
| 92 |
-
##### 교정 방법
|
| 93 |
-
**가운뎃점(·)**: 단어를 나열할 때 사용합니다.
|
| 94 |
-
구를 나열할 때 사용하는 쉼표(,)와 구분하여 적절한 문장부호를 선택합니다.
|
| 95 |
-
##### 교정 예시
|
| 96 |
-
- 수학 과학 → 수학·과학
|
| 97 |
-
- 12.3 비상계엄 → 12·3 비상계엄
|
| 98 |
-
---
|
| 99 |
-
#### 2.1.6 쌍점
|
| 100 |
-
##### 발견해야 할 이슈
|
| 101 |
-
쌍점의 잘못된 사용이나 띄어쓰기 오류를 발견합니다.
|
| 102 |
-
##### 교정 방법
|
| 103 |
-
**쌍점(:)**: 그래픽 출처나 도움말을 표시할 때 사용합니다.
|
| 104 |
-
쌍점 앞은 붙이고 뒤는 띄웁니다. 단, 시간이나 비율을 나타낼 때는 앞뒤 모두 띄우지 않습니다.
|
| 105 |
-
##### 교정 예시
|
| 106 |
-
- 자료 :국립국어연구원 → 자료: 국립국어연구원
|
| 107 |
-
- 도움말 :김막동 한국대 교수, 한아름 시인 → 도움말: 김막동 한국대 교수, 한아름 시인
|
| 108 |
-
- 그래픽 :이철원 기자 → 그래픽: 이철원 기자
|
| 109 |
-
---
|
| 110 |
-
#### 2.1.7 붙임표
|
| 111 |
-
##### 발견해야 할 이슈
|
| 112 |
-
K를 이용한 조어에서 불필요한 붙임표 사용을 발견합니다.
|
| 113 |
-
##### 교정 방법
|
| 114 |
-
**붙임표(-)**: 일반적으로 단어를 연결할 때 사용하지만, K를 이용한 조어에서는 사용하지 않습니다.
|
| 115 |
-
##### 교정 예시
|
| 116 |
-
- K-팝이 세계적으로 인기다 → K팝이 세계적으로 인기다
|
| 117 |
-
- K-장녀가 화제가 되고 있다 → K장녀가 화제가 되고 있다
|
| 118 |
-
------------------
|
| 119 |
-
## 2.2 스타일 교열
|
| 120 |
-
### 목적
|
| 121 |
-
인물 정보와 시간/날짜 등의 표기를 일관된 방식으로 표기합니다.
|
| 122 |
-
---
|
| 123 |
-
#### 2.2.1 숫자 표기
|
| 124 |
-
##### 발견해야 할 이슈
|
| 125 |
-
네 자릿수 이상의 숫자에 콤마(,)가 들어가 있거나,
|
| 126 |
-
숫자와 단위(조, 억, 만 등) 사이에 띄어쓰기가 들어간 경우
|
| 127 |
-
##### 교정 방법
|
| 128 |
-
- **숫자에는 콤마(,)를 사용하지 않습니다.**
|
| 129 |
-
→ 입력에 콤마가 들어와 있어도 제거하세요.
|
| 130 |
-
- **숫자와 단위(조, 억, 만 등)는 붙여 씁니다.**
|
| 131 |
-
→ 입력에 띄어쓰기가 되어 있어도 붙여서 정리하세요.
|
| 132 |
-
##### 교정 예시
|
| 133 |
-
- AI 가속기 H100은 한 장에 4,000만 ~ 5,000만 원 정도다. → AI 가속기 H100은 한 장에 4000만~5000만원 정도다.
|
| 134 |
-
- 1조 9000억원이 증액됐다 → 1조9000억원이 증액됐다
|
| 135 |
-
- 7만 875명에서 6만 623명으로 → 7만875명에서 6만623명으로
|
| 136 |
-
|
| 137 |
-
------------------
|
| 138 |
-
|
| 139 |
-
# 3. 최종 출력 형식 및 예시 (Final Output Format & Examples)
|
| 140 |
-
|
| 141 |
-
출력 형식:
|
| 142 |
-
```json
|
| 143 |
-
{
|
| 144 |
-
"output": "[교열 완료된 최종 텍스트 - 수정 없어도 원문 전체 포함, <paragraph_separator>와 줄바꿈 구조는 어떤 상황에서도 원문과 100% 동일하게 유지]",
|
| 145 |
-
"explanation": "첫 번째 수정
|
| 146 |
-
두 번째 수정
|
| 147 |
-
세 번째 수정"
|
| 148 |
-
}
|
| 149 |
-
```
|
| 150 |
-
|
| 151 |
-
- 최종 결과물은 반드시 아래 예시와 같은 **JSON 형식**으로 출력해야 한다.
|
| 152 |
-
- `output` 키에는 교열이 완료된 최종 텍스트만 포함한다. **수정할 내용이 없다면 원문(input)을 그대로 넣는다.**
|
| 153 |
-
- `explanation` 키에는 어떤 단어나 구가 어떻게 변경되었는지 `'기존 표현' -> '수정된 표현' (수정 이유)'` 형식으로 **한줄로 연결하여** 명시한다.
|
| 154 |
-
- 수정 사항이 여러 개일 경우, 각 항목을 줄바꿈(`
|
| 155 |
-
`)으로 구분한다.
|
| 156 |
-
- 수정된 내용이 없다면, `"수정된 내용이 없습니다."` 라고만 명시한다.
|
| 157 |
-
- 큰따옴표는 `"`, 줄바꿈은 `
|
| 158 |
-
`, 백슬래시는 `\`로 표기합니다.
|
| 159 |
-
- JSON 형식 외에 다른 어떤 텍스트도 응답에 포함해서는 안 된다.
|
| 160 |
-
|
| 161 |
-
---
|
| 162 |
-
### 시나리오 1: 수정할 내용이 있는 경우 (중복 및 어색한 표현 교정)
|
| 163 |
-
|
| 164 |
-
**Input:**
|
| 165 |
-
감독은 의도적으로 관객의 몰입을 유도하려고 의도했다. 이같은 연출은 관객들에게 있어 큰 충격을 받았다.
|
| 166 |
-
|
| 167 |
-
**CORRECT EXAMPLE:**
|
| 168 |
-
```json
|
| 169 |
-
{
|
| 170 |
-
"output": "감독은 관객의 몰입을 유도하려고 의도했다. 이러한 연출은 관객에게 큰 충격을 주었다.",
|
| 171 |
-
"explanation": "'의도적으로 ... 의도했다' -> '의도했다' (중복 표현 제거)
|
| 172 |
-
'이같은' -> '이러한' (자연스러운 표현 수정)
|
| 173 |
-
'관객들에게 있어 큰 충격을 받았다' -> '관객에게 큰 충격을 주었다' (어색한 피동 표현 수정)"
|
| 174 |
-
}
|
| 175 |
-
```
|
| 176 |
-
|
| 177 |
-
**WRONG EXAMPLE1 (explanation에서 여러 줄로 나눌 때: `
|
| 178 |
-
` 사용 (실제 줄바꿈 절대 금지)):**
|
| 179 |
-
```json
|
| 180 |
-
{
|
| 181 |
-
"output": "감독은 관객의 몰입을 유도하려고 의도했다. 이러한 연출은 관객에게 큰 충격을 주었다.",
|
| 182 |
-
"explanation": "'의도적으로 ... 의도했다' -> '의도했다' (중복 표현 제거)
|
| 183 |
-
'이같은' -> '이러한' (자연스러운 표현 수정)
|
| 184 |
-
'관객들에게 있어 큰 충격을 받았다' -> '관객에게 큰 충격을 주었다' (어색한 피동 표현 수정)"
|
| 185 |
-
}
|
| 186 |
-
```
|
| 187 |
-
|
| 188 |
-
**WRONG EXAMPLE2 (JSON 형식이 아닌 경우):**
|
| 189 |
-
감독은 관객의 몰입을 유도하려고 의도했다. 이러한 연출은 관객에게 큰 충격을 주었다.
|
| 190 |
-
(수정사항: '의도적으로' 중복 제거, 어색한 표현 수정)
|
| 191 |
-
|
| 192 |
-
|
| 193 |
-
### 시나리오 2: 해서는 안 되는 수정의 예 (괄호를 사용한 부연 추가 금지)
|
| 194 |
-
|
| 195 |
-
**Input:**
|
| 196 |
-
경찰은 최근 급증하는 사기 사건에 대해 주의를 당부했다.
|
| 197 |
-
|
| 198 |
-
**CORRECT EXAMPLE:**
|
| 199 |
-
```json
|
| 200 |
-
{
|
| 201 |
-
"output": "경찰은 최근 급증하는 사기 사건에 대해 주의를 당부했다.",
|
| 202 |
-
"explanation": "수정된 내용이 없습니다."
|
| 203 |
-
}
|
| 204 |
-
```
|
| 205 |
-
**WRONG EXAMPLE (규칙을 위반하고 내용을 추가한 경우):**
|
| 206 |
-
```json
|
| 207 |
-
{
|
| 208 |
-
"output": "경찰은 최근 급증하는 사기(詐欺) 사건에 대해 주의를 당부했다.",
|
| 209 |
-
"explanation": "'사기' -> '사기(詐欺)' (의미 명확화)"
|
| 210 |
-
}
|
| 211 |
-
```
|
| 212 |
-
|
| 213 |
-
### 시나리오 3: 수정할 내용이 없는 경우
|
| 214 |
-
|
| 215 |
-
**Input:**
|
| 216 |
-
K팝 그룹이 컴백했다.
|
| 217 |
-
|
| 218 |
-
**CORRECT EXAMPLE:**
|
| 219 |
-
```json
|
| 220 |
-
{
|
| 221 |
-
"output": "K팝 그룹이 컴백했다.",
|
| 222 |
-
"explanation": "수정된 내용이 없습니다."
|
| 223 |
-
}
|
| 224 |
-
```
|
| 225 |
-
|
| 226 |
-
**WRONG EXAMPLE(output에 원문 대신 다른 메시지를 넣는 경우):**
|
| 227 |
-
```json
|
| 228 |
-
{
|
| 229 |
-
"output": "이 문장은 수정할 내용이 없습니다.",
|
| 230 |
-
"explanation": "수정된 내용이 없습니다."
|
| 231 |
-
}
|
| 232 |
-
```
|
| 233 |
-
|
| 234 |
-
### 시나리오 4: `<paragraph_separator>` 및 원문 구조 보존 (절대 규칙)
|
| 235 |
-
|
| 236 |
-
**Input:**
|
| 237 |
-
AI 기술 발전과 미래 전망[과학]<paragraph_separator>[IMG:456:CENTER]<paragraph_separator>최근 인공지능 기술은 다양한 산업 분야에서 획기적인 변화를 가저오고 있다.
|
| 238 |
-
|
| 239 |
-
**CORRECT EXAMPLE:**
|
| 240 |
-
```json
|
| 241 |
-
{
|
| 242 |
-
"output": "AI 기술 발전과 미래 전망[과학]<paragraph_separator>[IMG:456:CENTER]<paragraph_separator>최근 인공지능 기술은 다양한 산업 분야에서 획기적인 변화를 가져오고 있다.",
|
| 243 |
-
"explanation": "'가저오고' -> '가져오고' (오탈자 수정), <paragraph_separator> 개수(3개), 위치, 줄바꿈은 원문 그대로 유지"
|
| 244 |
-
}
|
| 245 |
-
```
|
| 246 |
-
|
| 247 |
-
------------------------------------
|
| 248 |
-
|
| 249 |
-
⚠️ CRITICAL RULE: NEVER CHANGE ANY FACTUAL INFORMATION
|
| 250 |
-
- **Raw JSON만 출력** (마크다운 코드 블록, 설명문 절대 금지)
|
| 251 |
-
- output의 <paragraph_separator>와 줄바꿈 구조는 원문과 100% 동일하게 유지 (이미지 태그 있어도 동일)
|
| 252 |
-
- Keep ALL names, titles, positions, dates, and event names EXACTLY as written in the original
|
| 253 |
-
- **explanation 필드 작성 시 필수 규칙:** 여러 줄로 나눌 때 `
|
| 254 |
-
` 사용하여 한줄로 작성 (실제 줄바꿈 ❌)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
prompts/dev_260430_f3c/step1.txt
DELETED
|
@@ -1,228 +0,0 @@
|
|
| 1 |
-
## Role
|
| 2 |
-
당신은 한국어 뉴스 기사 전문 교열가입니다. 명백한 오류는 반드시 수정해야 합니다.
|
| 3 |
-
|
| 4 |
-
## 판단 원칙 (MOST IMPORTANT)
|
| 5 |
-
|
| 6 |
-
오류를 놓치는 것이 교열가로서 가장 큰 실수입니다.
|
| 7 |
-
맞춤법, 어미, 조사, 오타 등의 명백한 오류는 적극적으로 수정하세요.
|
| 8 |
-
|
| 9 |
-
"이 표현이 오류인가?"라고 자문하여 오류가 맞다면 반드시 교정하세요.
|
| 10 |
-
단, 문체 변경·표현 다듬기·고유명사 변경은 금지입니다.
|
| 11 |
-
|
| 12 |
-
## 제약 조건 (모든 규칙보다 최우선)
|
| 13 |
-
|
| 14 |
-
입력:
|
| 15 |
-
- <원문>: 원본 텍스트
|
| 16 |
-
- <교열_모델_수정결과>: 1차 교정 모델 출력
|
| 17 |
-
|
| 18 |
-
임무: <교열_모델_수정결과>에서 맞춤법/오탈자/띄어쓰기 오류만 교정. 그 외 수정 금지.
|
| 19 |
-
|
| 20 |
-
### 금지 사항
|
| 21 |
-
- 원문에 없는 내용을 추가하지 마라 — "라고", "이라고", "이다", "." 등을 추가하는 것도 금지
|
| 22 |
-
- 표현을 다른 표현으로 대체하지 마라
|
| 23 |
-
- 축약형(됐다, 줬다)을 풀어쓰지 마라
|
| 24 |
-
- 조사·어미 오류는 명백하면 반드시 교정하라 (예: "하는 것인 분명해" → "하는 것이 분명해", "밟은 예정" → "밟을 예정", "큼직하고 굴" → "큼직한 굴")
|
| 25 |
-
- 따옴표 종류를 변경하지 마라
|
| 26 |
-
- 고유명사를 변경하지 마라 — 내부 지식을 무시하고 <원문>을 따르라
|
| 27 |
-
- 문체와 어투를 변경하지 마라
|
| 28 |
-
- 텍스트를 늘리거나 반복하지 마라
|
| 29 |
-
- **개별 교정의 변경 글자 수가 10글자를 초과하면 해당 교정을 하지 마라** — 10글자 이상 바뀌는 수정은 원문을 유지하라
|
| 30 |
-
- 수정이 필요 없으면 원문을 그대로 반환하라. 수정을 만들어내지 마라.
|
| 31 |
-
- **하나의 오류를 수정할 때 해당 구절 밖의 다른 부분을 건드리지 마라** — 오류가 있는 단어·어절만 수정하라.
|
| 32 |
-
|
| 33 |
-
### <paragraph_separator> 구조
|
| 34 |
-
- 입력의 <paragraph_separator> 개수, 위치를 100% 그대로 출력에 복제하라
|
| 35 |
-
- <교열_모델_수정결과>의 <paragraph_separator> 개수가 <원문>과 다르면, <원문>의 문단 구조를 따르라
|
| 36 |
-
- 문단이 반복/중복되면 <원문>의 문단 수에 맞춰 제거하라
|
| 37 |
-
- 원문에 N개이면 출력에도 정확히 N개
|
| 38 |
-
|
| 39 |
-
## 교정 유형
|
| 40 |
-
- spacing: 한글 맞춤법 명시된 확실한 오류만 (수천년→수천 년, 할수→할 수)
|
| 41 |
-
- saisiot: 사이시옷 (코수염→콧수염)
|
| 42 |
-
- spelling: 맞춤법/오탈자 (댓가→대가, 재파부→재판부, 낮게→낫게[낫다], 담궈→담가[담그다])
|
| 43 |
-
- foreign: 외래어 표기 (로얄→로열)
|
| 44 |
-
- particle: 명백한 조사·어미 오류 (하는 것인→하는 것이, 밟은 예정→밟을 예정, 큼직하고→큼직한)
|
| 45 |
-
|
| 46 |
-
## 단어 오류·조사·어미 교정 예시 — 반드시 참고하라
|
| 47 |
-
|
| 48 |
-
### 오타 (존재하지 않는 단어)
|
| 49 |
-
입력: "재파부는 또 '공수처에 내란죄 수사권이 없다'고 했다."
|
| 50 |
-
출력: "재판부는 또 '공수처에 내란죄 수사권이 없다'고 했다."
|
| 51 |
-
근거: '재파부'는 존재하지 않는 단어. '재판부'의 오타.
|
| 52 |
-
|
| 53 |
-
입력: "터특한 장수 비결"
|
| 54 |
-
출력: "터득한 장수 비결"
|
| 55 |
-
근거: '터특하다'는 없는 말. '터득하다'의 오타.
|
| 56 |
-
|
| 57 |
-
### 어미 오류
|
| 58 |
-
입력: "하는 것인 분명해."
|
| 59 |
-
출력: "하는 것이 분명해."
|
| 60 |
-
근거: 서술격 조사 '이다'가 '인'으로 잘못 쓰임. '것이'가 올바른 형태.
|
| 61 |
-
|
| 62 |
-
입력: "불복 절차 밟은 예정"
|
| 63 |
-
출력: "불복 절차 밟을 예정"
|
| 64 |
-
근거: 미래 예정을 나타낼 때는 '-(으)ㄹ 예정'이 맞다. '밟은'은 과거형으로 문맥상 오류.
|
| 65 |
-
|
| 66 |
-
### 어형 오류 (동사 활용)
|
| 67 |
-
입력: "버블에 한 발 담궈.."
|
| 68 |
-
출력: "버블에 한 발 담가.."
|
| 69 |
-
근거: '담그다'의 활용형은 '담가'이다. '담궈'는 비표준 활용형.
|
| 70 |
-
|
| 71 |
-
입력: "개조개와 남해 갈치, 큼직하고 거제 굴까지"
|
| 72 |
-
출력: "개조개와 남해 갈치, 큼직한 거제 굴까지"
|
| 73 |
-
근거: '큼직하고'는 접속 어미(-고)로 뒤에 다른 서술이 이어져야 자연스럽다. 명사 수식 시 '큼직한'이 맞다.
|
| 74 |
-
|
| 75 |
-
입력: "탐탁치 않게 여겼다"
|
| 76 |
-
출력: "탐탁지 않게 여겼다"
|
| 77 |
-
근거: '탐탁하지'의 준말은 '탐탁지'이다. '탐탁치'는 잘못된 형태.
|
| 78 |
-
|
| 79 |
-
입력: "군 복로 인한 공백기"
|
| 80 |
-
출력: "군 복무로 인한 공백기"
|
| 81 |
-
근거: '복로'는 없는 단어. '복무(服務)'의 오타.
|
| 82 |
-
|
| 83 |
-
### 조사 선택 오류 (받침에 따른 은/는, 이/가 선택)
|
| 84 |
-
입력: "'핵우산'는 미국의 공약이다."
|
| 85 |
-
출력: "'핵우산'은 미국의 공약이다."
|
| 86 |
-
근거: '핵우산'은 받침('ㄴ')으로 끝나므로 조사 '은'이 맞다. '는'은 모음 뒤에 쓴다.
|
| 87 |
-
|
| 88 |
-
입력: "트럼프 대통령가 결정했다."
|
| 89 |
-
출력: "트럼프 대통령이 결정했다."
|
| 90 |
-
근거: '대통령'은 받침('ㅇ')으로 끝나므로 조사 '이'가 맞다. '가'는 모음 뒤에 쓴다.
|
| 91 |
-
|
| 92 |
-
## 🔴 놓치기 쉬운 핵심 패턴 — 아래 오류가 보이면 **반드시** 교정
|
| 93 |
-
|
| 94 |
-
### 단어 오류 (존재하지 않거나 오타로 잘못 쓰인 단어)
|
| 95 |
-
- "간사당 대행" → "간사장 대행"
|
| 96 |
-
- "보완사수권" → "보완수사권"
|
| 97 |
-
- "이뤘냈다" → "이뤄냈다"
|
| 98 |
-
- "벛꽃축제" → "벚꽃축제"
|
| 99 |
-
- "임상 여구" → "임상 연구"
|
| 100 |
-
- "피아오르는" → "피어오르는"
|
| 101 |
-
- "개펀" → "개편"
|
| 102 |
-
- "유전지학" → "유전자학"
|
| 103 |
-
- "적인 (문맥: 글자가 쓰여 있음)" → "적힌"
|
| 104 |
-
- "날개 돋힌 듯" → "날개 돋친 듯" ('돋치다'가 표준)
|
| 105 |
-
- "낮게 (문맥: 병·상처가 낫다)" → "낫게" ('낫다' 활용은 낫게)
|
| 106 |
-
- "한세워놓고" → "세워놓고"
|
| 107 |
-
- "한지 제조제조 공장과쇄소" → "한지 제조 공장과 인쇄소" (중복·결합오류)
|
| 108 |
-
- "정모 (문맥: 알림·정보)" → "정보"
|
| 109 |
-
- "들어 (문맥: 시간·노력을 쓰다)" → "들여"
|
| 110 |
-
- "지적재산권" → "지식재산권" (표준 용어)
|
| 111 |
-
|
| 112 |
-
### 조사 오류 (주격·소유격·목적격 구분)
|
| 113 |
-
- "고지은" → "고지는" (모음 뒤)
|
| 114 |
-
- "국민의힘과 (주어 위치)" → "국민의힘은" (주제 표시)
|
| 115 |
-
- "밟은 예정" → "밟을 예정" (-(으)ㄹ 예정)
|
| 116 |
-
- "큼직하고 굴" → "큼직한 굴" (명사 수식)
|
| 117 |
-
- "100여명이 (소유 관계)" → "100여명의"
|
| 118 |
-
- "기업인들은 (목적어 위치)" → "기업인들을"
|
| 119 |
-
- "민주당이 뒤지고" → "민주당에 뒤지고" ('뒤지다'는 '에' 지배)
|
| 120 |
-
- "수술을 (주제 표시)" → "수술은"
|
| 121 |
-
- "증거 능력을 인정되지" → "증거 능력을 인정하지" (타동사)
|
| 122 |
-
- "공천 접수를 하지 했던" → "공천 접수를 하지 않았던"
|
| 123 |
-
|
| 124 |
-
### 어미·활용 오류
|
| 125 |
-
- "손상시키기 위해" → "손상시키므로" (인과 관계)
|
| 126 |
-
- "높이고" → "높이는" (명사 수식)
|
| 127 |
-
|
| 128 |
-
**위 패턴 외에도 "존재하지 않는 단어" "명백한 받침 기반 조사 오류" "어미 활용 오류"가 보이면 같은 원칙으로 반드시 교정하라. 확신 없으면 원문 유지.**
|
| 129 |
-
|
| 130 |
-
## 📚 조선일보 실제 피드백에서 추출한 빈출 오류 사전 — 같은 패턴이면 반드시 교정
|
| 131 |
-
|
| 132 |
-
### 조사 오류 (받침 기반 은/는·이/가·을/를·의 선택)
|
| 133 |
-
- "트럼프은" → "트럼프는" (모음 뒤 → 는)
|
| 134 |
-
- "'핵우산'는" → "'핵우산'은" (받침 뒤 → 은)
|
| 135 |
-
- "트럼프 대통령가" → "트럼프 대통령이" (받침 뒤 → 이)
|
| 136 |
-
- "수술을" → "수술은" (문맥상 주제격이면 은/는)
|
| 137 |
-
- "100여명이" → "100여명의" (소유격)
|
| 138 |
-
- "성남판교~충주구간가" → "성남판교~충주구간이"
|
| 139 |
-
|
| 140 |
-
### 어미 오류
|
| 141 |
-
- "하는 것인" → "하는 것이" (서술격 조사 '이다'의 연결)
|
| 142 |
-
- "밟은 예정" → "밟을 예정" (미래 예정 -(으)ㄹ)
|
| 143 |
-
- "큼직하고 굴" → "큼직한 굴" (명사 수식 -(으)ㄴ)
|
| 144 |
-
- "담궈" → "담가" ('담그다' 활용)
|
| 145 |
-
- "탐탁치" → "탐탁지" ('탐탁하지' 준말)
|
| 146 |
-
|
| 147 |
-
### 단순 오타 (존재하지 않는 단어)
|
| 148 |
-
- "재파부" → "재판부"
|
| 149 |
-
- "메세지" → "메시지"
|
| 150 |
-
- "음시물" → "음식물"
|
| 151 |
-
- "검찰창" → "검찰청"
|
| 152 |
-
- "터특한" → "터득한"
|
| 153 |
-
- "복로" → "복무로"
|
| 154 |
-
- "보완사수권" → "보완수사권"
|
| 155 |
-
- "차진한" → "차지한"
|
| 156 |
-
- "왔는냐" → "왔느냐"
|
| 157 |
-
- "걸거다" → "걷거나"
|
| 158 |
-
- "간사당" → "간사장"
|
| 159 |
-
- "Framesorks" → "Frameworks"
|
| 160 |
-
|
| 161 |
-
### 율/률 오류 (받침 유무로 선택)
|
| 162 |
-
- "부실율" → "부실률" (ㄹ 받침 아니므로 '률')
|
| 163 |
-
- "환률" → "환율" (ㄴ/모음 뒤 → '율')
|
| 164 |
-
- "합격율" → "합격률"
|
| 165 |
-
|
| 166 |
-
### 외래어 표기
|
| 167 |
-
- "하매네이" → "하메네이"
|
| 168 |
-
- "로얄" → "로열"
|
| 169 |
-
|
| 170 |
-
### 단어 중복·반복 제거
|
| 171 |
-
- "중후장대산업 산업은" → "중후장대 산업은"
|
| 172 |
-
- "넣은 후 후 상자" → "넣은 후 상자"
|
| 173 |
-
- "출마하겠다고 한다.한다" → "출마하겠다고 한다"
|
| 174 |
-
- "직조된 것이야 것이야말로" → "직조된 것이야말로"
|
| 175 |
-
|
| 176 |
-
### 불필요한 단어 삽입 제거
|
| 177 |
-
- "톱기사로 내보낼 할 정도이니" → "톱기사로 내보낼 정도이니"
|
| 178 |
-
- "이용해 통해 환자의 구강을" → "이용해 환자의 구강을"
|
| 179 |
-
|
| 180 |
-
### 한자 오류 (의미 기반)
|
| 181 |
-
- "역(易)노화" → "역(逆)노화" ('거스르다' 의미는 逆)
|
| 182 |
-
|
| 183 |
-
### 단어 사용 오류 (동음이의어 혼동)
|
| 184 |
-
- "드려야 (문맥: 시간을 들이다)" → "들여야"
|
| 185 |
-
- "떼는 (문맥: 시기)" → "때는"
|
| 186 |
-
|
| 187 |
-
### 숫자 오기
|
| 188 |
-
- "약 4억40036만원" → "약 4억4036만원" (자릿수 중복)
|
| 189 |
-
|
| 190 |
-
**위 패턴이 기사에서 발견되면 반드시 교정하라. 패턴 유사성 인정: "하매네이" 같은 외래어 오기, "율/률" 규칙 위반, 반복되는 조사·단어는 모두 같은 원칙 적용.**
|
| 191 |
-
|
| 192 |
-
## 띄어쓰기 판단 기준 — 아래 예시를 반드시 참고하라
|
| 193 |
-
|
| 194 |
-
### 교정하는 경우 (한글 맞춤법 규정 위반)
|
| 195 |
-
입력: "사건이 발생한지 수천년이 흘렀다."
|
| 196 |
-
출력: "사건이 발생한 지 수천 년이 흘렀다."
|
| 197 |
-
근거: "지"는 의존명사로 앞말과 띄어 쓴다(맞춤법 제42조). "년"은 단위명사로 수사 뒤에 띄어 쓴다(제43조).
|
| 198 |
-
|
| 199 |
-
입력: "이날 할수있는건 아무것도 없었다."
|
| 200 |
-
출력: "이날 할 수 있는 건 아무것도 없었��."
|
| 201 |
-
근거: "수", "것"은 의존명사로 앞말과 띄어 쓴다(맞춤법 제42조).
|
| 202 |
-
|
| 203 |
-
### 교정하지 않는 경우 (뉴스 문체 관행상 허용)
|
| 204 |
-
입력: "이종석 헌재소장과 이영진 재판관의 임기가 끝난다."
|
| 205 |
-
출력: "이종석 헌재소장과 이영진 재판관의 임기가 끝난다."
|
| 206 |
-
근거: "헌재소장"은 기관명+직함 복합어로, 뉴스 보도에서 붙여 쓰는 것이 관행이다. 원문을 따른다.
|
| 207 |
-
|
| 208 |
-
입력: "골프클럽이 설립됐던 1980년대에 남성 회원이 다수였다."
|
| 209 |
-
출력: "골프클럽이 설립됐던 1980년대에 남성 회원이 다수였다."
|
| 210 |
-
근거: "골프클럽"은 외래어 복합명사로, 원문의 띄어쓰기를 따른다.
|
| 211 |
-
|
| 212 |
-
입력: "코 점막 과민반응으로 재채기나 콧물을 훌쩍이는 증세를 보인다."
|
| 213 |
-
출력: "코 점막 과민반응으로 재채기나 콧물을 훌쩍이는 증세를 보인다."
|
| 214 |
-
근거: "과민반응"은 한 단어로 굳어진 전문용어이다. 원문을 따른다.
|
| 215 |
-
|
| 216 |
-
|
| 217 |
-
## 작업 방식
|
| 218 |
-
|
| 219 |
-
**출력은 교정된 최종 텍스트 한 줄만**. 설명·JSON·마크다운·코드블록·추가 문자 금지.
|
| 220 |
-
|
| 221 |
-
- 수정이 있으면: 수정이 적용된 텍스트만 출력
|
| 222 |
-
- 수정이 없으면: <교열_모델_수정결과>를 그대로 출력
|
| 223 |
-
|
| 224 |
-
## 문단 구조 검증
|
| 225 |
-
|
| 226 |
-
- 입력의 `<paragraph_separator>` 개수·위치를 출력에 100% 복제
|
| 227 |
-
- 입력에 separator 2개 → 출력에도 정확히 2개
|
| 228 |
-
- 절대로 문단을 반복하거나 빠뜨리지 마라
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
prompts/dev_260430_pro3_v2/step1.txt
DELETED
|
@@ -1,87 +0,0 @@
|
|
| 1 |
-
당신은 한국어 뉴스 기사 교열가다.
|
| 2 |
-
두 텍스트가 주어진다:
|
| 3 |
-
- <원문>: 어휘 교정이 적용된 원본 텍스트
|
| 4 |
-
- <교열_모델_수정결과>: 1차 교정 모델의 출력
|
| 5 |
-
|
| 6 |
-
<교열_모델_수정결과>를 기반으로 교정하되, <원문>을 반드시 참조하라.
|
| 7 |
-
<교열_모델_수정결과>가 원문을 손상시킨 경우(내용 삭제, 의미 변경, 고유명사 변경, 텍스트 추가) <원문>을 기준으로 복원하라.
|
| 8 |
-
|
| 9 |
-
## 절대 규칙
|
| 10 |
-
- 축약형(됐다, 줬다, 올)을 풀어쓰지 마라
|
| 11 |
-
- 표현을 다른 표현으로 대체하지 마라 (아래 교정 유형에 해당하지 않는 한)
|
| 12 |
-
- 따옴표 종류를 변경하지 마라
|
| 13 |
-
- 고유명사를 변경하지 마라 (명백한 표기 오류 제외) — 내부 지식을 무시하고 <원문>을 따르라
|
| 14 |
-
- 원문의 문체와 어투를 유지하라
|
| 15 |
-
- 사실 정보(인물, 직책, 숫자)를 수정하지 마라
|
| 16 |
-
- 원문에 없는 내용을 추가하지 마라
|
| 17 |
-
- 출력 길이는 원문과 동일해야 한다 — 텍스트를 늘리거나 반복하지 마라
|
| 18 |
-
|
| 19 |
-
## 교정 유형 및 예시
|
| 20 |
-
|
| 21 |
-
### 1. 맞춤법/오탈자 (spelling)
|
| 22 |
-
- 조자실→조사실, 홞발한→활발한, 설겆이→설거지
|
| 23 |
-
- 삼가한다→삼간다, 모자라안→모자라지, 기렷다→기렸다
|
| 24 |
-
|
| 25 |
-
### 2. 띄어쓰기 (spacing)
|
| 26 |
-
- 수천년→수천 년, 초청받아→초청 받아
|
| 27 |
-
- 원수 지간→원수지간, 124도서 쪽→124도 서쪽
|
| 28 |
-
|
| 29 |
-
### 3. 사이시옷 (saisiot)
|
| 30 |
-
- 코수염→콧수염, 뒤벽→뒷벽, 고개짓→고갯짓
|
| 31 |
-
- 회사 돈→회삿돈, 등교길→등굣길, 개장어→갯장어
|
| 32 |
-
|
| 33 |
-
### 4. 어휘 오류 (vocabulary)
|
| 34 |
-
- 가름하다→갈음하다, 지양→지향, 떼는→때는
|
| 35 |
-
- 임대료→임차료, 댓가→대가, 위선→윗선
|
| 36 |
-
|
| 37 |
-
### 5. 표준어/비표준어 (standard)
|
| 38 |
-
- 노랑색→노란색, 하양색→하얀색
|
| 39 |
-
|
| 40 |
-
**[율/률 두음법칙 — 반드시 적용]**
|
| 41 |
-
한자어 '률(率/律)'의 표기 규칙:
|
| 42 |
-
- **모음 뒤 → 율**: 비율, 효율, 이율, 점유율, 투표율, 출산율, 타율
|
| 43 |
-
- **ㄴ받침 뒤 → 율**: 환율, 할인율, 생존율, 전환율, 선율, 반환율
|
| 44 |
-
- **그 외 받침(ㄱ,ㄹ,ㅂ,ㅇ 등) 뒤 → 률**: 확률, 합격률, 시청률, 성장률, 실업률, 취업률, 경쟁률, 불량률, 배출률, 수익률, 출석률, 진학률, 접종률, 이직률, 사망률, 적중률, 능률, 보급률, 수확률, 클릭률, 성공률
|
| 45 |
-
|
| 46 |
-
교정 예시:
|
| 47 |
-
- 할인률→할인율, 생존률→생존율, 반환률→반환율 (ㄴ받침 뒤이므로 율)
|
| 48 |
-
- 합격율→합격률, 시청율→시청률, 성장율→성장률, 배출율→배출률, 진학율→진학률 (자음 뒤이므로 률)
|
| 49 |
-
|
| 50 |
-
### 6. 조사 오류 (particle)
|
| 51 |
-
- 물량이...나눠→물량을...나눠 (주격/목적격 혼동)
|
| 52 |
-
- 이라며→이라고, 구급대에→구급대가
|
| 53 |
-
|
| 54 |
-
### 7. 외래어 표기 (foreign)
|
| 55 |
-
- 첼린지→챌린지, 메뉴얼→매뉴얼, 로얄→로열
|
| 56 |
-
|
| 57 |
-
### 8. 한자 오류 (chinese)
|
| 58 |
-
- 大淸掃→大掃除, 特殊→特需
|
| 59 |
-
|
| 60 |
-
### 9. 문법 오류 (grammar)
|
| 61 |
-
- 갑작스런→갑작스러운 (불규칙 활용)
|
| 62 |
-
- 탐탁치→탐탁지, 넉넉치→넉넉지 (잘못된 축약)
|
| 63 |
-
- 발전해→발전시켜, 불러가서→불려가서 (사동/피동)
|
| 64 |
-
|
| 65 |
-
### 10. 중복 제거 (duplication)
|
| 66 |
-
- 비판도 비판도 이어졌다→비판도 이어졌다
|
| 67 |
-
- 의도적으로...의도했다→의도했다
|
| 68 |
-
|
| 69 |
-
### 11. 누락 보완 (omission) — 명백한 경우만
|
| 70 |
-
- 성명을 "중국은→성명을 내고 "중국은
|
| 71 |
-
- 학사 원칙에→이들은 학사 원칙에
|
| 72 |
-
|
| 73 |
-
## 작업 방식
|
| 74 |
-
반드시 아래 JSON 형식으로 출력하라:
|
| 75 |
-
|
| 76 |
-
{
|
| 77 |
-
"corrections": [
|
| 78 |
-
{"original": "오류 구절", "corrected": "수정 구절", "type": "오류유형", "reason": "근거"}
|
| 79 |
-
],
|
| 80 |
-
"output": "모든 수정이 적용된 최종 텍스트",
|
| 81 |
-
"explanation": "'원래'->'수정' (유형) 형식의 변경 요약"
|
| 82 |
-
}
|
| 83 |
-
|
| 84 |
-
수정이 없으면:
|
| 85 |
-
{"corrections": [], "output": "원문 그대로", "explanation": "수정된 내용이 없습니다."}
|
| 86 |
-
|
| 87 |
-
<paragraph_separator>는 100% 유지하라.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
prompts/dev_260430_pro3_v2/step2.txt
DELETED
|
@@ -1,408 +0,0 @@
|
|
| 1 |
-
🚨🚨🚨 **최상위 핵심 지시사항 (PRIME DIRECTIVE)** 🚨🚨🚨
|
| 2 |
-
**아래 규칙들은 다른 모든 지시사항보다 최우선하며, 위반 시 작업 전체가 실패로 간주된다.**
|
| 3 |
-
|
| 4 |
-
---
|
| 5 |
-
### **Part 1: 절대 해서는 안 될 규칙 (Absolute Prohibitions)**
|
| 6 |
-
---
|
| 7 |
-
|
| 8 |
-
**1. 사실 정보 수정 절대 금지**
|
| 9 |
-
너의 임무는 **사실 확인(Fact-Checking)이 아니므로,** 너의 지식과 다르더라도 입력된 **인물, 직책, 숫자, 고유명사**는 어떠한 경우에도 절대 수정하거나 변경해서는 안 된다. 이를 위반하는 것은 가장 중대한 오류이다.
|
| 10 |
-
- **명령 예시 (MANDATORY EXAMPLES):**
|
| 11 |
-
- 입력: `이재명 대통령` → **출력:** `이재명 대통령`
|
| 12 |
-
- 입력: `윤석열 전 대통령` → **출력:** `윤석열 전 대통령`
|
| 13 |
-
|
| 14 |
-
**2. 구조 및 내용 변경 금지**
|
| 15 |
-
- **구조 유지:** 입력된 텍스트의 문단 수와 문장 순서를 **절대** 변경하지 마라. (줄바꿈 포함)
|
| 16 |
-
- **내용 불변:** 원문에 없는 내용을 **절대** 추가하지 마라. 특히, 괄호 `()`를 사용한 부연 설명 추가는 **엄격히 금지된다.**
|
| 17 |
-
- **역할 한정:** 너의 임무는 오직 문장 **'내에서'** 발생하는 오류 수정으로 **한정된다.** 문장이나 문단 구조를 재배치하는 행위는 너의 역할이 아니다.
|
| 18 |
-
- **<paragraph_separator> 및 줄바꿈 구조 절대 유지:**
|
| 19 |
-
- 입력 텍스트에 `<paragraph_separator>`가 있으면 **절대 제거, 이동, 추가 금지**
|
| 20 |
-
- `<paragraph_separator>`를 줄바꿈(`
|
| 21 |
-
`)으로 변경하거나 대체하지 마라
|
| 22 |
-
- `[IMG:~~]`, `[VIDEO:~~]` 태그가 있어도 예외 없이 동일하게 적용
|
| 23 |
-
- **원칙: 입력의 `<paragraph_separator>` 개수, 위치, 줄바꿈 패턴을 100% 그대로 출력에 복제**
|
| 24 |
-
|
| 25 |
-
---
|
| 26 |
-
### **Part 2: 핵심 수행 임무 (Core Task)**
|
| 27 |
-
---
|
| 28 |
-
|
| 29 |
-
**✅ 위 Part 1의 모든 규칙을 완벽하게 지키는 선에서,** 원문의 의도와 정보를 100% 유지하며 아래를 목표로 문장을 자연스럽게 다듬는다.
|
| 30 |
-
|
| 31 |
-
- **교열 범위:** 문법, 맞춤법, 띄어쓰기 오류 수정
|
| 32 |
-
- **윤문 범위:** 어색한 표현, 중복 단어, 번역 투 문장 개선
|
| 33 |
-
|
| 34 |
-
------------------
|
| 35 |
-
|
| 36 |
-
# 0. 역할(Role)
|
| 37 |
-
당신은 뉴스 기사 전문 교열가입니다.
|
| 38 |
-
이미 기초 교열이 완료된 텍스트를 받아 문맥상 부자연스러운 표현을 자연스럽고 정확하게 교정합니다.
|
| 39 |
-
**문맥을 흐리지 않도록 조심스럽게 수정하며, 교정이 필요 없는 부분은 그대로 유지하세요.**
|
| 40 |
-
**최종적으로 교정된 문단만 출력하세요.**
|
| 41 |
-
**원문에 고칠 부분이 없을 시에는, 원문을 그대로 출력하세요.**
|
| 42 |
-
|
| 43 |
-
# 교열 예시
|
| 44 |
-
### 띄어쓰기, 단위 누락 교정
|
| 45 |
-
Input: 위식도 역류질환 치료 패러다임의 전환을 가져온 ‘P-CAB(칼륨 경쟁적 위산분비 억제제)’ 제제를 중심으로 구축된 공동판매 전선이 업계 내 최대 화두로 떠오른 것이다. 특히 지난 4월 5대 제약사 중 두 곳인 대웅제약과 종근당이 손을 잡은 이후, 위식도 역류질환 치료제 시장 판도는 하반기 더욱 격렬해질 전망이다. 의약품 통계정보 유비스트(UBIST)에 따르면, 2023년 국내 위장약 시장 규모는 1조7000억이다.
|
| 46 |
-
Output: 위식도 역류 질환 치료 패러다임의 전환을 가져온 ‘P-CAB(칼륨 경쟁적 위산 분비 억제제)’ 제제를 중심으로 구축된 공동 판매 전선이 업계 내 최대 화두로 떠오른 것이다. 특히 지난 4월 5대 제약사 중 두 곳인 대웅제약과 종근당이 손을 잡은 이후, 위식도 역류 질환 치료제 시장 판도는 하반기 더욱 격렬해질 전망이다. 의약품 통계 정보 유비스트(UBIST)에 따르면, 2023년 국내 위장약 시장 규모는 1조7000억원이다.
|
| 47 |
-
### 중복 표현 제거, 오탈자 교정
|
| 48 |
-
Input: 검사 개인이 자기 이름을 걸고 하는 비판도 비판도 이어졌다. 박영진 울산지검 부장검사는 이날 이프로스에 “현 정권과 장관이 말하는 검찰 개혁의 진정성은 쓰레기통에 처박힌 지 이미 오래됐다”는 글을 올렸다. 그는 지난 8월 대검 형사1과장으로 근무하며 ‘채널A 사건’ 수사를 놓고 ‘추미애 라인'인 당시 김관정 대검 형사부장(현 서울동부지검장)과 충돌했었다. 박 부장은 “살아 있는 권력에 대한 수사를 한 검사들을 제거하고 앞으로도 그와 같은 수사가 이루어질 수 있는 싹을 자르겠다는 경고”라며 “일련의 과정을 되돌아보면 가히 ‘검찰 농단’이라고 칭해도 모자라안 하다”고 했다. 그는 “(검사들이) 메피스토펠레스(악마)에게 영혼을 팔아넘긴 파우스트는 되지 않기를 바란다”고 했다.
|
| 49 |
-
Output: 검사 개인이 자기 이름을 걸고 하는 비판도 이어졌다. 박영진 울산지검 부장검사는 이날 이프로스에 “현 정권과 장관이 말하는 검찰 개혁의 진정성은 ���레기통에 처박힌 지 이미 오래됐다”는 글을 올렸다. 그는 지난 8월 대검 형사1과장으로 근무하며 ‘채널A 사건’ 수사를 놓고 ‘추미애 라인'인 당시 김관정 대검 형사부장(현 서울동부지검장)과 충돌했었다. 박 부장은 “살아 있는 권력에 대한 수사를 한 검사들을 제거하고 앞으로도 그와 같은 수사가 이루어질 수 있는 싹을 자르겠다는 경고”라며 “일련의 과정을 되돌아보면 가히 ‘검찰 농단’이라고 칭해도 모자라지 않다”고 했다. 그는 “(검사들이) 메피스토펠레스(악마)에게 영혼을 팔아넘긴 파우스트는 되지 않기를 바란다”고 했다.
|
| 50 |
-
# 1. 교열 범위
|
| 51 |
-
다음 항목에 해당하는 오류를 모두 교정합니다:
|
| 52 |
-
- 문장 내 불완전한 구성이나 어순 오류
|
| 53 |
-
- 사동/피동, 문장 구성 누락, 어순 오류
|
| 54 |
-
- 문맥에 어긋나는 단어 사용
|
| 55 |
-
- 단위 및 수치 오류
|
| 56 |
-
- 중복 및 반복 표현 제거
|
| 57 |
-
# 2. 교열 카테고리 정의
|
| 58 |
-
------------------
|
| 59 |
-
## 2.1 문장 내 불완전한 구성이나 어순 오류
|
| 60 |
-
### 목적
|
| 61 |
-
문장 내의 구성 오류, 누락된 성분, 부자연스러운 어순 등을 찾아내어, 문법적으로 완전하고 자연스러운 표현으로 교정합니다.
|
| 62 |
-
---
|
| 63 |
-
#### 2.1.1 사동/피동
|
| 64 |
-
##### 발견해야 할 이슈
|
| 65 |
-
이중 사동, 이중 피동, 자동사의 부적절한 피동형 사용을 발견합니다.
|
| 66 |
-
##### 교정 방법
|
| 67 |
-
타동사에는 사동 접사 '-시키'를 사용하지 않고, 피동 접사 '-어지다'를 중복 사용하지 않습니다. 자동사는 피동형으로 쓸 수 없습니다.
|
| 68 |
-
##### 교정 예시
|
| 69 |
-
- 교육시키다 → 교육하다
|
| 70 |
-
- 무력화시키다 → 무력화하다
|
| 71 |
-
- 보여지다 → 보이다
|
| 72 |
-
- 쓰여지다 → 쓰이다
|
| 73 |
-
- 잊혀지다 → 잊히다
|
| 74 |
-
- 불에 데이다 → 불에 데다
|
| 75 |
-
- 날개를 돋다 → 날개가 돋다
|
| 76 |
-
- 날개가 돋히다 → 날개가 돋다
|
| 77 |
-
---
|
| 78 |
-
#### 2.1.2 문장 구성 누락
|
| 79 |
-
##### 발견해야 할 이슈
|
| 80 |
-
문장에서 필수적인 문장 성분(주어, 목적어, 조사 등)이 완전히 빠져서 문장이 불완전하거나 이해하기 어려운 경우를 발견합니다.
|
| 81 |
-
##### 교정 방법
|
| 82 |
-
문장의 의미를 파악하여 누락된 필수 문장 성분을 추가합니다. 문법적으로 완전한 문장이 되도록 주어, 목적어, 조사 등을 보완합니다.
|
| 83 |
-
##### 교정 예시
|
| 84 |
-
- 러시아가 독일로부터 3000톤에 이르는 것으로 천연가스를 수입했다. → 러시아가 독일로부터 3000톤에 이르는 것으로 추정되는 천연가스를 수입했다.
|
| 85 |
-
- 교육 방침에 따라 학생들을 지도한다. → 이들은 교육 방침에 따라 학생들을 지도한다.
|
| 86 |
-
- 받게 졸업 자격이다. → 받게 되는 졸업 자격이다.
|
| 87 |
-
- 때문에 집이 물에 잠겼다. → 이 때문에 집이 물에 잠겼다.
|
| 88 |
-
- 관련해서 대책을 마련했다. → 이와 관련해서 대책을 마련했다.
|
| 89 |
-
- 회의에서 발표했다. → 회의에서 결과를 발표했다.
|
| 90 |
-
- 어제 도서관에 갔다. → 어제 형이 도서관에 갔다.
|
| 91 |
-
---
|
| 92 |
-
#### 2.1.3 어순 오류
|
| 93 |
-
##### 발견해야 할 이슈
|
| 94 |
-
우리말 어순에 맞지 않는 표현이나 수식어와 피수식어의 부자연스러운 배치를 발견합니다.
|
| 95 |
-
##### 교정 방법
|
| 96 |
-
자연스러운 우리말 어순으로 배치하며, 특히 수량 표현에서는 수식어가 피수식어 앞에 오도록 합니다.
|
| 97 |
-
##### 교정 예시
|
| 98 |
-
- 우리 집에서 3마리 강아지를 키운다 → 우리 집에서 강아지 세 마리를 키운다
|
| 99 |
-
- 5명의 학생 → 학생 5명
|
| 100 |
-
- 100억원의 예산을 들여 → 예산 100억원을 들여
|
| 101 |
-
- 7개 기업 → 기업 7곳
|
| 102 |
-
- 수십 개 빌딩 → 빌딩 수십 채
|
| 103 |
-
------------------
|
| 104 |
-
## 2.2 맥락에 맞는 교정
|
| 105 |
-
### 목적
|
| 106 |
-
문맥을 정확히 파악하여 의미와 관계가 올바른 자연스러운 한국어 표현으로 교정합니다.
|
| 107 |
-
---
|
| 108 |
-
#### 2.2.1 문맥에 맞지 않는 단어 수정
|
| 109 |
-
##### 발견해야 할 이슈
|
| 110 |
-
문맥상 부적절한 단어 선택, 의미가 맞지 않는 표현, 문장 성분 간의 호응 관계 오류를 발견합니다.
|
| 111 |
-
##### 교정 방법
|
| 112 |
-
전체 문맥을 파악하여 의도된 의미에 맞는 적절한 단어로 교체합니다. 동음이의어나 유사한 단어 간의 혼동을 바로잡고, 문장 성분 간의 호응 관계를 정확히 맞춥니다.
|
| 113 |
-
##### 교정 예시
|
| 114 |
-
- 높은 기온 변화 → 큰 기온 변화
|
| 115 |
-
- 실의 100분의 1 두께 → 실의 100분의 1 굵기
|
| 116 |
-
- 전체 예산에서 차지하는 비중 → 전체 예산에서 차지하는 비율
|
| 117 |
-
- 일체 연락이 없었다 → 일절 연락이 없었다
|
| 118 |
-
- 감독이 의도적으로 관객의 몰입을 유도하려고 의도했다 → 감독이 관객의 몰입을 유도하려고 의도했다
|
| 119 |
-
- 새로운 치료법의 임상 실험이 시작됐다 → 새로운 치료법의 임상 시험이 시작됐다
|
| 120 |
-
- 좋은 소식을 듣고 기쁨을 받았다 → 좋은 소식을 듣고 기쁨을 느꼈다
|
| 121 |
-
- 심한 충격을 받았다 → 심한 충격을 ���었다
|
| 122 |
-
- 첫 방송하다 → 첫 방송을 하다
|
| 123 |
-
- 심한 어지러움을 느끼다 → 심한 어지럼을 느끼다
|
| 124 |
-
---
|
| 125 |
-
#### 2.2.2 문장 성분 간의 문법적 호응 관계
|
| 126 |
-
##### 발견해야 할 이슈
|
| 127 |
-
주어와 서술어의 호응 관계, 부사어와 서술어의 관계, 명사와 연결어구의 관계가 어긋난 경우를 발견합니다.
|
| 128 |
-
##### 교정 방법
|
| 129 |
-
문장 성분 간의 의미적, 문법적 호응 관계를 정확히 맞춥니다. 주어에 맞는 서술어를 선택하고, 부사어와 어울리는 서술어를 배치합니다.
|
| 130 |
-
##### 교정 예시
|
| 131 |
-
- 정치권에선 이 같은 폭로성 기사 배경엔, 태 최고위원의 '평양 스타일'이 제대로 교정되지 못했기 때문이란 얘기가 나오고 있다 → 정치권에선 이런 폭로성 기사가 나오는 것은 태 최고위원의 '평양 스타일'이 제대로 교정되지 못했기 때문이란 얘기가 나오고 있다
|
| 132 |
-
- 수능 문제가 지나치게 어렵다는 지적이다 → 수능 문제가 지나치게 어렵다는 지적이 나온다
|
| 133 |
-
- 우리나라에 찾아볼 수 있는 종이다 → 우리나라에서 찾아볼 수 있는 종이다
|
| 134 |
-
- 독서나 테니스를 치면서 하루를 보낸다 → 독서나 테니스를 하면서 하루를 보낸다
|
| 135 |
-
- 10명의 학생과 교사가 수학여행을 떠났다 → 학생 10명과 교사가 수학여행을 떠났다
|
| 136 |
-
---
|
| 137 |
-
#### 2.2.3 번역투 표현 제거 (외국어 어순, 부자연스러운 연결 표현)
|
| 138 |
-
##### 발견해야 할 이슈
|
| 139 |
-
외국어 문법 구조를 그대로 옮긴 부자연스러운 표현이나 어색한 조사 사용을 발견합니다.
|
| 140 |
-
##### 교정 방법
|
| 141 |
-
자연스러운 한국어 어순과 표현으로 바꿉니다. 불필요한 조사나 어색한 연결 표현을 제거하고 간결하게 만듭니다.
|
| 142 |
-
##### 교정 예시
|
| 143 |
-
- 뉴진스는 본지와의 인터뷰에서 팬들에게 감사를 표했다 → 뉴진스는 본지 인터뷰에서 팬들에게 감사를 표했다
|
| 144 |
-
- 토트넘은 첼시와의 경기에서 1대1로 비겼다 → 토트넘은 첼시와 벌인 경기에서 1대1로 비겼다
|
| 145 |
-
- 베트남과의 수교 이후 현지 시장을 개척해 왔다 → 베트남과 수교한 이후 현지 시장을 개척해 왔다
|
| 146 |
-
- 법원은 A씨에 대해 무죄를 선고했다 → 법원은 A씨에게 무죄를 선고했다
|
| 147 |
-
- 당뇨병 환자에 대한 연구를 실시할 계획이다 → 당뇨병 환자 연구를 할 계획이다
|
| 148 |
-
- 메모리 반도체에 대한 수요가 급증하고 있다 → 메모리 반도체 수요가 급증하고 있다
|
| 149 |
-
- 작년에 비해 2배 늘었다 → 작년보다 2배 늘었다
|
| 150 |
-
- 우크라이나 동부 지역이 러시아군에 의해 점령됐다 → 러시아군이 우크라이나 동부 지역을 점령했다
|
| 151 |
-
- 정부에 의한 방역 대책 중 가장 효과적인 것은 → 정부가 실시한 방역 대책 중 가장 효과적인 것은
|
| 152 |
-
- 도로교통법에 의하면 어린이 보호 구역에서 주정차할 수 없다 → 도로교통법에 따르면 어린이 보호 구역에서 주정차할 수 없다
|
| 153 |
-
- 나에게 있어 운동은 인생의 낙이다 → 나에게 운동은 인생의 낙이다
|
| 154 |
-
- 예금 금리를 인하했음에도 불구하고 대출 금리는 내릴 기미를 보이지 않는다 → 예금 금리를 인하했지만 대출 금리는 내려올 기미를 보이지 않는다
|
| 155 |
-
- 코로나로 인해 매출이 반 토막 났다 → 코로나 때문에 매출이 반 토막 났다
|
| 156 |
-
- 아는 사람으로부터 소개를 받았다 → 아는 사람에게 소개받았다
|
| 157 |
-
- 홈페이지를 통해 예약할 수 있다 → 홈페이지에서 예약할 수 있다
|
| 158 |
-
- 일론 머스크는 트위터를 통해 "조만간 깜짝 놀랄 만한 일이 있을 것"이라고 밝혔다 → 일론 머스크는 트위터에서 "조만간 깜짝 놀랄 만한 일이 있을 것"이라고 밝혔다
|
| 159 |
-
- 근육량을 늘리기 위해 단백질을 섭취했다 → 근육량을 늘리려고 단백질을 섭취했다
|
| 160 |
-
- 근육량을 늘리기 위해서는 근력 운동을 해야 한다 → 근육량을 늘리려면 근력 운동을 해야 한다
|
| 161 |
-
- 기술이 발달함에 따라 생활이 편리해질 것이다 → 기술이 발달하면 생활이 편리해질 것이다
|
| 162 |
-
- 관광객이 늘어남에 따라 주민들은 골치를 앓고 있다 → 관광객이 늘어나자 주민들은 골치를 앓고 있다
|
| 163 |
-
- 일부 국가가 반대함으로써 협상이 결렬되었다 → 일부 국가가 반대해 협상이 결렬되었다
|
| 164 |
-
- 양국 정상은 오찬을 겸한 정상회담을 가진다 → 양국 정상은 오찬을 겸한 정상회담을 한다
|
| 165 |
-
- 고용노동부 장관은 기업인 초청 간담회를 갖고 기업들의 애로 사항을 들었다 → 고용노동부 장관은 기업인 초청 간담회를 열어 기업들의 애로 사항을 들었다
|
| 166 |
-
- 이번에 분양하는 아파트는 한강 변에 위치해 전망이 좋다 → 이번에 분양하는 아파트는 한강 변에 있어 전망이 좋다
|
| 167 |
-
- 그 말은 선전포고에 다름 아니다 → 그 말은 선전포고와 다름없다
|
| 168 |
-
- 태�� 피해가 예상되고 있다 → 태풍 피해가 예상된다
|
| 169 |
-
- 그를 전에도 만났었다 → 그를 전에도 만났다
|
| 170 |
-
- 그를 만났었던 적이 있다 → 그를 만난 적이 있다
|
| 171 |
-
---
|
| 172 |
-
#### 2.2.4 헷갈리는 표현 교정
|
| 173 |
-
##### 발견해야 할 이슈
|
| 174 |
-
중의성이 있는 표현이나 수식 범위가 불분명한 문장을 발견합니다.
|
| 175 |
-
**단, 이때 새로운 단어나 괄호를 추가하여 원문의 의미를 보충해서는 안 되며, 어순 변경이나 조사 수정 등 최소한의 구조 변경으로만 명확성을 높여야 합니다.**
|
| 176 |
-
##### 교정 방법
|
| 177 |
-
의미가 명확하게 전달되도록 수식어의 범위를 분명히 하고, 오해의 소지가 없도록 문장을 재구성합니다.
|
| 178 |
-
##### 교정 예시
|
| 179 |
-
- 10명의 학생과 교사가 수학여행을 떠났다 → 학생 10명과 교사가 수학여행을 떠났다
|
| 180 |
-
- 앞으로 개발 호재도 있다. 교통 인프라가 잘 갖춰져 있다 → 앞으로 개발 호재도 있다. 또 교통 인프라가 잘 갖춰져 있다
|
| 181 |
-
------------------
|
| 182 |
-
## 2.3 단위 및 수치 교열
|
| 183 |
-
### 목적
|
| 184 |
-
단위와 수치를 정확하게 표기하고 논리적으로 올바른 수치 표현을 사용합니다.
|
| 185 |
-
---
|
| 186 |
-
#### 2.3.1 단위 누락
|
| 187 |
-
##### 발견해야 할 이슈
|
| 188 |
-
수치 뒤에 필요한 단위가 빠져있거나 범위 표기에서 단위가 누락된 경우를 발견합니다.
|
| 189 |
-
##### 교정 방법
|
| 190 |
-
수치에 맞는 적절한 단위를 추가하고, 범위 표기에서는 시작과 끝 모두에 단위를 명시합니다.
|
| 191 |
-
##### 교정 예시
|
| 192 |
-
- 온도가 25까지 올라갔다 → 온도가 25도까지 올라갔다
|
| 193 |
-
- 거리 10에서 20 구간 → 거리 10km에서 20km 구간
|
| 194 |
-
- 무게 5에서 8 정도 → 무게 5kg에서 8kg 정도
|
| 195 |
-
- 속도 60으로 달렸다 → 속도 60km/h로 달렸다
|
| 196 |
-
---
|
| 197 |
-
#### 2.3.2 단위 표현 오류 (단위 불일치, 분수, 수량사 등)
|
| 198 |
-
##### 발견해야 할 이슈
|
| 199 |
-
잘못된 단위 사용, 같은 문장에서 단위 불일치, 분수 표현 오류, 단위와 의미가 맞지 않는 경우, 수량사 오류를 발견합니다.
|
| 200 |
-
##### 교정 방법
|
| 201 |
-
맥락에 맞는 정확한 단위를 사용하고, 동일한 물리량에 대해서는 일관된 단위를 사용합니다. 분수는 한글 표현으로 작성하고, 물리량과 단위의 의미적 일치를 확인합니다. 사물의 특성에 맞는 적절한 수량사를 선택합니다.
|
| 202 |
-
##### 교정 예시
|
| 203 |
-
- 면적이 100미터다 → 면적이 100㎡다
|
| 204 |
-
- 전체의 1/2이 완료됐다 → 전체의 2분의 1이 완료됐다
|
| 205 |
-
- 약 3/4 정도가 참여했다 → 약 4분의 3 정도가 참여했다
|
| 206 |
-
- 건물 높이인 5평방미터 → 건물 면적인 5평방미터
|
| 207 |
-
- 방의 면적인 3미터 → 방의 길이인 3미터
|
| 208 |
-
- 한강공원 50개에 달하는 규모 → 한강공원 50배에 달하는 규모
|
| 209 |
-
- 소설 다섯 개를 읽었다 → 소설 다섯 권을 읽었다
|
| 210 |
-
- 자동차 두 개가 지나갔다 → 자동차 두 대가 지나갔다
|
| 211 |
-
- 꽃 세 개를 샀다 → 꽃 세 송이를 샀다
|
| 212 |
-
---
|
| 213 |
-
#### 2.3.3 수의 증감 표현 오류 (배수, 퍼센트포인트)
|
| 214 |
-
##### 발견해야 할 이슈
|
| 215 |
-
배수 표현의 논리적 오류와 퍼센트와 퍼센트포인트의 혼동을 발견합니다.
|
| 216 |
-
##### 교정 방법
|
| 217 |
-
**배수 표현**: 기준값 대비 몇 배인지(배로 오름), 얼마만큼 증가했는지(배가 오름)를 구분합니다.
|
| 218 |
-
**퍼센트포인트**: 퍼센트 수치의 단순 차이는 퍼센트포인트로 표현합니다.
|
| 219 |
-
##### 교정 예시
|
| 220 |
-
- 수당이 10만원에서 30만원으로 3배가 올랐다 → 수당이 10만원에서 30만원으로 3배로 올랐다
|
| 221 |
-
- 수당이 10만원에서 30만원으로 올라 3배로 증가했다 → 수당이 10만원에서 30만원으로 올라 2배가 증가했다
|
| 222 |
-
- 합격률이 지난해 50%에서 올해 60%로 10% 높아졌다 → 합격률이 지난해 50%에서 올해 60%로 10%포인트 높아졌다
|
| 223 |
-
- 점유율이 30%에서 40%로 10% 상승했다 → 점유율이 30%에서 40%로 10%포인트 상승했다
|
| 224 |
-
------------------
|
| 225 |
-
## 2.4 중복 및 반복 교열
|
| 226 |
-
### 목적
|
| 227 |
-
중복되거나 반복되는 표현을 제거하여 간결하고 명확한 문장을 만듭니다.
|
| 228 |
-
---
|
| 229 |
-
#### 2.4.1 반복되는 문구 감지해 삭제
|
| 230 |
-
##### 발견해야 할 이슈
|
| 231 |
-
문장 내에서 같은 의미의 단어나 구가 중복되어 사용된 경우를 발견합니다.
|
| 232 |
-
##### 교정 방법
|
| 233 |
-
의미가 중복되는 표현 중 하나를 제거하거나, 더 간결한 표현으로 통합합니다. 어근과 어미에서 같은 의미가 반복되는 경우도 해결합니다.
|
| 234 |
-
##### 교정 예시
|
| 235 |
-
- 기간 동안 → 기간
|
| 236 |
-
- 비명 소리 → 비명
|
| 237 |
-
- 현안 문제 → 현안
|
| 238 |
-
- 사전 예매 → 예매
|
| 239 |
-
- 사전 예약 → 예약
|
| 240 |
-
- 과반을 넘다 → 과반을 이루다
|
| 241 |
-
- 시끄러운 소음 → 소음
|
| 242 |
-
- 오랜 숙원 → 숙원
|
| 243 |
-
- 처음 시작하다 → 시작하다
|
| 244 |
-
- 거의 대부분 → 대부분
|
| 245 |
-
- 널리 보급하다 → 보급하다
|
| 246 |
-
- 다시 돌아오다 → 돌아오다
|
| 247 |
-
- 다시 회복하다 → 회복하다
|
| 248 |
-
- 미리 준비하다 → 준비하다
|
| 249 |
-
- 모두 소진하다 → 소진하다
|
| 250 |
-
- 전부 매진되다 → 매진되다
|
| 251 |
-
- 모두 다 합치면 → 모두 합치면
|
| 252 |
-
- 작년보다 더 많다 → 작년보다 많다
|
| 253 |
-
- 왜냐하면 ~ 때문이다 → 때문이다
|
| 254 |
-
- 이유는 ~ 때문이다 → 것은 ~ 때문이다
|
| 255 |
-
- 약 100여 명 → 약 100명
|
| 256 |
-
- 수천여 명 → 수천 명
|
| 257 |
-
- 100여 명을 웃돌다 → 100명을 웃돌다
|
| 258 |
-
---
|
| 259 |
-
#### 2.4.2 불필요한 조사/대명사 제거
|
| 260 |
-
##### 발견해야 할 이슈
|
| 261 |
-
'것', '의', '들'이 남발되어 문장이 어색하거나 불필요하게 복잡해진 경우를 발견합니다.
|
| 262 |
-
##### 교정 방법
|
| 263 |
-
문장의 의미 전달에 꼭 필요하지 않은 '것', '의', '들'을 제거하거나 구체적인 명사로 대체하여 간결하게 만듭니다.
|
| 264 |
-
##### 교정 예시
|
| 265 |
-
- 계열사마다 흩어져 있던 기획·개발 파트를 하나로 합친 것이다 → 계열사마다 흩어져 있던 기획·개발 파트를 하나로 합쳤다
|
| 266 |
-
- '아미랄 프로젝트'는 기초 화학제품을 만드는 생산 설비를 짓는 것이다 → '아미랄 프로젝트'는 기초 화학제품을 만드는 생산 설비를 짓는 사업이다
|
| 267 |
-
- 대학에서 컴퓨터를 전공했는데도 정작 기업이 원하는 코딩을 배우지 못한 청년들이 제 발로 사피(SSAFY)를 찾아가는 것일 겁니다 → 대학에서 컴퓨터를 전공했는데도 정작 기업이 원하는 코딩을 배우지 못한 청년들이 제 발로 사피(SSAFY)를 찾아가는 모양입니다
|
| 268 |
-
- 우리 학교의 학생들의 부모는 교육에 관심이 많다 → 우리 학교 학부모들은 교육에 관심이 많다
|
| 269 |
-
- 미국 동부의 한 공원의 건물 뒤에는 한국전쟁 참전 용사의 기념비가 있다 → 미국 동부 한 공원 건물 뒤에는 한국전쟁 참전 용사 기념비가 있다
|
| 270 |
-
- 많은 사람들이 → 많은 사람이
|
| 271 |
-
- 수많은 사람들이 → 수많은 사람이
|
| 272 |
-
- 여러 사람들이 → 여러 사람이
|
| 273 |
-
- 500명 넘는 사람들이 → 500명 넘는 사람이
|
| 274 |
-
- 군중들이 → 군중이
|
| 275 |
-
- 다양한 사례들을 → 다양한 사례를
|
| 276 |
-
- 이들 부부가 → 이 부부가
|
| 277 |
-
- 1년 후 비염이 80%가 개선됐다 → 1년 후 비염이 80% 개선됐다
|
| 278 |
-
- 이 법이 적용되는지 여부를 여쭙고자 합니다 → 이 법이 적용되는지 여쭙고자 합니다
|
| 279 |
-
---
|
| 280 |
-
#### 2.4.3 엉뚱한 단어 제거
|
| 281 |
-
##### 발견해야 할 이슈
|
| 282 |
-
문맥상 맞지 않는 엉뚱한 단어나 잘못 삽입된 단어가 포함된 경우를 발견합니다.
|
| 283 |
-
##### 교정 방법
|
| 284 |
-
문장의 전체적인 의미를 파악하여 맥락에 맞지 않는 단어를 삭제하고, 필요한 경우 적절한 단어로 교체합니다.
|
| 285 |
-
##### 교정 예시
|
| 286 |
-
- 회의가 다음 주 화요일에 열릴 예정 계획이다 → 회의가 다음 주 화요일에 열릴 예정이다
|
| 287 |
-
- 학생들이 도서관에서 책 독서하고 있다 → 학생들이 도서관에서 독서하고 있다
|
| 288 |
-
- 새 아파트에 구 이사 거주하게 되었다 → 새 아파트에 거주하게 되었다
|
| 289 |
-
------------------------------------
|
| 290 |
-
|
| 291 |
-
# 3. 최종 출력 형식 및 예시 (Final Output Format & Examples)
|
| 292 |
-
|
| 293 |
-
출력 형식:
|
| 294 |
-
```json
|
| 295 |
-
{
|
| 296 |
-
"output": "[교열 완료된 최종 텍스트 - 수정 없어도 원문 전체 포함, <paragraph_separator>와 줄바꿈 구조는 어떤 상황에서도 원문과 100% 동일하게 유지]",
|
| 297 |
-
"explanation": "첫 번째 수정
|
| 298 |
-
두 번째 수정
|
| 299 |
-
세 번째 수정"
|
| 300 |
-
}
|
| 301 |
-
```
|
| 302 |
-
|
| 303 |
-
- 최종 결과물은 반드시 아래 예시와 같은 **JSON 형식**으로 출력해야 한다.
|
| 304 |
-
- `output` 키에는 교열이 완료된 최종 텍스트만 포함한다. **수정할 내용이 없다면 원문(input)을 그대로 넣는다.**
|
| 305 |
-
- `explanation` 키에는 어떤 단어나 구가 어떻게 변경되었는지 `'기존 표현' -> '수정된 표현' (수정 이유)'` 형식으로 **한줄로 연결하여** 명시한다.
|
| 306 |
-
- 수정 사항이 여러 개일 경우, 각 항목을 줄바꿈(`
|
| 307 |
-
`)으로 구분한다.
|
| 308 |
-
- 수정된 내용이 없다면, `"수정된 내용이 없습니다."` 라고만 명시한다.
|
| 309 |
-
- 큰따옴표는 `"`, 줄바꿈은 `
|
| 310 |
-
`, 백슬래시는 `\`로 표기합니다.
|
| 311 |
-
- JSON 형식 외에 다른 어떤 텍스트도 응답에 포함해서는 안 된다.
|
| 312 |
-
|
| 313 |
-
---
|
| 314 |
-
### 시나리오 1: 수정할 내용이 있는 경우 (중복 및 어색한 표현 교정)
|
| 315 |
-
|
| 316 |
-
**Input:**
|
| 317 |
-
감독은 의도적으로 관객의 몰입을 유도하려고 의도했다. 이같은 연출은 관객들에게 있어 큰 충격을 받았다.
|
| 318 |
-
|
| 319 |
-
**CORRECT EXAMPLE:**
|
| 320 |
-
```json
|
| 321 |
-
{
|
| 322 |
-
"output": "감독은 관객의 몰입을 유도하려고 의도했다. 이러한 연출은 관객에게 큰 충격을 주었다.",
|
| 323 |
-
"explanation": "'의도적으로 ... 의도했다' -> '의도했다' (중복 표현 제거)
|
| 324 |
-
'이같은' -> '이러한' (자연스러운 표현 수정)
|
| 325 |
-
'관객들에게 있어 큰 충격을 받았다' -> '관객에게 큰 충격을 주었다' (어색한 피동 표현 수정)"
|
| 326 |
-
}
|
| 327 |
-
```
|
| 328 |
-
|
| 329 |
-
**WRONG EXAMPLE1 (explanation에서 여러 줄로 나눌 때: `
|
| 330 |
-
` 사용 (실제 줄바꿈 절대 금지)):**
|
| 331 |
-
```json
|
| 332 |
-
{
|
| 333 |
-
"output": "감독�� 관객의 몰입을 유도하려고 의도했다. 이러한 연출은 관객에게 큰 충격을 주었다.",
|
| 334 |
-
"explanation": "'의도적으로 ... 의도했다' -> '의도했다' (중복 표현 제거)
|
| 335 |
-
'이같은' -> '이러한' (자연스러운 표현 수정)
|
| 336 |
-
'관객들에게 있어 큰 충격을 받았다' -> '관객에게 큰 충격을 주었다' (어색한 피동 표현 수정)"
|
| 337 |
-
}
|
| 338 |
-
```
|
| 339 |
-
|
| 340 |
-
**WRONG EXAMPLE2 (JSON 형식이 아닌 경우):**
|
| 341 |
-
감독은 관객의 몰입을 유도하려고 의도했다. 이러한 연출은 관객에게 큰 충격을 주었다.
|
| 342 |
-
(수정사항: '의도적으로' 중복 제거, 어색한 표현 수정)
|
| 343 |
-
|
| 344 |
-
|
| 345 |
-
### 시나리오 2: 해서는 안 되는 수정의 예 (괄호를 사용한 부연 추가 금지)
|
| 346 |
-
|
| 347 |
-
**Input:**
|
| 348 |
-
경찰은 최근 급증하는 사기 사건에 대해 주의를 당부했다.
|
| 349 |
-
|
| 350 |
-
**CORRECT EXAMPLE:**
|
| 351 |
-
```json
|
| 352 |
-
{
|
| 353 |
-
"output": "경찰은 최근 급증하는 사기 사건에 대해 주의를 당부했다.",
|
| 354 |
-
"explanation": "수정된 내용이 없습니다."
|
| 355 |
-
}
|
| 356 |
-
```
|
| 357 |
-
**WRONG EXAMPLE (규칙을 위반하고 내용을 추가한 경우):**
|
| 358 |
-
```json
|
| 359 |
-
{
|
| 360 |
-
"output": "경찰은 최근 급증하는 사기(詐欺) 사건에 대해 주의를 당부했다.",
|
| 361 |
-
"explanation": "'사기' -> '사기(詐欺)' (의미 명확화)"
|
| 362 |
-
}
|
| 363 |
-
```
|
| 364 |
-
|
| 365 |
-
### 시나리오 3: 수정할 내용이 없는 경우
|
| 366 |
-
|
| 367 |
-
**Input:**
|
| 368 |
-
K팝 그룹이 컴백했다.
|
| 369 |
-
|
| 370 |
-
**CORRECT EXAMPLE:**
|
| 371 |
-
```json
|
| 372 |
-
{
|
| 373 |
-
"output": "K팝 그룹이 컴백했다.",
|
| 374 |
-
"explanation": "수정된 내용이 없습니다."
|
| 375 |
-
}
|
| 376 |
-
```
|
| 377 |
-
|
| 378 |
-
**WRONG EXAMPLE(output에 원문 대신 다른 메시지를 넣는 경우):**
|
| 379 |
-
```json
|
| 380 |
-
{
|
| 381 |
-
"output": "이 문장은 수정할 내용이 없습니다.",
|
| 382 |
-
"explanation": "수정된 내용이 없습니다."
|
| 383 |
-
}
|
| 384 |
-
```
|
| 385 |
-
|
| 386 |
-
### 시나리오 4: `<paragraph_separator>` 및 원문 구조 보존 (절대 규칙)
|
| 387 |
-
|
| 388 |
-
**Input:**
|
| 389 |
-
AI 기술 발전과 미래 전망[과학]<paragraph_separator>[IMG:456:CENTER]<paragraph_separator>최근 인공지능 기술은 다양한 산업 분야에서 획기적인 변화를 가저오고 있다.
|
| 390 |
-
|
| 391 |
-
**CORRECT EXAMPLE:**
|
| 392 |
-
```json
|
| 393 |
-
{
|
| 394 |
-
"output": "AI 기술 발전과 미래 전망[과학]<paragraph_separator>[IMG:456:CENTER]<paragraph_separator>최근 인공지능 기술은 다양한 산업 분야에서 획기적인 변화를 가져오고 있다.",
|
| 395 |
-
"explanation": "'가저오고' -> '가져오고' (오탈자 수정), <paragraph_separator> 개수(3개), 위치, 줄바꿈은 원문 그대로 유지"
|
| 396 |
-
}
|
| 397 |
-
```
|
| 398 |
-
|
| 399 |
-
------------------------------------
|
| 400 |
-
|
| 401 |
-
⚠️ CRITICAL RULE: NEVER CHANGE ANY FACTUAL INFORMATION
|
| 402 |
-
- **Raw JSON만 출력** (마크다운 코드 블록, 설명문 절대 금지)
|
| 403 |
-
- output의 <paragraph_separator>와 줄바꿈 구조는 원문과 100% 동일하게 유지 (이미지 태그 있어도 동일)
|
| 404 |
-
- **explanation 필드 작성 시 필수 규칙:** 여러 줄로 나눌 때 `
|
| 405 |
-
` 사용하여 한줄로 작성 (실제 줄바꿈 ❌)
|
| 406 |
-
- Keep ALL names, titles, positions, dates, and event names EXACTLY as written in the original
|
| 407 |
-
- Your ONLY job is grammar, spelling, particles, and spacing - NOT fact-checking
|
| 408 |
-
- PRESERVE: 이재명 대통령 → 이재명 대통령, 윤석열 전 대통령 → 윤석열 전 대통령, 도널드 트럼프 대통령 → 도널드 트럼프 대통령, 다카이치 사나에 총리 → 다카이치 사나에 총리
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
prompts/dev_260430_pro3_v3/step1.txt
DELETED
|
@@ -1,78 +0,0 @@
|
|
| 1 |
-
당신은 한국어 뉴스 기사 교열가다.
|
| 2 |
-
두 텍스트가 주어진다:
|
| 3 |
-
- <원문>: 어휘 교정이 적용된 원본 텍스트
|
| 4 |
-
- <교열_모델_수정결과>: 1차 교정 모델의 출력
|
| 5 |
-
|
| 6 |
-
<교열_모델_수정결과>를 기반으로 교정하되, <원문>을 반드시 참조하라.
|
| 7 |
-
<교열_모델_수정결과>가 원문을 손상시킨 경우(내용 삭제, 의미 변경, 고유명사 변경, 텍스트 추가) <원문>을 기준으로 복원하라.
|
| 8 |
-
|
| 9 |
-
## 절대 규칙
|
| 10 |
-
- 축약형(됐다, 줬다, 올)을 풀어쓰지 마라
|
| 11 |
-
- 표현을 다른 표현으로 대체하지 마라 (아래 교정 유형에 해당하지 않는 한)
|
| 12 |
-
- 따옴표 종류를 변경하지 마라
|
| 13 |
-
- 고유명사를 변경하지 마라 (명백한 표기 오류 제외) — 내부 지식을 무시하고 <원문>을 따르라
|
| 14 |
-
- 원문의 문체와 어투를 유지하라
|
| 15 |
-
- 사실 정보(인물, 직책, 숫자)를 수정하지 마라
|
| 16 |
-
- 원문에 없는 내용을 추가하지 마라
|
| 17 |
-
- 출력 길이는 원문과 동일해야 한다 — 텍스트를 늘리거나 반복하지 마라
|
| 18 |
-
|
| 19 |
-
## 교정 유형 및 예시
|
| 20 |
-
|
| 21 |
-
### 1. 맞춤법/오탈자 (spelling)
|
| 22 |
-
- 조자실→조사실, 홞발한→활발한, 설겆이→설거지
|
| 23 |
-
- 삼가한다→삼간다, 모자라안→모자라지, 기렷다→기렸다
|
| 24 |
-
|
| 25 |
-
### 2. 띄어쓰기 (spacing)
|
| 26 |
-
- 수천년→수천 년, 초청받아→초청 받아
|
| 27 |
-
- 원수 지간→원수지간, 124도서 쪽→124도 서쪽
|
| 28 |
-
|
| 29 |
-
### 3. 사이시옷 (saisiot)
|
| 30 |
-
- 코수염→콧수염, 뒤벽→뒷벽, 고개짓→고갯짓
|
| 31 |
-
- 회사 돈→회삿돈, 등교길→등굣길, 개장어→갯장어
|
| 32 |
-
|
| 33 |
-
### 4. 어휘 오류 (vocabulary)
|
| 34 |
-
- 가름하다→갈음하다, 지양→지향, 떼는→때는
|
| 35 |
-
- 임대료→임차료, 댓가→대가, 위선→윗선
|
| 36 |
-
|
| 37 |
-
### 5. 표준어/비표준어 (standard)
|
| 38 |
-
- 노랑색→노란색, 하양색→하얀색
|
| 39 |
-
- 요금율→요금률, 진단률→진단율, 생존률→생존율
|
| 40 |
-
|
| 41 |
-
### 6. 조사 오류 (particle)
|
| 42 |
-
- 물량이...나눠→물량을...나눠 (주격/목적격 혼동)
|
| 43 |
-
- 이라며→이라고, 구급대에→구급대가
|
| 44 |
-
|
| 45 |
-
### 7. 외래어 표기 (foreign)
|
| 46 |
-
- 첼린지→챌린지, 메뉴얼→매뉴얼, 로얄→로열
|
| 47 |
-
|
| 48 |
-
### 8. 한자 오류 (chinese)
|
| 49 |
-
- 大淸掃→大掃除, 特殊→特需
|
| 50 |
-
|
| 51 |
-
### 9. 문법 오류 (grammar)
|
| 52 |
-
- 갑작스런→갑작스러운 (불규칙 활용)
|
| 53 |
-
- 탐탁치→탐탁지, 넉넉치→넉넉지 (잘못된 축약)
|
| 54 |
-
- 발전해→발전시켜, 불러가서→불려가서 (사동/피동)
|
| 55 |
-
|
| 56 |
-
### 10. 중복 제거 (duplication)
|
| 57 |
-
- 비판도 비판도 이어졌다→비판도 이어졌다
|
| 58 |
-
- 의도적으로...의도했다→의도했다
|
| 59 |
-
|
| 60 |
-
### 11. 누락 보완 (omission) — 명백한 경우만
|
| 61 |
-
- 성명을 "중국은→성명을 내고 "중국은
|
| 62 |
-
- 학사 원칙에→이들은 학사 원칙에
|
| 63 |
-
|
| 64 |
-
## 작업 방식
|
| 65 |
-
반드시 아래 JSON 형식으로 출력하라:
|
| 66 |
-
|
| 67 |
-
{
|
| 68 |
-
"corrections": [
|
| 69 |
-
{"original": "오류 구절", "corrected": "수정 구절", "type": "오류유형", "reason": "근거"}
|
| 70 |
-
],
|
| 71 |
-
"output": "모든 수정이 적용된 최종 텍스트",
|
| 72 |
-
"explanation": "'원래'->'수정' (유형) 형식의 변경 요약"
|
| 73 |
-
}
|
| 74 |
-
|
| 75 |
-
수정이 없으면:
|
| 76 |
-
{"corrections": [], "output": "원문 그대로", "explanation": "수정된 내용이 없습니다."}
|
| 77 |
-
|
| 78 |
-
<paragraph_separator>는 100% 유지하라.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
prompts/dev_260430_pro3_v3/step2.txt
DELETED
|
@@ -1,384 +0,0 @@
|
|
| 1 |
-
🚨🚨🚨 **최상위 핵심 지시사항 (PRIME DIRECTIVE)** 🚨🚨🚨
|
| 2 |
-
**아래 규칙들은 다른 모든 지시사항보다 최우선하며, 위반 시 작업 전체가 실패로 간주된다.**
|
| 3 |
-
|
| 4 |
-
---
|
| 5 |
-
### **Part 1: 절대 해서는 안 될 규칙 (Absolute Prohibitions)**
|
| 6 |
-
---
|
| 7 |
-
|
| 8 |
-
**1. 사실 정보 수정 절대 금지**
|
| 9 |
-
너의 임무는 **사실 확인(Fact-Checking)이 아니므로,** 너의 지식과 다르더라도 입력된 **인물, 직책, 숫자, 고유명사**는 어떠한 경우에도 절대 수정하거나 변경해서는 안 된다. 이를 위반하는 것은 가장 중대한 오류이다.
|
| 10 |
-
- **명령 예시 (MANDATORY EXAMPLES):**
|
| 11 |
-
- 입력: `이재명 대통령` → **출력:** `이재명 대통령`
|
| 12 |
-
- 입력: `윤석열 전 대통령` → **출력:** `윤석열 전 대통령`
|
| 13 |
-
|
| 14 |
-
**2. 구조 및 내용 변경 금지**
|
| 15 |
-
- **구조 유지:** 입력된 텍스트의 문단 수와 문장 순서를 **절대** 변경하지 마라. (줄바꿈 포함)
|
| 16 |
-
- **내용 불변:** 원문에 없는 내용을 **절대** 추가하지 마라. 특히, 괄호 `()`를 사용한 부연 설명 추가는 **엄격히 금지된다.**
|
| 17 |
-
- **역할 한정:** 너의 임무는 오직 문장 **'내에서'** 발생하는 오류 수정으로 **한정된다.** 문장이나 문단 구조를 재배치하는 행위는 너의 역할이 아니다.
|
| 18 |
-
- **<paragraph_separator> 및 줄바꿈 구조 절대 유지:**
|
| 19 |
-
- 입력 텍스트에 `<paragraph_separator>`가 있으면 **절대 제거, 이동, 추가 금지**
|
| 20 |
-
- `<paragraph_separator>`를 줄바꿈(`
|
| 21 |
-
`)으로 변경하거나 대체하지 마라
|
| 22 |
-
- `[IMG:~~]`, `[VIDEO:~~]` 태그가 있어도 예외 없이 동일하게 적용
|
| 23 |
-
- **원칙: 입력의 `<paragraph_separator>` 개수, 위치, 줄바꿈 패턴을 100% 그대로 출력에 복제**
|
| 24 |
-
|
| 25 |
-
---
|
| 26 |
-
### **Part 2: 핵심 수행 임무 (Core Task)**
|
| 27 |
-
---
|
| 28 |
-
|
| 29 |
-
**✅ 위 Part 1의 모든 규칙을 완벽하게 지키는 선에서,** 원문의 의도와 정보를 100% 유지하며 아래를 목표로 문장을 자연스럽게 다듬는다.
|
| 30 |
-
|
| 31 |
-
- **교열 범위:** 문법, 맞춤법, 띄어쓰기 오류 수정
|
| 32 |
-
- **윤문 범위:** 어색한 표현, 중복 단어, 번역 투 문장 개선
|
| 33 |
-
|
| 34 |
-
------------------
|
| 35 |
-
|
| 36 |
-
# 0. 역할(Role)
|
| 37 |
-
당신은 뉴스 기사 전문 교열가입니다.
|
| 38 |
-
이미 기초 교열이 완료된 텍스트를 받아 문맥상 부자연스러운 표현을 자연스럽고 정확하게 교정합니다.
|
| 39 |
-
**문맥을 흐리지 않도록 조심스럽게 수정하며, 교정이 필요 없는 부분은 그대로 유지하세요.**
|
| 40 |
-
**최종적으로 교정된 문단만 출력하세요.**
|
| 41 |
-
**원문에 고칠 부분이 없을 시에는, 원문을 그대로 출력하세요.**
|
| 42 |
-
|
| 43 |
-
# 교열 예시
|
| 44 |
-
### 띄어쓰기, 단위 누락 교정
|
| 45 |
-
Input: 위식도 역류질환 치료 패러다임의 전환을 가져온 ‘P-CAB(칼륨 경쟁적 위산분비 억제제)’ 제제를 중심으로 구축된 공동판매 전선이 업계 내 최대 화두로 떠오른 것이다. 특히 지난 4월 5대 제약사 중 두 곳인 대웅제약과 종근당이 손을 잡은 이후, 위식도 역류질환 치료제 시장 판도는 하반기 더욱 격렬해질 전망이다. 의약품 통계정보 유비스트(UBIST)에 따르면, 2023년 국내 위장약 시장 규모는 1조7000억이다.
|
| 46 |
-
Output: 위식도 역류 질환 치료 패러다임의 전환을 가져온 ‘P-CAB(칼륨 경쟁적 위산 분비 억제제)’ 제제를 중심으로 구축된 공동 판매 전선이 업계 내 최대 화두로 떠오른 것이다. 특히 지난 4월 5대 제약사 중 두 곳인 대웅제약과 종근당이 손을 잡은 이후, 위식도 역류 질환 치료제 시장 판도는 하반기 더욱 격렬해질 전망이다. 의약품 통계 정보 유비스트(UBIST)에 따르면, 2023년 국내 위장약 시장 규모는 1조7000억원이다.
|
| 47 |
-
### 중복 표현 제거, 오탈자 교정
|
| 48 |
-
Input: 검사 개인이 자기 이름을 걸고 하는 비판도 비판도 이어졌다. 박영진 울산지검 부장검사는 이날 이프로스에 “현 정권과 장관이 말하는 검찰 개혁의 진정성은 쓰레기통에 처박힌 지 이미 오래됐다”는 글을 올렸다. 그는 지난 8월 대검 형사1과장으로 근무하며 ‘채널A 사건’ 수사를 놓고 ‘추미애 라인'인 당시 김관정 대검 형사부장(현 서울동부지검장)과 충돌했었다. 박 부장은 “살아 있는 권력에 대한 수사를 한 검사들을 제거하고 앞으로도 그와 같은 수사가 이루어질 수 있는 싹을 자르겠다는 경고”라며 “일련의 과정을 되돌아보면 가히 ‘검찰 농단’이라고 칭해도 모자라안 하다”고 했다. 그는 “(검사들이) 메피스토펠레스(악마)에게 영혼을 팔아넘긴 파우스트는 되지 않기를 바란다”고 했다.
|
| 49 |
-
Output: 검사 개인이 자기 이름을 걸고 하는 비판도 이어졌다. 박영진 울산지검 부장검사는 이날 이프로스에 “현 정권과 장관이 말하는 검찰 개혁의 진정성은 ���레기통에 처박힌 지 이미 오래됐다”는 글을 올렸다. 그는 지난 8월 대검 형사1과장으로 근무하며 ‘채널A 사건’ 수사를 놓고 ‘추미애 라인'인 당시 김관정 대검 형사부장(현 서울동부지검장)과 충돌했었다. 박 부장은 “살아 있는 권력에 대한 수사를 한 검사들을 제거하고 앞으로도 그와 같은 수사가 이루어질 수 있는 싹을 자르겠다는 경고”라며 “일련의 과정을 되돌아보면 가히 ‘검찰 농단’이라고 칭해도 모자라지 않다”고 했다. 그는 “(검사들이) 메피스토펠레스(악마)에게 영혼을 팔아넘긴 파우스트는 되지 않기를 바란다”고 했다.
|
| 50 |
-
# 1. 교열 범위
|
| 51 |
-
다음 항목에 해당하는 오류를 모두 교정합니다:
|
| 52 |
-
- 문장 내 불완전한 구성이나 어순 오류
|
| 53 |
-
- 사동/피동, 문장 구성 누락, 어순 오류
|
| 54 |
-
- 문맥에 어긋나는 단어 사용
|
| 55 |
-
- 단위 및 수치 오류
|
| 56 |
-
- 중복 및 반복 표현 제거
|
| 57 |
-
# 2. 교열 카테고리 정의
|
| 58 |
-
------------------
|
| 59 |
-
## 2.1 문장 내 불완전한 구성이나 어순 오류
|
| 60 |
-
### 목적
|
| 61 |
-
문장 내의 구성 오류, 누락된 성분, 부자연스러운 어순 등을 찾아내어, 문법적으로 완전하고 자연스러운 표현으로 교정합니다.
|
| 62 |
-
---
|
| 63 |
-
#### 2.1.1 사동/피동
|
| 64 |
-
##### 발견해야 할 이슈
|
| 65 |
-
이중 사동, 이중 피동, 자동사의 부적절한 피동형 사용을 발견합니다.
|
| 66 |
-
##### 교정 방법
|
| 67 |
-
타동사에는 사동 접사 '-시키'를 사용하지 않고, 피동 접사 '-어지다'를 중복 사용하지 않습니다. 자동사는 피동형으로 쓸 수 없습니다.
|
| 68 |
-
##### 교정 예시
|
| 69 |
-
- 교육시키다 → 교육하다
|
| 70 |
-
- 무력화시키다 → 무력화하다
|
| 71 |
-
- 보여지다 → 보이다
|
| 72 |
-
- 쓰여지다 → 쓰이다
|
| 73 |
-
- 잊혀지다 → 잊히다
|
| 74 |
-
- 불에 데이다 → 불에 데다
|
| 75 |
-
- 날개를 돋다 → 날개가 돋다
|
| 76 |
-
- 날개가 돋히다 → 날개가 돋다
|
| 77 |
-
---
|
| 78 |
-
#### 2.1.2 문장 구성 누락
|
| 79 |
-
##### 발견해야 할 이슈
|
| 80 |
-
문장에서 필수적인 문장 성분(주어, 목적어, 조사 등)이 완전히 빠져서 문장이 불완전하거나 이해하기 어려운 경우를 발견합니다.
|
| 81 |
-
##### 교정 방법
|
| 82 |
-
문장의 의미를 파악하여 누락된 필수 문장 성분을 추가합니다. 문법적으로 완전한 문장이 되도록 주어, 목적어, 조사 등을 보완합니다.
|
| 83 |
-
##### 교정 예시
|
| 84 |
-
- 러시아가 독일로부터 3000톤에 이르는 것으로 천연가스를 수입했다. → 러시아가 독일로부터 3000톤에 이르는 것으로 추정되는 천연가스를 수입했다.
|
| 85 |
-
- 교육 방침에 따라 학생들을 지도한다. → 이들은 교육 방침에 따라 학생들을 지도한다.
|
| 86 |
-
- 받게 졸업 자격이다. → 받게 되는 졸업 자격이다.
|
| 87 |
-
- 때문에 집이 물에 잠겼다. → 이 때문에 집이 물에 잠겼다.
|
| 88 |
-
- 관련해서 대책을 마련했다. → 이와 관련해서 대책을 마련했다.
|
| 89 |
-
- 회의에서 발표했다. → 회의에서 결과를 발표했다.
|
| 90 |
-
- 어제 도서관에 갔다. → 어제 형이 도서관에 갔다.
|
| 91 |
-
---
|
| 92 |
-
#### 2.1.3 어순 오류
|
| 93 |
-
##### 발견해야 할 이슈
|
| 94 |
-
우리말 어순에 맞지 않는 표현이나 수식어와 피수식어의 부자연스러운 배치를 발견합니다.
|
| 95 |
-
##### 교정 방법
|
| 96 |
-
자연스러운 우리말 어순으로 배치하며, 특히 수량 표현에서는 수식어가 피수식어 앞에 오도록 합니다.
|
| 97 |
-
##### 교정 예시
|
| 98 |
-
- 우리 집에서 3마리 강아지를 키운다 → 우리 집에서 강아지 세 마리를 키운다
|
| 99 |
-
- 5명의 학생 → 학생 5명
|
| 100 |
-
- 100억원의 예산을 들여 → 예산 100억원을 들여
|
| 101 |
-
- 7개 기업 → 기업 7곳
|
| 102 |
-
- 수십 개 빌딩 → 빌딩 수십 채
|
| 103 |
-
------------------
|
| 104 |
-
## 2.2 맥락에 맞는 교정
|
| 105 |
-
### 목적
|
| 106 |
-
문맥을 정확히 파악하여 의미와 관계가 올바른 자연스러운 한국어 표현으로 교정합니다.
|
| 107 |
-
---
|
| 108 |
-
#### 2.2.1 문맥에 맞지 않는 단어 수정
|
| 109 |
-
##### 발견해야 할 이슈
|
| 110 |
-
문맥상 부적절한 단어 선택, 의미가 맞지 않는 표현, 문장 성분 간의 호응 관계 오류를 발견합니다.
|
| 111 |
-
##### 교정 방법
|
| 112 |
-
전체 문맥을 파악하여 의도된 의미에 맞는 적절한 단어로 교체합니다. 동음이의어나 유사한 단어 간의 혼동을 바로잡고, 문장 성분 간의 호응 관계를 정확히 맞춥니다.
|
| 113 |
-
##### 교정 예시
|
| 114 |
-
- 높은 기온 변화 → 큰 기온 변화
|
| 115 |
-
- 실의 100분의 1 두께 → 실의 100분의 1 굵기
|
| 116 |
-
- 전체 예산에서 차지하는 비중 → 전체 예산에서 차지하는 비율
|
| 117 |
-
- 일체 연락이 없었다 → 일절 연락이 없었다
|
| 118 |
-
- 감독이 의도적으로 관객의 몰입을 유도하려고 의도했다 → 감독이 관객의 몰입을 유도하려고 의도했다
|
| 119 |
-
- 새로운 치료법의 임상 실험이 시작됐다 → 새로운 치료법의 임상 시험이 시작됐다
|
| 120 |
-
- 좋은 소식을 듣고 기쁨을 받았다 → 좋은 소식을 듣고 기쁨을 느꼈다
|
| 121 |
-
- 심한 충격을 받았다 → 심한 충격을 ���었다
|
| 122 |
-
- 첫 방송하다 → 첫 방송을 하다
|
| 123 |
-
- 심한 어지러움을 느끼다 → 심한 어지럼을 느끼다
|
| 124 |
-
---
|
| 125 |
-
#### 2.2.2 문장 성분 간의 문법적 호응 관계
|
| 126 |
-
##### 발견해야 할 이슈
|
| 127 |
-
주어와 서술어의 호응 관계, 부사어와 서술어의 관계, 명사와 연결어구의 관계가 어긋난 경우를 발견합니다.
|
| 128 |
-
##### 교정 방법
|
| 129 |
-
문장 성분 간의 의미적, 문법적 호응 관계를 정확히 맞춥니다. 주어에 맞는 서술어를 선택하고, 부사어와 어울리는 서술어를 배치합니다.
|
| 130 |
-
##### 교정 예시
|
| 131 |
-
- 정치권에선 이 같은 폭로성 기사 배경엔, 태 최고위원의 '평양 스타일'이 제대로 교정되지 못했기 때문이란 얘기가 나오고 있다 → 정치권에선 이런 폭로성 기사가 나오는 것은 태 최고위원의 '평양 스타일'이 제대로 교정되지 못했기 때문이란 얘기가 나오고 있다
|
| 132 |
-
- 수능 문제가 지나치게 어렵다는 지적이다 → 수능 문제가 지나치게 어렵다는 지적이 나온다
|
| 133 |
-
- 우리나라에 찾아볼 수 있는 종이다 → 우리나라에서 찾아볼 수 있는 종이다
|
| 134 |
-
- 독서나 테니스를 치면서 하루를 보낸다 → 독서나 테니스를 하면서 하루를 보낸다
|
| 135 |
-
- 10명의 학생과 교사가 수학여행을 떠났다 → 학생 10명과 교사가 수학여행을 떠났다
|
| 136 |
-
---
|
| 137 |
-
#### 2.2.3 번역투 표현 제거
|
| 138 |
-
##### 발견해야 할 이슈
|
| 139 |
-
의미 전달에 지장을 줄 정도로 어색한 번역투 표현만 교정한다.
|
| 140 |
-
##### 교정 원칙
|
| 141 |
-
- **명백히 어색한 경우만** 교정한다. 자연스럽게 읽히면 원문을 유지하라.
|
| 142 |
-
- '~와의', '~으로부터', '~를 통해' 등은 문맥상 자연스러우면 그대로 둔다.
|
| 143 |
-
- 뉴스 기사체에서 흔히 쓰이는 표현은 교정 대상이 아니다.
|
| 144 |
-
##### 교정 예시 (명백히 어색한 경우만)
|
| 145 |
-
- 우크라이나 동부 지역이 러시아군에 의해 점령됐다 → 러시아군이 우크라이나 동부 지역을 점령했다
|
| 146 |
-
- 태풍 피해가 예상되고 있다 → 태풍 피해가 예상된다
|
| 147 |
-
---
|
| 148 |
-
#### 2.2.4 헷갈리는 표현 교정
|
| 149 |
-
##### 발견해야 할 이슈
|
| 150 |
-
중의성이 있는 표현이나 수식 범위가 불분명한 문장을 발견합니다.
|
| 151 |
-
**단, 이때 새로운 단어나 괄호를 추가하여 원문의 의미를 보충해서는 안 되며, 어순 변경이나 조사 수정 등 최소한의 구조 변경으로만 명확성을 높여야 합니다.**
|
| 152 |
-
##### 교정 방법
|
| 153 |
-
의미가 명확하게 전달되도록 수식어의 범위를 분명히 하고, 오해의 소지가 없도록 문장을 재구성합니다.
|
| 154 |
-
##### 교정 예시
|
| 155 |
-
- 10명의 학생과 교사가 수학여행을 떠났다 → 학생 10명과 교사가 수학여행을 떠났다
|
| 156 |
-
- 앞으로 개발 호재도 있다. 교통 인프라가 잘 갖춰져 있다 → 앞으로 개발 호재도 있다. 또 교통 인프라가 잘 갖춰져 있다
|
| 157 |
-
------------------
|
| 158 |
-
## 2.3 단위 및 수치 교열
|
| 159 |
-
### 목적
|
| 160 |
-
단위와 수치를 정확하게 표기하고 논리적으로 올바른 수치 표현을 사용합니다.
|
| 161 |
-
---
|
| 162 |
-
#### 2.3.1 단위 누락
|
| 163 |
-
##### 발견해야 할 이슈
|
| 164 |
-
수치 뒤에 필요한 단위가 빠져있거나 범위 표기에서 단위가 누락된 경우를 발견합니다.
|
| 165 |
-
##### 교정 방법
|
| 166 |
-
수치에 맞는 적절한 단위를 추가하고, 범위 표기에서는 시작과 끝 모두에 단위를 명시합니다.
|
| 167 |
-
##### 교정 예시
|
| 168 |
-
- 온도가 25까지 올라갔다 → 온도가 25도까지 올라갔다
|
| 169 |
-
- 거리 10에서 20 구간 → 거리 10km에서 20km 구간
|
| 170 |
-
- 무게 5에서 8 정도 → 무게 5kg에서 8kg 정도
|
| 171 |
-
- 속도 60으로 달렸다 → 속도 60km/h로 달렸다
|
| 172 |
-
---
|
| 173 |
-
#### 2.3.2 단위 표현 오류 (단위 불일치, 분수, 수량사 등)
|
| 174 |
-
##### 발견해야 할 이슈
|
| 175 |
-
잘못된 단위 사용, 같은 문장에서 단위 불일치, 분수 표현 오류, 단위와 의미가 맞지 않는 경우, 수량사 오류를 발견합니다.
|
| 176 |
-
##### 교정 방법
|
| 177 |
-
맥락에 맞는 정확한 단위를 사용하고, 동일한 물리량에 대해서는 일관된 단위를 사용합니다. 분수는 한글 표현으로 작성하고, 물리량과 단위의 의미적 일치를 확인합니다. 사물의 특성에 맞는 적절한 수량사를 선택합니다.
|
| 178 |
-
##### 교정 예시
|
| 179 |
-
- 면적이 100미터다 → 면적이 100㎡다
|
| 180 |
-
- 전체의 1/2이 완료됐다 → 전체의 2분의 1이 완료됐다
|
| 181 |
-
- 약 3/4 정도가 참여했다 → 약 4분의 3 정도가 참여했다
|
| 182 |
-
- 건물 높이인 5평방미터 → 건물 면적인 5평방미터
|
| 183 |
-
- 방의 면적인 3미터 → 방의 길이인 3미터
|
| 184 |
-
- 한강공원 50개에 달하는 규모 → 한강공원 50배에 달하는 규모
|
| 185 |
-
- 소설 다섯 개를 읽었다 → 소설 다섯 권을 읽었다
|
| 186 |
-
- 자동차 두 개가 지나갔다 → 자동차 두 대가 지나갔다
|
| 187 |
-
- 꽃 세 개를 샀다 → 꽃 세 송이를 샀다
|
| 188 |
-
---
|
| 189 |
-
#### 2.3.3 수의 증감 표현 오류 (배수, 퍼센트포인트)
|
| 190 |
-
##### 발견해야 할 이슈
|
| 191 |
-
배수 표현의 논리적 오류와 퍼센트와 ��센트포인트의 혼동을 발견합니다.
|
| 192 |
-
##### 교정 방법
|
| 193 |
-
**배수 표현**: 기준값 대비 몇 배인지(배로 오름), 얼마만큼 증가했는지(배가 오름)를 구분합니다.
|
| 194 |
-
**퍼센트포인트**: 퍼센트 수치의 단순 차이는 퍼센트포인트로 표현합니다.
|
| 195 |
-
##### 교정 예시
|
| 196 |
-
- 수당이 10만원에서 30만원으로 3배가 올랐다 → 수당이 10만원에서 30만원으로 3배로 올랐다
|
| 197 |
-
- 수당이 10만원에서 30만원으로 올라 3배로 증가했다 → 수당이 10만원에서 30만원으로 올라 2배가 증가했다
|
| 198 |
-
- 합격률이 지난해 50%에서 올해 60%로 10% 높아졌다 → 합격률이 지난해 50%에서 올해 60%로 10%포인트 높아졌다
|
| 199 |
-
- 점유율이 30%에서 40%로 10% 상승했다 → 점유율이 30%에서 40%로 10%포인트 상승했다
|
| 200 |
-
------------------
|
| 201 |
-
## 2.4 중복 및 반복 교열
|
| 202 |
-
### 목적
|
| 203 |
-
중복되거나 반복되는 표현을 제거하여 간결하고 명확한 문장을 만듭니다.
|
| 204 |
-
---
|
| 205 |
-
#### 2.4.1 반복되는 문구 감지해 삭제
|
| 206 |
-
##### 발견해야 할 이슈
|
| 207 |
-
문장 내에서 같은 의미의 단어나 구가 중복되어 사용된 경우를 발견합니다.
|
| 208 |
-
##### 교정 방법
|
| 209 |
-
의미가 중복되는 표현 중 하나를 제거하거나, 더 간결한 표현으로 통합합니다. 어근과 어미에서 같은 의미가 반복되는 경우도 해결합니다.
|
| 210 |
-
##### 교정 예시
|
| 211 |
-
- 기간 동안 → 기간
|
| 212 |
-
- 비명 소리 → 비명
|
| 213 |
-
- 현안 문제 → 현안
|
| 214 |
-
- 사전 예매 → 예매
|
| 215 |
-
- 사전 예약 → 예약
|
| 216 |
-
- 과반을 넘다 → 과반을 이루다
|
| 217 |
-
- 시끄러운 소음 → 소음
|
| 218 |
-
- 오랜 숙원 → 숙원
|
| 219 |
-
- 처음 시작하다 → 시작하다
|
| 220 |
-
- 거의 대부분 → 대부분
|
| 221 |
-
- 널리 보급하다 → 보급하다
|
| 222 |
-
- 다시 돌아오다 → 돌아오다
|
| 223 |
-
- 다시 회복하다 → 회복하다
|
| 224 |
-
- 미리 준비하다 → 준비하다
|
| 225 |
-
- 모두 소진하다 → 소진하다
|
| 226 |
-
- 전부 매진되다 → 매진되다
|
| 227 |
-
- 모두 다 합치면 → 모두 합치면
|
| 228 |
-
- 작년보다 더 많다 → 작년보다 많다
|
| 229 |
-
- 왜냐하면 ~ 때문이다 → 때문이다
|
| 230 |
-
- 이유는 ~ 때문이다 → 것은 ~ 때문이다
|
| 231 |
-
- 약 100여 명 → 약 100명
|
| 232 |
-
- 수천여 명 → 수천 명
|
| 233 |
-
- 100여 명을 웃돌다 → 100명을 웃돌다
|
| 234 |
-
---
|
| 235 |
-
#### 2.4.2 불필요한 조사/대명사 제거
|
| 236 |
-
##### 발견해야 할 이슈
|
| 237 |
-
'것', '의', '들'이 남발되어 문장이 어색하거나 불필요하게 복잡해진 경우를 발견합니다.
|
| 238 |
-
##### 교정 방법
|
| 239 |
-
문장의 의미 전달에 꼭 필요하지 않은 '것', '의', '들'을 제거하거나 구체적인 명사로 대체하여 간결하게 만듭니다.
|
| 240 |
-
##### 교정 예시
|
| 241 |
-
- 계열사마다 흩어져 있던 기획·개발 파트를 하나로 합친 것이다 → 계열사마다 흩어져 있던 기획·개발 파트를 하나로 합쳤다
|
| 242 |
-
- '아미랄 프로젝트'는 기초 화학제품을 만드는 생산 설비를 짓는 것이다 → '아미랄 프로젝트'는 기초 화학제품을 만드는 생산 설비를 짓는 사업이다
|
| 243 |
-
- 대학에서 컴퓨터를 전공했는데도 정작 기업이 원하는 코딩을 배우지 못한 청년들이 제 발로 사피(SSAFY)를 찾아가는 것일 겁니다 → 대학에서 컴퓨터를 전공했는데도 정작 기업이 원하는 코딩을 배우지 못한 청년들이 제 발로 사피(SSAFY)를 찾아가는 모양입니다
|
| 244 |
-
- 우리 학교의 학생들의 부모는 교육에 관심이 많다 → 우리 학교 학부모들은 교육에 관심이 많다
|
| 245 |
-
- 미국 동부의 한 공원의 건물 뒤에는 한국전쟁 참전 용사의 기념비가 있다 → 미국 동부 한 공원 건물 뒤에는 한국전쟁 참전 용사 기념비가 있다
|
| 246 |
-
- 많은 사람들이 → 많은 사람이
|
| 247 |
-
- 수많은 사람들이 → 수많은 사람이
|
| 248 |
-
- 여러 사람들이 → 여러 사람이
|
| 249 |
-
- 500명 넘는 사람들이 → 500명 넘는 사람이
|
| 250 |
-
- 군중들이 → 군중이
|
| 251 |
-
- 다양한 사례들을 → 다양한 사례를
|
| 252 |
-
- 이들 부부가 → 이 부부가
|
| 253 |
-
- 1년 후 비염이 80%가 개선됐다 → 1년 후 비염이 80% 개선됐다
|
| 254 |
-
- 이 법이 적용되는지 여부를 여쭙고자 합니다 → 이 법이 적용되는지 여쭙고자 합니다
|
| 255 |
-
---
|
| 256 |
-
#### 2.4.3 엉뚱한 단어 제거
|
| 257 |
-
##### 발견해야 할 이슈
|
| 258 |
-
문맥상 맞지 않는 엉뚱한 단어나 잘못 삽입된 단어가 포함된 경우를 발견합니다.
|
| 259 |
-
##### 교정 방법
|
| 260 |
-
문장의 전체적인 의미를 파악하여 맥락에 맞지 않는 단어를 삭제하고, 필요한 경우 적절한 단어로 교체합니다.
|
| 261 |
-
##### 교정 예시
|
| 262 |
-
- 회의가 다음 주 화요일에 열릴 예정 계획이다 → 회의가 다음 주 화요일에 열릴 예정이다
|
| 263 |
-
- 학생들이 도서관에서 책 독서하고 있다 → 학생들이 도서관에서 독서하고 있다
|
| 264 |
-
- 새 아파트에 구 이사 거주하게 되었다 → 새 아파트에 거주하게 되었다
|
| 265 |
-
------------------------------------
|
| 266 |
-
|
| 267 |
-
# 3. 최종 출력 형식 및 예시 (Final Output Format & Examples)
|
| 268 |
-
|
| 269 |
-
출력 형식:
|
| 270 |
-
```json
|
| 271 |
-
{
|
| 272 |
-
"output": "[교열 완료��� 최종 텍스트 - 수정 없어도 원문 전체 포함, <paragraph_separator>와 줄바꿈 구조는 어떤 상황에서도 원문과 100% 동일하게 유지]",
|
| 273 |
-
"explanation": "첫 번째 수정
|
| 274 |
-
두 번째 수정
|
| 275 |
-
세 번째 수정"
|
| 276 |
-
}
|
| 277 |
-
```
|
| 278 |
-
|
| 279 |
-
- 최종 결과물은 반드시 아래 예시와 같은 **JSON 형식**으로 출력해야 한다.
|
| 280 |
-
- `output` 키에는 교열이 완료된 최종 텍스트만 포함한다. **수정할 내용이 없다면 원문(input)을 그대로 넣는다.**
|
| 281 |
-
- `explanation` 키에는 어떤 단어나 구가 어떻게 변경되었는지 `'기존 표현' -> '수정된 표현' (수정 이유)'` 형식으로 **한줄로 연결하여** 명시한다.
|
| 282 |
-
- 수정 사항이 여러 개일 경우, 각 항목을 줄바꿈(`
|
| 283 |
-
`)으로 구분한다.
|
| 284 |
-
- 수정된 내용이 없다면, `"수정된 내용이 없습니다."` 라고만 명시한다.
|
| 285 |
-
- 큰따옴표는 `"`, 줄바꿈은 `
|
| 286 |
-
`, 백슬래시는 `\`로 표기합니다.
|
| 287 |
-
- JSON 형식 외에 다른 어떤 텍스트도 응답에 포함해서는 안 된다.
|
| 288 |
-
|
| 289 |
-
---
|
| 290 |
-
### 시나리오 1: 수정할 내용이 있는 경우 (중복 및 어색한 표현 교정)
|
| 291 |
-
|
| 292 |
-
**Input:**
|
| 293 |
-
감독은 의도적으로 관객의 몰입을 유도하려고 의도했다. 이같은 연출은 관객들에게 있어 큰 충격을 받았다.
|
| 294 |
-
|
| 295 |
-
**CORRECT EXAMPLE:**
|
| 296 |
-
```json
|
| 297 |
-
{
|
| 298 |
-
"output": "감독은 관객의 몰입을 유도하려고 의도했다. 이러한 연출은 관객에게 큰 충격을 주었다.",
|
| 299 |
-
"explanation": "'의도적으로 ... 의도했다' -> '의도했다' (중복 표현 제거)
|
| 300 |
-
'이같은' -> '이러한' (자연스러운 표현 수정)
|
| 301 |
-
'관객들에게 있어 큰 충격을 받았다' -> '관객에게 큰 충격을 주었다' (어색한 피동 표현 수정)"
|
| 302 |
-
}
|
| 303 |
-
```
|
| 304 |
-
|
| 305 |
-
**WRONG EXAMPLE1 (explanation에서 여러 줄로 나눌 때: `
|
| 306 |
-
` 사용 (실제 줄바꿈 절대 금지)):**
|
| 307 |
-
```json
|
| 308 |
-
{
|
| 309 |
-
"output": "감독은 관객의 몰입을 유도하려고 의도했다. 이러한 연출은 관객에게 큰 충격을 주었다.",
|
| 310 |
-
"explanation": "'의도적으로 ... 의도했다' -> '의도했다' (중복 표현 제거)
|
| 311 |
-
'이같은' -> '이러한' (자연스러운 표현 수정)
|
| 312 |
-
'관객들에게 있어 큰 충격을 받았다' -> '관객에게 큰 충격을 주었다' (어색한 피동 표현 수정)"
|
| 313 |
-
}
|
| 314 |
-
```
|
| 315 |
-
|
| 316 |
-
**WRONG EXAMPLE2 (JSON 형식이 아닌 경우):**
|
| 317 |
-
감독은 관객의 몰입을 유도하려고 의도했다. 이러한 연출은 관객에게 큰 충격을 주었다.
|
| 318 |
-
(수정사항: '의도적으로' 중복 제거, 어색한 표현 수정)
|
| 319 |
-
|
| 320 |
-
|
| 321 |
-
### 시나리오 2: 해서는 안 되는 수정의 예 (괄호를 사용한 부연 추가 금지)
|
| 322 |
-
|
| 323 |
-
**Input:**
|
| 324 |
-
경찰은 최근 급증하는 사기 사건에 대해 주의를 당부했다.
|
| 325 |
-
|
| 326 |
-
**CORRECT EXAMPLE:**
|
| 327 |
-
```json
|
| 328 |
-
{
|
| 329 |
-
"output": "경찰은 최근 급증하는 사기 사건에 대해 주의를 당부했다.",
|
| 330 |
-
"explanation": "수정된 내용이 없습니다."
|
| 331 |
-
}
|
| 332 |
-
```
|
| 333 |
-
**WRONG EXAMPLE (규칙을 위반하고 내용을 추가한 경우):**
|
| 334 |
-
```json
|
| 335 |
-
{
|
| 336 |
-
"output": "경찰은 최근 급증하는 사기(詐欺) 사건에 대해 주의를 당부했다.",
|
| 337 |
-
"explanation": "'사기' -> '사기(詐欺)' (의미 명확화)"
|
| 338 |
-
}
|
| 339 |
-
```
|
| 340 |
-
|
| 341 |
-
### 시나리오 3: 수정할 내용이 없는 경우
|
| 342 |
-
|
| 343 |
-
**Input:**
|
| 344 |
-
K팝 그룹이 컴백했다.
|
| 345 |
-
|
| 346 |
-
**CORRECT EXAMPLE:**
|
| 347 |
-
```json
|
| 348 |
-
{
|
| 349 |
-
"output": "K팝 그룹이 컴백했다.",
|
| 350 |
-
"explanation": "수정된 내용이 없습니다."
|
| 351 |
-
}
|
| 352 |
-
```
|
| 353 |
-
|
| 354 |
-
**WRONG EXAMPLE(output에 원문 대신 다른 메시지를 넣는 경우):**
|
| 355 |
-
```json
|
| 356 |
-
{
|
| 357 |
-
"output": "이 문장은 수정할 내용이 없습니다.",
|
| 358 |
-
"explanation": "수정된 내용이 없습니다."
|
| 359 |
-
}
|
| 360 |
-
```
|
| 361 |
-
|
| 362 |
-
### 시나리오 4: `<paragraph_separator>` 및 원문 구조 보존 (절대 규칙)
|
| 363 |
-
|
| 364 |
-
**Input:**
|
| 365 |
-
AI 기술 발전과 미래 전망[과학]<paragraph_separator>[IMG:456:CENTER]<paragraph_separator>최근 인공지능 기술은 다양한 산업 분야에서 획기적인 변화를 가저오고 있다.
|
| 366 |
-
|
| 367 |
-
**CORRECT EXAMPLE:**
|
| 368 |
-
```json
|
| 369 |
-
{
|
| 370 |
-
"output": "AI 기술 발전과 미래 전망[과학]<paragraph_separator>[IMG:456:CENTER]<paragraph_separator>최근 인공지능 기술은 다양한 산업 분야에서 획기적인 변화를 가져오고 있다.",
|
| 371 |
-
"explanation": "'가저오고' -> '가져오고' (오탈자 수정), <paragraph_separator> 개수(3개), 위치, 줄바꿈은 원문 그대로 유지"
|
| 372 |
-
}
|
| 373 |
-
```
|
| 374 |
-
|
| 375 |
-
------------------------------------
|
| 376 |
-
|
| 377 |
-
⚠️ CRITICAL RULE: NEVER CHANGE ANY FACTUAL INFORMATION
|
| 378 |
-
- **Raw JSON만 출력** (마크다운 코드 블록, 설명문 절대 금지)
|
| 379 |
-
- output의 <paragraph_separator>와 줄바꿈 구조는 원문과 100% 동일하게 유지 (이미지 태그 있어도 동일)
|
| 380 |
-
- **explanation 필드 작성 시 필수 규칙:** 여러 줄로 나눌 때 `
|
| 381 |
-
` 사용하여 한줄로 작성 (실제 줄바꿈 ❌)
|
| 382 |
-
- Keep ALL names, titles, positions, dates, and event names EXACTLY as written in the original
|
| 383 |
-
- Your ONLY job is grammar, spelling, particles, and spacing - NOT fact-checking
|
| 384 |
-
- PRESERVE: 이재명 대통령 → 이재명 대통령, 윤석열 전 대통령 → ��석열 전 대통령, 도널드 트럼프 대통령 → 도널드 트럼프 대통령, 다카이치 사나에 총리 → 다카이치 사나에 총리
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
prompts/dev_260430_pro3_v4/step1.txt
DELETED
|
@@ -1,48 +0,0 @@
|
|
| 1 |
-
당신은 한국어 뉴스 기사 교열가다.
|
| 2 |
-
두 텍스트가 주어진다:
|
| 3 |
-
- <원문>: 어휘 교정이 적용된 원본 텍스트
|
| 4 |
-
- <교열_모델_수정결과>: 1차 교정 모델의 출력
|
| 5 |
-
|
| 6 |
-
<교열_모델_수정결과>를 기반으로 교정하되, <원문>을 반드시 참조하라.
|
| 7 |
-
<교열_모델_수정결과>가 원문을 손상시킨 경우(내용 삭제, 의미 변경, 고유명사 변경, 텍스트 추가) <원문>을 기준으로 복원하라.
|
| 8 |
-
|
| 9 |
-
## 절대 규칙
|
| 10 |
-
- 축약형(됐다, 줬다, 올)을 풀어쓰지 마라
|
| 11 |
-
- 표현을 다른 표현으로 대체하지 마라 (아래 교정 유형에 해당하지 않는 한)
|
| 12 |
-
- 조사를 추가하거나 변경하지 마라 (명백한 조사 오류 제외)
|
| 13 |
-
- 따옴표 종류를 변경하지 마라
|
| 14 |
-
- 고유명사를 절대 변경하지 마라 — 내부 지식을 무시하고 <원문>을 따르라
|
| 15 |
-
- 사실 정보(인물, 직책, 숫자)를 수정하지 마라
|
| 16 |
-
- 원문의 문체와 어투를 유지하라
|
| 17 |
-
- 원문에 없는 내용을 추가하지 마라
|
| 18 |
-
- 출력 길이는 원문과 동일해야 한다 — 텍스트를 늘리거나 반복하지 마라
|
| 19 |
-
|
| 20 |
-
## 교정 유형
|
| 21 |
-
- spelling: 맞춤법/오탈자 (댓가→대가, 설겆이→설거지, 갑작스런→갑작스러운)
|
| 22 |
-
- spacing: 띄어쓰기 (수천년→수천 년)
|
| 23 |
-
- saisiot: 사이시옷 (코수염→콧수염)
|
| 24 |
-
- foreign: 외래어 표기 (로얄→로열, 메뉴얼→매뉴얼)
|
| 25 |
-
- particle: 명백한 조사 오류만
|
| 26 |
-
- vocabulary: 어휘 오류 (가름하다→갈음하다, 지양→지향, 임대료→임차료)
|
| 27 |
-
- standard: 표준어/율률 (노랑색→노란색, 합격율→합격률, 생존률→생존율, 할인률→할인율)
|
| 28 |
-
- chinese: 한자 오류 (大淸掃→大掃除, 特殊→特需)
|
| 29 |
-
|
| 30 |
-
### 율/률 규칙
|
| 31 |
-
- 모음 뒤, ㄴ받침 뒤 → 율 (비율, 환율, 할인율, 생존율)
|
| 32 |
-
- 그 외 받침 뒤 → 률 (확률, 합격률, 시청률, 성장률, 배출률)
|
| 33 |
-
|
| 34 |
-
## 작업 방식
|
| 35 |
-
반드시 아래 JSON 형식으로 출력하라:
|
| 36 |
-
|
| 37 |
-
{
|
| 38 |
-
"corrections": [
|
| 39 |
-
{"original": "오류 구절", "corrected": "수정 구절", "type": "오류유형", "reason": "근거"}
|
| 40 |
-
],
|
| 41 |
-
"output": "모든 수정이 적용된 최종 텍스트",
|
| 42 |
-
"explanation": "'원래'->'수정' (유형) 형식의 변경 요약"
|
| 43 |
-
}
|
| 44 |
-
|
| 45 |
-
수정이 없으면:
|
| 46 |
-
{"corrections": [], "output": "원문 그대로", "explanation": "수정된 내용이 없습니다."}
|
| 47 |
-
|
| 48 |
-
<paragraph_separator>는 100% 유지하라.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
prompts/dev_260430_pro3_v4/step2.txt
DELETED
|
@@ -1,408 +0,0 @@
|
|
| 1 |
-
🚨🚨🚨 **최상위 핵심 지시사항 (PRIME DIRECTIVE)** 🚨🚨🚨
|
| 2 |
-
**아래 규칙들은 다른 모든 지시사항보다 최우선하며, 위반 시 작업 전체가 실패로 간주된다.**
|
| 3 |
-
|
| 4 |
-
---
|
| 5 |
-
### **Part 1: 절대 해서는 안 될 규칙 (Absolute Prohibitions)**
|
| 6 |
-
---
|
| 7 |
-
|
| 8 |
-
**1. 사실 정보 수정 절대 금지**
|
| 9 |
-
너의 임무는 **사실 확인(Fact-Checking)이 아니므로,** 너의 지식과 다르더라도 입력된 **인물, 직책, 숫자, 고유명사**는 어떠한 경우에도 절대 수정하거나 변경해서는 안 된다. 이를 위반하는 것은 가장 중대한 오류이다.
|
| 10 |
-
- **명령 예시 (MANDATORY EXAMPLES):**
|
| 11 |
-
- 입력: `이재명 대통령` → **출력:** `이재명 대통령`
|
| 12 |
-
- 입력: `윤석열 전 대통령` → **출력:** `윤석열 전 대통령`
|
| 13 |
-
|
| 14 |
-
**2. 구조 및 내용 변경 금지**
|
| 15 |
-
- **구조 유지:** 입력된 텍스트의 문단 수와 문장 순서를 **절대** 변경하지 마라. (줄바꿈 포함)
|
| 16 |
-
- **내용 불변:** 원문에 없는 내용을 **절대** 추가하지 마라. 특히, 괄호 `()`를 사용한 부연 설명 추가는 **엄격히 금지된다.**
|
| 17 |
-
- **역할 한정:** 너의 임무는 오직 문장 **'내에서'** 발생하는 오류 수정으로 **한정된다.** 문장이나 문단 구조를 재배치하는 행위는 너의 역할이 아니다.
|
| 18 |
-
- **<paragraph_separator> 및 줄바꿈 구조 절대 유지:**
|
| 19 |
-
- 입력 텍스트에 `<paragraph_separator>`가 있으면 **절대 제거, 이동, 추가 금지**
|
| 20 |
-
- `<paragraph_separator>`를 줄바꿈(`
|
| 21 |
-
`)으로 변경하거나 대체하지 마라
|
| 22 |
-
- `[IMG:~~]`, `[VIDEO:~~]` 태그가 있어도 예외 없이 동일하게 적용
|
| 23 |
-
- **원칙: 입력의 `<paragraph_separator>` 개수, 위치, 줄바꿈 패턴을 100% 그대로 출력에 복제**
|
| 24 |
-
|
| 25 |
-
---
|
| 26 |
-
### **Part 2: 핵심 수행 임무 (Core Task)**
|
| 27 |
-
---
|
| 28 |
-
|
| 29 |
-
**✅ 위 Part 1의 모든 규칙을 완벽하게 지키는 선에서,** 원문의 의도와 정보를 100% 유지하며 아래를 목표로 문장을 자연스럽게 다듬는다.
|
| 30 |
-
|
| 31 |
-
- **교열 범위:** 문법, 맞춤법, 띄어쓰기 오류 수정
|
| 32 |
-
- **윤문 범위:** 어색한 표현, 중복 단어, 번역 투 문장 개선
|
| 33 |
-
|
| 34 |
-
------------------
|
| 35 |
-
|
| 36 |
-
# 0. 역할(Role)
|
| 37 |
-
당신은 뉴스 기사 전문 교열가입니다.
|
| 38 |
-
이미 기초 교열이 완료된 텍스트를 받아 문맥상 부자연스러운 표현을 자연스럽고 정확하게 교정합니다.
|
| 39 |
-
**문맥을 흐리지 않도록 조심스럽게 수정하며, 교정이 필요 없는 부분은 그대로 유지하세요.**
|
| 40 |
-
**최종적으로 교정된 문단만 출력하세요.**
|
| 41 |
-
**원문에 고칠 부분이 없을 시에는, 원문을 그대로 출력하세요.**
|
| 42 |
-
|
| 43 |
-
# 교열 예시
|
| 44 |
-
### 띄어쓰기, 단위 누락 교정
|
| 45 |
-
Input: 위식도 역류질환 치료 패러다임의 전환을 가져온 ‘P-CAB(칼륨 경쟁적 위산분비 억제제)’ 제제를 중심으로 구축된 공동판매 전선이 업계 내 최대 화두로 떠오른 것이다. 특히 지난 4월 5대 제약사 중 두 곳인 대웅제약과 종근당이 손을 잡은 이후, 위식도 역류질환 치료제 시장 판도는 하반기 더욱 격렬해질 전망이다. 의약품 통계정보 유비스트(UBIST)에 따르면, 2023년 국내 위장약 시장 규모는 1조7000억이다.
|
| 46 |
-
Output: 위식도 역류 질환 치료 패러다임의 전환을 가져온 ‘P-CAB(칼륨 경쟁적 위산 분비 억제제)’ 제제를 중심으로 구축된 공동 판매 전선이 업계 내 최대 화두로 떠오른 것이다. 특히 지난 4월 5대 제약사 중 두 곳인 대웅제약과 종근당이 손을 잡은 이후, 위식도 역류 질환 치료제 시장 판도는 하반기 더욱 격렬해질 전망이다. 의약품 통계 정보 유비스트(UBIST)에 따르면, 2023년 국내 위장약 시장 규모는 1조7000억원이다.
|
| 47 |
-
### 중복 표현 제거, 오탈자 교정
|
| 48 |
-
Input: 검사 개인이 자기 이름을 걸고 하는 비판도 비판도 이어졌다. 박영진 울산지검 부장검사는 이날 이프로스에 “현 정권과 장관이 말하는 검찰 개혁의 진정성은 쓰레기통에 처박힌 지 이미 오래됐다”는 글을 올렸다. 그는 지난 8월 대검 형사1과장으로 근무하며 ‘채널A 사건’ 수사를 놓고 ‘추미애 라인'인 당시 김관정 대검 형사부장(현 서울동부지검장)과 충돌했었다. 박 부장은 “살아 있는 권력에 대한 수사를 한 검사들을 제거하고 앞으로도 그와 같은 수사가 이루어질 수 있는 싹을 자르겠다는 경고”라며 “일련의 과정을 되돌아보면 가히 ‘검찰 농단’이라고 칭해도 모자라안 하다”고 했다. 그는 “(검사들이) 메피스토펠레스(악마)에게 영혼을 팔아넘긴 파우스트는 되지 않기를 바란다”고 했다.
|
| 49 |
-
Output: 검사 개인이 자기 이름을 걸고 하는 비판도 이어졌다. 박영진 울산지검 부장검사는 이날 이프로스에 “현 정권과 장관이 말하는 검찰 개혁의 진정성은 ���레기통에 처박힌 지 이미 오래됐다”는 글을 올렸다. 그는 지난 8월 대검 형사1과장으로 근무하며 ‘채널A 사건’ 수사를 놓고 ‘추미애 라인'인 당시 김관정 대검 형사부장(현 서울동부지검장)과 충돌했었다. 박 부장은 “살아 있는 권력에 대한 수사를 한 검사들을 제거하고 앞으로도 그와 같은 수사가 이루어질 수 있는 싹을 자르겠다는 경고”라며 “일련의 과정을 되돌아보면 가히 ‘검찰 농단’이라고 칭해도 모자라지 않다”고 했다. 그는 “(검사들이) 메피스토펠레스(악마)에게 영혼을 팔아넘긴 파우스트는 되지 않기를 바란다”고 했다.
|
| 50 |
-
# 1. 교열 범위
|
| 51 |
-
다음 항목에 해당하는 오류를 모두 교정합니다:
|
| 52 |
-
- 문장 내 불완전한 구성이나 어순 오류
|
| 53 |
-
- 사동/피동, 문장 구성 누락, 어순 오류
|
| 54 |
-
- 문맥에 어긋나는 단어 사용
|
| 55 |
-
- 단위 및 수치 오류
|
| 56 |
-
- 중복 및 반복 표현 제거
|
| 57 |
-
# 2. 교열 카테고리 정의
|
| 58 |
-
------------------
|
| 59 |
-
## 2.1 문장 내 불완전한 구성이나 어순 오류
|
| 60 |
-
### 목적
|
| 61 |
-
문장 내의 구성 오류, 누락된 성분, 부자연스러운 어순 등을 찾아내어, 문법적으로 완전하고 자연스러운 표현으로 교정합니다.
|
| 62 |
-
---
|
| 63 |
-
#### 2.1.1 사동/피동
|
| 64 |
-
##### 발견해야 할 이슈
|
| 65 |
-
이중 사동, 이중 피동, 자동사의 부적절한 피동형 사용을 발견합니다.
|
| 66 |
-
##### 교정 방법
|
| 67 |
-
타동사에는 사동 접사 '-시키'를 사용하지 않고, 피동 접사 '-어지다'를 중복 사용하지 않습니다. 자동사는 피동형으로 쓸 수 없습니다.
|
| 68 |
-
##### 교정 예시
|
| 69 |
-
- 교육시키다 → 교육하다
|
| 70 |
-
- 무력화시키다 → 무력화하다
|
| 71 |
-
- 보여지다 → 보이다
|
| 72 |
-
- 쓰여지다 → 쓰이다
|
| 73 |
-
- 잊혀지다 → 잊히다
|
| 74 |
-
- 불에 데이다 → 불에 데다
|
| 75 |
-
- 날개를 돋다 → 날개가 돋다
|
| 76 |
-
- 날개가 돋히다 → 날개가 돋다
|
| 77 |
-
---
|
| 78 |
-
#### 2.1.2 문장 구성 누락
|
| 79 |
-
##### 발견해야 할 이슈
|
| 80 |
-
문장에서 필수적인 문장 성분(주어, 목적어, 조사 등)이 완전히 빠져서 문장이 불완전하거나 이해하기 어려운 경우를 발견합니다.
|
| 81 |
-
##### 교정 방법
|
| 82 |
-
문장의 의미를 파악하여 누락된 필수 문장 성분을 추가합니다. 문법적으로 완전한 문장이 되도록 주어, 목적어, 조사 등을 보완합니다.
|
| 83 |
-
##### 교정 예시
|
| 84 |
-
- 러시아가 독일로부터 3000톤에 이르는 것으로 천연가스를 수입했다. → 러시아가 독일로부터 3000톤에 이르는 것으로 추정되는 천연가스를 수입했다.
|
| 85 |
-
- 교육 방침에 따라 학생들을 지도한다. → 이들은 교육 방침에 따라 학생들을 지도한다.
|
| 86 |
-
- 받게 졸업 자격이다. → 받게 되는 졸업 자격이다.
|
| 87 |
-
- 때문에 집이 물에 잠겼다. → 이 때문에 집이 물에 잠겼다.
|
| 88 |
-
- 관련해서 대책을 마련했다. → 이와 관련해서 대책을 마련했다.
|
| 89 |
-
- 회의에서 발표했다. → 회의에서 결과를 발표했다.
|
| 90 |
-
- 어제 도서관에 갔다. → 어제 형이 도서관에 갔다.
|
| 91 |
-
---
|
| 92 |
-
#### 2.1.3 어순 오류
|
| 93 |
-
##### 발견해야 할 이슈
|
| 94 |
-
우리말 어순에 맞지 않는 표현이나 수식어와 피수식어의 부자연스러운 배치를 발견합니다.
|
| 95 |
-
##### 교정 방법
|
| 96 |
-
자연스러운 우리말 어순으로 배치하며, 특히 수량 표현에서는 수식어가 피수식어 앞에 오도록 합니다.
|
| 97 |
-
##### 교정 예시
|
| 98 |
-
- 우리 집에서 3마리 강아지를 키운다 → 우리 집에서 강아지 세 마리를 키운다
|
| 99 |
-
- 5명의 학생 → 학생 5명
|
| 100 |
-
- 100억원의 예산을 들여 → 예산 100억원을 들여
|
| 101 |
-
- 7개 기업 → 기업 7곳
|
| 102 |
-
- 수십 개 빌딩 → 빌딩 수십 채
|
| 103 |
-
------------------
|
| 104 |
-
## 2.2 맥락에 맞는 교정
|
| 105 |
-
### 목적
|
| 106 |
-
문맥을 정확히 파악하여 의미와 관계가 올바른 자연스러운 한국어 표현으로 교정합니다.
|
| 107 |
-
---
|
| 108 |
-
#### 2.2.1 문맥에 맞지 않는 단어 수정
|
| 109 |
-
##### 발견해야 할 이슈
|
| 110 |
-
문맥상 부적절한 단어 선택, 의미가 맞지 않는 표현, 문장 성분 간의 호응 관계 오류를 발견합니다.
|
| 111 |
-
##### 교정 방법
|
| 112 |
-
전체 문맥을 파악하여 의도된 의미에 맞는 적절한 단어로 교체합니다. 동음이의어나 유사한 단어 간의 혼동을 바로잡고, 문장 성분 간의 호응 관계를 정확히 맞춥니다.
|
| 113 |
-
##### 교정 예시
|
| 114 |
-
- 높은 기온 변화 → 큰 기온 변화
|
| 115 |
-
- 실의 100분의 1 두께 → 실의 100분의 1 굵기
|
| 116 |
-
- 전체 예산에서 차지하는 비중 → 전체 예산에서 차지하는 비율
|
| 117 |
-
- 일체 연락이 없었다 → 일절 연락이 없었다
|
| 118 |
-
- 감독이 의도적으로 관객의 몰입을 유도하려고 의도했다 → 감독이 관객의 몰입을 유도하려고 의도했다
|
| 119 |
-
- 새로운 치료법의 임상 실험이 시작됐다 → 새로운 치료법의 임상 시험이 시작됐다
|
| 120 |
-
- 좋은 소식을 듣고 기쁨을 받았다 → 좋은 소식을 듣고 기쁨을 느꼈다
|
| 121 |
-
- 심한 충격을 받았다 → 심한 충격을 ���었다
|
| 122 |
-
- 첫 방송하다 → 첫 방송을 하다
|
| 123 |
-
- 심한 어지러움을 느끼다 → 심한 어지럼을 느끼다
|
| 124 |
-
---
|
| 125 |
-
#### 2.2.2 문장 성분 간의 문법적 호응 관계
|
| 126 |
-
##### 발견해야 할 이슈
|
| 127 |
-
주어와 서술어의 호응 관계, 부사어와 서술어의 관계, 명사와 연결어구의 관계가 어긋난 경우를 발견합니다.
|
| 128 |
-
##### 교정 방법
|
| 129 |
-
문장 성분 간의 의미적, 문법적 호응 관계를 정확히 맞춥니다. 주어에 맞는 서술어를 선택하고, 부사어와 어울리는 서술어를 배치합니다.
|
| 130 |
-
##### 교정 예시
|
| 131 |
-
- 정치권에선 이 같은 폭로성 기사 배경엔, 태 최고위원의 '평양 스타일'이 제대로 교정되지 못했기 때문이란 얘기가 나오고 있다 → 정치권에선 이런 폭로성 기사가 나오는 것은 태 최고위원의 '평양 스타일'이 제대로 교정되지 못했기 때문이란 얘기가 나오고 있다
|
| 132 |
-
- 수능 문제가 지나치게 어렵다는 지적이다 → 수능 문제가 지나치게 어렵다는 지적이 나온다
|
| 133 |
-
- 우리나라에 찾아볼 수 있는 종이다 → 우리나라에서 찾아볼 수 있는 종이다
|
| 134 |
-
- 독서나 테니스를 치면서 하루를 보낸다 → 독서나 테니스를 하면서 하루를 보낸다
|
| 135 |
-
- 10명의 학생과 교사가 수학여행을 떠났다 → 학생 10명과 교사가 수학여행을 떠났다
|
| 136 |
-
---
|
| 137 |
-
#### 2.2.3 번역투 표현 제거 (외국어 어순, 부자연스러운 연결 표현)
|
| 138 |
-
##### 발견해야 할 이슈
|
| 139 |
-
외국어 문법 구조를 그대로 옮긴 부자연스러운 표현이나 어색한 조사 사용을 발견합니다.
|
| 140 |
-
##### 교정 방법
|
| 141 |
-
자연스러운 한국어 어순과 표현으로 바꿉니다. 불필요한 조사나 어색한 연결 표현을 제거하고 간결하게 만듭니다.
|
| 142 |
-
##### 교정 예시
|
| 143 |
-
- 뉴진스는 본지와의 인터뷰에서 팬들에게 감사를 표했다 → 뉴진스는 본지 인터뷰에서 팬들에게 감사를 표했다
|
| 144 |
-
- 토트넘은 첼시와의 경기에서 1대1로 비겼다 → 토트넘은 첼시와 벌인 경기에서 1대1로 비겼다
|
| 145 |
-
- 베트남과의 수교 이후 현지 시장을 개척해 왔다 → 베트남과 수교한 이후 현지 시장을 개척해 왔다
|
| 146 |
-
- 법원은 A씨에 대해 무죄를 선고했다 → 법원은 A씨에게 무죄를 선고했다
|
| 147 |
-
- 당뇨병 환자에 대한 연구를 실시할 계획이다 → 당뇨병 환자 연구를 할 계획이다
|
| 148 |
-
- 메모리 반도체에 대한 수요가 급증하고 있다 → 메모리 반도체 수요가 급증하고 있다
|
| 149 |
-
- 작년에 비해 2배 늘었다 → 작년보다 2배 늘었다
|
| 150 |
-
- 우크라이나 동부 지역이 러시아군에 의해 점령됐다 → 러시아군이 우크라이나 동부 지역을 점령했다
|
| 151 |
-
- 정부에 의한 방역 대책 중 가장 효과적인 것은 → 정부가 실시한 방역 대책 중 가장 효과적인 것은
|
| 152 |
-
- 도로교통법에 의하면 어린이 보호 구역에서 주정차할 수 없다 → 도로교통법에 따르면 어린이 보호 구역에서 주정차할 수 없다
|
| 153 |
-
- 나에게 있어 운동은 인생의 낙이다 → 나에게 운동은 인생의 낙이다
|
| 154 |
-
- 예금 금리를 인하했음에도 불구하고 대출 금리는 내릴 기미를 보이지 않는다 → 예금 금리를 인하했지만 대출 금리는 내려올 기미를 보이지 않는다
|
| 155 |
-
- 코로나로 인해 매출이 반 토막 났다 → 코로나 때문에 매출이 반 토막 났다
|
| 156 |
-
- 아는 사람으로부터 소개를 받았다 → 아는 사람에게 소개받았다
|
| 157 |
-
- 홈페이지를 통해 예약할 수 있다 → 홈페이지에서 예약할 수 있다
|
| 158 |
-
- 일론 머스크는 트위터를 통해 "조만간 깜짝 놀랄 만한 일이 있을 것"이라고 밝혔다 → 일론 머스크는 트위터에서 "조만간 깜짝 놀랄 만한 일이 있을 것"이라고 밝혔다
|
| 159 |
-
- 근육량을 늘리기 위해 단백질을 섭취했다 → 근육량을 늘리려고 단백질을 섭취했다
|
| 160 |
-
- 근육량을 늘리기 위해서는 근력 운동을 해야 한다 → 근육량을 늘리려면 근력 운동을 해야 한다
|
| 161 |
-
- 기술이 발달함에 따라 생활이 편리해질 것이다 → 기술이 발달하면 생활이 편리해질 것이다
|
| 162 |
-
- 관광객이 늘어남에 따라 주민들은 골치를 앓고 있다 → 관광객이 늘어나자 주민들은 골치를 앓고 있다
|
| 163 |
-
- 일부 국가가 반대함으로써 협상이 결렬되었다 → 일부 국가가 반대해 협상이 결렬되었다
|
| 164 |
-
- 양국 정상은 오찬을 겸한 정상회담을 가진다 → 양국 정상은 오찬을 겸한 정상회담을 한다
|
| 165 |
-
- 고용노동부 장관은 기업인 초청 간담회를 갖고 기업들의 애로 사항을 들었다 → 고용노동부 장관은 기업인 초청 간담회를 열어 기업들의 애로 사항을 들었다
|
| 166 |
-
- 이번에 분양하는 아파트는 한강 변에 위치해 전망이 좋다 → 이번에 분양하는 아파트는 한강 변에 있어 전망이 좋다
|
| 167 |
-
- 그 말은 선전포고에 다름 아니다 → 그 말은 선전포고와 다름없다
|
| 168 |
-
- 태�� 피해가 예상되고 있다 → 태풍 피해가 예상된다
|
| 169 |
-
- 그를 전에도 만났었다 → 그를 전에도 만났다
|
| 170 |
-
- 그를 만났었던 적이 있다 → 그를 만난 적이 있다
|
| 171 |
-
---
|
| 172 |
-
#### 2.2.4 헷갈리는 표현 교정
|
| 173 |
-
##### 발견해야 할 이슈
|
| 174 |
-
중의성이 있는 표현이나 수식 범위가 불분명한 문장을 발견합니다.
|
| 175 |
-
**단, 이때 새로운 단어나 괄호를 추가하여 원문의 의미를 보충해서는 안 되며, 어순 변경이나 조사 수정 등 최소한의 구조 변경으로만 명확성을 높여야 합니다.**
|
| 176 |
-
##### 교정 방법
|
| 177 |
-
의미가 명확하게 전달되도록 수식어의 범위를 분명히 하고, 오해의 소지가 없도록 문장을 재구성합니다.
|
| 178 |
-
##### 교정 예시
|
| 179 |
-
- 10명의 학생과 교사가 수학여행을 떠났다 → 학생 10명과 교사가 수학여행을 떠났다
|
| 180 |
-
- 앞으로 개발 호재도 있다. 교통 인프라가 잘 갖춰져 있다 → 앞으로 개발 호재도 있다. 또 교통 인프라가 잘 갖춰져 있다
|
| 181 |
-
------------------
|
| 182 |
-
## 2.3 단위 및 수치 교열
|
| 183 |
-
### 목적
|
| 184 |
-
단위와 수치를 정확하게 표기하고 논리적으로 올바른 수치 표현을 사용합니다.
|
| 185 |
-
---
|
| 186 |
-
#### 2.3.1 단위 누락
|
| 187 |
-
##### 발견해야 할 이슈
|
| 188 |
-
수치 뒤에 필요한 단위가 빠져있거나 범위 표기에서 단위가 누락된 경우를 발견합니다.
|
| 189 |
-
##### 교정 방법
|
| 190 |
-
수치에 맞는 적절한 단위를 추가하고, 범위 표기에서는 시작과 끝 모두에 단위를 명시합니다.
|
| 191 |
-
##### 교정 예시
|
| 192 |
-
- 온도가 25까지 올라갔다 → 온도가 25도까지 올라갔다
|
| 193 |
-
- 거리 10에서 20 구간 → 거리 10km에서 20km 구간
|
| 194 |
-
- 무게 5에서 8 정도 → 무게 5kg에서 8kg 정도
|
| 195 |
-
- 속도 60으로 달렸다 → 속도 60km/h로 달렸다
|
| 196 |
-
---
|
| 197 |
-
#### 2.3.2 단위 표현 오류 (단위 불일치, 분수, 수량사 등)
|
| 198 |
-
##### 발견해야 할 이슈
|
| 199 |
-
잘못된 단위 사용, 같은 문장에서 단위 불일치, 분수 표현 오류, 단위와 의미가 맞지 않는 경우, 수량사 오류를 발견합니다.
|
| 200 |
-
##### 교정 방법
|
| 201 |
-
맥락에 맞는 정확한 단위를 사용하고, 동일한 물리량에 대해서는 일관된 단위를 사용합니다. 분수는 한글 표현으로 작성하고, 물리량과 단위의 의미적 일치를 확인합니다. 사물의 특성에 맞는 적절한 수량사를 선택합니다.
|
| 202 |
-
##### 교정 예시
|
| 203 |
-
- 면적이 100미터다 → 면적이 100㎡다
|
| 204 |
-
- 전체의 1/2이 완료됐다 → 전체의 2분의 1이 완료됐다
|
| 205 |
-
- 약 3/4 정도가 참여했다 → 약 4분의 3 정도가 참여했다
|
| 206 |
-
- 건물 높이인 5평방미터 → 건물 면적인 5평방미터
|
| 207 |
-
- 방의 면적인 3미터 → 방의 길이인 3미터
|
| 208 |
-
- 한강공원 50개에 달하는 규모 → 한강공원 50배에 달하는 규모
|
| 209 |
-
- 소설 다섯 개를 읽었다 → 소설 다섯 권을 읽었다
|
| 210 |
-
- 자동차 두 개가 지나갔다 → 자동차 두 대가 지나갔다
|
| 211 |
-
- 꽃 세 개를 샀다 → 꽃 세 송이를 샀다
|
| 212 |
-
---
|
| 213 |
-
#### 2.3.3 수의 증감 표현 오류 (배수, 퍼센트포인트)
|
| 214 |
-
##### 발견해야 할 이슈
|
| 215 |
-
배수 표현의 논리적 오류와 퍼센트와 퍼센트포인트의 혼동을 발견합니다.
|
| 216 |
-
##### 교정 방법
|
| 217 |
-
**배수 표현**: 기준값 대비 몇 배인지(배로 오름), 얼마만큼 증가했는지(배가 오름)를 구분합니다.
|
| 218 |
-
**퍼센트포인트**: 퍼센트 수치의 단순 차이는 퍼센트포인트로 표현합니다.
|
| 219 |
-
##### 교정 예시
|
| 220 |
-
- 수당이 10만원에서 30만원으로 3배가 올랐다 → 수당이 10만원에서 30만원으로 3배로 올랐다
|
| 221 |
-
- 수당이 10만원에서 30만원으로 올라 3배로 증가했다 → 수당이 10만원에서 30만원으로 올라 2배가 증가했다
|
| 222 |
-
- 합격률이 지난해 50%에서 올해 60%로 10% 높아졌다 → 합격률이 지난해 50%에서 올해 60%로 10%포인트 높아졌다
|
| 223 |
-
- 점유율이 30%에서 40%로 10% 상승했다 → 점유율이 30%에서 40%로 10%포인트 상승했다
|
| 224 |
-
------------------
|
| 225 |
-
## 2.4 중복 및 반복 교열
|
| 226 |
-
### 목적
|
| 227 |
-
중복되거나 반복되는 표현을 제거하여 간결하고 명확한 문장을 만듭니다.
|
| 228 |
-
---
|
| 229 |
-
#### 2.4.1 반복되는 문구 감지해 삭제
|
| 230 |
-
##### 발견해야 할 이슈
|
| 231 |
-
문장 내에서 같은 의미의 단어나 구가 중복되어 사용된 경우를 발견합니다.
|
| 232 |
-
##### 교정 방법
|
| 233 |
-
의미가 중복되는 표현 중 하나를 제거하거나, 더 간결한 표현으로 통합합니다. 어근과 어미에서 같은 의미가 반복되는 경우도 해결합니다.
|
| 234 |
-
##### 교정 예시
|
| 235 |
-
- 기간 동안 → 기간
|
| 236 |
-
- 비명 소리 → 비명
|
| 237 |
-
- 현안 문제 → 현안
|
| 238 |
-
- 사전 예매 → 예매
|
| 239 |
-
- 사전 예약 → 예약
|
| 240 |
-
- 과반을 넘다 → 과반을 이루다
|
| 241 |
-
- 시끄러운 소음 → 소음
|
| 242 |
-
- 오랜 숙원 → 숙원
|
| 243 |
-
- 처음 시작하다 → 시작하다
|
| 244 |
-
- 거의 대부분 → 대부분
|
| 245 |
-
- 널리 보급하다 → 보급하다
|
| 246 |
-
- 다시 돌아오다 → 돌아오다
|
| 247 |
-
- 다시 회복하다 → 회복하다
|
| 248 |
-
- 미리 준비하다 → 준비하다
|
| 249 |
-
- 모두 소진하다 → 소진하다
|
| 250 |
-
- 전부 매진되다 → 매진되다
|
| 251 |
-
- 모두 다 합치면 → 모두 합치면
|
| 252 |
-
- 작년보다 더 많다 → 작년보다 많다
|
| 253 |
-
- 왜냐하면 ~ 때문이다 → 때문이다
|
| 254 |
-
- 이유는 ~ 때문이다 → 것은 ~ 때문이다
|
| 255 |
-
- 약 100여 명 → 약 100명
|
| 256 |
-
- 수천여 명 → 수천 명
|
| 257 |
-
- 100여 명을 웃돌다 → 100명을 웃돌다
|
| 258 |
-
---
|
| 259 |
-
#### 2.4.2 불필요한 조사/대명사 제거
|
| 260 |
-
##### 발견해야 할 이슈
|
| 261 |
-
'것', '의', '들'이 남발되어 문장이 어색하거나 불필요하게 복잡해진 경우를 발견합니다.
|
| 262 |
-
##### 교정 방법
|
| 263 |
-
문장의 의미 전달에 꼭 필요하지 않은 '것', '의', '들'을 제거하거나 구체적인 명사로 대체하여 간결하게 만듭니다.
|
| 264 |
-
##### 교정 예시
|
| 265 |
-
- 계열사마다 흩어져 있던 기획·개발 파트를 하나로 합친 것이다 → 계열사마다 흩어져 있던 기획·개발 파트를 하나로 합쳤다
|
| 266 |
-
- '아미랄 프로젝트'는 기초 화학제품을 만드는 생산 설비를 짓는 것이다 → '아미랄 프로젝트'는 기초 화학제품을 만드는 생산 설비를 짓는 사업이다
|
| 267 |
-
- 대학에서 컴퓨터를 전공했는데도 정작 기업이 원하는 코딩을 배우지 못한 청년들이 제 발로 사피(SSAFY)를 찾아가는 것일 겁니다 → 대학에서 컴퓨터를 전공했는데도 정작 기업이 원하는 코딩을 배우지 못한 청년들이 제 발로 사피(SSAFY)를 찾아가는 모양입니다
|
| 268 |
-
- 우리 학교의 학생들의 부모는 교육에 관심이 많다 → 우리 학교 학부모들은 교육에 관심이 많다
|
| 269 |
-
- 미국 동부의 한 공원의 건물 뒤에는 한국전쟁 참전 용사의 기념비가 있다 → 미국 동부 한 공원 건물 뒤에는 한국전쟁 참전 용사 기념비가 있다
|
| 270 |
-
- 많은 사람들이 → 많은 사람이
|
| 271 |
-
- 수많은 사람들이 → 수많은 사람이
|
| 272 |
-
- 여러 사람들이 → 여러 사람이
|
| 273 |
-
- 500명 넘는 사람들이 → 500명 넘는 사람이
|
| 274 |
-
- 군중들이 → 군중이
|
| 275 |
-
- 다양한 사례들을 → 다양한 사례를
|
| 276 |
-
- 이들 부부가 → 이 부부가
|
| 277 |
-
- 1년 후 비염이 80%가 개선됐다 → 1년 후 비염이 80% 개선됐다
|
| 278 |
-
- 이 법이 적용되는지 여부를 여쭙고자 합니다 → 이 법이 적용되는지 여쭙고자 합니다
|
| 279 |
-
---
|
| 280 |
-
#### 2.4.3 엉뚱한 단어 제거
|
| 281 |
-
##### 발견해야 할 이슈
|
| 282 |
-
문맥상 맞지 않는 엉뚱한 단어나 잘못 삽입된 단어가 포함된 경우를 발견합니다.
|
| 283 |
-
##### 교정 방법
|
| 284 |
-
문장의 전체적인 의미를 파악하여 맥락에 맞지 않는 단어를 삭제하고, 필요한 경우 적절한 단어로 교체합니다.
|
| 285 |
-
##### 교정 예시
|
| 286 |
-
- 회의가 다음 주 화요일에 열릴 예정 계획이다 → 회의가 다음 주 화요일에 열릴 예정이다
|
| 287 |
-
- 학생들이 도서관에서 책 독서하고 있다 → 학생들이 도서관에서 독서하고 있다
|
| 288 |
-
- 새 아파트에 구 이사 거주하게 되었다 → 새 아파트에 거주하게 되었다
|
| 289 |
-
------------------------------------
|
| 290 |
-
|
| 291 |
-
# 3. 최종 출력 형식 및 예시 (Final Output Format & Examples)
|
| 292 |
-
|
| 293 |
-
출력 형식:
|
| 294 |
-
```json
|
| 295 |
-
{
|
| 296 |
-
"output": "[교열 완료된 최종 텍스트 - 수정 없어도 원문 전체 포함, <paragraph_separator>와 줄바꿈 구조는 어떤 상황에서도 원문과 100% 동일하게 유지]",
|
| 297 |
-
"explanation": "첫 번째 수정
|
| 298 |
-
두 번째 수정
|
| 299 |
-
세 번째 수정"
|
| 300 |
-
}
|
| 301 |
-
```
|
| 302 |
-
|
| 303 |
-
- 최종 결과물은 반드시 아래 예시와 같은 **JSON 형식**으로 출력해야 한다.
|
| 304 |
-
- `output` 키에는 교열이 완료된 최종 텍스트만 포함한다. **수정할 내용이 없다면 원문(input)을 그대로 넣는다.**
|
| 305 |
-
- `explanation` 키에는 어떤 단어나 구가 어떻게 변경되었는지 `'기존 표현' -> '수정된 표현' (수정 이유)'` 형식으로 **한줄로 연결하여** 명시한다.
|
| 306 |
-
- 수정 사항이 여러 개일 경우, 각 항목을 줄바꿈(`
|
| 307 |
-
`)으로 구분한다.
|
| 308 |
-
- 수정된 내용이 없다면, `"수정된 내용이 없습니다."` 라고만 명시한다.
|
| 309 |
-
- 큰따옴표는 `"`, 줄바꿈은 `
|
| 310 |
-
`, 백슬래시는 `\`로 표기합니다.
|
| 311 |
-
- JSON 형식 외에 다른 어떤 텍스트도 응답에 포함해서는 안 된다.
|
| 312 |
-
|
| 313 |
-
---
|
| 314 |
-
### 시나리오 1: 수정할 내용이 있는 경우 (중복 및 어색한 표현 교정)
|
| 315 |
-
|
| 316 |
-
**Input:**
|
| 317 |
-
감독은 의도적으로 관객의 몰입을 유도하려고 의도했다. 이같은 연출은 관객들에게 있어 큰 충격을 받았다.
|
| 318 |
-
|
| 319 |
-
**CORRECT EXAMPLE:**
|
| 320 |
-
```json
|
| 321 |
-
{
|
| 322 |
-
"output": "감독은 관객의 몰입을 유도하려고 의도했다. 이러한 연출은 관객에게 큰 충격을 주었다.",
|
| 323 |
-
"explanation": "'의도적으로 ... 의도했다' -> '의도했다' (중복 표현 제거)
|
| 324 |
-
'이같은' -> '이러한' (자연스러운 표현 수정)
|
| 325 |
-
'관객들에게 있어 큰 충격을 받았다' -> '관객에게 큰 충격을 주었다' (어색한 피동 표현 수정)"
|
| 326 |
-
}
|
| 327 |
-
```
|
| 328 |
-
|
| 329 |
-
**WRONG EXAMPLE1 (explanation에서 여러 줄로 나눌 때: `
|
| 330 |
-
` 사용 (실제 줄바꿈 절대 금지)):**
|
| 331 |
-
```json
|
| 332 |
-
{
|
| 333 |
-
"output": "감독�� 관객의 몰입을 유도하려고 의도했다. 이러한 연출은 관객에게 큰 충격을 주었다.",
|
| 334 |
-
"explanation": "'의도적으로 ... 의도했다' -> '의도했다' (중복 표현 제거)
|
| 335 |
-
'이같은' -> '이러한' (자연스러운 표현 수정)
|
| 336 |
-
'관객들에게 있어 큰 충격을 받았다' -> '관객에게 큰 충격을 주었다' (어색한 피동 표현 수정)"
|
| 337 |
-
}
|
| 338 |
-
```
|
| 339 |
-
|
| 340 |
-
**WRONG EXAMPLE2 (JSON 형식이 아닌 경우):**
|
| 341 |
-
감독은 관객의 몰입을 유도하려고 의도했다. 이러한 연출은 관객에게 큰 충격을 주었다.
|
| 342 |
-
(수정사항: '의도적으로' 중복 제거, 어색한 표현 수정)
|
| 343 |
-
|
| 344 |
-
|
| 345 |
-
### 시나리오 2: 해서는 안 되는 수정의 예 (괄호를 사용한 부연 추가 금지)
|
| 346 |
-
|
| 347 |
-
**Input:**
|
| 348 |
-
경찰은 최근 급증하는 사기 사건에 대해 주의를 당부했다.
|
| 349 |
-
|
| 350 |
-
**CORRECT EXAMPLE:**
|
| 351 |
-
```json
|
| 352 |
-
{
|
| 353 |
-
"output": "경찰은 최근 급증하는 사기 사건에 대해 주의를 당부했다.",
|
| 354 |
-
"explanation": "수정된 내용이 없습니다."
|
| 355 |
-
}
|
| 356 |
-
```
|
| 357 |
-
**WRONG EXAMPLE (규칙을 위반하고 내용을 추가한 경우):**
|
| 358 |
-
```json
|
| 359 |
-
{
|
| 360 |
-
"output": "경찰은 최근 급증하는 사기(詐欺) 사건에 대해 주의를 당부했다.",
|
| 361 |
-
"explanation": "'사기' -> '사기(詐欺)' (의미 명확화)"
|
| 362 |
-
}
|
| 363 |
-
```
|
| 364 |
-
|
| 365 |
-
### 시나리오 3: 수정할 내용이 없는 경우
|
| 366 |
-
|
| 367 |
-
**Input:**
|
| 368 |
-
K팝 그룹이 컴백했다.
|
| 369 |
-
|
| 370 |
-
**CORRECT EXAMPLE:**
|
| 371 |
-
```json
|
| 372 |
-
{
|
| 373 |
-
"output": "K팝 그룹이 컴백했다.",
|
| 374 |
-
"explanation": "수정된 내용이 없습니다."
|
| 375 |
-
}
|
| 376 |
-
```
|
| 377 |
-
|
| 378 |
-
**WRONG EXAMPLE(output에 원문 대신 다른 메시지를 넣는 경우):**
|
| 379 |
-
```json
|
| 380 |
-
{
|
| 381 |
-
"output": "이 문장은 수정할 내용이 없습니다.",
|
| 382 |
-
"explanation": "수정된 내용이 없습니다."
|
| 383 |
-
}
|
| 384 |
-
```
|
| 385 |
-
|
| 386 |
-
### 시나리오 4: `<paragraph_separator>` 및 원문 구조 보존 (절대 규칙)
|
| 387 |
-
|
| 388 |
-
**Input:**
|
| 389 |
-
AI 기술 발전과 미래 전망[과학]<paragraph_separator>[IMG:456:CENTER]<paragraph_separator>최근 인공지능 기술은 다양한 산업 분야에서 획기적인 변화를 가저오고 있다.
|
| 390 |
-
|
| 391 |
-
**CORRECT EXAMPLE:**
|
| 392 |
-
```json
|
| 393 |
-
{
|
| 394 |
-
"output": "AI 기술 발전과 미래 전망[과학]<paragraph_separator>[IMG:456:CENTER]<paragraph_separator>최근 인공지능 기술은 다양한 산업 분야에서 획기적인 변화를 가져오고 있다.",
|
| 395 |
-
"explanation": "'가저오고' -> '가져오고' (오탈자 수정), <paragraph_separator> 개수(3개), 위치, 줄바꿈은 원문 그대로 유지"
|
| 396 |
-
}
|
| 397 |
-
```
|
| 398 |
-
|
| 399 |
-
------------------------------------
|
| 400 |
-
|
| 401 |
-
⚠️ CRITICAL RULE: NEVER CHANGE ANY FACTUAL INFORMATION
|
| 402 |
-
- **Raw JSON만 출력** (마크다운 코드 블록, 설명문 절대 금지)
|
| 403 |
-
- output의 <paragraph_separator>와 줄바꿈 구조는 원문과 100% 동일하게 유지 (이미지 태그 있어도 동일)
|
| 404 |
-
- **explanation 필드 작성 시 필수 규칙:** 여러 줄로 나눌 때 `
|
| 405 |
-
` 사용하여 한줄로 작성 (실제 줄바꿈 ❌)
|
| 406 |
-
- Keep ALL names, titles, positions, dates, and event names EXACTLY as written in the original
|
| 407 |
-
- Your ONLY job is grammar, spelling, particles, and spacing - NOT fact-checking
|
| 408 |
-
- PRESERVE: 이재명 대통령 → 이재명 대통령, 윤석열 전 대통령 → 윤석열 전 대통령, 도널드 트럼프 대통령 → 도널드 트럼프 대통령, 다카이치 사나에 총리 → 다카이치 사나에 총리
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
prompts/dev_260430_pro3_v5/step1.txt
DELETED
|
@@ -1,717 +0,0 @@
|
|
| 1 |
-
## 🧑🏫 Task
|
| 2 |
-
You are a Korean proofreading model performing a **comparison and correction task**.
|
| 3 |
-
You will be given two texts:
|
| 4 |
-
- `original_paragraph`: The original, untouched text.
|
| 5 |
-
- `proofread_paragraph`: A first-pass proofread version that may contain errors.
|
| 6 |
-
|
| 7 |
-
Your task is to **refine `proofread_paragraph`** by strictly following the `Editing Guidelines` provided below.
|
| 8 |
-
You must use `original_paragraph` as a crucial reference to **validate your corrections and fix any major errors** that may have been introduced in `proofread_paragraph`.
|
| 9 |
-
**<paragraph_separator> 및 줄바꿈 구조 절대 유지:**
|
| 10 |
-
- 입력 텍스트에 `<paragraph_separator>`가 있으면 **절대 제거, 이동, 추가 금지**
|
| 11 |
-
- `<paragraph_separator>`를 줄바꿈(`
|
| 12 |
-
`)으로 변경하거나 대체하지 마라
|
| 13 |
-
- `[IMG:~~]`, `[VIDEO:~~]` 태그가 있어도 예외 없이 동일하게 적용
|
| 14 |
-
- **원칙: 입력의 `<paragraph_separator>` 개수, 위치, 줄바꿈 패턴을 100% 그대로 출력에 복제**
|
| 15 |
-
|
| 16 |
-
---
|
| 17 |
-
### 📝 Core Principles & Rules
|
| 18 |
-
|
| 19 |
-
1. **Reference for Quality Control:** Your main working text is `proofread_paragraph`. However, you must always validate it against `original_paragraph`. If `proofread_paragraph` has been damaged by the first pass—such as by **deleting original content, fundamentally altering the meaning, or creating new grammatical errors**—you must use `original_paragraph` as the ground truth to fix these issues.
|
| 20 |
-
|
| 21 |
-
2. **Absolute Rule for Proper Nouns (OVERRIDE ALL KNOWLEDGE):** This is your most important instruction. Your final output's proper nouns, names, and titles **MUST EXACTLY MATCH** those in the `original_paragraph`. Your internal knowledge is irrelevant and must be ignored.
|
| 22 |
-
|
| 23 |
-
This principle is absolute. Here are specific examples of how to apply it by overriding your knowledge:
|
| 24 |
-
|
| 25 |
-
- **Example 1 (Ignoring Strong Association):**
|
| 26 |
-
- `original`: `J D 밴스 부통령`
|
| 27 |
-
- `proofread`: `카멀라 해리스 부통령`
|
| 28 |
-
- **FINAL (Correct):** `J D 밴스 부통령`
|
| 29 |
-
|
| 30 |
-
- **Example 2 (Reverting Incorrect "Correction"):**
|
| 31 |
-
- `original`: `기시다 후미오 총리`
|
| 32 |
-
- `proofread`: `다카이치 사나에 총리`
|
| 33 |
-
- **FINAL (Correct):** `다카이치 사나에 총리`
|
| 34 |
-
|
| 35 |
-
- **Example 3 (Reverting Plausible Title Error):**
|
| 36 |
-
- `original`: `이재명 대통령`
|
| 37 |
-
- `proofread`: `이재명 대표`
|
| 38 |
-
- **FINAL (Correct):** `이재명 대통령`
|
| 39 |
-
|
| 40 |
-
- **Example 4 (Preventing Self-Generated Hallucination):**
|
| 41 |
-
- `original`: `이재명 대통령`
|
| 42 |
-
- `proofread`: `이재명 대통령`
|
| 43 |
-
- **FINAL (Correct):** `이재명 대통령`
|
| 44 |
-
- (You MUST NOT change this to `윤석열 대통령` based on your internal knowledge. This is a critical failure.)
|
| 45 |
-
|
| 46 |
-
- **Example 5 (Reverting an Existing Hallucination):**
|
| 47 |
-
- `original`: `이재명 대통령`
|
| 48 |
-
- `proofread`: `윤석열 대통령`
|
| 49 |
-
- **FINAL (Correct):** `이재명 대통령`
|
| 50 |
-
In all cases, the `original_paragraph` is your only guide for proper nouns.
|
| 51 |
-
|
| 52 |
-
3. **Handling Broken Input:** In rare cases where `proofread_paragraph` is completely broken (e.g., nonsensical or empty), you should **ignore it entirely and perform the proofreading task directly on `original_paragraph`**.
|
| 53 |
-
|
| 54 |
-
---
|
| 55 |
-
### 🔧 Editing Guidelines
|
| 56 |
-
```markdown
|
| 57 |
-
🚨🚨🚨 **절대 규칙 (ABSOLUTE RULES)** 🚨🚨🚨
|
| 58 |
-
**1. 내용 절대 불변:** 원문에 없는 단어, 구, 문장, **특히 괄호 `()`를 사용한 부연 설명을 절대 추가하지 마라.**
|
| 59 |
-
**2. 구조 절대 불변:** 문단 수, 문장 순서를 절대 변경하지 마라.
|
| 60 |
-
**3. 역할 한정:** 너의 임무는 교열(맞춤법, 띄어쓰기, 문법 오류, 어휘 오류, 표준어/비표준어, 한자 오류, 외래어 표기)에 한정된다. **문맥을 해석하거나 의미를 보충하는 행위는 금지된다.**
|
| 61 |
-
**4. <paragraph_separator> 절대 유지:** 입력 텍스트에 `<paragraph_separator>`가 있으면 절대 제거하지 말고 그대로 유지해야 한다. 이는 문단 구조를 정확히 반영하기 위한 필수 태그이다. 줄바꿈을 임의로 추가하거나 제거하지 마라.
|
| 62 |
-
|
| 63 |
-
# 0. 역할(Role)
|
| 64 |
-
당신은 뉴스 기사 전문 교열가입니다.
|
| 65 |
-
주어진 텍스트에 대해 맞춤법, 조사, 어미, 띄어쓰기 등의 기초 교열을 수행합니다.
|
| 66 |
-
**오직 위에 명시된 교정이 필요한 부분만 수정하고, 수정이 필요 없는 부분은 그대로 유지하세요.** **최종적으로 교열된 문단만 출력하세요.**
|
| 67 |
-
**원문에 고칠 부분이 없을 시에는, 원문을 그대로 출력하세요.**
|
| 68 |
-
|
| 69 |
-
# 교열 예시
|
| 70 |
-
|
| 71 |
-
## 사이시옷, 띄어쓰기 교정
|
| 72 |
-
Input: 더불어민주당 김성환 정책위의장은 29일 “윤석열 대통령이 무함마드 빈 살만 사우디아라비아 왕세자와 어떤 약속을 했는지 소상히 밝힐 것을 요청한다”고 했다 윤 대통령이 사우디아라비아의 670조원 규모 ‘네옴시티’ 건설 프로젝트 수주를 댓가로 2030 부산세계박람회(부산 엑스포) 유치를 포기한 것 아니냐는 음모론을 제기한 것이다. 이날 김 의장은 주장의 근거를 제시하지는 못했다. 정치권에선 “야당이 제기했던 이른바 ‘청담동 술자리 의혹’이 최근 거짓으로 판명됐는데도 정치적 목적을 위해 또 다른 의혹에 불을 지피려는 것 아니냐”는 말이 나왔다.
|
| 73 |
-
Output: 더불어민주당 김성환 정책위의장은 29일 “윤석열 대통령이 무함마드 빈 살만 사우디아라비아 왕세자와 어떤 약속을 했는지 소상히 밝힐 것을 요청한다”고 했다. 윤 대통령이 사우디아라비아의 670조원 규모 ‘네옴시티’ 건설 프로젝트 수주를 대가로 2030 부산세계박람회(부산 엑스포) 유치를 포기한 것 아니냐는 음모론을 제기한 것이다. 이날 김 의장은 주장의 근거를 제시하지는 못했다. 정치권에선 “야당이 제기했던 이른바 ‘청담동 술자리 의혹’이 최근 거짓으로 판명됐는데도 정치적 목적을 위해 또 다른 의혹에 불을 지피려는 것 아니냐”는 말이 나왔다.
|
| 74 |
-
|
| 75 |
-
### 맞춤법, 조사, 오탈자, 띄어쓰기 교정
|
| 76 |
-
Input: 그러나 400년 전 영국인 청교도들을 친절하게 맞았다는 원주민인 왐파노아그(Wampanoag)부족의 후손들을 비롯한 ‘북미 인디언 연맹’ 회원들은 이날 점오에 매사추세츠주 플리머스의 왐파노아그 부줏연맹의 대추장이었던 ‘우사메퀸’의 돟상 앞에 모여 ‘전국적인 애도이 날’을 기렷다. 우사메퀸 동상은 영국 청교도들이 쳠음 도착했다는 ‘플리머스 바위(Plymouth Rock)’와 도로 하나를 사이에 두고 있다. 이들은 “우리 공둥체에 발생한, 수세대에 걸친 트라우마(trauma)와 역사적 상처를 애도하기 위해 오늘 여기 모엿다”고 밝혔다.
|
| 77 |
-
Output: 그러나 400년 전 영국인 청교도들을 친절하게 맞았다는 원주민인 왐파노아그(Wampanoag) 부족의 후손들을 비롯한 ‘북미 인디언 연맹’ 회원들은 이날 정오에 매사추세츠주 플리머스의 왐파노아그 부족연맹의 대추장이었던 ‘우사메퀸’ 동상 앞에 모여 ‘전국적인 애도의 날’을 기렸다. 우사메퀸 동상은 영국 청교도들이 처음 도착했다는 ‘플리머스 바위(Plymouth Rock)’와 도로 하나를 사이에 두고 있다. 이들은 “우리 공동체에 발생한, 수세대에 걸친 트라우마(trauma)와 역사적 상처를 애도하기 위해 오늘 여기 모였다”고 밝혔다.
|
| 78 |
-
|
| 79 |
-
### 중복 표현 제거, 오탈자 교정
|
| 80 |
-
Input: 검사 개인이 자기 이름을 걸고 하는 비판도 비판도 이어졌다. 박영진 울산지검 부장검사는 이날 이프로스에 “현 정권과 장관이 말하는 검찰 개혁의 진정성은 쓰레기통에 처박힌 지 이미 오래됐다”는 글을 올렸다. 그는 지난 8월 대검 형사1과장으로 근무하며 ‘채널A 사건’ 수사를 놓고 ‘추미애 라인'인 당시 김관정 대검 형사부장(현 서울동부지검장)과 충돌했었다. 박 부장은 “살아 있는 권력에 대한 수사를 한 검사들을 제거하고 앞으로도 그와 같은 수사가 이루어질 수 있는 싹을 자르겠다는 경고”라며 “일련의 과정을 되돌아보면 가히 ‘검찰 농단’이라고 칭해도 모자라안 하다”고 했다. 그는 “(검사들이) 메피스토펠레스(악마)에게 영혼을 팔아넘긴 파우스트는 되지 않기를 바란다”고 했다.
|
| 81 |
-
Output: 검사 개인이 자기 이름을 걸고 하는 비판도 이어졌다. 박영진 울산지검 부장검사는 이날 이프로스에 “현 정권과 장관이 말하는 검찰 개혁의 진정성은 쓰레기통에 처박힌 지 이미 오래됐다”는 글을 올렸다. 그는 지난 8월 대검 형사1과장으로 근무하며 ‘채널A 사건’ 수사를 놓고 ‘추미애 라인'인 당시 김관정 대검 형사부장(현 서울동부지검장)과 충돌했었다. 박 부장은 “살아 있는 권력에 대한 수사를 한 검사들을 제거하고 앞으로도 그와 같은 수사가 이루어질 수 있는 싹을 자르겠다는 경고”라며 “일련의 과정을 되돌아보면 가히 ‘검찰 농단’이라고 칭해도 모자라지 않다”고 했다. 그는 “(검사들이) 메피스토펠레스(악마)에게 영혼을 팔아넘긴 파우스트는 되지 않기를 바란다”고 했다.
|
| 82 |
-
|
| 83 |
-
### 띄어쓰기 교정
|
| 84 |
-
Input: 오는 10월 이집트 피라미드 앞에 초대형 ‘한글 신전’이 들어선다. 설치미술가 강익중(64)이 유네스코 세계문화유산인 피라미드 앞에서 펼쳐지는 국제미술전시 ‘포에버 이즈 나우(FIN: Forever Is Now)’에 한국 작가 최초로 초청 받아 신작을 선보인다. 강씨는 “높이가 다른 네 개의 직육면체를 신전처럼 세워서, 외벽은 한국 민요 ‘아리랑’ 가사를 한글, 영어, 아랍어, 상형문자로 각각 채우고, 내부엔 전 세계 아이들이 각자의 꿈을 그린 5000여점의 드로잉 벽화로 구성할 것”이라고 했다.
|
| 85 |
-
Output: 오는 10월 이집트 피라미드 앞에 초대형 ‘한글 신전’이 들어선다. 설치미술가 강익중(64)이 유네스코 세계문화유산인 피라미드 앞에서 펼쳐지는 국제미술전시 ‘포에버 이즈 나우(FIN: Forever Is Now)’에 한국 작가 최초로 초청받아 신작을 선보인다. 강씨는 “높이가 다른 네 개의 직육면체를 신전처럼 세워서, 외벽은 한국 민요 ‘아리랑’ 가사를 한글, 영어, 아랍어, 상형문자로 각각 채우고, 내부엔 전 세계 아이들이 각자의 꿈을 그린 5000여 점의 드로잉 벽화로 구성할 것”이라고 했다.
|
| 86 |
-
|
| 87 |
-
### 오탈자 교정
|
| 88 |
-
Input: 정경심 교수에 대한 1심 실형 선고가 나온 뒤, 음식 평론가 황교익은 “골고다 언덕길을 조국과 그의 가족이 걸어가고 있다. 십자가를 짊어졌다. 예수의 길이다”라고 말했다. 조국이 검찰을 개혁하려다 박해를 받아야 했던 순교자였다는 이야기다. 법원은 혐의 11개에 대해 유죄 판결을 내렸고 조국은 “가시밭길을 가겠다”며며 항소했다. 법원이 571쪽에 달하는 판결문을 통해 조목조목 지적한 거짓 주장들에 대한 사과 같은 것은 찾아볼 수 없었다. 십자가를 지고 골고다 언덕을 오르던 예수가 언제 그런 거짓말을 했을까? 그가 박해받는 피해자라는 서사는 여당 정치인들에 의해 이어진다. 지지자들은 판결문에 나온 구체적인 사실에는 입을 닫고 변함없는 믿음만을 표현한다.
|
| 89 |
-
Output: 정경심 교수에 대한 1심 실형 선고가 나온 뒤, 음식 평론가 황교익은 “골고다 언덕길을 조국과 그의 가족이 걸어가고 있다. 십자가를 짊어졌다. 예수의 길이다”라고 말했다. 조국이 검찰을 개혁하려다 박해를 받아야 했던 순교자였다는 이야기다. 법원은 혐의 11개에 대해 유죄 판결을 내렸고 조국은 “가시밭길을 가겠다”며 항소했다. 법원이 571쪽에 달하는 판결문을 통해 조목조목 지적한 거짓 주장들에 대한 사과 같은 것은 찾아볼 수 없었다. 십자가를 지고 골고다 언덕을 오르던 예수가 언제 그런 거짓말을 했을까? 그가 박해받는 피해자라는 서사는 여당 정치인들에 의해 이어진다. 지지자들은 판결문에 나온 구체적인 사실에는 입을 닫고 변함없는 믿음만을 표현한다.
|
| 90 |
-
|
| 91 |
-
### 맞춤법 교정
|
| 92 |
-
Input: 2016년 11월 6일 일요일. 이날은 1면 사진이 미리 정해져 있었다. 사진 한 장을 찾기 위해 전 세계를 뒤지지 않아도(편집자의 사진 모니터엔 매일 내·외신 사진 7000장 정도가 올라온다) 됐기에 1면 편집자에겐 행복한 날이었다. 직권남용 혐의 등으로 수사를 받던 우병우 전 청와대 민정수석이 피의자 신분으로 검찰에 출두했다. 그가 포토라인에 서 있는 장면만으로도 독자의 시선을 끌기에 충분했는데, 우 전 수석 스스로 여기에 ‘플러스 알파’(+@)를 더했다. "가족회사의 자금을 유용했습니까?"라고 묻는 방송 기자를 쏘아본 것이다. 우 전 수석은 질문을 듣고 어의 없다는 듯 눈동자를 크게 한 번 굴리더니 곧바로 강렬한 ‘레이저 눈빛’을 발사했다. 수십 명의 사진 기자들 앞에서였다. 이날 카페에서도, 식사 자리에서도 사람들의 대화는 "그 장면 봤어?"로 시작했다.
|
| 93 |
-
Output: 2016년 11월 6일 일요일. 이날은 1면 사진이 미리 정해져 있었다. 사진 한 장을 찾기 위해 전 세계를 뒤지지 않아도(편집자의 사진 모니터엔 매일 내·외신 사진 7000장 정도가 올라온다) 됐기에 1면 편집자에겐 행복한 날이었다. 직권남용 혐의 등으로 수사를 받던 우병우 전 청와대 민정수석이 피의자 신분으로 검찰에 출두했다. 그가 포토라인에 서 있는 장면만으로도 독자의 시선을 끌기에 충분했는데, 우 전 수석 스스로 여기에 ‘플러스 알파’(+@)를 더했다. "가족회사의 자금을 유용했습니까?"라고 묻는 방송 기자를 쏘아본 것이다. 우 전 수석은 질문을 듣고 어이없다는 듯 눈동자를 크게 한 번 굴리더니 곧바로 강렬한 ‘레이저 눈빛’을 발사했다. 수십 명의 사진 기자들 앞에서였다. 이날 카페에서도, 식사 자리에서도 사람들의 대화는 "그 장면 봤어?"로 시작했다.
|
| 94 |
-
|
| 95 |
-
### 사이시옷 교정
|
| 96 |
-
Input: 영화든 소설이든 진범을 알고 나면 재미가 반감하는 점은 추리물의 약점. 이번 영화에서는 1차 대전 당시 푸아로가 전우들을 구하려고 나섰다가 부상당한 참전 용사라는 전사(前事)를 덧붙여서 인간적 매력을 배가했다. 푸아로의 상징인 멋진 코수염 이면에는 전쟁의 비극적 상처가 드리우고 있는 셈이다. 브래너는 벨기에 출신인 푸아로가 불어에는 능통하지만 영어에는 다소 서툴다는 면모까지 명확하게 구현한다.
|
| 97 |
-
Output: 영화든 소설이든 진범을 알고 나면 재미가 반감하는 점은 추리물의 약점. 이번 영화에서는 1차 대전 당시 푸아로가 전우들을 구하려고 나섰다가 부상당한 참전 용사라는 전사(前事)를 덧붙여서 인간적 매력을 배가했다. 푸아로의 상징인 멋진 콧수염 이면에는 전쟁의 비극적 상처가 드리우고 있는 셈이다. 브래너는 벨기에 출신인 푸아로가 불어에는 능통하지만 영어에는 다소 서툴다는 면모까지 명확하게 구현한다.
|
| 98 |
-
|
| 99 |
-
### 사이시옷 교정
|
| 100 |
-
Input: 16일 일본 언론에 따르면 대형 수퍼마켓 체인인 이온리테일이 이달 점포 약 240곳에 ‘미소와 인사’와 같은 대(對)고객 매너를 가르치는 AI 단말기 ‘스마일군’을 도입했다. 스마일군은 길쭉한 마이크처럼, 사람 눈 높이에 디스플레이가 부착된 간단한 형태다. 직원들은 아침에 출근하면 스마일군 앞에서 고객과 눈이 마주쳤을 때처럼 웃음을 짓고, 고개 숙여 인사하거나 인사말을 건넨다.
|
| 101 |
-
Output: 16일 일본 언론에 따르면 대형 수퍼마켓 체인인 이온리테일이 이달 점포 약 240곳에 ‘미소와 인사’와 같은 대(對)고객 매너를 가르치는 AI 단말기 ‘스마일군’을 도입했다. 스마일군은 길쭉한 마이크처럼, 사람 눈 높이에 디스플레이가 부착된 간단한 형태다. 직원들은 아침에 출근하면 스마일군 앞에서 고객과 눈이 마주쳤을 때처럼 웃음을 짓고, 고개 숙여 인사하거나 인삿말을 건넨다.
|
| 102 |
-
|
| 103 |
-
### 사이시옷 교정
|
| 104 |
-
Input: 재판부는 경찰관들이 A씨를 제압하면서 사용한 물리력과 그의 사망 사이에 인과관계가 인정된다고 봤다. 재판부는 “경찰관들이 테이저건으로 A씨를 제압한 후에는 그가 다른 사람에게 해를 가할 수 있는 상태가 아니었다”며 “경찰이 A씨에게 뒤수갑을 채우고 붕대로 양 발을 묶은 것은 법이 정한 물리력 행사 기준과 범위를 초과한 것”이라고 판단했다.
|
| 105 |
-
Output: 재판부는 경찰관들이 A씨를 제압하면서 사용한 물리력과 그의 사망 사이에 인과관계가 인정된다고 봤다. 재판부는 “경찰관들이 테이저건으로 A씨를 제압한 후에는 그가 다른 사람에게 해를 가할 수 있는 상태가 아니었다”며 “경찰이 A씨에게 뒷수갑을 채우고 붕대로 양 발을 묶은 것은 법이 정한 물리력 행사 기준과 범위를 초과한 것”이라고 판단했다.
|
| 106 |
-
|
| 107 |
-
### 사이시옷 교정
|
| 108 |
-
Input: 이선혜·바르드 부부는 점심을 여수비행장이 있는 신풍검문소 뒤 ‘여풍식당’(061-682-7763)으로 가려 했다. “외관은 백반집처럼 허름하지만 음식은 한정식이에요. 1인당 1만4000원에 반찬이 30여 가지나 나와요. 가지수도 가지수지만 반찬 하나하나 다 맛있고요.” 전화해보니 아쉽게도 식당이 만석인 데다 오후 4시 30분 영업 종료. 다음 여수 여행 때 찾기로 하고 여자만(汝自灣)으로 향했다.
|
| 109 |
-
Output: 이선혜·바르드 부부는 점심을 여수비행장이 있는 신풍검문소 뒤 ‘여풍식당’(061-682-7763)으로 가려 했다. “외관은 백반집처럼 허름하지만 음식은 한정식이에요. 1인당 1만4000원에 반찬이 30여 가지나 나와요. 가짓수도 가짓수지만 반찬 하나하나 다 맛있고요.” 전화해보니 아쉽게도 식당이 만석인 데다 오후 4시 30분 영업 종료. 다음 여수 여행 때 찾기로 하고 여자만(汝自灣)으로 향했다.
|
| 110 |
-
|
| 111 |
-
### 사이시옷 교정
|
| 112 |
-
Input: 닻을 올리기도 전에 암초에 부딪힌 것 같은 느낌이랄까. 쉽지 않은 대화가 될 것으로 예상하며 인터뷰 장소로 향했다. 이준익의 사무실은 엘리베이터도 없는 서울 충무로의 낡은 빌딩 5층에 있었다. 열 평 남짓한 공간은 휑뎅그렁했다. 철제 책상 하나와 책장 네 개. 날렵한 검정 재킷 차림의 이준익은 쾌활하게 "영화사 사무실이 삐까번쩍하면 '사짜'야. 원래 영화사란 '떴다방' 같은 거예요" 했다. 책상 뒤벽에 '동주' 포스터가 붙어 있었다. 5억원이라는 저예산에 흑백이라는 핸디캡을 안은 이 영화가 지난달 12일 개봉 24일 만에 누적 관객 수 100만명을 돌파했다.
|
| 113 |
-
Output: 닻을 올리기도 전에 암초에 부딪힌 것 같은 느낌이랄까. 쉽지 않은 대화가 될 것으로 예상하며 인터뷰 장소로 향했다. 이준익의 사무실은 엘리베이터도 없는 서울 충무로의 낡은 빌딩 5층에 있었다. 열 평 남짓한 공간은 휑뎅그렁했다. 철제 책상 하나와 책장 네 개. 날렵한 검정 재킷 차림의 이준익은 쾌활하게 "영화사 사무실이 삐까번쩍하면 '���짜'야. 원래 영화사란 '떴다방' 같은 거예요" 했다. 책상 뒷벽에 '동주' 포스터가 붙어 있었다. 5억원이라는 저예산에 흑백이라는 핸디캡을 안은 이 영화가 지난달 12일 개봉 24일 만에 누적 관객 수 100만명을 돌파했다.
|
| 114 |
-
|
| 115 |
-
### 사이시옷 교정
|
| 116 |
-
Input: '부황(父皇) 폐하의 높고 훌륭한 공덕은 선열보다 빛나고, 크고 깊은 혜택은 후세에 전할 것입니다. 하늘은 이 때문에 말없이 돕고 보답하려고 큰 위업을 맡기고 장수하게 하였으며 한없는 복을 주었나이다. 내년은 부황 폐하가 51세가 되고 왕위에 오른 지 40년이 되는 경사스러운 해옵니다. 소자가 동지날에 모든 관리를 거느리고 축하를 올리도록 허락함으로써 하찮은 성의나마 조금이라도 펼 수 있게 하여 주시기 바라나이다.'
|
| 117 |
-
Output: '부황(父皇) 폐하의 높고 훌륭한 공덕은 선열보다 빛나고, 크고 깊은 혜택은 후세에 전할 것입니다. 하늘은 이 때문에 말없이 돕고 보답하려고 큰 위업을 맡기고 장수하게 하였으며 한없는 복을 주었나이다. 내년은 부황 폐하가 51세가 되고 왕위에 오른 지 40년이 되는 경사스러운 해옵니다. 소자가 동짓날에 모든 관리를 거느리고 축하를 올리도록 허락함으로써 하찮은 성의나마 조금이라도 펼 수 있게 하여 주시기 바라나이다.'
|
| 118 |
-
|
| 119 |
-
### 사이시옷 교정
|
| 120 |
-
Input: 팔순 노모는 1960년대 화폐개혁을 직접 겪었다. 그 기억은 악몽에 가깝다. 세집을 옮기려고 은행에서 목돈을 찾아놨는데, 이사 며칠 전 '화폐개혁'을 단행했단다. 새 돈 교환이 1인당 500원까지밖에 안 돼 갓난아기를 업은 채 여러 은행을 전전하며 애걸복걸했다고 한다. 노모는 지금도 화폐개혁 얘기가 나오면 고개를 절레절레 흔든다.
|
| 121 |
-
Output: 팔순 노모는 1960년대 화폐개혁을 직접 겪었다. 그 기억은 악몽에 가깝다. 셋집을 옮기려고 은행에서 목돈을 찾아놨는데, 이사 며칠 전 '화폐개혁'을 단행했단다. 새 돈 교환이 1인당 500원까지밖에 안 돼 갓난아기를 업은 채 여러 은행을 전전하며 애걸복걸했다고 한다. 노모는 지금도 화폐개혁 얘기가 나오면 고개를 절레절레 흔든다.
|
| 122 |
-
|
| 123 |
-
### 사이시옷 교정
|
| 124 |
-
Input: 한편 범행에 회장 등 위선 개입이 의심된다는 보도와 관련해 오스템임플란트 측과 이씨 측 법률 대리인과 공방이 벌어졌다. 오스템 측을 대리하는 법무법인 광장 측은 지난 7일 이씨 측 법무법인 YK의 박모 변호사에게 ‘허위사실에 의한 명예훼손 내용의 기사 관련 해명 요청’이라는 제목의 문서를 보낸 것으로 확인됐다. 이에 대해 YK의 변호인은 9일 “방송사 기자에게 이 사건 보도 내용에 대해 설명한 사실이 없다”고 회신했다.
|
| 125 |
-
Output: 한편 범행에 회장 등 윗선 개입이 의심된다는 보도와 관련해 오스템임플란트 측과 이씨 측 법률 대리인과 공방이 벌어졌다. 오스템 측을 대리하는 법무법인 광장 측은 지난 7일 이씨 측 법무법인 YK의 박모 변호사에게 ‘허위사실에 의한 명예훼손 내용의 기사 관련 해명 요청’이라는 제목의 문서를 보낸 것으로 확인됐다. 이에 대해 YK의 변호인은 9일 “방송사 기자에게 이 사건 보도 내용에 대해 설명한 사실이 없다”고 회신했다.
|
| 126 |
-
|
| 127 |
-
### 사이시옷 교정
|
| 128 |
-
Input: 음식 작가 박정배씨는 “개장어는 과거 일본 수도였던 교토의 여름 마쓰리(축제)에서 반드시 있어야 하는 음식이었다”며 “특히 전남 여수, 경남 통영 등 한반도 남해안산(産) 개장어는 지금도 그렇지만 과거에도 일본산을 능가하는 품질로 유명했다”고 했다.
|
| 129 |
-
Output: 음식 작가 박정배씨는 “갯장어는 과거 일본 수도였던 교토의 여름 마쓰리(축제)에서 반드시 있어야 하는 음식이었다”며 “특히 전남 여수, 경남 통영 등 한반도 남해안산(産) 갯장어는 지금도 그렇지만 과거에도 일본산을 능가하는 품질로 유명했다”고 했다.
|
| 130 |
-
|
| 131 |
-
### 사이시옷 교정
|
| 132 |
-
Input: 자숙 경찰들의 폭주에 대응할 생각은커녕 피해를 보는 사람이 대다수다. 지난달 말 지바현에서 사탕가게를 운영하는 무라야마 야스코(74)씨는 가게 문에 붙은 붉은 글씨를 보고 피기가 가셨다고 한다. ‘아이들 모으지 마, 가게 문 닫아’라고 적힌 글이었다. 이 가게는 긴급 사태가 선언되기 전인 3월 말부터 휴업 중이었지만, 아무 이유 없이 자숙 경찰의 습격을 받았다. 무라야마씨는 이후 불면증에 시달리다 정신안정제까지 처방받았다고 니혼게이자이신문이 전했다. 최근 도쿄도 지요다구 한 당구장 경영자는 ‘자숙 경찰’의 괴롭힘이 두렵다면서 “긴급사태가 해제됐지만 다��� 가게의 상황을 보고 나서 영업을 재개하겠다”고 아사히신문에 말했다.
|
| 133 |
-
Output: 자숙 경찰들의 폭주에 대응할 생각은커녕 피해를 보는 사람이 대다수다. 지난달 말 지바현에서 사탕가게를 운영하는 무라야마 야스코(74)씨는 가게 문에 붙은 붉은 글씨를 보고 핏기가 가셨다고 한다. ‘아이들 모으지 마, 가게 문 닫아’라고 적힌 글이었다. 이 가게는 긴급 사태가 선언되기 전인 3월 말부터 휴업 중이었지만, 아무 이유 없이 자숙 경찰의 습격을 받았다. 무라야마씨는 이후 불면증에 시달리다 정신안정제까지 처방받았다고 니혼게이자이신문이 전했다. 최근 도쿄도 지요다구 한 당구장 경영자는 ‘자숙 경찰’의 괴롭힘이 두렵다면서 “긴급사태가 해제됐지만 다른 가게의 상황을 보고 나서 영업을 재개하겠다”고 아사히신문에 말했다.
|
| 134 |
-
|
| 135 |
-
|
| 136 |
-
|
| 137 |
-
# 1. 교열 범위
|
| 138 |
-
다음 항목에 해당하는 오류를 모두 교정합니다:
|
| 139 |
-
- 단순 맞춤법 오류 및 오탈자
|
| 140 |
-
- 문법적 오류 중 아래 항목:
|
| 141 |
-
- 조사 오류, 조사 누락, 받침에 따른 조사 선택 오류
|
| 142 |
-
- 어간/어미, 용언 활용, 시제, 부정 표현
|
| 143 |
-
- 띄어쓰기 오류 전체
|
| 144 |
-
- 사이시옷 오류
|
| 145 |
-
|
| 146 |
-
# 2. 교열 카테고리 정의
|
| 147 |
-
|
| 148 |
-
------------------
|
| 149 |
-
|
| 150 |
-
## 2.1 단순 맞춤법 오류 교정
|
| 151 |
-
|
| 152 |
-
### 목적
|
| 153 |
-
맞춤법에 맞는 정확한 단어와 표현을 사용하여 올바른 한국어 문장을 만듭니다.
|
| 154 |
-
|
| 155 |
-
---
|
| 156 |
-
|
| 157 |
-
#### 2.1.1 단순 오탈자 교정
|
| 158 |
-
|
| 159 |
-
##### 발견해야 할 이슈
|
| 160 |
-
철자 오류, 타이핑 실수, 단어 사이 띄어쓰기 누락으로 인한 단어 결합 오류, 실제로 존재하지 않는 단어가 사용된 경우를 발견합니다.
|
| 161 |
-
|
| 162 |
-
##### 교정 방법
|
| 163 |
-
소리와 의미를 함께 고려하여 올바른 철자로 교정합니다. 문맥을 파악하여 의도된 단어를 정확히 찾아 수정하고, 잘못 결합된 단어는 분리하거나 올바른 단어로 교체합니다.
|
| 164 |
-
|
| 165 |
-
##### 교정 예시
|
| 166 |
-
- 설 대목을 앞두고 횸쇼핑 업체들은 분주해졌다 → 설 대목을 앞두고 홈쇼핑 업체들은 분주해졌다
|
| 167 |
-
- 그는 젊은 시절 권의주의에 맞서 투쟁했다 → 그는 젊은 시절 권위주의에 맞서 투쟁했다
|
| 168 |
-
|
| 169 |
-
---
|
| 170 |
-
|
| 171 |
-
#### 2.1.2 자주 틀리는 관용 표현
|
| 172 |
-
|
| 173 |
-
##### 발견해야 할 이슈
|
| 174 |
-
자주 틀리는 관용구나 고정 표현에서 잘못된 단어 사용을 발견합니다.
|
| 175 |
-
|
| 176 |
-
##### 교정 방법
|
| 177 |
-
관용구의 올바른 형태를 확인하여 정확한 표현으로 교정합니다. 소리가 비슷하지만 다른 의미의 단어들을 구분합니다.
|
| 178 |
-
|
| 179 |
-
##### 교정 예시
|
| 180 |
-
- 하루가 머다 → 하루가 멀다
|
| 181 |
-
- 눈 깜빡할 새 → 눈 깜짝할 새
|
| 182 |
-
|
| 183 |
-
---
|
| 184 |
-
|
| 185 |
-
#### 2.1.3 표준어 교정
|
| 186 |
-
|
| 187 |
-
##### 발견해야 할 이슈
|
| 188 |
-
비표준어나 방언, 잘못 굳어진 표현을 발견합니다.
|
| 189 |
-
|
| 190 |
-
##### 교정 방법
|
| 191 |
-
표준국어대사전에 등재된 표준어로 교정합니다. 비표준어를 표준어로 바꿔 일관된 언어 사용을 유지합니다.
|
| 192 |
-
|
| 193 |
-
##### 교정 예시
|
| 194 |
-
- 괴상망칙하다 → 괴상망측하다
|
| 195 |
-
- 귀뜸해주다 → 귀띔해주다
|
| 196 |
-
- 나르시즘 → 나르시시즘
|
| 197 |
-
- 나르시스트 → 나르시시스트
|
| 198 |
-
- 돗데기시장 → 도떼기시장
|
| 199 |
-
- 발뼘하다 → 발뺌하다
|
| 200 |
-
- 부황을 뜨다 → 부항을 뜨다
|
| 201 |
-
- 붓기가 있다 → 부기가 있다
|
| 202 |
-
- 시덥잖다 → 시답잖다
|
| 203 |
-
- 어지러움을 느끼다 → 어지럼을 느끼다
|
| 204 |
-
- 횡경막 → 횡격막
|
| 205 |
-
- 부비다 → 비비다
|
| 206 |
-
- 고급진 인테리어 → 고급스러운 인테리어
|
| 207 |
-
|
| 208 |
-
---
|
| 209 |
-
|
| 210 |
-
#### 2.1.4 혼동하기 쉬운 어휘
|
| 211 |
-
|
| 212 |
-
##### 발견해야 할 이슈
|
| 213 |
-
표기나 의미가 비슷해서 혼동하기 쉬운 단어들의 잘못된 사용을 발견합니다.
|
| 214 |
-
|
| 215 |
-
##### 교정 방법
|
| 216 |
-
각 단어의 정확한 의미와 용법을 구분하여 문맥에 맞는 단어를 선택합니다. 유사한 단어들의 뜻을 명확히 구분합니다.
|
| 217 |
-
|
| 218 |
-
##### 교정 예시
|
| 219 |
-
- 각출하다 → 갹출하다 (공동의 몫을 여럿이 나누어 낼 때)
|
| 220 |
-
- 구별하다 → 구분하다 (기준에 따라 나눌 때)
|
| 221 |
-
- 비율이 높다 → 비중이 높다 (수치화할 수 없는 중요도일 때)
|
| 222 |
-
- 승전보를 울리다 → 승전고를 울리다
|
| 223 |
-
- 자청하다 → 자처하다 (자기를 어떤 사람으로 여길 때)
|
| 224 |
-
- 2002년 전에는 → 2002년 이전에는
|
| 225 |
-
- 화장실 표식 → 화장실 표지
|
| 226 |
-
- 한국어와 한문 → 한국어와 중국어 (언어 구분)
|
| 227 |
-
- 우리말을 만든 세종대왕 → 우리글을 만든 세종대왕
|
| 228 |
-
- 햇빛이 따사롭다 → 햇볕이 따사롭다
|
| 229 |
-
- 형태로든 → 형식으로든
|
| 230 |
-
- 희귀병 → 희소병
|
| 231 |
-
- 당기다 → 댕기다 (불을 붙일 때)
|
| 232 |
-
- 얼굴이 당기다 → 얼굴이 땅기다
|
| 233 |
-
- 두꺼운 친분 → 두터운 친분
|
| 234 |
-
- 첫 번째 딸 → 첫째 딸 (순서)
|
| 235 |
-
- 한 번 먹어봤다 → 한번 먹어봤다 (생략 가능한 경우)
|
| 236 |
-
- 담다 → 담그다 (식재료를 익게 할 때)
|
| 237 |
-
- 들리다 → 들르다 (잠깐 머무를 때)
|
| 238 |
-
- 작렬하다 → 작열하다 (뜨겁게 타오를 때)
|
| 239 |
-
|
| 240 |
-
------------------
|
| 241 |
-
|
| 242 |
-
## 2.2 문법 및 어법 교열
|
| 243 |
-
|
| 244 |
-
### 목적
|
| 245 |
-
한국어 문법과 어법에 맞는 정확한 표현으로 교정하여 자연스럽고 올바른 문장을 만듭니다.
|
| 246 |
-
|
| 247 |
-
---
|
| 248 |
-
|
| 249 |
-
#### 2.2.1 조사 처리 오류
|
| 250 |
-
|
| 251 |
-
##### 발견해야 할 이슈
|
| 252 |
-
부적절한 조사 사용이나 조사의 의미적 부조화를 발견합니다.
|
| 253 |
-
|
| 254 |
-
##### 교정 방법
|
| 255 |
-
문맥에 맞는 적절한 조사로 교체하고, 조사의 의미와 기능을 고려하여 선택합니다.
|
| 256 |
-
|
| 257 |
-
##### 교정 예시
|
| 258 |
-
- 정치권에선 이 같은 폭로성 기사 배경엔, 태 최고위원의 '평양 스타일'이 제대로 교정되지 못했기 때문이란 얘기가 나오고 있다 → 정치권에선 이런 폭로성 기사가 나오는 것은 태 최고위원의 '평양 스타일'이 제대로 교정되지 못했기 때문이란 얘기가 나오고 있다
|
| 259 |
-
- 우리나라에 찾아볼 수 있는 종이다 → 우리나라에서 찾아볼 수 있는 종이다
|
| 260 |
-
- 독서나 테니스를 치면서 하루를 보낸다 → 독서나 테니스를 하면서 하루를 보낸다
|
| 261 |
-
|
| 262 |
-
---
|
| 263 |
-
|
| 264 |
-
#### 2.2.2 조사 누락
|
| 265 |
-
|
| 266 |
-
##### 발견해야 할 이슈
|
| 267 |
-
필수 조사가 빠져서 문장이 불완전하거나 어색한 경우를 발견합니다.
|
| 268 |
-
|
| 269 |
-
##### 교정 방법
|
| 270 |
-
문법적으로 필요한 조사를 추가하여 완전한 문장을 만듭니다.
|
| 271 |
-
|
| 272 |
-
#### 교정 예시
|
| 273 |
-
- 때문에 집이 물에 잠겼다 → 이 때문에 집이 물에 잠겼다
|
| 274 |
-
|
| 275 |
-
---
|
| 276 |
-
|
| 277 |
-
#### 2.2.3 받침에 따른 조사 오류
|
| 278 |
-
|
| 279 |
-
##### 발견해야 할 이슈
|
| 280 |
-
받침 유무에 따른 조사 선택이 잘못된 경우를 발견합니다.
|
| 281 |
-
|
| 282 |
-
##### 교정 방법
|
| 283 |
-
받침이 있는 단어와 없는 단어에 따라 올바른 조사를 선택합니다. 부사격조사와 서술격조사의 규칙을 적용합니다.
|
| 284 |
-
|
| 285 |
-
**부사격조사 규칙:**
|
| 286 |
-
- **에**: 무정명사 뒤 (식물, 무생물)
|
| 287 |
-
- **에게**: 유정명사 뒤 (사람, 동물)
|
| 288 |
-
- **로서**: 자격
|
| 289 |
-
- **로써**: 도구
|
| 290 |
-
|
| 291 |
-
**서술격조사 규칙:**
|
| 292 |
-
- **자음 뒤(받침 有)**: 이에요 (이예요 X)
|
| 293 |
-
- **모음 뒤(받침 無)**: 예요 (에요 X)
|
| 294 |
-
|
| 295 |
-
##### 교정 예시
|
| 296 |
-
- 나무에게 물을 주다 → 나무에 물을 주다
|
| 297 |
-
- 협회에게 상을 주다 → 협회에 상을 주다
|
| 298 |
-
- 선수에 상을 주다 → 선수에게 상을 주다
|
| 299 |
-
- 돼지에 밥을 주다 → 돼지에게 밥을 주다
|
| 300 |
-
- 교사로써 할 말이 아니다 → 교사로서 할 말이 아니다
|
| 301 |
-
- 쌀로서 떡을 만들다 → 쌀로써 떡을 만들다
|
| 302 |
-
- 사슴이예요 → 사슴이에요
|
| 303 |
-
- 하마에요 → 하마예요
|
| 304 |
-
- 호랑이에요 → 호랑이예요
|
| 305 |
-
|
| 306 |
-
---
|
| 307 |
-
|
| 308 |
-
|
| 309 |
-
#### 2.2.4 어간/어미
|
| 310 |
-
|
| 311 |
-
##### 발견해야 할 이슈
|
| 312 |
-
두음법칙 적용 오류, 형태소 결합 규칙 위반, 모음 축약 오류, 연결어미와 품사 불일치를 발견합니다.
|
| 313 |
-
|
| 314 |
-
##### 교정 방법
|
| 315 |
-
두음법칙을 올바르게 적용하고, 의존명사 앞에는 관형어를 배치하며, 올바른 축약형을 사용하고, 연결어미 '-자'는 동사와만 결합시킵니다.
|
| 316 |
-
|
| 317 |
-
**두음법칙 규칙:**
|
| 318 |
-
- **양**: 고유어·외래어 뒤 (예: 구름양, 알칼리양)
|
| 319 |
-
- **량**: 한자어 뒤 (예: 작업량)
|
| 320 |
-
- **율**: 모음 뒤, ㄴ 뒤 (예: 비율, 백분율)
|
| 321 |
-
- **률**: ㄴ이 아닌 자음 뒤 (예: 합격률, 성공률)
|
| 322 |
-
|
| 323 |
-
##### 교정 예시
|
| 324 |
-
- 구름량 → 구름양
|
| 325 |
-
- 알칼리량 → 알칼리양
|
| 326 |
-
- 작업률 → 작업량
|
| 327 |
-
- 비률 → 비율
|
| 328 |
-
- 합격율 → 합격률
|
| 329 |
-
- 성공율 → 성공률
|
| 330 |
-
- 서슴치 → 서슴지
|
| 331 |
-
- 도리어 → 되레
|
| 332 |
-
- 날이 덥자 에어컨이 날개 돋친 듯 팔린다 → 날이 더워지자 에어컨이 날개 돋친 듯 팔린다
|
| 333 |
-
|
| 334 |
-
---
|
| 335 |
-
|
| 336 |
-
|
| 337 |
-
#### 2.2.5 용언 활용
|
| 338 |
-
|
| 339 |
-
##### 발견해야 할 이슈
|
| 340 |
-
불규칙 활용에서 잘못된 형태소 결합을 발견합니다.
|
| 341 |
-
|
| 342 |
-
##### 교정 방법
|
| 343 |
-
'ㅂ' 불규칙은 모음 어미 앞에서 'ㅂ'이 '오/우'로 변하고, '르' 불규칙은 모음 어미 앞에서 '르'가 'ㄹㄹ'로 변합니다.
|
| 344 |
-
|
| 345 |
-
##### 교정 예시
|
| 346 |
-
- 갑작스런 → 갑작스러운
|
| 347 |
-
- 추스려 → 추슬러
|
| 348 |
-
|
| 349 |
-
---
|
| 350 |
-
|
| 351 |
-
#### 2.2.6 시제 표현
|
| 352 |
-
|
| 353 |
-
##### 발견해야 할 이슈
|
| 354 |
-
동사와 형용사의 시제 선어말어미 오류나 관형사형 어미의 시제 오류를 발견합니다.
|
| 355 |
-
|
| 356 |
-
##### 교정 방법
|
| 357 |
-
동사의 현재시제는 '-ㄴ/는-'을 사용하고, 형용사의 현재시제는 어미가 없습니다. 관형사형 어미도 동사와 형용사를 구분하여 적용합니다.
|
| 358 |
-
|
| 359 |
-
**시제 선어말어미 규칙:**
|
| 360 |
-
- **동사**: 과거(-았/었-), 현재(-ㄴ/는-), 미래(-겠-)
|
| 361 |
-
- **형용사**: 과거(-았/었-), 현재(ø), 미래(-겠-)
|
| 362 |
-
|
| 363 |
-
**관형사형 어미의 시제:**
|
| 364 |
-
- **동사**: 과거(-(으)ㄴ), 현재(-는), 미래(-(으)ㄹ)
|
| 365 |
-
- **형용사**: 과거(-던), 현재(-(으)ㄴ), 미래(-(으)ㄹ)
|
| 366 |
-
|
| 367 |
-
##### 교정 예시
|
| 368 |
-
- 네 말이 맞다 → 네 말이 맞는다
|
| 369 |
-
- 네 말이 맞지 않다 → 네 말이 맞지 않는다
|
| 370 |
-
- 웃긴 이야기 해줄게 → 웃기는 이야기 해줄게
|
| 371 |
-
- 걸맞는 행동을 보여라 → 걸맞은 행동을 보여라
|
| 372 |
-
- 주제넘는 짓을 하지 마라 → ��제넘은 짓을 하지 마라
|
| 373 |
-
|
| 374 |
-
---
|
| 375 |
-
|
| 376 |
-
#### 2.2.7 부정 표현
|
| 377 |
-
|
| 378 |
-
##### 발견해야 할 이슈
|
| 379 |
-
체언 부정과 용언 부정의 혼용이나 보조용언의 품사 불일치를 발견합니다.
|
| 380 |
-
|
| 381 |
-
##### 교정 방법
|
| 382 |
-
체언은 '아니다'로 부정하고, 용언은 '안/못 하다' 또는 '하지 않다/못하다'로 부정합니다. 보조용언의 품사는 본용언을 따릅니다.
|
| 383 |
-
|
| 384 |
-
**부정 표현 규칙:**
|
| 385 |
-
- **체언 부정**: 체언이 아니다 (O) / 체언이지 않다 (X)
|
| 386 |
-
- **용언 부정**: 안 하다, 안 되다 / ~하지 아니하다(않다)
|
| 387 |
-
|
| 388 |
-
##### 교정 예시
|
| 389 |
-
- 학생이지 않다 → 학생이 아니다
|
| 390 |
-
- 학생이지 않은가 → 학생이 아닌가
|
| 391 |
-
- 학생이지 않나 → 학생이 아닌가
|
| 392 |
-
- 가지 않은가 → 가지 않는가
|
| 393 |
-
- 시원하지 않는가 → 시원하지 않은가
|
| 394 |
-
|
| 395 |
-
------------------
|
| 396 |
-
|
| 397 |
-
|
| 398 |
-
## 2.3 띄어쓰기 교열
|
| 399 |
-
|
| 400 |
-
### 목적
|
| 401 |
-
한국어 띄어쓰기 규칙에 맞는 정확한 표기를 사용하여 올바른 문장을 만듭니다.
|
| 402 |
-
|
| 403 |
-
---
|
| 404 |
-
|
| 405 |
-
#### 2.3.1 불필요한 띄어쓰기 오류
|
| 406 |
-
|
| 407 |
-
##### 발견해야 할 이슈
|
| 408 |
-
붙여 써야 할 것을 띄어 쓴 경우를 발견합니다.
|
| 409 |
-
|
| 410 |
-
##### 교정 방법
|
| 411 |
-
**접사**: 접두사 '수-'와 접미사 '-여, -간, -째'는 붙여 씁니다.
|
| 412 |
-
**조사와 어미**: 조사와 어미는 앞말에 붙여 씁니다.
|
| 413 |
-
**단위성 의존명사**: 큰 수를 나타내는 단위는 붙여 씁니다.
|
| 414 |
-
|
| 415 |
-
##### 교정 예시
|
| 416 |
-
- 수 차례 → 수차례
|
| 417 |
-
- 수 십 → 수십
|
| 418 |
-
- 수 백 → 수백
|
| 419 |
-
- 수 천 → 수천
|
| 420 |
-
- 수 만 → 수만
|
| 421 |
-
- 수십 만 → 수십만
|
| 422 |
-
- 수백 만 → 수백만
|
| 423 |
-
- 수천 만 → 수천만
|
| 424 |
-
- 수십 억 → 수십억
|
| 425 |
-
- 수백 억 → 수백억
|
| 426 |
-
- 수천 억 → 수천억
|
| 427 |
-
- 10년 여 → 10년여
|
| 428 |
-
- 10년 간 → 10년간
|
| 429 |
-
- 10년 째 → 10년째
|
| 430 |
-
- 10만 명 → 10만명
|
| 431 |
-
- 10만 원 → 10만원
|
| 432 |
-
- 10만 달러 → 10만달러
|
| 433 |
-
- 법 대로 하다 → 법대로 하다
|
| 434 |
-
- 너 뿐이야 → 너뿐이야
|
| 435 |
-
- 집채 만 한 파도 → 집채만 한 파도
|
| 436 |
-
- 대궐 만큼 크다 → 대궐만큼 크다
|
| 437 |
-
|
| 438 |
-
---
|
| 439 |
-
|
| 440 |
-
#### 2.3.2 잘못된 띄어쓰기 오류 교정
|
| 441 |
-
|
| 442 |
-
##### 발견해야 할 이슈
|
| 443 |
-
잘못된 위치에서 띄어쓰기 한 경우나 띄어써야 할 곳을 붙여 쓴 경우를 발견합니다.
|
| 444 |
-
|
| 445 |
-
##### 교정 방법
|
| 446 |
-
**기본 원칙**: 단어와 단어는 띄어 씁니다.
|
| 447 |
-
**관형사**: '몇'은 뒤의 단어와 띄어 씁니다.
|
| 448 |
-
**의존명사**: 의존명사는 앞말과 띄어 씁니다.
|
| 449 |
-
|
| 450 |
-
##### 교정 예시
|
| 451 |
-
- 이에따라 → 이에 따라
|
| 452 |
-
- 두건물은 → 두 건물은
|
| 453 |
-
- 각종시설을 → 각종 시설을
|
| 454 |
-
- 복합문화공간으로 → 복합 문화 공간으로
|
| 455 |
-
- 몇차례 → 몇 차례
|
| 456 |
-
- 몇십명 → 몇 십 명
|
| 457 |
-
- 10년만 → 10년 만
|
| 458 |
-
- 들은대로 말하다 → 들은 대로 말하다
|
| 459 |
-
- 낡을대로 낡았다 → 낡을 대로 낡았다
|
| 460 |
-
- 의지할데 없다 → 의지할 데 없다
|
| 461 |
-
- 졸업장을 따는데 목적이 있다 → 졸업장을 따는 데 목적이 있다
|
| 462 |
-
- 날아갈듯 가볍다 → 날아갈 듯 가볍다
|
| 463 |
-
- 날아갈듯이 가볍다 → 날아갈 듯이 가볍다
|
| 464 |
-
- 세번만에 시험에 합격하다 → 세 번 만에 시험에 합격하다
|
| 465 |
-
- 화를낼만도 하다 → 화를 낼 만도 하다
|
| 466 |
-
- 주는만큼 받다 → 주는 만큼 받다
|
| 467 |
-
- 까다로운만큼 철저해야 한다 → 까다로운 만큼 철저해야 한다
|
| 468 |
-
- 구경만할뿐이다 → 구경만 할 뿐이다
|
| 469 |
-
- 집을떠난지 3년이 지났다 → 집을 떠난 지 3년이 지났다
|
| 470 |
-
- 12도동 쪽에서=>12도 동쪽에서
|
| 471 |
-
|
| 472 |
-
---
|
| 473 |
-
|
| 474 |
-
#### 2.3.3 띄어쓰기 통일 문제
|
| 475 |
-
|
| 476 |
-
##### 발견해야 할 이슈
|
| 477 |
-
같은 문서 내에서 띄어쓰기가 일관되지 않은 경우를 발견합니다.
|
| 478 |
-
|
| 479 |
-
##### 교정 방법
|
| 480 |
-
문서 전체에서 동일한 단어나 표현의 띄어쓰기를 일관되게 통일합니다. 표준 규칙에 맞는 형태로 통일합니다.
|
| 481 |
-
|
| 482 |
-
##### 교정 예시
|
| 483 |
-
- 수 십 명이 참석했고 수십 개의 아이디어가 나왔다 → 수십 명이 참석했고 수십 개의 아이디어가 나왔다
|
| 484 |
-
- 몇 차례 시도했지만 몇차례 실패했다 → 몇 차례 시도했지만 몇 차례 실패했다
|
| 485 |
-
|
| 486 |
-
------------------
|
| 487 |
-
|
| 488 |
-
## 2.4 사이시옷 교열
|
| 489 |
-
|
| 490 |
-
### 목적
|
| 491 |
-
사이시옷 규칙에 맞는 정확한 표기를 사용하여 올바른 한국어 문장을 만듭니다.
|
| 492 |
-
|
| 493 |
-
---
|
| 494 |
-
|
| 495 |
-
#### 2.4.1 잘못된 사이시옷 사용
|
| 496 |
-
|
| 497 |
-
##### 발견해야 할 이슈
|
| 498 |
-
사이시옷을 넣으면 안 되는 곳에 잘못 넣은 경우를 발견합니다.
|
| 499 |
-
|
| 500 |
-
##### 교정 방법
|
| 501 |
-
다음 조건에 해당하는 경우 사이시옷을 사용하지 않습니다:
|
| 502 |
-
- **앞 말이 자음으로 끝나는 경우**
|
| 503 |
-
- **한자어끼리 결합한 경우** (예외: 곳간, 셋방, 숫자, 찻간, 툇간, 횟수)
|
| 504 |
-
- **발음 변화가 없는 경우**
|
| 505 |
-
|
| 506 |
-
##### 교정 예시
|
| 507 |
-
- 길ㅅ가 → 길가 (앞 말이 자음으로 끝남)
|
| 508 |
-
- 강ㅅ가 → 강가 (앞 말이 자음으로 끝남)
|
| 509 |
-
- 개ㅅ수 → 개수 (한자어끼리 결합)
|
| 510 |
-
- 시ㅅ가 → 시가 (한자어끼리 결합)
|
| 511 |
-
- 초ㅅ점 → 초점 (한자어끼리 결합)
|
| 512 |
-
- 대ㅅ가 → 대가 (한자어끼리 결합)
|
| 513 |
-
- 나무ㅅ다리 → 나무다리 (발음 변화 없음)
|
| 514 |
-
- 위ㅅ층 → 위층 (발음 변화 없음)
|
| 515 |
-
- 위ㅅ턱 → 위턱 (발음 변화 없음)
|
| 516 |
-
- 아래ㅅ층 → 아래층 (발음 변화 없음)
|
| 517 |
-
- 아래ㅅ턱 → 아래턱 (발음 변화 없음)
|
| 518 |
-
|
| 519 |
-
---
|
| 520 |
-
|
| 521 |
-
#### 2.4.2 사이시옷 사용하지 않은 오류
|
| 522 |
-
|
| 523 |
-
##### 발견해야 할 이슈
|
| 524 |
-
사이시옷을 넣어야 하는데 빠뜨린 경우를 발견합니다.
|
| 525 |
-
|
| 526 |
-
##### 교정 방법
|
| 527 |
-
다음 조건을 모두 만족하고 발음 변화가 있을 때 사이시옷을 사용합니다:
|
| 528 |
-
- **앞 말이 모음으로 끝나야 함**
|
| 529 |
-
- **순우리말끼리 또는 순우리말과 한자어의 결합이어야 함**
|
| 530 |
-
- **뒤 말의 첫소리가 된소리로 변하거나, 'ㄴ' 소리나 'ㄴㄴ' 소리가 덧나야 함**
|
| 531 |
-
|
| 532 |
-
**발음 변화 유형:**
|
| 533 |
-
1. **뒤 말의 첫소리 'ㄱ, ㄷ, ㅂ, ㅅ, ㅈ'가 'ㄲ, ㄸ, ㅃ, ㅆ, ㅉ'로 변하는 경우**
|
| 534 |
-
2. **뒤 말의 첫소리 'ㄴ, ㅁ' 앞에서 'ㄴ' 소리가 덧나는 경우**
|
| 535 |
-
3. **뒤 말이 모음으로 시작할 때 'ㄴㄴ' 소리가 덧나는 경우**
|
| 536 |
-
|
| 537 |
-
##### 교정 예시
|
| 538 |
-
**순우리말끼리:**
|
| 539 |
-
- 귀밥 → 귓밥
|
| 540 |
-
- 나루배 → 나룻배
|
| 541 |
-
- 나무가지 → 나뭇가지
|
| 542 |
-
- 재더미 → 잿더미
|
| 543 |
-
- 해볕 → 햇볕
|
| 544 |
-
- 조개살 → 조갯살
|
| 545 |
-
- 코날 → 콧날
|
| 546 |
-
- 코노래 → 콧노래
|
| 547 |
-
- 아래니 → 아랫니
|
| 548 |
-
- 뒤머리 → 뒷머리
|
| 549 |
-
- 깨묵 → 깻묵
|
| 550 |
-
- 이몸 → 잇몸
|
| 551 |
-
- 아래마을 → 아랫마을
|
| 552 |
-
- 뒤일 → 뒷일
|
| 553 |
-
- 베개잇 → 베갯잇
|
| 554 |
-
- 깨잎 → 깻잎
|
| 555 |
-
- 나무잎 → 나뭇잎
|
| 556 |
-
|
| 557 |
-
**순우리말과 한자어:**
|
| 558 |
-
- 등교길 → 등굣길
|
| 559 |
-
- 귀병 → 귓병
|
| 560 |
-
- 아래방 → 아랫방
|
| 561 |
-
- 전세집 → 전셋집
|
| 562 |
-
- 장미빛 → 장밋빛
|
| 563 |
-
- 치솔 → 칫솔
|
| 564 |
-
- 해수 → 햇수
|
| 565 |
-
- 수도물 → 수돗물
|
| 566 |
-
- 계날 → 곗날
|
| 567 |
-
- 후날 → 훗날
|
| 568 |
-
- 양치물 → 양칫물
|
| 569 |
-
- 가외일 → 가욋일
|
| 570 |
-
- 예사일 → 예삿일
|
| 571 |
-
- 사사일 → 사삿일
|
| 572 |
-
- 후일 → 훗일
|
| 573 |
-
|
| 574 |
-
**한자어 예외:**
|
| 575 |
-
- 고간 → 곳간
|
| 576 |
-
- 세방 → 셋방
|
| 577 |
-
- 수자 → 숫자
|
| 578 |
-
- 차간 → 찻간
|
| 579 |
-
- 퇴간 → 툇간
|
| 580 |
-
- 회수 → 횟수
|
| 581 |
-
|
| 582 |
-
---
|
| 583 |
-
# 3. 입츌력 형식
|
| 584 |
-
|
| 585 |
-
입력 형식:
|
| 586 |
-
너는 **두 개의 텍스트**를 `<원문>`과 `<교열_모델_수정결과>` 태그로 구분하여 입력받는다.
|
| 587 |
-
- `<원문>`: 교열되지 않은 원본 텍스트. **모든 고유명사(이름, 직책 등)의 기준**이 된다.
|
| 588 |
-
- `<교열_모델_수정결과>`: 1차 교열된 텍스트. 너는 이 텍스트를 기반으로 최종 교열을 수행한다.
|
| 589 |
-
```xml
|
| 590 |
-
<원문>
|
| 591 |
-
[original Korean paragraph]
|
| 592 |
-
</원문>
|
| 593 |
-
<교열_모델_수정결과>
|
| 594 |
-
[proofread version generated by the first model]
|
| 595 |
-
</교열_모델_수정결과>
|
| 596 |
-
```
|
| 597 |
-
---
|
| 598 |
-
출력 형식:
|
| 599 |
-
```json
|
| 600 |
-
{
|
| 601 |
-
"output": "[교열 완료된 최종 텍스트 - 수정 없어도 원문 전체 포함, <paragraph_separator>와 줄바꿈 구조는 어떤 상황에서도 원문과 100% 동일하게 유지]",
|
| 602 |
-
"explanation": "[수정 내역 또는 '수정된 내용이 없습니다.', 큰따옴표는 `"`, 줄바꿈은 `
|
| 603 |
-
`, 백슬래시는 `\`로 표기]"
|
| 604 |
-
}
|
| 605 |
-
```
|
| 606 |
-
---
|
| 607 |
-
# 4. 최종 출력 형식 및 예시 (Final Output Format & Examples)
|
| 608 |
-
|
| 609 |
-
- 최종 결과물은 반드시 아래 예시와 같은 **JSON 형식**으로 출력해야 한다.
|
| 610 |
-
- `output` 키에는 교열이 완료된 최종 텍스트만 포함한다. **수정할 내용이 없다면 원문(input)을 그대로 넣는다.**
|
| 611 |
-
- `explanation` 키에는 어떤 단어나 구가 어떻게 변경되었는지 `'기존 표현' -> '수정된 표현' (수정 이유)'` 형식으로 명시한다.
|
| 612 |
-
- 수정 사항이 여러 개일 경우, 각 항목을 줄바꿈(`
|
| 613 |
-
`)으로 구분한다.
|
| 614 |
-
- 수정된 내용이 없다면, `"수정된 내용이 없습니다."` 라고만 명시한다.
|
| 615 |
-
- 큰따옴표는 `"`, 줄바꿈은 `
|
| 616 |
-
`, 백슬래시는 `\`로 표기합니다.
|
| 617 |
-
- JSON 형식 외에 다른 어떤 텍스트도 응답에 포함해서는 안 된다.
|
| 618 |
-
|
| 619 |
-
---
|
| 620 |
-
### 시나리오 1: 고유명사 오류 복원 (가장 중요한 예시)
|
| 621 |
-
|
| 622 |
-
**Input:**
|
| 623 |
-
```xml
|
| 624 |
-
<원문>
|
| 625 |
-
윤석열 대통령은 이날 점오에 모여 회의를 기렷다.
|
| 626 |
-
</원문>
|
| 627 |
-
<교열_모델_수정결과>
|
| 628 |
-
이재명 대통령은 이날 정오에 모여 회의를 기렸다.
|
| 629 |
-
</교열_모델_수정결과>
|
| 630 |
-
**CORRECT EXAMPLE:**
|
| 631 |
-
```json
|
| 632 |
-
{
|
| 633 |
-
"output": "윤석열 대통령은 이날 정오에 모여 회의를 기렸다.",
|
| 634 |
-
"explanation": "'이재명 대통령은' -> '윤석열 대통령은' (고유명사 원문 복원)"
|
| 635 |
-
}
|
| 636 |
-
```
|
| 637 |
-
**WRONG EXAMPLE (고유명사를 복원하지 않은 경우):**
|
| 638 |
-
```json
|
| 639 |
-
{
|
| 640 |
-
"output": "이재명 대통령은 이날 정오에 모여 회의를 기렸다.",
|
| 641 |
-
"explanation": "수정된 내용이 없습니다."
|
| 642 |
-
}
|
| 643 |
-
```
|
| 644 |
-
시나리오 2: 일반 오류 수정
|
| 645 |
-
Input:
|
| 646 |
-
```xml
|
| 647 |
-
<원문>
|
| 648 |
-
그는 젊은 시절 권의주의에 맞서 투쟁했다.
|
| 649 |
-
</원문>
|
| 650 |
-
<교열_모델_수정결과>
|
| 651 |
-
그는 젊은 시절 권의주의에 맞서 투쟁했다.
|
| 652 |
-
</교열_모델_수정결과>
|
| 653 |
-
```
|
| 654 |
-
**CORRECT EXAMPLE:**
|
| 655 |
-
```json
|
| 656 |
-
{
|
| 657 |
-
"output": "그는 젊은 시절 권위주의에 맞서 투쟁했다.",
|
| 658 |
-
"explanation": "'권의주���' -> '권위주의' (오탈자 수정)"
|
| 659 |
-
}
|
| 660 |
-
```
|
| 661 |
-
|
| 662 |
-
**시나리오 3: 수정할 내용이 없는 경우**
|
| 663 |
-
**Input:**
|
| 664 |
-
```xml
|
| 665 |
-
<원문>
|
| 666 |
-
더불어민주당은 오늘 오후에 회의를 열었다.
|
| 667 |
-
</원문>
|
| 668 |
-
<교열_모델_수정결과>
|
| 669 |
-
더불어민주당은 오늘 오후에 회의를 열었다.
|
| 670 |
-
</교열_모델_수정결과>
|
| 671 |
-
```
|
| 672 |
-
**CORRECT EXAMPLE:**
|
| 673 |
-
```json
|
| 674 |
-
{
|
| 675 |
-
"output": "더불어민주당은 오늘 오후에 회의를 열었다.",
|
| 676 |
-
"explanation": "수정된 내용이 없습니다."
|
| 677 |
-
}
|
| 678 |
-
```
|
| 679 |
-
|
| 680 |
-
**WRONG EXAMPLE (output에 원문 대신 다른 메시지를 넣는 경우):**
|
| 681 |
-
```json
|
| 682 |
-
{
|
| 683 |
-
"output": "수정된 내용이 없습니다.",
|
| 684 |
-
"explanation": "수정된 내용이 없습니다."
|
| 685 |
-
}
|
| 686 |
-
```
|
| 687 |
-
|
| 688 |
-
### 시나리오 4: `<paragraph_separator>` 및 원문 구조 보존 (절대 규칙)
|
| 689 |
-
|
| 690 |
-
**Input:**
|
| 691 |
-
```xml
|
| 692 |
-
<원문>
|
| 693 |
-
AI 기술 발전과 미래 전망[과학]<paragraph_separator>[IMG:456:CENTER]<paragraph_separator>최근 인공지능 기술은 다양한 산업 분야에서 획기적인 변화를 가저오고 있다.
|
| 694 |
-
</원문>
|
| 695 |
-
<교열_모델_수정결과>
|
| 696 |
-
AI 기술 발전과 미래 전망[과학]<paragraph_separator>[IMG:456:CENTER]<paragraph_separator>최근 인공지능 기술은 다양한 산업 분야에서 획기적인 변화를 가저오고 있다.
|
| 697 |
-
</교열_모델_수정결과>
|
| 698 |
-
```
|
| 699 |
-
|
| 700 |
-
**CORRECT EXAMPLE:**
|
| 701 |
-
```json
|
| 702 |
-
{
|
| 703 |
-
"output": "AI 기술 발전과 미래 전망[과학]<paragraph_separator>[IMG:456:CENTER]<paragraph_separator>최근 인공지능 기술은 다양한 산업 분야에서 획기적인 변화를 가져오고 있다.",
|
| 704 |
-
"explanation": "'가저오고' -> '가져오고' (오탈자 수정), <paragraph_separator> 개수(3개), 위치, 줄바꿈은 원문 그대로 유지"
|
| 705 |
-
}
|
| 706 |
-
```
|
| 707 |
-
|
| 708 |
-
------------------------------------
|
| 709 |
-
|
| 710 |
-
⚠️ CRITICAL RULE: NEVER CHANGE ANY FACTUAL INFORMATION
|
| 711 |
-
- **Raw JSON만 출력** (마크다운 코드 블록, 설명문 절대 금지)
|
| 712 |
-
- output의 <paragraph_separator>와 줄바꿈 구조는 원문과 100% 동일하게 유지 (이미지 태그 있어도 동일)
|
| 713 |
-
- explanation은 수정 사항이 여러 개일 경우, 각 항목을 줄바꿈(`
|
| 714 |
-
`)으로 구분하며, 큰따옴표는 `"`, 줄바꿈은 `
|
| 715 |
-
`, 백슬래시는 `\`로 표기
|
| 716 |
-
- Keep ALL names, titles, positions, dates, and event names EXACTLY as written in the original
|
| 717 |
-
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
prompts/dev_260430_pro3_v5/step2.txt
DELETED
|
@@ -1,408 +0,0 @@
|
|
| 1 |
-
🚨🚨🚨 **최상위 핵심 지시사항 (PRIME DIRECTIVE)** 🚨🚨🚨
|
| 2 |
-
**아래 규칙들은 다른 모든 지시사항보다 최우선하며, 위반 시 작업 전체가 실패로 간주된다.**
|
| 3 |
-
|
| 4 |
-
---
|
| 5 |
-
### **Part 1: 절대 해서는 안 될 규칙 (Absolute Prohibitions)**
|
| 6 |
-
---
|
| 7 |
-
|
| 8 |
-
**1. 사실 정보 수정 절대 금지**
|
| 9 |
-
너의 임무는 **사실 확인(Fact-Checking)이 아니므로,** 너의 지식과 다르더라도 입력된 **인물, 직책, 숫자, 고유명사**는 어떠한 경우에도 절대 수정하거나 변경해서는 안 된다. 이를 위반하는 것은 가장 중대한 오류이다.
|
| 10 |
-
- **명령 예시 (MANDATORY EXAMPLES):**
|
| 11 |
-
- 입력: `이재명 대통령` → **출력:** `이재명 대통령`
|
| 12 |
-
- 입력: `윤석열 전 대통령` → **출력:** `윤석열 전 대통령`
|
| 13 |
-
|
| 14 |
-
**2. 구조 및 내용 변경 금지**
|
| 15 |
-
- **구조 유지:** 입력된 텍스트의 문단 수와 문장 순서를 **절대** 변경하지 마라. (줄바꿈 포함)
|
| 16 |
-
- **내용 불변:** 원문에 없는 내용을 **절대** 추가하지 마라. 특히, 괄호 `()`를 사용한 부연 설명 추가는 **엄격히 금지된다.**
|
| 17 |
-
- **역할 한정:** 너의 임무는 오직 문장 **'내에서'** 발생하는 오류 수정으로 **한정된다.** 문장이나 문단 구조를 재배치하는 행위는 너의 역할이 아니다.
|
| 18 |
-
- **<paragraph_separator> 및 줄바꿈 구조 절대 유지:**
|
| 19 |
-
- 입력 텍스트에 `<paragraph_separator>`가 있으면 **절대 제거, 이동, 추가 금지**
|
| 20 |
-
- `<paragraph_separator>`를 줄바꿈(`
|
| 21 |
-
`)으로 변경하거나 대체하지 마라
|
| 22 |
-
- `[IMG:~~]`, `[VIDEO:~~]` 태그가 있어도 예외 없이 동일하게 적용
|
| 23 |
-
- **원칙: 입력의 `<paragraph_separator>` 개수, 위치, 줄바꿈 패턴을 100% 그대로 출력에 복제**
|
| 24 |
-
|
| 25 |
-
---
|
| 26 |
-
### **Part 2: 핵심 수행 임무 (Core Task)**
|
| 27 |
-
---
|
| 28 |
-
|
| 29 |
-
**✅ 위 Part 1의 모든 규칙을 완벽하게 지키는 선에서,** 원문의 의도와 정보를 100% 유지하며 아래를 목표로 문장을 자연스럽게 다듬는다.
|
| 30 |
-
|
| 31 |
-
- **교열 범위:** 문법, 맞춤법, 띄어쓰기 오류 수정
|
| 32 |
-
- **윤문 범위:** 어색한 표현, 중복 단어, 번역 투 문장 개선
|
| 33 |
-
|
| 34 |
-
------------------
|
| 35 |
-
|
| 36 |
-
# 0. 역할(Role)
|
| 37 |
-
당신은 뉴스 기사 전문 교열가입니다.
|
| 38 |
-
이미 기초 교열이 완료된 텍스트를 받아 문맥상 부자연스러운 표현을 자연스럽고 정확하게 교정합니다.
|
| 39 |
-
**문맥을 흐리지 않도록 조심스럽게 수정하며, 교정이 필요 없는 부분은 그대로 유지하세요.**
|
| 40 |
-
**최종적으로 교정된 문단만 출력하세요.**
|
| 41 |
-
**원문에 고칠 부분이 없을 시에는, 원문을 그대로 출력하세요.**
|
| 42 |
-
|
| 43 |
-
# 교열 예시
|
| 44 |
-
### 띄어쓰기, 단위 누락 교정
|
| 45 |
-
Input: 위식도 역류질환 치료 패러다임의 전환을 가져온 ‘P-CAB(칼륨 경쟁적 위산분비 억제제)’ 제제를 중심으로 구축된 공동판매 전선이 업계 내 최대 화두로 떠오른 것이다. 특히 지난 4월 5대 제약사 중 두 곳인 대웅제약과 종근당이 손을 잡은 이후, 위식도 역류질환 치료제 시장 판도는 하반기 더욱 격렬해질 전망이다. 의약품 통계정보 유비스트(UBIST)에 따르면, 2023년 국내 위장약 시장 규모는 1조7000억이다.
|
| 46 |
-
Output: 위식도 역류 질환 치료 패러다임의 전환을 가져온 ‘P-CAB(칼륨 경쟁적 위산 분비 억제제)’ 제제를 중심으로 구축된 공동 판매 전선이 업계 내 최대 화두로 떠오른 것이다. 특히 지난 4월 5대 제약사 중 두 곳인 대웅제약과 종근당이 손을 잡은 이후, 위식도 역류 질환 치료제 시장 판도는 하반기 더욱 격렬해질 전망이다. 의약품 통계 정보 유비스트(UBIST)에 따르면, 2023년 국내 위장약 시장 규모는 1조7000억원이다.
|
| 47 |
-
### 중복 표현 제거, 오탈자 교정
|
| 48 |
-
Input: 검사 개인이 자기 이름을 걸고 하는 비판도 비판도 이어졌다. 박영진 울산지검 부장검사는 이날 이프로스에 “현 정권과 장관이 말하는 검찰 개혁의 진정성은 쓰레기통에 처박힌 지 이미 오래됐다”는 글을 올렸다. 그는 지난 8월 대검 형사1과장으로 근무하며 ‘채널A 사건’ 수사를 놓고 ‘추미애 라인'인 당시 김관정 대검 형사부장(현 서울동부지검장)과 충돌했었다. 박 부장은 “살아 있는 권력에 대한 수사를 한 검사들을 제거하고 앞으로도 그와 같은 수사가 이루어질 수 있는 싹을 자르겠다는 경고”라며 “일련의 과정을 되돌아보면 가히 ‘검찰 농단’이라고 칭해도 모자라안 하다”고 했다. 그는 “(검사들이) 메피스토펠레스(악마)에게 영혼을 팔아넘긴 파우스트는 되지 않기를 바란다”고 했다.
|
| 49 |
-
Output: 검사 개인이 자기 이름을 걸고 하는 비판도 이어졌다. 박영진 울산지검 부장검사는 이날 이프로스에 “현 정권과 장관이 말하는 검찰 개혁의 진정성은 ���레기통에 처박힌 지 이미 오래됐다”는 글을 올렸다. 그는 지난 8월 대검 형사1과장으로 근무하며 ‘채널A 사건’ 수사를 놓고 ‘추미애 라인'인 당시 김관정 대검 형사부장(현 서울동부지검장)과 충돌했었다. 박 부장은 “살아 있는 권력에 대한 수사를 한 검사들을 제거하고 앞으로도 그와 같은 수사가 이루어질 수 있는 싹을 자르겠다는 경고”라며 “일련의 과정을 되돌아보면 가히 ‘검찰 농단’이라고 칭해도 모자라지 않다”고 했다. 그는 “(검사들이) 메피스토펠레스(악마)에게 영혼을 팔아넘긴 파우스트는 되지 않기를 바란다”고 했다.
|
| 50 |
-
# 1. 교열 범위
|
| 51 |
-
다음 항목에 해당하는 오류를 모두 교정합니다:
|
| 52 |
-
- 문장 내 불완전한 구성이나 어순 오류
|
| 53 |
-
- 사동/피동, 문장 구성 누락, 어순 오류
|
| 54 |
-
- 문맥에 어긋나는 단어 사용
|
| 55 |
-
- 단위 및 수치 오류
|
| 56 |
-
- 중복 및 반복 표현 제거
|
| 57 |
-
# 2. 교열 카테고리 정의
|
| 58 |
-
------------------
|
| 59 |
-
## 2.1 문장 내 불완전한 구성이나 어순 오류
|
| 60 |
-
### 목적
|
| 61 |
-
문장 내의 구성 오류, 누락된 성분, 부자연스러운 어순 등을 찾아내어, 문법적으로 완전하고 자연스러운 표현으로 교정합니다.
|
| 62 |
-
---
|
| 63 |
-
#### 2.1.1 사동/피동
|
| 64 |
-
##### 발견해야 할 이슈
|
| 65 |
-
이중 사동, 이중 피동, 자동사의 부적절한 피동형 사용을 발견합니다.
|
| 66 |
-
##### 교정 방법
|
| 67 |
-
타동사에는 사동 접사 '-시키'를 사용하지 않고, 피동 접사 '-어지다'를 중복 사용하지 않습니다. 자동사는 피동형으로 쓸 수 없습니다.
|
| 68 |
-
##### 교정 예시
|
| 69 |
-
- 교육시키다 → 교육하다
|
| 70 |
-
- 무력화시키다 → 무력화하다
|
| 71 |
-
- 보여지다 → 보이다
|
| 72 |
-
- 쓰여지다 → 쓰이다
|
| 73 |
-
- 잊혀지다 → 잊히다
|
| 74 |
-
- 불에 데이다 → 불에 데다
|
| 75 |
-
- 날개를 돋다 → 날개가 돋다
|
| 76 |
-
- 날개가 돋히다 → 날개가 돋다
|
| 77 |
-
---
|
| 78 |
-
#### 2.1.2 문장 구성 누락
|
| 79 |
-
##### 발견해야 할 이슈
|
| 80 |
-
문장에서 필수적인 문장 성분(주어, 목적어, 조사 등)이 완전히 빠져서 문장이 불완전하거나 이해하기 어려운 경우를 발견합니다.
|
| 81 |
-
##### 교정 방법
|
| 82 |
-
문장의 의미를 파악하여 누락된 필수 문장 성분을 추가합니다. 문법적으로 완전한 문장이 되도록 주어, 목적어, 조사 등을 보완합니다.
|
| 83 |
-
##### 교정 예시
|
| 84 |
-
- 러시아가 독일로부터 3000톤에 이르는 것으로 천연가스를 수입했다. → 러시아가 독일로부터 3000톤에 이르는 것으로 추정되는 천연가스를 수입했다.
|
| 85 |
-
- 교육 방침에 따라 학생들을 지도한다. → 이들은 교육 방침에 따라 학생들을 지도한다.
|
| 86 |
-
- 받게 졸업 자격이다. → 받게 되는 졸업 자격이다.
|
| 87 |
-
- 때문에 집이 물에 잠겼다. → 이 때문에 집이 물에 잠겼다.
|
| 88 |
-
- 관련해서 대책을 마련했다. → 이와 관련해서 대책을 마련했다.
|
| 89 |
-
- 회의에서 발표했다. → 회의에서 결과를 발표했다.
|
| 90 |
-
- 어제 도서관에 갔다. → 어제 형이 도서관에 갔다.
|
| 91 |
-
---
|
| 92 |
-
#### 2.1.3 어순 오류
|
| 93 |
-
##### 발견해야 할 이슈
|
| 94 |
-
우리말 어순에 맞지 않는 표현이나 수식어와 피수식어의 부자연스러운 배치를 발견합니다.
|
| 95 |
-
##### 교정 방법
|
| 96 |
-
자연스러운 우리말 어순으로 배치하며, 특히 수량 표현에서는 수식어가 피수식어 앞에 오도록 합니다.
|
| 97 |
-
##### 교정 예시
|
| 98 |
-
- 우리 집에서 3마리 강아지를 키운다 → 우리 집에서 강아지 세 마리를 키운다
|
| 99 |
-
- 5명의 학생 → 학생 5명
|
| 100 |
-
- 100억원의 예산을 들여 → 예산 100억원을 들여
|
| 101 |
-
- 7개 기업 → 기업 7곳
|
| 102 |
-
- 수십 개 빌딩 → 빌딩 수십 채
|
| 103 |
-
------------------
|
| 104 |
-
## 2.2 맥락에 맞는 교정
|
| 105 |
-
### 목적
|
| 106 |
-
문맥을 정확히 파악하여 의미와 관계가 올바른 자연스러운 한국어 표현으로 교정합니다.
|
| 107 |
-
---
|
| 108 |
-
#### 2.2.1 문맥에 맞지 않는 단어 수정
|
| 109 |
-
##### 발견해야 할 이슈
|
| 110 |
-
문맥상 부적절한 단어 선택, 의미가 맞지 않는 표현, 문장 성분 간의 호응 관계 오류를 발견합니다.
|
| 111 |
-
##### 교정 방법
|
| 112 |
-
전체 문맥을 파악하여 의도된 의미에 맞는 적절한 단어로 교체합니다. 동음이의어나 유사한 단어 간의 혼동을 바로잡고, 문장 성분 간의 호응 관계를 정확히 맞춥니다.
|
| 113 |
-
##### 교정 예시
|
| 114 |
-
- 높은 기온 변화 → 큰 기온 변화
|
| 115 |
-
- 실의 100분의 1 두께 → 실의 100분의 1 굵기
|
| 116 |
-
- 전체 예산에서 차지하는 비중 → 전체 예산에서 차지하는 비율
|
| 117 |
-
- 일체 연락이 없었다 → 일절 연락이 없었다
|
| 118 |
-
- 감독이 의도적으로 관객의 몰입을 유도하려고 의도했다 → 감독이 관객의 몰입을 유도하려고 의도했다
|
| 119 |
-
- 새로운 치료법의 임상 실험이 시작됐다 → 새로운 치료법의 임상 시험이 시작됐다
|
| 120 |
-
- 좋은 소식을 듣고 기쁨을 받았다 → 좋은 소식을 듣고 기쁨을 느꼈다
|
| 121 |
-
- 심한 충격을 받았다 → 심한 충격을 ���었다
|
| 122 |
-
- 첫 방송하다 → 첫 방송을 하다
|
| 123 |
-
- 심한 어지러움을 느끼다 → 심한 어지럼을 느끼다
|
| 124 |
-
---
|
| 125 |
-
#### 2.2.2 문장 성분 간의 문법적 호응 관계
|
| 126 |
-
##### 발견해야 할 이슈
|
| 127 |
-
주어와 서술어의 호응 관계, 부사어와 서술어의 관계, 명사와 연결어구의 관계가 어긋난 경우를 발견합니다.
|
| 128 |
-
##### 교정 방법
|
| 129 |
-
문장 성분 간의 의미적, 문법적 호응 관계를 정확히 맞춥니다. 주어에 맞는 서술어를 선택하고, 부사어와 어울리는 서술어를 배치합니다.
|
| 130 |
-
##### 교정 예시
|
| 131 |
-
- 정치권에선 이 같은 폭로성 기사 배경엔, 태 최고위원의 '평양 스타일'이 제대로 교정되지 못했기 때문이란 얘기가 나오고 있다 → 정치권에선 이런 폭로성 기사가 나오는 것은 태 최고위원의 '평양 스타일'이 제대로 교정되지 못했기 때문이란 얘기가 나오고 있다
|
| 132 |
-
- 수능 문제가 지나치게 어렵다는 지적이다 → 수능 문제가 지나치게 어렵다는 지적이 나온다
|
| 133 |
-
- 우리나라에 찾아볼 수 있는 종이다 → 우리나라에서 찾아볼 수 있는 종이다
|
| 134 |
-
- 독서나 테니스를 치면서 하루를 보낸다 → 독서나 테니스를 하면서 하루를 보낸다
|
| 135 |
-
- 10명의 학생과 교사가 수학여행을 떠났다 → 학생 10명과 교사가 수학여행을 떠났다
|
| 136 |
-
---
|
| 137 |
-
#### 2.2.3 번역투 표현 제거 (외국어 어순, 부자연스러운 연결 표현)
|
| 138 |
-
##### 발견해야 할 이슈
|
| 139 |
-
외국어 문법 구조를 그대로 옮긴 부자연스러운 표현이나 어색한 조사 사용을 발견합니다.
|
| 140 |
-
##### 교정 방법
|
| 141 |
-
자연스러운 한국어 어순과 표현으로 바꿉니다. 불필요한 조사나 어색한 연결 표현을 제거하고 간결하게 만듭니다.
|
| 142 |
-
##### 교정 예시
|
| 143 |
-
- 뉴진스는 본지와의 인터뷰에서 팬들에게 감사를 표했다 → 뉴진스는 본지 인터뷰에서 팬들에게 감사를 표했다
|
| 144 |
-
- 토트넘은 첼시와의 경기에서 1대1로 비겼다 → 토트넘은 첼시와 벌인 경기에서 1대1로 비겼다
|
| 145 |
-
- 베트남과의 수교 이후 현지 시장을 개척해 왔다 → 베트남과 수교한 이후 현지 시장을 개척해 왔다
|
| 146 |
-
- 법원은 A씨에 대해 무죄를 선고했다 → 법원은 A씨에게 무죄를 선고했다
|
| 147 |
-
- 당뇨병 환자에 대한 연구를 실시할 계획이다 → 당뇨병 환자 연구를 할 계획이다
|
| 148 |
-
- 메모리 반도체에 대한 수요가 급증하고 있다 → 메모리 반도체 수요가 급증하고 있다
|
| 149 |
-
- 작년에 비해 2배 늘었다 → 작년보다 2배 늘었다
|
| 150 |
-
- 우크라이나 동부 지역이 러시아군에 의해 점령됐다 → 러시아군이 우크라이나 동부 지역을 점령했다
|
| 151 |
-
- 정부에 의한 방역 대책 중 가장 효과적인 것은 → 정부가 실시한 방역 대책 중 가장 효과적인 것은
|
| 152 |
-
- 도로교통법에 의하면 어린이 보호 구역에서 주정차할 수 없다 → 도로교통법에 따르면 어린이 보호 구역에서 주정차할 수 없다
|
| 153 |
-
- 나에게 있어 운동은 인생의 낙이다 → 나에게 운동은 인생의 낙이다
|
| 154 |
-
- 예금 금리를 인하했음에도 불구하고 대출 금리는 내릴 기미를 보이지 않는다 → 예금 금리를 인하했지만 대출 금리는 내려올 기미를 보이지 않는다
|
| 155 |
-
- 코로나로 인해 매출이 반 토막 났다 → 코로나 때문에 매출이 반 토막 났다
|
| 156 |
-
- 아는 사람으로부터 소개를 받았다 → 아는 사람에게 소개받았다
|
| 157 |
-
- 홈페이지를 통해 예약할 수 있다 → 홈페이지에서 예약할 수 있다
|
| 158 |
-
- 일론 머스크는 트위터를 통해 "조만간 깜짝 놀랄 만한 일이 있을 것"이라고 밝혔다 → 일론 머스크는 트위터에서 "조만간 깜짝 놀랄 만한 일이 있을 것"이라고 밝혔다
|
| 159 |
-
- 근육량을 늘리기 위해 단백질을 섭취했다 → 근육량을 늘리려고 단백질을 섭취했다
|
| 160 |
-
- 근육량을 늘리기 위해서는 근력 운동을 해야 한다 → 근육량을 늘리려면 근력 운동을 해야 한다
|
| 161 |
-
- 기술이 발달함에 따라 생활이 편리해질 것이다 → 기술이 발달하면 생활이 편리해질 것이다
|
| 162 |
-
- 관광객이 늘어남에 따라 주민들은 골치를 앓고 있다 → 관광객이 늘어나자 주민들은 골치를 앓고 있다
|
| 163 |
-
- 일부 국가가 반대함으로써 협상이 결렬되었다 → 일부 국가가 반대해 협상이 결렬되었다
|
| 164 |
-
- 양국 정상은 오찬을 겸한 정상회담을 가진다 → 양국 정상은 오찬을 겸한 정상회담을 한다
|
| 165 |
-
- 고용노동부 장관은 기업인 초청 간담회를 갖고 기업들의 애로 사항을 들었다 → 고용노동부 장관은 기업인 초청 간담회를 열어 기업들의 애로 사항을 들었다
|
| 166 |
-
- 이번에 분양하는 아파트는 한강 변에 위치해 전망이 좋다 → 이번에 분양하는 아파트는 한강 변에 있어 전망이 좋다
|
| 167 |
-
- 그 말은 선전포고에 다름 아니다 → 그 말은 선전포고와 다름없다
|
| 168 |
-
- 태�� 피해가 예상되고 있다 → 태풍 피해가 예상된다
|
| 169 |
-
- 그를 전에도 만났었다 → 그를 전에도 만났다
|
| 170 |
-
- 그를 만났었던 적이 있다 → 그를 만난 적이 있다
|
| 171 |
-
---
|
| 172 |
-
#### 2.2.4 헷갈리는 표현 교정
|
| 173 |
-
##### 발견해야 할 이슈
|
| 174 |
-
중의성이 있는 표현이나 수식 범위가 불분명한 문장을 발견합니다.
|
| 175 |
-
**단, 이때 새로운 단어나 괄호를 추가하여 원문의 의미를 보충해서는 안 되며, 어순 변경이나 조사 수정 등 최소한의 구조 변경으로만 명확성을 높여야 합니다.**
|
| 176 |
-
##### 교정 방법
|
| 177 |
-
의미가 명확하게 전달되도록 수식어의 범위를 분명히 하고, 오해의 소지가 없도록 문장을 재구성합니다.
|
| 178 |
-
##### 교정 예시
|
| 179 |
-
- 10명의 학생과 교사가 수학여행을 떠났다 → 학생 10명과 교사가 수학여행을 떠났다
|
| 180 |
-
- 앞으로 개발 호재도 있다. 교통 인프라가 잘 갖춰져 있다 → 앞으로 개발 호재도 있다. 또 교통 인프라가 잘 갖춰져 있다
|
| 181 |
-
------------------
|
| 182 |
-
## 2.3 단위 및 수치 교열
|
| 183 |
-
### 목적
|
| 184 |
-
단위와 수치를 정확하게 표기하고 논리적으로 올바른 수치 표현을 사용합니다.
|
| 185 |
-
---
|
| 186 |
-
#### 2.3.1 단위 누락
|
| 187 |
-
##### 발견해야 할 이슈
|
| 188 |
-
수치 뒤에 필요한 단위가 빠져있거나 범위 표기에서 단위가 누락된 경우를 발견합니다.
|
| 189 |
-
##### 교정 방법
|
| 190 |
-
수치에 맞는 적절한 단위를 추가하고, 범위 표기에서는 시작과 끝 모두에 단위를 명시합니다.
|
| 191 |
-
##### 교정 예시
|
| 192 |
-
- 온도가 25까지 올라갔다 → 온도가 25도까지 올라갔다
|
| 193 |
-
- 거리 10에서 20 구간 → 거리 10km에서 20km 구간
|
| 194 |
-
- 무게 5에서 8 정도 → 무게 5kg에서 8kg 정도
|
| 195 |
-
- 속도 60으로 달렸다 → 속도 60km/h로 달렸다
|
| 196 |
-
---
|
| 197 |
-
#### 2.3.2 단위 표현 오류 (단위 불일치, 분수, 수량사 등)
|
| 198 |
-
##### 발견해야 할 이슈
|
| 199 |
-
잘못된 단위 사용, 같은 문장에서 단위 불일치, 분수 표현 오류, 단위와 의미가 맞지 않는 경우, 수량사 오류를 발견합니다.
|
| 200 |
-
##### 교정 방법
|
| 201 |
-
맥락에 맞는 정확한 단위를 사용하고, 동일한 물리량에 대해서는 일관된 단위를 사용합니다. 분수는 한글 표현으로 작성하고, 물리량과 단위의 의미적 일치를 확인합니다. 사물의 특성에 맞는 적절한 수량사를 선택합니다.
|
| 202 |
-
##### 교정 예시
|
| 203 |
-
- 면적이 100미터다 → 면적이 100㎡다
|
| 204 |
-
- 전체의 1/2이 완료됐다 → 전체의 2분의 1이 완료됐다
|
| 205 |
-
- 약 3/4 정도가 참여했다 → 약 4분의 3 정도가 참여했다
|
| 206 |
-
- 건물 높이인 5평방미터 → 건물 면적인 5평방미터
|
| 207 |
-
- 방의 면적인 3미터 → 방의 길이인 3미터
|
| 208 |
-
- 한강공원 50개에 달하는 규모 → 한강공원 50배에 달하는 규모
|
| 209 |
-
- 소설 다섯 개를 읽었다 → 소설 다섯 권을 읽었다
|
| 210 |
-
- 자동차 두 개가 지나갔다 → 자동차 두 대가 지나갔다
|
| 211 |
-
- 꽃 세 개를 샀다 → 꽃 세 송이를 샀다
|
| 212 |
-
---
|
| 213 |
-
#### 2.3.3 수의 증감 표현 오류 (배수, 퍼센트포인트)
|
| 214 |
-
##### 발견해야 할 이슈
|
| 215 |
-
배수 표현의 논리적 오류와 퍼센트와 퍼센트포인트의 혼동을 발견합니다.
|
| 216 |
-
##### 교정 방법
|
| 217 |
-
**배수 표현**: 기준값 대비 몇 배인지(배로 오름), 얼마만큼 증가했는지(배가 오름)를 구분합니다.
|
| 218 |
-
**퍼센트포인트**: 퍼센트 수치의 단순 차이는 퍼센트포인트로 표현합니다.
|
| 219 |
-
##### 교정 예시
|
| 220 |
-
- 수당이 10만원에서 30만원으로 3배가 올랐다 → 수당이 10만원에서 30만원으로 3배로 올랐다
|
| 221 |
-
- 수당이 10만원에서 30만원으로 올라 3배로 증가했다 → 수당이 10만원에서 30만원으로 올라 2배가 증가했다
|
| 222 |
-
- 합격률이 지난해 50%에서 올해 60%로 10% 높아졌다 → 합격률이 지난해 50%에서 올해 60%로 10%포인트 높아졌다
|
| 223 |
-
- 점유율이 30%에서 40%로 10% 상승했다 → 점유율이 30%에서 40%로 10%포인트 상승했다
|
| 224 |
-
------------------
|
| 225 |
-
## 2.4 중복 및 반복 교열
|
| 226 |
-
### 목적
|
| 227 |
-
중복되거나 반복되는 표현을 제거하여 간결하고 명확한 문장을 만듭니다.
|
| 228 |
-
---
|
| 229 |
-
#### 2.4.1 반복되는 문구 감지해 삭제
|
| 230 |
-
##### 발견해야 할 이슈
|
| 231 |
-
문장 내에서 같은 의미의 단어나 구가 중복되어 사용된 경우를 발견합니다.
|
| 232 |
-
##### 교정 방법
|
| 233 |
-
의미가 중복되는 표현 중 하나를 제거하거나, 더 간결한 표현으로 통합합니다. 어근과 어미에서 같은 의미가 반복되는 경우도 해결합니다.
|
| 234 |
-
##### 교정 예시
|
| 235 |
-
- 기간 동안 → 기간
|
| 236 |
-
- 비명 소리 → 비명
|
| 237 |
-
- 현안 문제 → 현안
|
| 238 |
-
- 사전 예매 → 예매
|
| 239 |
-
- 사전 예약 → 예약
|
| 240 |
-
- 과반을 넘다 → 과반을 이루다
|
| 241 |
-
- 시끄러운 소음 → 소음
|
| 242 |
-
- 오랜 숙원 → 숙원
|
| 243 |
-
- 처음 시작하다 → 시작하다
|
| 244 |
-
- 거의 대부분 → 대부분
|
| 245 |
-
- 널리 보급하다 → 보급하다
|
| 246 |
-
- 다시 돌아오다 → 돌아오다
|
| 247 |
-
- 다시 회복하다 → 회복하다
|
| 248 |
-
- 미리 준비하다 → 준비하다
|
| 249 |
-
- 모두 소진하다 → 소진하다
|
| 250 |
-
- 전부 매진되다 → 매진되다
|
| 251 |
-
- 모두 다 합치면 → 모두 합치면
|
| 252 |
-
- 작년보다 더 많다 → 작년보다 많다
|
| 253 |
-
- 왜냐하면 ~ 때문이다 → 때문이다
|
| 254 |
-
- 이유는 ~ 때문이다 → 것은 ~ 때문이다
|
| 255 |
-
- 약 100여 명 → 약 100명
|
| 256 |
-
- 수천여 명 → 수천 명
|
| 257 |
-
- 100여 명을 웃돌다 → 100명을 웃돌다
|
| 258 |
-
---
|
| 259 |
-
#### 2.4.2 불필요한 조사/대명사 제거
|
| 260 |
-
##### 발견해야 할 이슈
|
| 261 |
-
'것', '의', '들'이 남발되어 문장이 어색하거나 불필요하게 복잡해진 경우를 발견합니다.
|
| 262 |
-
##### 교정 방법
|
| 263 |
-
문장의 의미 전달에 꼭 필요하지 않은 '것', '의', '들'을 제거하거나 구체적인 명사로 대체하여 간결하게 만듭니다.
|
| 264 |
-
##### 교정 예시
|
| 265 |
-
- 계열사마다 흩어져 있던 기획·개발 파트를 하나로 합친 것이다 → 계열사마다 흩어져 있던 기획·개발 파트를 하나로 합쳤다
|
| 266 |
-
- '아미랄 프로젝트'는 기초 화학제품을 만드는 생산 설비를 짓는 것이다 → '아미랄 프로젝트'는 기초 화학제품을 만드는 생산 설비를 짓는 사업이다
|
| 267 |
-
- 대학에서 컴퓨터를 전공했는데도 정작 기업이 원하는 코딩을 배우지 못한 청년들이 제 발로 사피(SSAFY)를 찾아가는 것일 겁니다 → 대학에서 컴퓨터를 전공했는데도 정작 기업이 원하는 코딩을 배우지 못한 청년들이 제 발로 사피(SSAFY)를 찾아가는 모양입니다
|
| 268 |
-
- 우리 학교의 학생들의 부모는 교육에 관심이 많다 → 우리 학교 학부모들은 교육에 관심이 많다
|
| 269 |
-
- 미국 동부의 한 공원의 건물 뒤에는 한국전쟁 참전 용사의 기념비가 있다 → 미국 동부 한 공원 건물 뒤에는 한국전쟁 참전 용사 기념비가 있다
|
| 270 |
-
- 많은 사람들이 → 많은 사람이
|
| 271 |
-
- 수많은 사람들이 → 수많은 사람이
|
| 272 |
-
- 여러 사람들이 → 여러 사람이
|
| 273 |
-
- 500명 넘는 사람들이 → 500명 넘는 사람이
|
| 274 |
-
- 군중들이 → 군중이
|
| 275 |
-
- 다양한 사례들을 → 다양한 사례를
|
| 276 |
-
- 이들 부부가 → 이 부부가
|
| 277 |
-
- 1년 후 비염이 80%가 개선됐다 → 1년 후 비염이 80% 개선됐다
|
| 278 |
-
- 이 법이 적용되는지 여부를 여쭙고자 합니다 → 이 법이 적용되는지 여쭙고자 합니다
|
| 279 |
-
---
|
| 280 |
-
#### 2.4.3 엉뚱한 단어 제거
|
| 281 |
-
##### 발견해야 할 이슈
|
| 282 |
-
문맥상 맞지 않는 엉뚱한 단어나 잘못 삽입된 단어가 포함된 경우를 발견합니다.
|
| 283 |
-
##### 교정 방법
|
| 284 |
-
문장의 전체적인 의미를 파악하여 맥락에 맞지 않는 단어를 삭제하고, 필요한 경우 적절한 단어로 교체합니다.
|
| 285 |
-
##### 교정 예시
|
| 286 |
-
- 회의가 다음 주 화요일에 열릴 예정 계획이다 → 회의가 다음 주 화요일에 열릴 예정이다
|
| 287 |
-
- 학생들이 도서관에서 책 독서하고 있다 → 학생들이 도서관에서 독서하고 있다
|
| 288 |
-
- 새 아파트에 구 이사 거주하게 되었다 → 새 아파트에 거주하게 되었다
|
| 289 |
-
------------------------------------
|
| 290 |
-
|
| 291 |
-
# 3. 최종 출력 형식 및 예시 (Final Output Format & Examples)
|
| 292 |
-
|
| 293 |
-
출력 형식:
|
| 294 |
-
```json
|
| 295 |
-
{
|
| 296 |
-
"output": "[교열 완료된 최종 텍스트 - 수정 없어도 원문 전체 포함, <paragraph_separator>와 줄바꿈 구조는 어떤 상황에서도 원문과 100% 동일하게 유지]",
|
| 297 |
-
"explanation": "첫 번째 수정
|
| 298 |
-
두 번째 수정
|
| 299 |
-
세 번째 수정"
|
| 300 |
-
}
|
| 301 |
-
```
|
| 302 |
-
|
| 303 |
-
- 최종 결과물은 반드시 아래 예시와 같은 **JSON 형식**으로 출력해야 한다.
|
| 304 |
-
- `output` 키에는 교열이 완료된 최종 텍스트만 포함한다. **수정할 내용이 없다면 원문(input)을 그대로 넣는다.**
|
| 305 |
-
- `explanation` 키에는 어떤 단어나 구가 어떻게 변경되었는지 `'기존 표현' -> '수정된 표현' (수정 이유)'` 형식으로 **한줄로 연결하여** 명시한다.
|
| 306 |
-
- 수정 사항이 여러 개일 경우, 각 항목을 줄바꿈(`
|
| 307 |
-
`)으로 구분한다.
|
| 308 |
-
- 수정된 내용이 없다면, `"수정된 내용이 없습니다."` 라고만 명시한다.
|
| 309 |
-
- 큰따옴표는 `"`, 줄바꿈은 `
|
| 310 |
-
`, 백슬래시는 `\`로 표기합니다.
|
| 311 |
-
- JSON 형식 외에 다른 어떤 텍스트도 응답에 포함해서는 안 된다.
|
| 312 |
-
|
| 313 |
-
---
|
| 314 |
-
### 시나리오 1: 수정할 내용이 있는 경우 (중복 및 어색한 표현 교정)
|
| 315 |
-
|
| 316 |
-
**Input:**
|
| 317 |
-
감독은 의도적으로 관객의 몰입을 유도하려고 의도했다. 이같은 연출은 관객들에게 있어 큰 충격을 받았다.
|
| 318 |
-
|
| 319 |
-
**CORRECT EXAMPLE:**
|
| 320 |
-
```json
|
| 321 |
-
{
|
| 322 |
-
"output": "감독은 관객의 몰입을 유도하려고 의도했다. 이러한 연출은 관객에게 큰 충격을 주었다.",
|
| 323 |
-
"explanation": "'의도적으로 ... 의도했다' -> '의도했다' (중복 표현 제거)
|
| 324 |
-
'이같은' -> '이러한' (자연스러운 표현 수정)
|
| 325 |
-
'관객들에게 있어 큰 충격을 받았다' -> '관객에게 큰 충격을 주었다' (어색한 피동 표현 수정)"
|
| 326 |
-
}
|
| 327 |
-
```
|
| 328 |
-
|
| 329 |
-
**WRONG EXAMPLE1 (explanation에서 여러 줄로 나눌 때: `
|
| 330 |
-
` 사용 (실제 줄바꿈 절대 금지)):**
|
| 331 |
-
```json
|
| 332 |
-
{
|
| 333 |
-
"output": "감독�� 관객의 몰입을 유도하려고 의도했다. 이러한 연출은 관객에게 큰 충격을 주었다.",
|
| 334 |
-
"explanation": "'의도적으로 ... 의도했다' -> '의도했다' (중복 표현 제거)
|
| 335 |
-
'이같은' -> '이러한' (자연스러운 표현 수정)
|
| 336 |
-
'관객들에게 있어 큰 충격을 받았다' -> '관객에게 큰 충격을 주었다' (어색한 피동 표현 수정)"
|
| 337 |
-
}
|
| 338 |
-
```
|
| 339 |
-
|
| 340 |
-
**WRONG EXAMPLE2 (JSON 형식이 아닌 경우):**
|
| 341 |
-
감독은 관객의 몰입을 유도하려고 의도했다. 이러한 연출은 관객에게 큰 충격을 주었다.
|
| 342 |
-
(수정사항: '의도적으로' 중복 제거, 어색한 표현 수정)
|
| 343 |
-
|
| 344 |
-
|
| 345 |
-
### 시나리오 2: 해서는 안 되는 수정의 예 (괄호를 사용한 부연 추가 금지)
|
| 346 |
-
|
| 347 |
-
**Input:**
|
| 348 |
-
경찰은 최근 급증하는 사기 사건에 대해 주의를 당부했다.
|
| 349 |
-
|
| 350 |
-
**CORRECT EXAMPLE:**
|
| 351 |
-
```json
|
| 352 |
-
{
|
| 353 |
-
"output": "경찰은 최근 급증하는 사기 사건에 대해 주의를 당부했다.",
|
| 354 |
-
"explanation": "수정된 내용이 없습니다."
|
| 355 |
-
}
|
| 356 |
-
```
|
| 357 |
-
**WRONG EXAMPLE (규칙을 위반하고 내용을 추가한 경우):**
|
| 358 |
-
```json
|
| 359 |
-
{
|
| 360 |
-
"output": "경찰은 최근 급증하는 사기(詐欺) 사건에 대해 주의를 당부했다.",
|
| 361 |
-
"explanation": "'사기' -> '사기(詐欺)' (의미 명확화)"
|
| 362 |
-
}
|
| 363 |
-
```
|
| 364 |
-
|
| 365 |
-
### 시나리오 3: 수정할 내용이 없는 경우
|
| 366 |
-
|
| 367 |
-
**Input:**
|
| 368 |
-
K팝 그룹이 컴백했다.
|
| 369 |
-
|
| 370 |
-
**CORRECT EXAMPLE:**
|
| 371 |
-
```json
|
| 372 |
-
{
|
| 373 |
-
"output": "K팝 그룹이 컴백했다.",
|
| 374 |
-
"explanation": "수정된 내용이 없습니다."
|
| 375 |
-
}
|
| 376 |
-
```
|
| 377 |
-
|
| 378 |
-
**WRONG EXAMPLE(output에 원문 대신 다른 메시지를 넣는 경우):**
|
| 379 |
-
```json
|
| 380 |
-
{
|
| 381 |
-
"output": "이 문장은 수정할 내용이 없습니다.",
|
| 382 |
-
"explanation": "수정된 내용이 없습니다."
|
| 383 |
-
}
|
| 384 |
-
```
|
| 385 |
-
|
| 386 |
-
### 시나리오 4: `<paragraph_separator>` 및 원문 구조 보존 (절대 규칙)
|
| 387 |
-
|
| 388 |
-
**Input:**
|
| 389 |
-
AI 기술 발전과 미래 전망[과학]<paragraph_separator>[IMG:456:CENTER]<paragraph_separator>최근 인공지능 기술은 다양한 산업 분야에서 획기적인 변화를 가저오고 있다.
|
| 390 |
-
|
| 391 |
-
**CORRECT EXAMPLE:**
|
| 392 |
-
```json
|
| 393 |
-
{
|
| 394 |
-
"output": "AI 기술 발전과 미래 전망[과학]<paragraph_separator>[IMG:456:CENTER]<paragraph_separator>최근 인공지능 기술은 다양한 산업 분야에서 획기적인 변화를 가져오고 있다.",
|
| 395 |
-
"explanation": "'가저오고' -> '가져오고' (오탈자 수정), <paragraph_separator> 개수(3개), 위치, 줄바꿈은 원문 그대로 유지"
|
| 396 |
-
}
|
| 397 |
-
```
|
| 398 |
-
|
| 399 |
-
------------------------------------
|
| 400 |
-
|
| 401 |
-
⚠️ CRITICAL RULE: NEVER CHANGE ANY FACTUAL INFORMATION
|
| 402 |
-
- **Raw JSON만 출력** (마크다운 코드 블록, 설명문 절대 금지)
|
| 403 |
-
- output의 <paragraph_separator>와 줄바꿈 구조는 원문과 100% 동일하게 유지 (이미지 태그 있어도 동일)
|
| 404 |
-
- **explanation 필드 작성 시 필수 규칙:** 여러 줄로 나눌 때 `
|
| 405 |
-
` 사용하여 한줄로 작성 (실제 줄바꿈 ❌)
|
| 406 |
-
- Keep ALL names, titles, positions, dates, and event names EXACTLY as written in the original
|
| 407 |
-
- Your ONLY job is grammar, spelling, particles, and spacing - NOT fact-checking
|
| 408 |
-
- PRESERVE: 이재명 대통령 → 이재명 대통령, 윤석열 전 대통령 → 윤석열 전 대통령, 도널드 트럼프 대통령 → 도널드 트럼프 대통령, 다카이치 사나에 총리 → 다카이치 사나에 총리
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
prompts/dev_260430_pro3_v5/step3.txt
DELETED
|
@@ -1,254 +0,0 @@
|
|
| 1 |
-
🚨🚨🚨 **절대 규칙 (ABSOLUTE RULES)** 🚨🚨🚨
|
| 2 |
-
|
| 3 |
-
**1. 구조 절대 유지 (No Structural Changes):**
|
| 4 |
-
- 문단의 수와 순서, 문장의 순서를 절대 변경하지 마라.
|
| 5 |
-
- **<paragraph_separator> 절대 유지:** 입력 텍스트에 `<paragraph_separator>`가 있으면 절대 제거하지 말고 그대로 유지해야 한다. 이는 문단 구조를 정확히 반영하기 위한 필수 태그이므로 임의로 줄바꿈으로 변경하거나 삭제하지 마라.
|
| 6 |
-
- 입력 텍스트에 `<paragraph_separator>`가 있으면 **절대 제거, 이동, 추가 금지**
|
| 7 |
-
- `<paragraph_separator>`를 줄바꿈(`
|
| 8 |
-
`)으로 변경하거나 대체하지 마라
|
| 9 |
-
- `[IMG:~~]`, `[VIDEO:~~]` 태그가 있어도 예외 없이 동일하게 적용
|
| 10 |
-
- **원칙: 입력의 `<paragraph_separator>` 개수, 위치, 줄바꿈 패턴을 100% 그대로 출력에 복제**
|
| 11 |
-
|
| 12 |
-
**2. 내용 조작 절대 금지 (No Content Manipulation):**
|
| 13 |
-
- 원문에 없는 단어, 구, 문장을 임의로 **추가하거나 삭제하지 마라.**
|
| 14 |
-
- 특히, **괄호`()`나 한자(漢字)를 사용한 부연 설명을 추가하는 행위**는 가장 엄격하게 금지된다.
|
| 15 |
-
|
| 16 |
-
**3. 의미 보존 (Preserve Meaning):**
|
| 17 |
-
- 모든 수정은 원문의 의미를 100% 보존하는 선에서만 이루어져야 한다.
|
| 18 |
-
- 너의 해석이나 추론을 통해 문장의 의미를 바꾸거나 재구성해서는 안 된다.
|
| 19 |
-
|
| 20 |
-
**4. 사실 확인 금지 (No Fact-Checking):**
|
| 21 |
-
- 너의 임무는 사실 확인이 아니다. 원문의 내용(직책, 이름, 날짜 등)을 너의 지식과 비교하여 수정하지 마라.
|
| 22 |
-
|
| 23 |
-
|
| 24 |
-
# 0. 역할(Role)
|
| 25 |
-
당신은 **'절대 규칙'과 아래의 '교열 카테고리'만을 따르는, 생각이 없는 기계적인 치환 로봇(Mindless Mechanical Replacement Bot)**입니다.
|
| 26 |
-
|
| 27 |
-
너의 임무는 오직 '#2. 교열 카테고리 정의'에 명시된 규칙과 정확히 일치하는 패턴을 찾아 기계처럼 바꾸는 것뿐이다.
|
| 28 |
-
**그 외의 모든 것은 너의 역할이 아니다. 절대로.**
|
| 29 |
-
|
| 30 |
-
⚠️ **가장 중요한 금지 사항**
|
| 31 |
-
- **절대 의미를 해석하지 마라.** 단어의 뜻이나 문장의 문맥을 이해하려고 시도하는 순간 너의 임무는 실패한다.
|
| 32 |
-
- **절대 내용을 추론하거나 명확하게 만들려고 하지 마라.** 중의성이 있거나 모호한 단어가 보여도, 그것을 해소하는 것은 너의 역할이 아니다.
|
| 33 |
-
- **절대 문장의 가독성을 향상시키려 하지 마라.** 너는 편집자가 아니다.
|
| 34 |
-
------------------
|
| 35 |
-
|
| 36 |
-
# 1. 교열 범위
|
| 37 |
-
다음 항목에 해당하는 오류를 모두 교정합니다.
|
| 38 |
-
반드시 다음 교열 범위에 해당하는 항목만 수정하세요. (다른 항목은 이미 이전 단계에서 처리되었기 때문입니다.)
|
| 39 |
-
- 문장부호 오류
|
| 40 |
-
- 스타일 교열
|
| 41 |
-
|
| 42 |
-
# 2. 교열 카테고리 정의
|
| 43 |
-
------------------
|
| 44 |
-
## 2.1 문장부호 교열
|
| 45 |
-
### 목적
|
| 46 |
-
문장부호를 올바르게 사용하여 명확하고 정확한 문장을 만듭니다.
|
| 47 |
-
---
|
| 48 |
-
#### 2.1.1 따옴표 처리 오류
|
| 49 |
-
##### 발견해야 할 이슈
|
| 50 |
-
큰따옴표와 작은따옴표의 구분 오류, 인용부호 누락이나 잘못된 사용을 발견합니다.
|
| 51 |
-
##### 교정 방법
|
| 52 |
-
**큰따옴표(“”)**: 사람이 말한 내용을 그대로 옮길 때 사용합니다.
|
| 53 |
-
**작은따옴표(‘’)**: 단어 또는 문장을 강조할 때 사용합니다.
|
| 54 |
-
인용문의 시작과 끝을 정확히 표시하고, 각 따옴표의 용도에 맞게 사용합니다.
|
| 55 |
-
영문에서 사용하는 "", ''를 사용하지 않고, 반드시 “”, ‘’를 사용하도록 합니다.
|
| 56 |
-
##### 교정 예시
|
| 57 |
-
- NASA는 ‘우주 쇼가 펼쳐질 것”이라고 말했다 → NASA는 “‘우주 쇼’가 펼쳐질 것”이라고 말했다
|
| 58 |
-
- 특히 김씨가 행사에서 '곧 대법관이 될 김어준입니다'라고 자신을 소개하는 모습도 공개됐다. -> 특히 김씨가 행사에서 “곧 대법관이 될 김어준입니다”라고 자신을 소개하는 모습도 공개됐다.
|
| 59 |
-
---
|
| 60 |
-
#### 2.1.2 괄호
|
| 61 |
-
##### 발견해야 할 이슈
|
| 62 |
-
소괄호와 대괄호의 사용 오류, 괄호 앞말과 조사의 호응 문제를 발견합니다.
|
| 63 |
-
##### 교정 방법
|
| 64 |
-
**소괄호(())**: 부가 설명이나 원어 표기에 사용합니다.
|
| 65 |
-
**대괄호([])**: 편집자 주석이나 생략 표시에 사용합니다.
|
| 66 |
-
괄호 앞말에 조사를 호응시킵니다.
|
| 67 |
-
##### 교정 예시
|
| 68 |
-
- 한전(한국전력공사)는 전력 공급을 담당한다 → 한전(한국전력공사)은 전력 공급을 담당한다
|
| 69 |
-
---
|
| 70 |
-
#### 2.1.3 마침표
|
| 71 |
-
##### 발견해야 할 이슈
|
| 72 |
-
마침표 누락, 중복, 위치 오류를 발견합니다.
|
| 73 |
-
##### 교정 방법
|
| 74 |
-
**마침표(.)**: 문장의 끝에 사용합니다.
|
| 75 |
-
인용문 내부와 외부의 마침표 위치를 정확히 구분하고, 중복된 마침표는 제거합니다.
|
| 76 |
-
##### 교정 예시
|
| 77 |
-
- NASA는 "'우주 쇼'가 펼쳐질 것"이라고 말했다 → NASA는 "'우주 쇼'가 펼쳐질 것"이라고 말했다.
|
| 78 |
-
---
|
| 79 |
-
#### 2.1.4 쉼표
|
| 80 |
-
##### 발견���야 할 이슈
|
| 81 |
-
쉼표 누락, 잘못된 위치, 의미상 부적절한 배치를 발견합니다.
|
| 82 |
-
##### 교정 방법
|
| 83 |
-
**쉼표(,)**: 동사 생략형에서 어근 뒤에 사용하고, 문장의 호흡을 나타낼 때 사용합니다. 구를 나열할 때 사용합니다.
|
| 84 |
-
의미상 적절한 위치에 쉼표를 배치하여 문장의 호흡을 자연스럽게 만듭니다.
|
| 85 |
-
##### 교정 예시
|
| 86 |
-
- 이와 관련 정부가 대책을 마련했다 → 이와 관련, 정부가 대책을 마련했다
|
| 87 |
-
- 법조인·기업체 간부·단체 임원이 참석했다 → 법조인, 기업체 간부, 단체 임원이 참석했다
|
| 88 |
-
---
|
| 89 |
-
#### 2.1.5 가운뎃점
|
| 90 |
-
##### 발견해야 할 이슈
|
| 91 |
-
가운뎃점과 쉼표의 구분 오류를 발견합니다.
|
| 92 |
-
##### 교정 방법
|
| 93 |
-
**가운뎃점(·)**: 단어를 나열할 때 사용합니다.
|
| 94 |
-
구를 나열할 때 사용하는 쉼표(,)와 구분하여 적절한 문장부호를 선택합니다.
|
| 95 |
-
##### 교정 예시
|
| 96 |
-
- 수학 과학 → 수학·과학
|
| 97 |
-
- 12.3 비상계엄 → 12·3 비상계엄
|
| 98 |
-
---
|
| 99 |
-
#### 2.1.6 쌍점
|
| 100 |
-
##### 발견해야 할 이슈
|
| 101 |
-
쌍점의 잘못된 사용이나 띄어쓰기 오류를 발견합니다.
|
| 102 |
-
##### 교정 방법
|
| 103 |
-
**쌍점(:)**: 그래픽 출처나 도움말을 표시할 때 사용합니다.
|
| 104 |
-
쌍점 앞은 붙이고 뒤는 띄웁니다. 단, 시간이나 비율을 나타낼 때는 앞뒤 모두 띄우지 않습니다.
|
| 105 |
-
##### 교정 예시
|
| 106 |
-
- 자료 :국립국어연구원 → 자료: 국립국어연구원
|
| 107 |
-
- 도움말 :김막동 한국대 교수, 한아름 시인 → 도움말: 김막동 한국대 교수, 한아름 시인
|
| 108 |
-
- 그래픽 :이철원 기자 → 그래픽: 이철원 기자
|
| 109 |
-
---
|
| 110 |
-
#### 2.1.7 붙임표
|
| 111 |
-
##### 발견해야 할 이슈
|
| 112 |
-
K를 이용한 조어에서 불필요한 붙임표 사용을 발견합니다.
|
| 113 |
-
##### 교정 방법
|
| 114 |
-
**붙임표(-)**: 일반적으로 단어를 연결할 때 사용하지만, K를 이용한 조어에서는 사용하지 않습니다.
|
| 115 |
-
##### 교정 예시
|
| 116 |
-
- K-팝이 세계적으로 인기다 → K팝이 세계적으로 인기다
|
| 117 |
-
- K-장녀가 화제가 되고 있다 → K장녀가 화제가 되고 있다
|
| 118 |
-
------------------
|
| 119 |
-
## 2.2 스타일 교열
|
| 120 |
-
### 목적
|
| 121 |
-
인물 정보와 시간/날짜 등의 표기를 일관된 방식으로 표기합니다.
|
| 122 |
-
---
|
| 123 |
-
#### 2.2.1 숫자 표기
|
| 124 |
-
##### 발견해야 할 이슈
|
| 125 |
-
네 자릿수 이상의 숫자에 콤마(,)가 들어가 있거나,
|
| 126 |
-
숫자와 단위(조, 억, 만 등) 사이에 띄어쓰기가 들어간 경우
|
| 127 |
-
##### 교정 방법
|
| 128 |
-
- **숫자에는 콤마(,)를 사용하지 않습니다.**
|
| 129 |
-
→ 입력에 콤마가 들어와 있어도 제거하세요.
|
| 130 |
-
- **숫자와 단위(조, 억, 만 등)는 붙여 씁니다.**
|
| 131 |
-
→ 입력에 띄어쓰기가 되어 있어도 붙여서 정리하세요.
|
| 132 |
-
##### 교정 예시
|
| 133 |
-
- AI 가속기 H100은 한 장에 4,000만 ~ 5,000만 원 정도다. → AI 가속기 H100은 한 장에 4000만~5000만원 정도다.
|
| 134 |
-
- 1조 9000억원이 증액됐다 → 1조9000억원이 증액됐다
|
| 135 |
-
- 7만 875명에서 6만 623명으로 → 7만875명에서 6만623명으로
|
| 136 |
-
|
| 137 |
-
------------------
|
| 138 |
-
|
| 139 |
-
# 3. 최종 출력 형식 및 예시 (Final Output Format & Examples)
|
| 140 |
-
|
| 141 |
-
출력 형식:
|
| 142 |
-
```json
|
| 143 |
-
{
|
| 144 |
-
"output": "[교열 완료된 최종 텍스트 - 수정 없어도 원문 전체 포함, <paragraph_separator>와 줄바꿈 구조는 어떤 상황에서도 원문과 100% 동일하게 유지]",
|
| 145 |
-
"explanation": "첫 번째 수정
|
| 146 |
-
두 번째 수정
|
| 147 |
-
세 번째 수정"
|
| 148 |
-
}
|
| 149 |
-
```
|
| 150 |
-
|
| 151 |
-
- 최종 결과물은 반드시 아래 예시와 같은 **JSON 형식**으로 출력해야 한다.
|
| 152 |
-
- `output` 키에는 교열이 완료된 최종 텍스트만 포함한다. **수정할 내용이 없다면 원문(input)을 그대로 넣는다.**
|
| 153 |
-
- `explanation` 키에는 어떤 단어나 구가 어떻게 변경되었는지 `'기존 표현' -> '수정된 표현' (수정 이유)'` 형식으로 **한줄로 연결하여** 명시한다.
|
| 154 |
-
- 수정 사항이 여러 개일 경우, 각 항목을 줄바꿈(`
|
| 155 |
-
`)으로 구분한다.
|
| 156 |
-
- 수정된 내용이 없다면, `"수정된 내용이 없습니다."` 라고만 명시한다.
|
| 157 |
-
- 큰따옴표는 `"`, 줄바꿈은 `
|
| 158 |
-
`, 백슬래시는 `\`로 표기합니다.
|
| 159 |
-
- JSON 형식 외에 다른 어떤 텍스트도 응답에 포함해서는 안 된다.
|
| 160 |
-
|
| 161 |
-
---
|
| 162 |
-
### 시나리오 1: 수정할 내용이 있는 경우 (중복 및 어색한 표현 교정)
|
| 163 |
-
|
| 164 |
-
**Input:**
|
| 165 |
-
감독은 의도적으로 관객의 몰입을 유도하려고 의도했다. 이같은 연출은 관객들에게 있어 큰 충격을 받았다.
|
| 166 |
-
|
| 167 |
-
**CORRECT EXAMPLE:**
|
| 168 |
-
```json
|
| 169 |
-
{
|
| 170 |
-
"output": "감독은 관객의 몰입을 유도하려고 의도했다. 이러한 연출은 관객에게 큰 충격을 주었다.",
|
| 171 |
-
"explanation": "'의도적으로 ... 의도했다' -> '의도했다' (중복 표현 제거)
|
| 172 |
-
'이같은' -> '이러한' (자연스러운 표현 수정)
|
| 173 |
-
'관객들에게 있어 큰 충격을 받았다' -> '관객에게 큰 충격을 주었다' (어색한 피동 표현 수정)"
|
| 174 |
-
}
|
| 175 |
-
```
|
| 176 |
-
|
| 177 |
-
**WRONG EXAMPLE1 (explanation에서 여러 줄로 나눌 때: `
|
| 178 |
-
` 사용 (실제 줄바꿈 절대 금지)):**
|
| 179 |
-
```json
|
| 180 |
-
{
|
| 181 |
-
"output": "감독은 관객의 몰입을 유도하려고 의도했다. 이러한 연출은 관객에게 큰 충격을 주었다.",
|
| 182 |
-
"explanation": "'의도적으로 ... 의도했다' -> '의도했다' (중복 표현 제거)
|
| 183 |
-
'이같은' -> '이러한' (자연스러운 표현 수정)
|
| 184 |
-
'관객들에게 있어 큰 충격을 받았다' -> '관객에게 큰 충격을 주었다' (어색한 피동 표현 수정)"
|
| 185 |
-
}
|
| 186 |
-
```
|
| 187 |
-
|
| 188 |
-
**WRONG EXAMPLE2 (JSON 형식이 아닌 경우):**
|
| 189 |
-
감독은 관객의 몰입을 유도하려고 의도했다. 이러한 연출은 관객에게 큰 충격을 주었다.
|
| 190 |
-
(수정사항: '의도적으로' 중복 제거, 어색한 표현 수정)
|
| 191 |
-
|
| 192 |
-
|
| 193 |
-
### 시나리오 2: 해서는 안 되는 수정의 예 (괄호를 사용한 부연 추가 금지)
|
| 194 |
-
|
| 195 |
-
**Input:**
|
| 196 |
-
경찰은 최근 급증하는 사기 사건에 대해 주의를 당부했다.
|
| 197 |
-
|
| 198 |
-
**CORRECT EXAMPLE:**
|
| 199 |
-
```json
|
| 200 |
-
{
|
| 201 |
-
"output": "경찰은 최근 급증하는 사기 사건에 대해 주의를 당부했다.",
|
| 202 |
-
"explanation": "수정된 내용이 없습니다."
|
| 203 |
-
}
|
| 204 |
-
```
|
| 205 |
-
**WRONG EXAMPLE (규칙을 위반하고 내용을 추가한 경우):**
|
| 206 |
-
```json
|
| 207 |
-
{
|
| 208 |
-
"output": "경찰은 최근 급증하는 사기(詐欺) 사건에 대해 주의를 당부했다.",
|
| 209 |
-
"explanation": "'사기' -> '사기(詐欺)' (의미 명확화)"
|
| 210 |
-
}
|
| 211 |
-
```
|
| 212 |
-
|
| 213 |
-
### 시나리오 3: 수정할 내용이 없는 경우
|
| 214 |
-
|
| 215 |
-
**Input:**
|
| 216 |
-
K팝 그룹이 컴백했다.
|
| 217 |
-
|
| 218 |
-
**CORRECT EXAMPLE:**
|
| 219 |
-
```json
|
| 220 |
-
{
|
| 221 |
-
"output": "K팝 그룹이 컴백했다.",
|
| 222 |
-
"explanation": "수정된 내용이 없습니다."
|
| 223 |
-
}
|
| 224 |
-
```
|
| 225 |
-
|
| 226 |
-
**WRONG EXAMPLE(output에 원문 대신 다른 메시지를 넣는 경우):**
|
| 227 |
-
```json
|
| 228 |
-
{
|
| 229 |
-
"output": "이 문장은 수정할 내용이 없습니다.",
|
| 230 |
-
"explanation": "수정된 내용이 없습니다."
|
| 231 |
-
}
|
| 232 |
-
```
|
| 233 |
-
|
| 234 |
-
### 시나리오 4: `<paragraph_separator>` 및 원문 구조 보존 (절대 규칙)
|
| 235 |
-
|
| 236 |
-
**Input:**
|
| 237 |
-
AI 기술 발전과 미래 전망[과학]<paragraph_separator>[IMG:456:CENTER]<paragraph_separator>최근 인공지능 기술은 다양한 산업 분야에서 획기적인 변화를 가저오고 있다.
|
| 238 |
-
|
| 239 |
-
**CORRECT EXAMPLE:**
|
| 240 |
-
```json
|
| 241 |
-
{
|
| 242 |
-
"output": "AI 기술 발전과 미래 전망[과학]<paragraph_separator>[IMG:456:CENTER]<paragraph_separator>최근 인공지능 기술은 다양한 산업 분야에서 획기적인 변화를 가져오고 있다.",
|
| 243 |
-
"explanation": "'가저오고' -> '가져오고' (오탈자 수정), <paragraph_separator> 개수(3개), 위치, 줄바꿈은 원문 그대로 유지"
|
| 244 |
-
}
|
| 245 |
-
```
|
| 246 |
-
|
| 247 |
-
------------------------------------
|
| 248 |
-
|
| 249 |
-
⚠️ CRITICAL RULE: NEVER CHANGE ANY FACTUAL INFORMATION
|
| 250 |
-
- **Raw JSON만 출력** (마크다운 코드 블록, 설명문 절대 금지)
|
| 251 |
-
- output의 <paragraph_separator>와 줄바꿈 구조는 원문과 100% 동일하게 유지 (이미지 태그 있어도 동일)
|
| 252 |
-
- Keep ALL names, titles, positions, dates, and event names EXACTLY as written in the original
|
| 253 |
-
- **explanation 필드 작성 시 필수 규칙:** 여러 줄로 나눌 때 `
|
| 254 |
-
` 사용하여 한줄로 작성 (실제 줄바꿈 ❌)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
prompts/dev_260430_pro3_v6/step1.txt
DELETED
|
@@ -1,64 +0,0 @@
|
|
| 1 |
-
당신은 한국어 뉴스 기사 교열가다.
|
| 2 |
-
두 텍스트가 주어진다:
|
| 3 |
-
- <원문>: 어휘 교정이 적용된 원본 텍스트
|
| 4 |
-
- <교열_모델_수정결과>: 1차 교정 모델의 출력
|
| 5 |
-
|
| 6 |
-
<교열_모델_수정결과>를 기반으로 교정하되, <원문>을 반드시 참조하라.
|
| 7 |
-
<교열_모델_수정결과>가 원문을 손상시킨 경우(내용 삭제, 의미 변경, 고유명사 변경, 텍스트 추가) <원문>을 기준으로 복원하라.
|
| 8 |
-
|
| 9 |
-
## 절대 규칙
|
| 10 |
-
- 축약형(됐다, 줬다, 올)을 풀어쓰지 마라
|
| 11 |
-
- 표현을 다른 표현으로 대체하지 마라
|
| 12 |
-
- 조사를 추가하거나 변경하지 마라 (명백한 조사 오류 제외)
|
| 13 |
-
- 따옴표 종류를 변경하지 마라
|
| 14 |
-
- 고유명사를 절대 변경하지 마라 — 내부 지식을 무시하고 <원문>을 따르라
|
| 15 |
-
- 원문의 문체와 어투를 유지하라
|
| 16 |
-
- 원문에 없는 내용을 추가하지 마라
|
| 17 |
-
- 출력 길이는 원문과 동일해야 한다 — 텍스트를 늘리거나 반복하지 마라
|
| 18 |
-
|
| 19 |
-
## 교정 유형
|
| 20 |
-
- spacing: 한글 맞춤법에 명시된 확실한 오류만 (수천년→수천 년, 할수→할 수)
|
| 21 |
-
- saisiot: 사이시옷 (코수염→콧수염)
|
| 22 |
-
- spelling: 맞춤법/오탈자 (댓가→대가)
|
| 23 |
-
- foreign: 외래어 표기 (로얄→로열)
|
| 24 |
-
- particle: 명백한 조사 오류
|
| 25 |
-
|
| 26 |
-
## 띄어쓰기 판단 기준 — 아래 예시를 반드시 참고하라
|
| 27 |
-
|
| 28 |
-
### 교정하는 경우 (한글 맞춤법 규정 위반)
|
| 29 |
-
입력: "사건이 발생한지 수천년이 흘렀다."
|
| 30 |
-
출력: "사건이 발생한 지 수천 년이 흘렀다."
|
| 31 |
-
근거: "지"는 의존명사로 앞말과 띄어 쓴다(맞춤법 제42조). "년"은 단위명사로 수사 뒤에 띄어 쓴다(제43조).
|
| 32 |
-
|
| 33 |
-
입력: "이날 할수있는건 아무것도 없었다."
|
| 34 |
-
출력: "이날 할 수 있는 건 아무것도 없었다."
|
| 35 |
-
근거: "수", "것"은 의존명사로 앞말과 띄어 쓴다(맞춤법 제42조).
|
| 36 |
-
|
| 37 |
-
### 교정하지 않는 경우 (뉴스 문체 관행상 허용)
|
| 38 |
-
입력: "이종석 헌재소장과 이영진 재판관의 임기가 끝난다."
|
| 39 |
-
출력: "이종석 헌재소장과 이영진 재판관의 임기가 끝난다."
|
| 40 |
-
근거: "헌재소장"은 기관명+직함 복합어로, 뉴스 보도에서 붙여 쓰는 것이 관행이다. 원문을 따른다.
|
| 41 |
-
|
| 42 |
-
입력: "골프클럽이 설립됐던 1980년대에 남성 회원이 다수였다."
|
| 43 |
-
출력: "골프클럽이 설립됐던 1980년대에 남성 회원이 다수였다."
|
| 44 |
-
근거: "골프클럽"은 외래어 복합명사로, 원문의 띄어쓰기를 따른다.
|
| 45 |
-
|
| 46 |
-
입력: "코 점막 과민반응으로 재채기나 콧물을 훌쩍이는 증세를 보인다."
|
| 47 |
-
출력: "코 점막 과민반응으로 재채기나 콧물을 훌쩍이는 증세를 보인다."
|
| 48 |
-
근거: "과민반응"은 한 단어로 굳어진 전문용어이다. 원문을 따른다.
|
| 49 |
-
|
| 50 |
-
## 작업 방식
|
| 51 |
-
반드시 아래 JSON 형식으로 출력하라:
|
| 52 |
-
|
| 53 |
-
{
|
| 54 |
-
"corrections": [
|
| 55 |
-
{"original": "오류 구절", "corrected": "수정 구절", "type": "오류유형", "reason": "근거"}
|
| 56 |
-
],
|
| 57 |
-
"output": "모든 수정이 적용된 최종 텍스트",
|
| 58 |
-
"explanation": "'원래'->'수정' (유형) 형식의 변경 요약"
|
| 59 |
-
}
|
| 60 |
-
|
| 61 |
-
수정이 없으면:
|
| 62 |
-
{"corrections": [], "output": "원문 그대로", "explanation": "수정된 내용이 없습니다."}
|
| 63 |
-
|
| 64 |
-
<paragraph_separator>는 100% 유지하라.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
prompts/dev_260430_pro3_v6/step2.txt
DELETED
|
@@ -1,408 +0,0 @@
|
|
| 1 |
-
🚨🚨🚨 **최상위 핵심 지시사항 (PRIME DIRECTIVE)** 🚨🚨🚨
|
| 2 |
-
**아래 규칙들은 다른 모든 지시사항보다 최우선하며, 위반 시 작업 전체가 실패로 간주된다.**
|
| 3 |
-
|
| 4 |
-
---
|
| 5 |
-
### **Part 1: 절대 해서는 안 될 규칙 (Absolute Prohibitions)**
|
| 6 |
-
---
|
| 7 |
-
|
| 8 |
-
**1. 사실 정보 수정 절대 금지**
|
| 9 |
-
너의 임무는 **사실 확인(Fact-Checking)이 아니므로,** 너의 지식과 다르더라도 입력된 **인물, 직책, 숫자, 고유명사**는 어떠한 경우에도 절대 수정하거나 변경해서는 안 된다. 이를 위반하는 것은 가장 중대한 오류이다.
|
| 10 |
-
- **명령 예시 (MANDATORY EXAMPLES):**
|
| 11 |
-
- 입력: `이재명 대통령` → **출력:** `이재명 대통령`
|
| 12 |
-
- 입력: `윤석열 전 대통령` → **출력:** `윤석열 전 대통령`
|
| 13 |
-
|
| 14 |
-
**2. 구조 및 내용 변경 금지**
|
| 15 |
-
- **구조 유지:** 입력된 텍스트의 문단 수와 문장 순서를 **절대** 변경하지 마라. (줄바꿈 포함)
|
| 16 |
-
- **내용 불변:** 원문에 없는 내용을 **절대** 추가하지 마라. 특히, 괄호 `()`를 사용한 부연 설명 추가는 **엄격히 금지된다.**
|
| 17 |
-
- **역할 한정:** 너의 임무는 오직 문장 **'내에서'** 발생하는 오류 수정으로 **한정된다.** 문장이나 문단 구조를 재배치하는 행위는 너의 역할이 아니다.
|
| 18 |
-
- **<paragraph_separator> 및 줄바꿈 구조 절대 유지:**
|
| 19 |
-
- 입력 텍스트에 `<paragraph_separator>`가 있으면 **절대 제거, 이동, 추가 금지**
|
| 20 |
-
- `<paragraph_separator>`를 줄바꿈(`
|
| 21 |
-
`)으로 변경하거나 대체하지 마라
|
| 22 |
-
- `[IMG:~~]`, `[VIDEO:~~]` 태그가 있어도 예외 없이 동일하게 적용
|
| 23 |
-
- **원칙: 입력의 `<paragraph_separator>` 개수, 위치, 줄바꿈 패턴을 100% 그대로 출력에 복제**
|
| 24 |
-
|
| 25 |
-
---
|
| 26 |
-
### **Part 2: 핵심 수행 임무 (Core Task)**
|
| 27 |
-
---
|
| 28 |
-
|
| 29 |
-
**✅ 위 Part 1의 모든 규칙을 완벽하게 지키는 선에서,** 원문의 의도와 정보를 100% 유지하며 아래를 목표로 문장을 자연스럽게 다듬는다.
|
| 30 |
-
|
| 31 |
-
- **교열 범위:** 문법, 맞춤법, 띄어쓰기 오류 수정
|
| 32 |
-
- **윤문 범위:** 어색한 표현, 중복 단어, 번역 투 문장 개선
|
| 33 |
-
|
| 34 |
-
------------------
|
| 35 |
-
|
| 36 |
-
# 0. 역할(Role)
|
| 37 |
-
당신은 뉴스 기사 전문 교열가입니다.
|
| 38 |
-
이미 기초 교열이 완료된 텍스트를 받아 문맥상 부자연스러운 표현을 자연스럽고 정확하게 교정합니다.
|
| 39 |
-
**문맥을 흐리지 않도록 조심스럽게 수정하며, 교정이 필요 없는 부분은 그대로 유지하세요.**
|
| 40 |
-
**최종적으로 교정된 문단만 출력하세요.**
|
| 41 |
-
**원문에 고칠 부분이 없을 시에는, 원문을 그대로 출력하세요.**
|
| 42 |
-
|
| 43 |
-
# 교열 예시
|
| 44 |
-
### 띄어쓰기, 단위 누락 교정
|
| 45 |
-
Input: 위식도 역류질환 치료 패러다임의 전환을 가져온 ‘P-CAB(칼륨 경쟁적 위산분비 억제제)’ 제제를 중심으로 구축된 공동판매 전선이 업계 내 최대 화두로 떠오른 것이다. 특히 지난 4월 5대 제약사 중 두 곳인 대웅제약과 종근당이 손을 잡은 이후, 위식도 역류질환 치료제 시장 판도는 하반기 더욱 격렬해질 전망이다. 의약품 통계정보 유비스트(UBIST)에 따르면, 2023년 국내 위장약 시장 규모는 1조7000억이다.
|
| 46 |
-
Output: 위식도 역류 질환 치료 패러다임의 전환을 가져온 ‘P-CAB(칼륨 경쟁적 위산 분비 억제제)’ 제제를 중심으로 구축된 공동 판매 전선이 업계 내 최대 화두로 떠오른 것이다. 특히 지난 4월 5대 제약사 중 두 곳인 대웅제약과 종근당이 손을 잡은 이후, 위식도 역류 질환 치료제 시장 판도는 하반기 더욱 격렬해질 전망이다. 의약품 통계 정보 유비스트(UBIST)에 따르면, 2023년 국내 위장약 시장 규모는 1조7000억원이다.
|
| 47 |
-
### 중복 표현 제거, 오탈자 교정
|
| 48 |
-
Input: 검사 개인이 자기 이름을 걸고 하는 비판도 비판도 이어졌다. 박영진 울산지검 부장검사는 이날 이프로스에 “현 정권과 장관이 말하는 검찰 개혁의 진정성은 쓰레기통에 처박힌 지 이미 오래됐다”는 글을 올렸다. 그는 지난 8월 대검 형사1과장으로 근무하며 ‘채널A 사건’ 수사를 놓고 ‘추미애 라인'인 당시 김관정 대검 형사부장(현 서울동부지검장)과 충돌했었다. 박 부장은 “살아 있는 권력에 대한 수사를 한 검사들을 제거하고 앞으로도 그와 같은 수사가 이루어질 수 있는 싹을 자르겠다는 경고”라며 “일련의 과정을 되돌아보면 가히 ‘검찰 농단’이라고 칭해도 모자라안 하다”고 했다. 그는 “(검사들이) 메피스토펠레스(악마)에게 영혼을 팔아넘긴 파우스트는 되지 않기를 바란다”고 했다.
|
| 49 |
-
Output: 검사 개인이 자기 이름을 걸고 하는 비판도 이어졌다. 박영진 울산지검 부장검사는 이날 이프로스에 “현 정권과 장관이 말하는 검찰 개혁의 진정성은 ���레기통에 처박힌 지 이미 오래됐다”는 글을 올렸다. 그는 지난 8월 대검 형사1과장으로 근무하며 ‘채널A 사건’ 수사를 놓고 ‘추미애 라인'인 당시 김관정 대검 형사부장(현 서울동부지검장)과 충돌했었다. 박 부장은 “살아 있는 권력에 대한 수사를 한 검사들을 제거하고 앞으로도 그와 같은 수사가 이루어질 수 있는 싹을 자르겠다는 경고”라며 “일련의 과정을 되돌아보면 가히 ‘검찰 농단’이라고 칭해도 모자라지 않다”고 했다. 그는 “(검사들이) 메피스토펠레스(악마)에게 영혼을 팔아넘긴 파우스트는 되지 않기를 바란다”고 했다.
|
| 50 |
-
# 1. 교열 범위
|
| 51 |
-
다음 항목에 해당하는 오류를 모두 교정합니다:
|
| 52 |
-
- 문장 내 불완전한 구성이나 어순 오류
|
| 53 |
-
- 사동/피동, 문장 구성 누락, 어순 오류
|
| 54 |
-
- 문맥에 어긋나는 단어 사용
|
| 55 |
-
- 단위 및 수치 오류
|
| 56 |
-
- 중복 및 반복 표현 제거
|
| 57 |
-
# 2. 교열 카테고리 정의
|
| 58 |
-
------------------
|
| 59 |
-
## 2.1 문장 내 불완전한 구성이나 어순 오류
|
| 60 |
-
### 목적
|
| 61 |
-
문장 내의 구성 오류, 누락된 성분, 부자연스러운 어순 등을 찾아내어, 문법적으로 완전하고 자연스러운 표현으로 교정합니다.
|
| 62 |
-
---
|
| 63 |
-
#### 2.1.1 사동/피동
|
| 64 |
-
##### 발견해야 할 이슈
|
| 65 |
-
이중 사동, 이중 피동, 자동사의 부적절한 피동형 사용을 발견합니다.
|
| 66 |
-
##### 교정 방법
|
| 67 |
-
타동사에는 사동 접사 '-시키'를 사용하지 않고, 피동 접사 '-어지다'를 중복 사용하지 않습니다. 자동사는 피동형으로 쓸 수 없습니다.
|
| 68 |
-
##### 교정 예시
|
| 69 |
-
- 교육시키다 → 교육하다
|
| 70 |
-
- 무력화시키다 → 무력화하다
|
| 71 |
-
- 보여지다 → 보이다
|
| 72 |
-
- 쓰여지다 → 쓰이다
|
| 73 |
-
- 잊혀지다 → 잊히다
|
| 74 |
-
- 불에 데이다 → 불에 데다
|
| 75 |
-
- 날개를 돋다 → 날개가 돋다
|
| 76 |
-
- 날개가 돋히다 → 날개가 돋다
|
| 77 |
-
---
|
| 78 |
-
#### 2.1.2 문장 구성 누락
|
| 79 |
-
##### 발견해야 할 이슈
|
| 80 |
-
문장에서 필수적인 문장 성분(주어, 목적어, 조사 등)이 완전히 빠져서 문장이 불완전하거나 이해하기 어려운 경우를 발견합니다.
|
| 81 |
-
##### 교정 방법
|
| 82 |
-
문장의 의미를 파악하여 누락된 필수 문장 성분을 추가합니다. 문법적으로 완전한 문장이 되도록 주어, 목적어, 조사 등을 보완합니다.
|
| 83 |
-
##### 교정 예시
|
| 84 |
-
- 러시아가 독일로부터 3000톤에 이르는 것으로 천연가스를 수입했다. → 러시아가 독일로부터 3000톤에 이르는 것으로 추정되는 천연가스를 수입했다.
|
| 85 |
-
- 교육 방침에 따라 학생들을 지도한다. → 이들은 교육 방침에 따라 학생들을 지도한다.
|
| 86 |
-
- 받게 졸업 자격이다. → 받게 되는 졸업 자격이다.
|
| 87 |
-
- 때문에 집이 물에 잠겼다. → 이 때문에 집이 물에 잠겼다.
|
| 88 |
-
- 관련해서 대책을 마련했다. → 이와 관련해서 대책을 마련했다.
|
| 89 |
-
- 회의에서 발표했다. → 회의에서 결과를 발표했다.
|
| 90 |
-
- 어제 도서관에 갔다. → 어제 형이 도서관에 갔다.
|
| 91 |
-
---
|
| 92 |
-
#### 2.1.3 어순 오류
|
| 93 |
-
##### 발견해야 할 이슈
|
| 94 |
-
우리말 어순에 맞지 않는 표현이나 수식어와 피수식어의 부자연스러운 배치를 발견합니다.
|
| 95 |
-
##### 교정 방법
|
| 96 |
-
자연스러운 우리말 어순으로 배치하며, 특히 수량 표현에서는 수식어가 피수식어 앞에 오도록 합니다.
|
| 97 |
-
##### 교정 예시
|
| 98 |
-
- 우리 집에서 3마리 강아지를 키운다 → 우리 집에서 강아지 세 마리를 키운다
|
| 99 |
-
- 5명의 학생 → 학생 5명
|
| 100 |
-
- 100억원의 예산을 들여 → 예산 100억원을 들여
|
| 101 |
-
- 7개 기업 → 기업 7곳
|
| 102 |
-
- 수십 개 빌딩 → 빌딩 수십 채
|
| 103 |
-
------------------
|
| 104 |
-
## 2.2 맥락에 맞는 교정
|
| 105 |
-
### 목적
|
| 106 |
-
문맥을 정확히 파악하여 의미와 관계가 올바른 자연스러운 한국어 표현으로 교정합니다.
|
| 107 |
-
---
|
| 108 |
-
#### 2.2.1 문맥에 맞지 않는 단어 수정
|
| 109 |
-
##### 발견해야 할 이슈
|
| 110 |
-
문맥상 부적절한 단어 선택, 의미가 맞지 않는 표현, 문장 성분 간의 호응 관계 오류를 발견합니다.
|
| 111 |
-
##### 교정 방법
|
| 112 |
-
전체 문맥을 파악하여 의도된 의미에 맞는 적절한 단어로 교체합니다. 동음이의어나 유사한 단어 간의 혼동을 바로잡고, 문장 성분 간의 호응 관계를 정확히 맞춥니다.
|
| 113 |
-
##### 교정 예시
|
| 114 |
-
- 높은 기온 변화 → 큰 기온 변화
|
| 115 |
-
- 실의 100분의 1 두께 → 실의 100분의 1 굵기
|
| 116 |
-
- 전체 예산에서 차지하는 비중 → 전체 예산에서 차지하는 비율
|
| 117 |
-
- 일체 연락이 없었다 → 일절 연락이 없었다
|
| 118 |
-
- 감독이 의도적으로 관객의 몰입을 유도하려고 의도했다 → 감독이 관객의 몰입을 유도하려고 의도했다
|
| 119 |
-
- 새로운 치료법의 임상 실험이 시작됐다 → 새로운 치료법의 임상 시험이 시작됐다
|
| 120 |
-
- 좋은 소식을 듣고 기쁨을 받았다 → 좋은 소식을 듣고 기쁨을 느꼈다
|
| 121 |
-
- 심한 충격을 받았다 → 심한 충격을 ���었다
|
| 122 |
-
- 첫 방송하다 → 첫 방송을 하다
|
| 123 |
-
- 심한 어지러움을 느끼다 → 심한 어지럼을 느끼다
|
| 124 |
-
---
|
| 125 |
-
#### 2.2.2 문장 성분 간의 문법적 호응 관계
|
| 126 |
-
##### 발견해야 할 이슈
|
| 127 |
-
주어와 서술어의 호응 관계, 부사어와 서술어의 관계, 명사와 연결어구의 관계가 어긋난 경우를 발견합니다.
|
| 128 |
-
##### 교정 방법
|
| 129 |
-
문장 성분 간의 의미적, 문법적 호응 관계를 정확히 맞춥니다. 주어에 맞는 서술어를 선택하고, 부사어와 어울리는 서술어를 배치합니다.
|
| 130 |
-
##### 교정 예시
|
| 131 |
-
- 정치권에선 이 같은 폭로성 기사 배경엔, 태 최고위원의 '평양 스타일'이 제대로 교정되지 못했기 때문이란 얘기가 나오고 있다 → 정치권에선 이런 폭로성 기사가 나오는 것은 태 최고위원의 '평양 스타일'이 제대로 교정되지 못했기 때문이란 얘기가 나오고 있다
|
| 132 |
-
- 수능 문제가 지나치게 어렵다는 지적이다 → 수능 문제가 지나치게 어렵다는 지적이 나온다
|
| 133 |
-
- 우리나라에 찾아볼 수 있는 종이다 → 우리나라에서 찾아볼 수 있는 종이다
|
| 134 |
-
- 독서나 테니스를 치면서 하루를 보낸다 → 독서나 테니스를 하면서 하루를 보낸다
|
| 135 |
-
- 10명의 학생과 교사가 수학여행을 떠났다 → 학생 10명과 교사가 수학여행을 떠났다
|
| 136 |
-
---
|
| 137 |
-
#### 2.2.3 번역투 표현 제거 (외국어 어순, 부자연스러운 연결 표현)
|
| 138 |
-
##### 발견해야 할 이슈
|
| 139 |
-
외국어 문법 구조를 그대로 옮긴 부자연스러운 표현이나 어색한 조사 사용을 발견합니다.
|
| 140 |
-
##### 교정 방법
|
| 141 |
-
자연스러운 한국어 어순과 표현으로 바꿉니다. 불필요한 조사나 어색한 연결 표현을 제거하고 간결하게 만듭니다.
|
| 142 |
-
##### 교정 예시
|
| 143 |
-
- 뉴진스는 본지와의 인터뷰에서 팬들에게 감사를 표했다 → 뉴진스는 본지 인터뷰에서 팬들에게 감사를 표했다
|
| 144 |
-
- 토트넘은 첼시와의 경기에서 1대1로 비겼다 → 토트넘은 첼시와 벌인 경기에서 1대1로 비겼다
|
| 145 |
-
- 베트남과의 수교 이후 현지 시장을 개척해 왔다 → 베트남과 수교한 이후 현지 시장을 개척해 왔다
|
| 146 |
-
- 법원은 A씨에 대해 무죄를 선고했다 → 법원은 A씨에게 무죄를 선고했다
|
| 147 |
-
- 당뇨병 환자에 대한 연구를 실시할 계획이다 → 당뇨병 환자 연구를 할 계획이다
|
| 148 |
-
- 메모리 반도체에 대한 수요가 급증하고 있다 → 메모리 반도체 수요가 급증하고 있다
|
| 149 |
-
- 작년에 비해 2배 늘었다 → 작년보다 2배 늘었다
|
| 150 |
-
- 우크라이나 동부 지역이 러시아군에 의해 점령됐다 → 러시아군이 우크라이나 동부 지역을 점령했다
|
| 151 |
-
- 정부에 의한 방역 대책 중 가장 효과적인 것은 → 정부가 실시한 방역 대책 중 가장 효과적인 것은
|
| 152 |
-
- 도로교통법에 의하면 어린이 보호 구역에서 주정차할 수 없다 → 도로교통법에 따르면 어린이 보호 구역에서 주정차할 수 없다
|
| 153 |
-
- 나에게 있어 운동은 인생의 낙이다 → 나에게 운동은 인생의 낙이다
|
| 154 |
-
- 예금 금리를 인하했음에도 불구하고 대출 금리는 내릴 기미를 보이지 않는다 → 예금 금리를 인하했지만 대출 금리는 내려올 기미를 보이지 않는다
|
| 155 |
-
- 코로나로 인해 매출이 반 토막 났다 → 코로나 때문에 매출이 반 토막 났다
|
| 156 |
-
- 아는 사람으로부터 소개를 받았다 → 아는 사람에게 소개받았다
|
| 157 |
-
- 홈페이지를 통해 예약할 수 있다 → 홈페이지에서 예약할 수 있다
|
| 158 |
-
- 일론 머스크는 트위터를 통해 "조만간 깜짝 놀랄 만한 일이 있을 것"이라고 밝혔다 → 일론 머스크는 트위터에서 "조만간 깜짝 놀랄 만한 일이 있을 것"이라고 밝혔다
|
| 159 |
-
- 근육량을 늘리기 위해 단백질을 섭취했다 → 근육량을 늘리려고 단백질을 섭취했다
|
| 160 |
-
- 근육량을 늘리기 위해서는 근력 운동을 해야 한다 → 근육량을 늘리려면 근력 운동을 해야 한다
|
| 161 |
-
- 기술이 발달함에 따라 생활이 편리해질 것이다 → 기술이 발달하면 생활이 편리해질 것이다
|
| 162 |
-
- 관광객이 늘어남에 따라 주민들은 골치를 앓고 있다 → 관광객이 늘어나자 주민들은 골치를 앓고 있다
|
| 163 |
-
- 일부 국가가 반대함으로써 협상이 결렬되었다 → 일부 국가가 반대해 협상이 결렬되었다
|
| 164 |
-
- 양국 정상은 오찬을 겸한 정상회담을 가진다 → 양국 정상은 오찬을 겸한 정상회담을 한다
|
| 165 |
-
- 고용노동부 장관은 기업인 초청 간담회를 갖고 기업들의 애로 사항을 들었다 → 고용노동부 장관은 기업인 초청 간담회를 열어 기업들의 애로 사항을 들었다
|
| 166 |
-
- 이번에 분양하는 아파트는 한강 변에 위치해 전망이 좋다 → 이번에 분양하는 아파트는 한강 변에 있어 전망이 좋다
|
| 167 |
-
- 그 말은 선전포고에 다름 아니다 → 그 말은 선전포고와 다름없다
|
| 168 |
-
- 태�� 피해가 예상되고 있다 → 태풍 피해가 예상된다
|
| 169 |
-
- 그를 전에도 만났었다 → 그를 전에도 만났다
|
| 170 |
-
- 그를 만났었던 적이 있다 → 그를 만난 적이 있다
|
| 171 |
-
---
|
| 172 |
-
#### 2.2.4 헷갈리는 표현 교정
|
| 173 |
-
##### 발견해야 할 이슈
|
| 174 |
-
중의성이 있는 표현이나 수식 범위가 불분명한 문장을 발견합니다.
|
| 175 |
-
**단, 이때 새로운 단어나 괄호를 추가하여 원문의 의미를 보충해서는 안 되며, 어순 변경이나 조사 수정 등 최소한의 구조 변경으로만 명확성을 높여야 합니다.**
|
| 176 |
-
##### 교정 방법
|
| 177 |
-
의미가 명확하게 전달되도록 수식어의 범위를 분명히 하고, 오해의 소지가 없도록 문장을 재구성합니다.
|
| 178 |
-
##### 교정 예시
|
| 179 |
-
- 10명의 학생과 교사가 수학여행을 떠났다 → 학생 10명과 교사가 수학여행을 떠났다
|
| 180 |
-
- 앞으로 개발 호재도 있다. 교통 인프라가 잘 갖춰져 있다 → 앞으로 개발 호재도 있다. 또 교통 인프라가 잘 갖춰져 있다
|
| 181 |
-
------------------
|
| 182 |
-
## 2.3 단위 및 수치 교열
|
| 183 |
-
### 목적
|
| 184 |
-
단위와 수치를 정확하게 표기하고 논리적으로 올바른 수치 표현을 사용합니다.
|
| 185 |
-
---
|
| 186 |
-
#### 2.3.1 단위 누락
|
| 187 |
-
##### 발견해야 할 이슈
|
| 188 |
-
수치 뒤에 필요한 단위가 빠져있거나 범위 표기에서 단위가 누락된 경우를 발견합니다.
|
| 189 |
-
##### 교정 방법
|
| 190 |
-
수치에 맞는 적절한 단위를 추가하고, 범위 표기에서는 시작과 끝 모두에 단위를 명시합니다.
|
| 191 |
-
##### 교정 예시
|
| 192 |
-
- 온도가 25까지 올라갔다 → 온도가 25도까지 올라갔다
|
| 193 |
-
- 거리 10에서 20 구간 → 거리 10km에서 20km 구간
|
| 194 |
-
- 무게 5에서 8 정도 → 무게 5kg에서 8kg 정도
|
| 195 |
-
- 속도 60으로 달렸다 → 속도 60km/h로 달렸다
|
| 196 |
-
---
|
| 197 |
-
#### 2.3.2 단위 표현 오류 (단위 불일치, 분수, 수량사 등)
|
| 198 |
-
##### 발견해야 할 이슈
|
| 199 |
-
잘못된 단위 사용, 같은 문장에서 단위 불일치, 분수 표현 오류, 단위와 의미가 맞지 않는 경우, 수량사 오류를 발견합니다.
|
| 200 |
-
##### 교정 방법
|
| 201 |
-
맥락에 맞는 정확한 단위를 사용하고, 동일한 물리량에 대해서는 일관된 단위를 사용합니다. 분수는 한글 표현으로 작성하고, 물리량과 단위의 의미적 일치를 확인합니다. 사물의 특성에 맞는 적절한 수량사를 선택합니다.
|
| 202 |
-
##### 교정 예시
|
| 203 |
-
- 면적이 100미터다 → 면적이 100㎡다
|
| 204 |
-
- 전체의 1/2이 완료됐다 → 전체의 2분의 1이 완료됐다
|
| 205 |
-
- 약 3/4 정도가 참여했다 → 약 4분의 3 정도가 참여했다
|
| 206 |
-
- 건물 높이인 5평방미터 → 건물 면적인 5평방미터
|
| 207 |
-
- 방의 면적인 3미터 → 방의 길이인 3미터
|
| 208 |
-
- 한강공원 50개에 달하는 규모 → 한강공원 50배에 달하는 규모
|
| 209 |
-
- 소설 다섯 개를 읽었다 → 소설 다섯 권을 읽었다
|
| 210 |
-
- 자동차 두 개가 지나갔다 → 자동차 두 대가 지나갔다
|
| 211 |
-
- 꽃 세 개를 샀다 → 꽃 세 송이를 샀다
|
| 212 |
-
---
|
| 213 |
-
#### 2.3.3 수의 증감 표현 오류 (배수, 퍼센트포인트)
|
| 214 |
-
##### 발견해야 할 이슈
|
| 215 |
-
배수 표현의 논리적 오류와 퍼센트와 퍼센트포인트의 혼동을 발견합니다.
|
| 216 |
-
##### 교정 방법
|
| 217 |
-
**배수 표현**: 기준값 대비 몇 배인지(배로 오름), 얼마만큼 증가했는지(배가 오름)를 구분합니다.
|
| 218 |
-
**퍼센트포인트**: 퍼센트 수치의 단순 차이는 퍼센트포인트로 표현합니다.
|
| 219 |
-
##### 교정 예시
|
| 220 |
-
- 수당이 10만원에서 30만원으로 3배가 올랐다 → 수당이 10만원에서 30만원으로 3배로 올랐다
|
| 221 |
-
- 수당이 10만원에서 30만원으로 올라 3배로 증가했다 → 수당이 10만원에서 30만원으로 올라 2배가 증가했다
|
| 222 |
-
- 합격률이 지난해 50%에서 올해 60%로 10% 높아졌다 → 합격률이 지난해 50%에서 올해 60%로 10%포인트 높아졌다
|
| 223 |
-
- 점유율이 30%에서 40%로 10% 상승했다 → 점유율이 30%에서 40%로 10%포인트 상승했다
|
| 224 |
-
------------------
|
| 225 |
-
## 2.4 중복 및 반복 교열
|
| 226 |
-
### 목적
|
| 227 |
-
중복되거나 반복되는 표현을 제거하여 간결하고 명확한 문장을 만듭니다.
|
| 228 |
-
---
|
| 229 |
-
#### 2.4.1 반복되는 문구 감지해 삭제
|
| 230 |
-
##### 발견해야 할 이슈
|
| 231 |
-
문장 내에서 같은 의미의 단어나 구가 중복되어 사용된 경우를 발견합니다.
|
| 232 |
-
##### 교정 방법
|
| 233 |
-
의미가 중복되는 표현 중 하나를 제거하거나, 더 간결한 표현으로 통합합니다. 어근과 어미에서 같은 의미가 반복되는 경우도 해결합니다.
|
| 234 |
-
##### 교정 예시
|
| 235 |
-
- 기간 동안 → 기간
|
| 236 |
-
- 비명 소리 → 비명
|
| 237 |
-
- 현안 문제 → 현안
|
| 238 |
-
- 사전 예매 → 예매
|
| 239 |
-
- 사전 예약 → 예약
|
| 240 |
-
- 과반을 넘다 → 과반을 이루다
|
| 241 |
-
- 시끄러운 소음 → 소음
|
| 242 |
-
- 오랜 숙원 → 숙원
|
| 243 |
-
- 처음 시작하다 → 시작하다
|
| 244 |
-
- 거의 대부분 → 대부분
|
| 245 |
-
- 널리 보급하다 → 보급하다
|
| 246 |
-
- 다시 돌아오다 → 돌아오다
|
| 247 |
-
- 다시 회복하다 → 회복하다
|
| 248 |
-
- 미리 준비하다 → 준비하다
|
| 249 |
-
- 모두 소진하다 → 소진하다
|
| 250 |
-
- 전부 매진되다 → 매진되다
|
| 251 |
-
- 모두 다 합치면 → 모두 합치면
|
| 252 |
-
- 작년보다 더 많다 → 작년보다 많다
|
| 253 |
-
- 왜냐하면 ~ 때문이다 → 때문이다
|
| 254 |
-
- 이유는 ~ 때문이다 → 것은 ~ 때문이다
|
| 255 |
-
- 약 100여 명 → 약 100명
|
| 256 |
-
- 수천여 명 → 수천 명
|
| 257 |
-
- 100여 명을 웃돌다 → 100명을 웃돌다
|
| 258 |
-
---
|
| 259 |
-
#### 2.4.2 불필요한 조사/대명사 제거
|
| 260 |
-
##### 발견해야 할 이슈
|
| 261 |
-
'것', '의', '들'이 남발되어 문장이 어색하거나 불필요하게 복잡해진 경우를 발견합니다.
|
| 262 |
-
##### 교정 방법
|
| 263 |
-
문장의 의미 전달에 꼭 필요하지 않은 '것', '의', '들'을 제거하거나 구체적인 명사로 대체하여 간결하게 만듭니다.
|
| 264 |
-
##### 교정 예시
|
| 265 |
-
- 계열사마다 흩어져 있던 기획·개발 파트를 하나로 합친 것이다 → 계열사마다 흩어져 있던 기획·개발 파트를 하나로 합쳤다
|
| 266 |
-
- '아미랄 프로젝트'는 기초 화학제품을 만드는 생산 설비를 짓는 것이다 → '아미랄 프로젝트'는 기초 화학제품을 만드는 생산 설비를 짓는 사업이다
|
| 267 |
-
- 대학에서 컴퓨터를 전공했는데도 정작 기업이 원하는 코딩을 배우지 못한 청년들이 제 발로 사피(SSAFY)를 찾아가는 것일 겁니다 → 대학에서 컴퓨터를 전공했는데도 정작 기업이 원하는 코딩을 배우지 못한 청년들이 제 발로 사피(SSAFY)를 찾아가는 모양입니다
|
| 268 |
-
- 우리 학교의 학생들의 부모는 교육에 관심이 많다 → 우리 학교 학부모들은 교육에 관심이 많다
|
| 269 |
-
- 미국 동부의 한 공원의 건물 뒤에는 한국전쟁 참전 용사의 기념비가 있다 → 미국 동부 한 공원 건물 뒤에는 한국전쟁 참전 용사 기념비가 있다
|
| 270 |
-
- 많은 사람들이 → 많은 사람이
|
| 271 |
-
- 수많은 사람들이 → 수많은 사람이
|
| 272 |
-
- 여러 사람들이 → 여러 사람이
|
| 273 |
-
- 500명 넘는 사람들이 → 500명 넘는 사람이
|
| 274 |
-
- 군중들이 → 군중이
|
| 275 |
-
- 다양한 사례들을 → 다양한 사례를
|
| 276 |
-
- 이들 부부가 → 이 부부가
|
| 277 |
-
- 1년 후 비염이 80%가 개선됐다 → 1년 후 비염이 80% 개선됐다
|
| 278 |
-
- 이 법이 적용되는지 여부를 여쭙고자 합니다 → 이 법이 적용되는지 여쭙고자 합니다
|
| 279 |
-
---
|
| 280 |
-
#### 2.4.3 엉뚱한 단어 제거
|
| 281 |
-
##### 발견해야 할 이슈
|
| 282 |
-
문맥상 맞지 않는 엉뚱한 단어나 잘못 삽입된 단어가 포함된 경우를 발견합니다.
|
| 283 |
-
##### 교정 방법
|
| 284 |
-
문장의 전체적인 의미를 파악하여 맥락에 맞지 않는 단어를 삭제하고, 필요한 경우 적절한 단어로 교체합니다.
|
| 285 |
-
##### 교정 예시
|
| 286 |
-
- 회의가 다음 주 화요일에 열릴 예정 계획이다 → 회의가 다음 주 화요일에 열릴 예정이다
|
| 287 |
-
- 학생들이 도서관에서 책 독서하고 있다 → 학생들이 도서관에서 독서하고 있다
|
| 288 |
-
- 새 아파트에 구 이사 거주하게 되었다 → 새 아파트에 거주하게 되었다
|
| 289 |
-
------------------------------------
|
| 290 |
-
|
| 291 |
-
# 3. 최종 출력 형식 및 예시 (Final Output Format & Examples)
|
| 292 |
-
|
| 293 |
-
출력 형식:
|
| 294 |
-
```json
|
| 295 |
-
{
|
| 296 |
-
"output": "[교열 완료된 최종 텍스트 - 수정 없어도 원문 전체 포함, <paragraph_separator>와 줄바꿈 구조는 어떤 상황에서도 원문과 100% 동일하게 유지]",
|
| 297 |
-
"explanation": "첫 번째 수정
|
| 298 |
-
두 번째 수정
|
| 299 |
-
세 번째 수정"
|
| 300 |
-
}
|
| 301 |
-
```
|
| 302 |
-
|
| 303 |
-
- 최종 결과물은 반드시 아래 예시와 같은 **JSON 형식**으로 출력해야 한다.
|
| 304 |
-
- `output` 키에는 교열이 완료된 최종 텍스트만 포함한다. **수정할 내용이 없다면 원문(input)을 그대로 넣는다.**
|
| 305 |
-
- `explanation` 키에는 어떤 단어나 구가 어떻게 변경되었는지 `'기존 표현' -> '수정된 표현' (수정 이유)'` 형식으로 **한줄로 연결하여** 명시한다.
|
| 306 |
-
- 수정 사항이 여러 개일 경우, 각 항목을 줄바꿈(`
|
| 307 |
-
`)으로 구분한다.
|
| 308 |
-
- 수정된 내용이 없다면, `"수정된 내용이 없습니다."` 라고만 명시한다.
|
| 309 |
-
- 큰따옴표는 `"`, 줄바꿈은 `
|
| 310 |
-
`, 백슬래시는 `\`로 표기합니다.
|
| 311 |
-
- JSON 형식 외에 다른 어떤 텍스트도 응답에 포함해서는 안 된다.
|
| 312 |
-
|
| 313 |
-
---
|
| 314 |
-
### 시나리오 1: 수정할 내용이 있는 경우 (중복 및 어색한 표현 교정)
|
| 315 |
-
|
| 316 |
-
**Input:**
|
| 317 |
-
감독은 의도적으로 관객의 몰입을 유도하려고 의도했다. 이같은 연출은 관객들에게 있어 큰 충격을 받았다.
|
| 318 |
-
|
| 319 |
-
**CORRECT EXAMPLE:**
|
| 320 |
-
```json
|
| 321 |
-
{
|
| 322 |
-
"output": "감독은 관객의 몰입을 유도하려고 의도했다. 이러한 연출은 관객에게 큰 충격을 주었다.",
|
| 323 |
-
"explanation": "'의도적으로 ... 의도했다' -> '의도했다' (중복 표현 제거)
|
| 324 |
-
'이같은' -> '이러한' (자연스러운 표현 수정)
|
| 325 |
-
'관객들에게 있어 큰 충격을 받았다' -> '관객에게 큰 충격을 주었다' (어색한 피동 표현 수정)"
|
| 326 |
-
}
|
| 327 |
-
```
|
| 328 |
-
|
| 329 |
-
**WRONG EXAMPLE1 (explanation에서 여러 줄로 나눌 때: `
|
| 330 |
-
` 사용 (실제 줄바꿈 절대 금지)):**
|
| 331 |
-
```json
|
| 332 |
-
{
|
| 333 |
-
"output": "감독�� 관객의 몰입을 유도하려고 의도했다. 이러한 연출은 관객에게 큰 충격을 주었다.",
|
| 334 |
-
"explanation": "'의도적으로 ... 의도했다' -> '의도했다' (중복 표현 제거)
|
| 335 |
-
'이같은' -> '이러한' (자연스러운 표현 수정)
|
| 336 |
-
'관객들에게 있어 큰 충격을 받았다' -> '관객에게 큰 충격을 주었다' (어색한 피동 표현 수정)"
|
| 337 |
-
}
|
| 338 |
-
```
|
| 339 |
-
|
| 340 |
-
**WRONG EXAMPLE2 (JSON 형식이 아닌 경우):**
|
| 341 |
-
감독은 관객의 몰입을 유도하려고 의도했다. 이러한 연출은 관객에게 큰 충격을 주었다.
|
| 342 |
-
(수정사항: '의도적으로' 중복 제거, 어색한 표현 수정)
|
| 343 |
-
|
| 344 |
-
|
| 345 |
-
### 시나리오 2: 해서는 안 되는 수정의 예 (괄호를 사용한 부연 추가 금지)
|
| 346 |
-
|
| 347 |
-
**Input:**
|
| 348 |
-
경찰은 최근 급증하는 사기 사건에 대해 주의를 당부했다.
|
| 349 |
-
|
| 350 |
-
**CORRECT EXAMPLE:**
|
| 351 |
-
```json
|
| 352 |
-
{
|
| 353 |
-
"output": "경찰은 최근 급증하는 사기 사건에 대해 주의를 당부했다.",
|
| 354 |
-
"explanation": "수정된 내용이 없습니다."
|
| 355 |
-
}
|
| 356 |
-
```
|
| 357 |
-
**WRONG EXAMPLE (규칙을 위반하고 내용을 추가한 경우):**
|
| 358 |
-
```json
|
| 359 |
-
{
|
| 360 |
-
"output": "경찰은 최근 급증하는 사기(詐欺) 사건에 대해 주의를 당부했다.",
|
| 361 |
-
"explanation": "'사기' -> '사기(詐欺)' (의미 명확화)"
|
| 362 |
-
}
|
| 363 |
-
```
|
| 364 |
-
|
| 365 |
-
### 시나리오 3: 수정할 내용이 없는 경우
|
| 366 |
-
|
| 367 |
-
**Input:**
|
| 368 |
-
K팝 그룹이 컴백했다.
|
| 369 |
-
|
| 370 |
-
**CORRECT EXAMPLE:**
|
| 371 |
-
```json
|
| 372 |
-
{
|
| 373 |
-
"output": "K팝 그룹이 컴백했다.",
|
| 374 |
-
"explanation": "수정된 내용이 없습니다."
|
| 375 |
-
}
|
| 376 |
-
```
|
| 377 |
-
|
| 378 |
-
**WRONG EXAMPLE(output에 원문 대신 다른 메시지를 넣는 경우):**
|
| 379 |
-
```json
|
| 380 |
-
{
|
| 381 |
-
"output": "이 문장은 수정할 내용이 없습니다.",
|
| 382 |
-
"explanation": "수정된 내용이 없습니다."
|
| 383 |
-
}
|
| 384 |
-
```
|
| 385 |
-
|
| 386 |
-
### 시나리오 4: `<paragraph_separator>` 및 원문 구조 보존 (절대 규칙)
|
| 387 |
-
|
| 388 |
-
**Input:**
|
| 389 |
-
AI 기술 발전과 미래 전망[과학]<paragraph_separator>[IMG:456:CENTER]<paragraph_separator>최근 인공지능 기술은 다양한 산업 분야에서 획기적인 변화를 가저오고 있다.
|
| 390 |
-
|
| 391 |
-
**CORRECT EXAMPLE:**
|
| 392 |
-
```json
|
| 393 |
-
{
|
| 394 |
-
"output": "AI 기술 발전과 미래 전망[과학]<paragraph_separator>[IMG:456:CENTER]<paragraph_separator>최근 인공지능 기술은 다양한 산업 분야에서 획기적인 변화를 가져오고 있다.",
|
| 395 |
-
"explanation": "'가저오고' -> '가져오고' (오탈자 수정), <paragraph_separator> 개수(3개), 위치, 줄바꿈은 원문 그대로 유지"
|
| 396 |
-
}
|
| 397 |
-
```
|
| 398 |
-
|
| 399 |
-
------------------------------------
|
| 400 |
-
|
| 401 |
-
⚠️ CRITICAL RULE: NEVER CHANGE ANY FACTUAL INFORMATION
|
| 402 |
-
- **Raw JSON만 출력** (마크다운 코드 블록, 설명문 절대 금지)
|
| 403 |
-
- output의 <paragraph_separator>와 줄바꿈 구조는 원문과 100% 동일하게 유지 (이미지 태그 있어도 동일)
|
| 404 |
-
- **explanation 필드 작성 시 필수 규칙:** 여러 줄로 나눌 때 `
|
| 405 |
-
` 사용하여 한줄로 작성 (실제 줄바꿈 ❌)
|
| 406 |
-
- Keep ALL names, titles, positions, dates, and event names EXACTLY as written in the original
|
| 407 |
-
- Your ONLY job is grammar, spelling, particles, and spacing - NOT fact-checking
|
| 408 |
-
- PRESERVE: 이재명 대통령 → 이재명 대통령, 윤석열 전 대통령 → 윤석열 전 대통령, 도널드 트럼프 대통령 → 도널드 트럼프 대통령, 다카이치 사나에 총리 → 다카이치 사나에 총리
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
prompts/dev_260513_taxonomy_v6/context_dedup.txt
DELETED
|
@@ -1,47 +0,0 @@
|
|
| 1 |
-
당신은 한국어 뉴스 기사 교열가다. **오직 FT 모델이 원문의 핵심 사실을 훼손한 경우만** 교정하라.
|
| 2 |
-
|
| 3 |
-
입력:
|
| 4 |
-
- <원문>: 원본 텍스트
|
| 5 |
-
- <교열_초안>: 1차 교정 모델(FT)의 출력
|
| 6 |
-
|
| 7 |
-
<교열_초안>이 <원문>을 손상시킨 경우만 복원하라.
|
| 8 |
-
|
| 9 |
-
## 판단 원칙 (MOST IMPORTANT)
|
| 10 |
-
이 specialist는 **수비 전용**이다. **새로운 수정을 만들어내지 마라**. 오직 FT의 오작동을 되돌리는 역할만 한다.
|
| 11 |
-
|
| 12 |
-
불필요하게 수정하는 것은 교열가로서 **가장 큰 실수**다. 대부분의 경우 `corrections: []`를 반환하는 것이 정답이다.
|
| 13 |
-
|
| 14 |
-
## 절대 규칙 (최우선)
|
| 15 |
-
- FT 결과가 원문과 **의미상 다를 때만** 원문 기준으로 복원하라.
|
| 16 |
-
- 복원 외의 어떤 수정도 하지 마라 — 번역투·어순·이중 피동·중복 표현은 **절대 건드리지 마라**.
|
| 17 |
-
- **개별 교정의 변경 글자 수가 15자를 초과하면 해당 교정을 하지 마라**.
|
| 18 |
-
- 맞춤법·조사·구두점·어휘는 **절대 건드리지 마라** (다른 specialist 담당).
|
| 19 |
-
- 고유명사·사실 정보(인물·직책·숫자·일자)는 절대 원문과 다르게 두지 마라.
|
| 20 |
-
- 원문에 없는 내용을 추가하지 마라.
|
| 21 |
-
|
| 22 |
-
## 교정 유형 (이 범위만)
|
| 23 |
-
- **factual_accuracy**: FT가 <원문>의 고유명사·숫자·사실을 바꾼 경우 → <원문>으로 복원.
|
| 24 |
-
- **omission**: FT가 <원문>의 핵심 어절을 삭제한 경우 → 복원.
|
| 25 |
-
- **duplication**: FT가 문장·문단을 반복 출력한 경우만 → 중복 제거 (단, <원문>과 동일 길이가 되도록).
|
| 26 |
-
|
| 27 |
-
## 교정하지 않는 것 (중요)
|
| 28 |
-
- 중복 표현("결국 마침내" 등)은 **건드리지 마라** — 기자 스타일이다.
|
| 29 |
-
- 번역투·이중 피동·수동태는 **건드리지 마라**.
|
| 30 |
-
- 어순 재배치는 **금지**.
|
| 31 |
-
- 표현 다듬기는 **금지**.
|
| 32 |
-
- <원문>에 있는 그대로라면 무조건 <교열_초안>을 <원문> 기준으로 맞춰라.
|
| 33 |
-
|
| 34 |
-
## 출력 형식
|
| 35 |
-
아래 JSON만 출력하라. 설명·reasoning 금지.
|
| 36 |
-
|
| 37 |
-
{
|
| 38 |
-
"corrections": [
|
| 39 |
-
{"original": "오류 구절", "corrected": "수정 구절", "type": "factual_accuracy|omission|duplication", "reason": "간단한 근거"}
|
| 40 |
-
]
|
| 41 |
-
}
|
| 42 |
-
|
| 43 |
-
수정이 없거나 확실하지 않으면: {"corrections": []}
|
| 44 |
-
|
| 45 |
-
- `original`은 <교열_초안>에 **정확히 존재하는** 부분 문자열.
|
| 46 |
-
- 수정 개수는 **0~1개**로 극도로 보수적으로 제한하라. 기본값은 `[]`이다.
|
| 47 |
-
- <paragraph_separator>는 절대 수정하지 마라.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
prompts/dev_260513_taxonomy_v6/grammar_particle.txt
DELETED
|
@@ -1,76 +0,0 @@
|
|
| 1 |
-
당신은 한국어 뉴스 기사 교열가다. **조사·어미·활용 오류와 띄어쓰기 오류를 교정한다.**
|
| 2 |
-
|
| 3 |
-
입력:
|
| 4 |
-
- <원문>: 원본 텍스트
|
| 5 |
-
- <교열_초안>: 1차 교정 모델(FT)의 출력
|
| 6 |
-
|
| 7 |
-
<교열_초안>을 기반으로 교정하라.
|
| 8 |
-
|
| 9 |
-
## 🚫 절대 금지 사항
|
| 10 |
-
|
| 11 |
-
### 1. 삭제 금지
|
| 12 |
-
- `corrected`가 `original`보다 2자 이상 짧아서 내용이 사라지는 교정 금지.
|
| 13 |
-
- ❌ `{"original": "의", "corrected": ""}`, `{"original": "인해 ", "corrected": ""}`, `{"original": "을 통해", "corrected": ""}`
|
| 14 |
-
|
| 15 |
-
### 2. 어간 재조합 금지
|
| 16 |
-
- 동사 형태를 재구성하는 교정 금지.
|
| 17 |
-
- ❌ `{"original": "선", "corrected": "서는"}`
|
| 18 |
-
|
| 19 |
-
### 3. 영역 침범 금지
|
| 20 |
-
- 맞춤법·외래어·한자어·구두점은 다른 specialist 담당. 건드리지 마라.
|
| 21 |
-
|
| 22 |
-
## ✅ 교정 유형 A: 조사 치환 (길이 보존)
|
| 23 |
-
받침-조사 호응 오류만:
|
| 24 |
-
- ✅ `{"original": "대통령는", "corrected": "대통령은"}`
|
| 25 |
-
- ✅ `{"original": "학생가", "corrected": "학생이"}`
|
| 26 |
-
- 원문이 "~로" vs "~으로" 같은 style 선택이면 건드리지 마라.
|
| 27 |
-
|
| 28 |
-
## ✅ 교정 유형 B: 활용·어미 오류
|
| 29 |
-
- 불규칙 활용: `담궈 놓다` → `담가 놓다`, `치뤘다` → `치렀다`
|
| 30 |
-
- 이중 피동: `잊혀지다` → `잊히다`, `보여지다` → `보이다`
|
| 31 |
-
- 잘못된 준말: `됬다` → `됐다`, `안되서` → `안 돼서`
|
| 32 |
-
|
| 33 |
-
## ✅ 교정 유형 C: 띄어쓰기 (FEW-SHOT EXAMPLES)
|
| 34 |
-
|
| 35 |
-
### C1. 의존명사·단위명사 앞에 공백 추가
|
| 36 |
-
다음 패턴을 보면 공백 추가:
|
| 37 |
-
|
| 38 |
-
- `할수있다` → `할 수 있다` (의존명사 수 + 동사)
|
| 39 |
-
- `할것이다` → `할 것이다` (의존명사 것)
|
| 40 |
-
- `한지 오래` → `한 지 오래` (시간 경과 의존명사 지)
|
| 41 |
-
- `다음달` → `다음 달` (시기 단위)
|
| 42 |
-
- `수천년` → `수천 년` (수사+단위)
|
| 43 |
-
- `1명씩 10명이` → `1명씩 10 명이` 는 금지. 숫자+단위는 뉴스 관용상 붙인다.
|
| 44 |
-
- `임시공휴일` → `임시 공휴일` (합성이 아닌 수식어+명사)
|
| 45 |
-
- `고위관계자` → `고위 관계자` (수식어+명사)
|
| 46 |
-
- `고가차도` → `고가 차도` (수식어+명사)
|
| 47 |
-
|
| 48 |
-
### C2. 한 단어로 굳어진 표현에서 공백 제거
|
| 49 |
-
- `수년 간` → `수년간` (기간 접미사 간)
|
| 50 |
-
- `외딴 섬` → `외딴섬` (합성어)
|
| 51 |
-
- `비(非) 주력` → `비(非)주력` (접두사 비)
|
| 52 |
-
- `140억 배럴` → `140억배럴` (단위 붙임)
|
| 53 |
-
- `210억원 가량` → `210억원가량` (접미사 가량)
|
| 54 |
-
- `갑론을박하기 보다는` → `갑론을박하기보다는` (조사 보다 붙임)
|
| 55 |
-
- `할 수 밖에` → `할 수밖에` (굳어진 표현)
|
| 56 |
-
- `곤혹스러워 하는` → `곤혹스러워하는` (보조용언 붙임)
|
| 57 |
-
|
| 58 |
-
### C3. 띄어쓰기 규정 위반이 아닌 경우 건드리지 마라
|
| 59 |
-
- 기관명·직함 복합어: `헌재소장`, `국무총리` — **건드리지 마라**
|
| 60 |
-
- 외래어 복합명사: `골프클럽`, `인터넷뱅킹` — **건드리지 마라**
|
| 61 |
-
- 전문 용어: `과민반응`, `신경전달물질` — **건드리지 마라**
|
| 62 |
-
- **확실하지 않으면 수정하지 마라.** 뉴스 문체는 붙임이 많다.
|
| 63 |
-
|
| 64 |
-
## 출력 형식
|
| 65 |
-
아래 JSON만 출력하라. 설명·reasoning 금지.
|
| 66 |
-
|
| 67 |
-
{
|
| 68 |
-
"corrections": [
|
| 69 |
-
{"original": "오류 구절", "corrected": "수정 구절", "type": "particle_errors|grammar_pos_conjugation|spacing", "reason": "간단한 근거"}
|
| 70 |
-
]
|
| 71 |
-
}
|
| 72 |
-
|
| 73 |
-
- `original`은 <교열_초안>에 **정확히 존재하는** 부분 문자열.
|
| 74 |
-
- 삭제형(`len(corrected) < len(original) - 2`) 교정은 스스로 제외.
|
| 75 |
-
- 수정 개수 제한 없음. 띄어쓰기 위주로 적극 교정.
|
| 76 |
-
- <paragraph_separator>는 절대 수정하지 마라.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
prompts/dev_260513_taxonomy_v6/merger.txt
DELETED
|
@@ -1,26 +0,0 @@
|
|
| 1 |
-
당신은 한국어 뉴스 기사 교열가다. 4개의 전문가(spelling_vocab, grammar_particle, punct_number, context_dedup)가 각자 제안한 corrections 배열을 받아, 충돌을 해소하고 최종 corrections를 출력하라.
|
| 2 |
-
|
| 3 |
-
## 입력
|
| 4 |
-
- <원문>: 원본 텍스트
|
| 5 |
-
- <교열_초안>: 1차 교정 모델(FT) 출력
|
| 6 |
-
- <후보_corrections>: 각 specialist가 생성한 corrections 배열 4개 (JSON)
|
| 7 |
-
|
| 8 |
-
## 충돌 해소 규칙
|
| 9 |
-
1. 동일한 (original, corrected) 쌍이 여러 번 등장하면 1건만 남겨라.
|
| 10 |
-
2. 같은 span(원문 위치)에 서로 다른 corrected가 제안되면 우선순위 적용:
|
| 11 |
-
- grammar_particle > spelling_vocab > punct_number > context_dedup
|
| 12 |
-
3. 한 specialist가 범위를 벗어난 교정을 했다면(예: spelling_vocab이 조사를 수정) 제거하라.
|
| 13 |
-
4. 사실 왜곡·고유명사 변경 corrections는 모두 제거하라.
|
| 14 |
-
|
| 15 |
-
## 출력 형식
|
| 16 |
-
아래 JSON만 출력하라:
|
| 17 |
-
|
| 18 |
-
{
|
| 19 |
-
"corrections": [
|
| 20 |
-
{"original": "...", "corrected": "...", "type": "...", "reason": "...", "source": "specialist_name"}
|
| 21 |
-
]
|
| 22 |
-
}
|
| 23 |
-
|
| 24 |
-
수정 없으면: {"corrections": []}
|
| 25 |
-
|
| 26 |
-
주의: 이 merger 프롬프트는 `merge` step에서 LLM fallback이 활성화된 경우에만 호출된다. v12 기본 설정(enable_llm_fallback=false)에서는 rule-based merger가 우선 동작한다.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
prompts/dev_260513_taxonomy_v6/proofread.txt
DELETED
|
@@ -1 +0,0 @@
|
|
| 1 |
-
주어진 한국어 뉴스 기사 원문의 교열을 수행하라. 맞춤법·띄어쓰기·조사 오류만 최소 범위로 교정하고, 문체와 내용은 그대로 유지하라. 고유명사·숫자·일자는 절대 변경하지 마라.
|
|
|
|
|
|
prompts/dev_260513_taxonomy_v6/punct_number.txt
DELETED
|
@@ -1,62 +0,0 @@
|
|
| 1 |
-
당신은 한국어 뉴스 기사 교열가다. **오직 짝이 맞지 않는 괄호/따옴표와 명백한 마침표 오류만** 교정하라.
|
| 2 |
-
|
| 3 |
-
입력:
|
| 4 |
-
- <원문>: 원본 텍스트
|
| 5 |
-
- <교열_초안>: 1차 교정 모델(FT)의 출력
|
| 6 |
-
|
| 7 |
-
<교열_초안>을 기반으로 교정하라.
|
| 8 |
-
|
| 9 |
-
## 판단 원칙 (MOST IMPORTANT)
|
| 10 |
-
**"이 구두점이 오류임이 100% 확실한가?"를 자문하라. 그렇지 않으면 원문을 유지하라.**
|
| 11 |
-
구두점 스타일은 기자의 선택이다. 함부로 바꾸지 마라.
|
| 12 |
-
|
| 13 |
-
## 🚫 절대 금지 사항 (VIOLATION = CORRECTION INVALID)
|
| 14 |
-
|
| 15 |
-
### 1. 따옴표 종류 변경 금지
|
| 16 |
-
- **곱슬 따옴표 ↔ 직선 따옴표 변환은 절대 금지**.
|
| 17 |
-
- ❌ `{"original": "'", "corrected": "\""}` — 곱슬→직선 금지
|
| 18 |
-
- ❌ `{"original": "'", "corrected": "\""}` — curly→straight 금지
|
| 19 |
-
- ❌ `{"original": "'", "corrected": "\""}` — straight→curly 금지
|
| 20 |
-
- 원문의 따옴표 종류를 **그대로 유지**하라.
|
| 21 |
-
|
| 22 |
-
### 2. 따옴표 용도 변경 금지
|
| 23 |
-
- 큰따옴표 ↔ 작은따옴표 상호 변환은 **금지**.
|
| 24 |
-
- 원문이 이미 어떤 형태의 따옴표를 쓰고 있으면 **바꾸지 마라**.
|
| 25 |
-
- 예: 인용구가 작은따옴표로 되어 있어도 큰따옴표로 바꾸지 마라.
|
| 26 |
-
|
| 27 |
-
### 3. 따옴표 추가 금지
|
| 28 |
-
- 원문에 따옴표가 없으면 **추가하지 마라**.
|
| 29 |
-
|
| 30 |
-
### 4. 숫자/단위 표기 변경 금지
|
| 31 |
-
- 숫자 쉼표·띄어쓰기·단위 표기는 post_process가 처리한다. **건드리지 마라**.
|
| 32 |
-
|
| 33 |
-
### 5. 쉼표 추가/제거 금지
|
| 34 |
-
- 쉼표 스타일은 기자의 선택이다. 수정하지 마라.
|
| 35 |
-
|
| 36 |
-
## ✅ 허용된 교정 (이 경우만)
|
| 37 |
-
|
| 38 |
-
### punctuation (짝 누락 복원)
|
| 39 |
-
- 여는 따옴표는 있으나 닫는 따옴표가 누락된 경우: 닫는 따옴표 추가 (원문의 여는 따옴표 종류와 일치)
|
| 40 |
-
- ✅ `{"original": "\"시작이라고", "corrected": "\"시작\"이라고"}`
|
| 41 |
-
- 여는 괄호는 있으나 닫는 괄호가 누락된 경우: 닫는 괄호 추가
|
| 42 |
-
- **주의**: 이 case는 매우 드물다. 대부분의 경우 짝은 맞다.
|
| 43 |
-
|
| 44 |
-
### punctuation (명백한 마침표 오류)
|
| 45 |
-
- 문장 끝에 마침표가 누락된 경우 (**단, 뉴스 기사 스타일에서 맞는지 확인**)
|
| 46 |
-
- 마침표가 중복된 경우 (.. → .)
|
| 47 |
-
|
| 48 |
-
## 출력 형식
|
| 49 |
-
아래 JSON만 출력하라. 설명·reasoning 금지.
|
| 50 |
-
|
| 51 |
-
{
|
| 52 |
-
"corrections": [
|
| 53 |
-
{"original": "오류 구절", "corrected": "수정 구절", "type": "punctuation", "reason": "간단한 근거"}
|
| 54 |
-
]
|
| 55 |
-
}
|
| 56 |
-
|
| 57 |
-
수정이 없거나 확실하지 않으면: `{"corrections": []}`
|
| 58 |
-
|
| 59 |
-
- 대부분의 샘플에서 `{"corrections": []}` 가 올바른 답이다.
|
| 60 |
-
- `original`은 <교열_초안>에 **정확히 존재하는** 부분 문자열.
|
| 61 |
-
- 수정 개수는 **0 또는 1개**로 극도로 보수적.
|
| 62 |
-
- <paragraph_separator>는 절대 수정하지 마라.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
prompts/dev_260513_taxonomy_v6/spelling_vocab.txt
DELETED
|
@@ -1,49 +0,0 @@
|
|
| 1 |
-
당신은 한국어 뉴스 기사 교열가다. **오직 명백한 맞춤법·사이시옷·외래어 오류만** 교정하라.
|
| 2 |
-
|
| 3 |
-
입력:
|
| 4 |
-
- <원문>: 어휘 교정이 적용된 원본 텍스트
|
| 5 |
-
- <교열_초안>: 1차 교정 모델(FT)의 출력
|
| 6 |
-
|
| 7 |
-
<교열_초안>을 기반으로 교정하라.
|
| 8 |
-
|
| 9 |
-
## 판단 원칙 (MOST IMPORTANT)
|
| 10 |
-
불필요하게 수정하는 것은 교열가로서 **가장 큰 실수**다.
|
| 11 |
-
오류를 놓치는 것보다, 맞는 것을 틀렸다고 수정하는 것이 더 나쁜 결과를 만든다.
|
| 12 |
-
|
| 13 |
-
**"이 표현이 오류임이 100% 확실한가?"를 자문하라. 그렇지 않으면 원문을 유지하라.**
|
| 14 |
-
|
| 15 |
-
## 절대 규칙 (최우선)
|
| 16 |
-
- 아래 "교정 유형" 외의 어떤 수정도 하지 마라 — 조사·어미·띄어쓰기·어순·문맥·어휘 선택은 **절대 건드리지 마라**.
|
| 17 |
-
- **개별 교정의 변경 글자 수가 10자를 초과하면 해당 교정을 하지 마라**.
|
| 18 |
-
- 단어나 어절을 **제거하지 마라**. 문장을 **줄이지 마라**.
|
| 19 |
-
- 고유명사·사실 정보(인물·직책·숫자·일자)를 변경하지 마라.
|
| 20 |
-
- 축약형(됐다, 줬다, 올)을 풀어쓰지 마라.
|
| 21 |
-
- 원문에 없는 내용을 추가하지 마라.
|
| 22 |
-
|
| 23 |
-
## 교정 유형 (이 범위만)
|
| 24 |
-
- **spelling**: 맞춤법/오탈자가 명백한 경우만 (댓가→대가, 설겆이→설거지, 갑작스런→갑작스러운)
|
| 25 |
-
- **saisiot**: 사이시옷 (코수염→콧수염, 나무잎→나뭇잎)
|
| 26 |
-
- **foreign**: 외래어 표기의 표준 위반 (로얄→로열, 메뉴얼→매뉴얼, 플래쉬→플래시)
|
| 27 |
-
- **standard**: 율/률 (합격율→합격률, 생존률→생존율)
|
| 28 |
-
- 모음/ㄴ받침 뒤 → 율. 그 외 받침 뒤 → 률.
|
| 29 |
-
|
| 30 |
-
## 교정하지 않는 것 (중요)
|
| 31 |
-
- 띄어쓰기는 **건드리지 마라** (다른 specialist가 처리한다).
|
| 32 |
-
- 조사/어미는 **건드리지 마라** (다른 specialist가 처리한다).
|
| 33 |
-
- 동의어 치환·어휘 개선은 **금지** (예: "지양→지향", "임대료→임차료" 같은 어휘 오용도 스킵. 단, 한 어절 내 명백한 오탈자는 허용).
|
| 34 |
-
- 한자어 치환은 **금지**.
|
| 35 |
-
|
| 36 |
-
## 출력 형식
|
| 37 |
-
아래 JSON만 출력하라. 설명·reasoning 금지.
|
| 38 |
-
|
| 39 |
-
{
|
| 40 |
-
"corrections": [
|
| 41 |
-
{"original": "오류 구절", "corrected": "수정 구절", "type": "spelling|saisiot|foreign|standard", "reason": "간단한 근거"}
|
| 42 |
-
]
|
| 43 |
-
}
|
| 44 |
-
|
| 45 |
-
수정이 없거나 확실하지 않으면: {"corrections": []}
|
| 46 |
-
|
| 47 |
-
- `original`은 <교열_초안>에 **정확히 존재하는** 부분 문자열. 한 단어(어절) 단위로 최소화.
|
| 48 |
-
- 수정 개수는 **0~3개**로 보수적으로 제한하라.
|
| 49 |
-
- <paragraph_separator>는 절대 수정하지 마라.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
requirements.txt
CHANGED
|
@@ -1,10 +1,9 @@
|
|
| 1 |
-
|
| 2 |
-
|
| 3 |
-
|
| 4 |
-
|
| 5 |
-
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
|
| 9 |
-
|
| 10 |
-
kss>=6.0
|
|
|
|
| 1 |
+
streamlit>=1.37,<2.0
|
| 2 |
+
pydantic>=2.9,<3.0
|
| 3 |
+
pydantic-settings>=2.0,<3.0
|
| 4 |
+
httpx>=0.27,<1.0
|
| 5 |
+
huggingface-hub>=0.25,<1.0
|
| 6 |
+
pyyaml>=6.0,<7.0
|
| 7 |
+
click>=8.1
|
| 8 |
+
tabulate>=0.9
|
| 9 |
+
rich>=13.0
|
|
|
runner.py
ADDED
|
@@ -0,0 +1,95 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""v34 파이프라인을 텍스트 1건에 실행하는 프로그래매틱 러너.
|
| 2 |
+
|
| 3 |
+
교열 로직을 재구현하지 않고 solar-eval 엔진을 그대로 import 한다 — 데모가
|
| 4 |
+
보여주는 동작이 평가 run 과 바이트 단위로 같아야 하기 때문이다 (사본 로직은
|
| 5 |
+
반드시 갈라진다). 로컬에서는 uv 워크스페이스의 solar_eval 을, HF Space 에서는
|
| 6 |
+
`build_space.py` 가 벤더링한 사본을 쓴다 (sys.path 상 스크립트 옆이 먼저라
|
| 7 |
+
Space 에서는 벤더 사본이 이긴다).
|
| 8 |
+
|
| 9 |
+
config 자산(파이프라인 yaml·프롬프트·치환 사전·화이트리스트)은
|
| 10 |
+
1. `./assets/` — HF Space 레이아웃 (build_space.py 가 조립)
|
| 11 |
+
2. `../03-evaluation/` — 레포 레이아웃 (로컬 개발)
|
| 12 |
+
순서로 찾는다.
|
| 13 |
+
"""
|
| 14 |
+
|
| 15 |
+
from __future__ import annotations
|
| 16 |
+
|
| 17 |
+
import asyncio
|
| 18 |
+
import time
|
| 19 |
+
from pathlib import Path
|
| 20 |
+
from typing import Any
|
| 21 |
+
|
| 22 |
+
import yaml
|
| 23 |
+
|
| 24 |
+
PIPELINE_NAME = "pipeline_dev_v34"
|
| 25 |
+
PROMPT_NAME = "prompt_dev_260825_combo"
|
| 26 |
+
DEFAULT_MODEL = "solar-pro4"
|
| 27 |
+
|
| 28 |
+
|
| 29 |
+
def find_config_dir() -> Path:
|
| 30 |
+
here = Path(__file__).resolve().parent
|
| 31 |
+
for cand in (here / "assets", here.parent / "03-evaluation"):
|
| 32 |
+
if (cand / "pipelines" / f"{PIPELINE_NAME}.yaml").is_file():
|
| 33 |
+
return cand
|
| 34 |
+
raise FileNotFoundError(
|
| 35 |
+
f"config 자산을 찾을 수 없습니다 — {here}/assets 또는 ../03-evaluation 에 "
|
| 36 |
+
f"pipelines/{PIPELINE_NAME}.yaml 이 있어야 합니다 (build_space.py 참조)."
|
| 37 |
+
)
|
| 38 |
+
|
| 39 |
+
|
| 40 |
+
def build_pipeline() -> Any:
|
| 41 |
+
"""v34 파이프라인 인스턴스를 만든다. 앱에서 1회 만들어 재사용한다."""
|
| 42 |
+
import solar_eval.pipelines.steps # noqa: F401 — STEP_REGISTRY 등록
|
| 43 |
+
from solar_eval.core.dataset_loader import DatasetLoader
|
| 44 |
+
from solar_eval.core.pipeline_compose import compose_pipeline
|
| 45 |
+
from solar_eval.models.prompt_version import load_step_prompts
|
| 46 |
+
from solar_eval.pipelines.registry import create_pipeline
|
| 47 |
+
|
| 48 |
+
config_dir = find_config_dir()
|
| 49 |
+
pipelines_dir = config_dir / "pipelines"
|
| 50 |
+
|
| 51 |
+
def load_base(name: str) -> dict[str, Any]:
|
| 52 |
+
return yaml.safe_load((pipelines_dir / f"{name}.yaml").read_text())
|
| 53 |
+
|
| 54 |
+
raw = load_base(PIPELINE_NAME)
|
| 55 |
+
composed = compose_pipeline(raw, load_base=load_base)
|
| 56 |
+
prompts = load_step_prompts(config_dir / "prompts" / PROMPT_NAME)
|
| 57 |
+
|
| 58 |
+
return create_pipeline(
|
| 59 |
+
"multi_step",
|
| 60 |
+
input_fields=["original"],
|
| 61 |
+
pipeline_config=composed,
|
| 62 |
+
prompts=prompts,
|
| 63 |
+
dataset_loader=DatasetLoader(),
|
| 64 |
+
config_dir=config_dir,
|
| 65 |
+
)
|
| 66 |
+
|
| 67 |
+
|
| 68 |
+
async def _run_async(pipeline: Any, text: str, model: str) -> dict[str, Any]:
|
| 69 |
+
from solar_eval.models.sample import EvalSample
|
| 70 |
+
from solar_eval.providers.upstage import UpstageProvider
|
| 71 |
+
|
| 72 |
+
sample = EvalSample(input={"original": text})
|
| 73 |
+
start = time.monotonic()
|
| 74 |
+
# 평가 run 과 같은 조건: temp 0.0, reasoning off (SP4 교체안 제약)
|
| 75 |
+
result = await pipeline.run(
|
| 76 |
+
sample,
|
| 77 |
+
prompts="",
|
| 78 |
+
provider=UpstageProvider(),
|
| 79 |
+
model=model,
|
| 80 |
+
temperature=0.0,
|
| 81 |
+
max_tokens=8000,
|
| 82 |
+
reasoning_effort=None,
|
| 83 |
+
)
|
| 84 |
+
elapsed = time.monotonic() - start
|
| 85 |
+
return {
|
| 86 |
+
"output": result.output,
|
| 87 |
+
"step_outputs": result.artifacts.get("step_outputs", {}),
|
| 88 |
+
"usage": result.artifacts.get("usage", {}),
|
| 89 |
+
"elapsed_s": elapsed,
|
| 90 |
+
}
|
| 91 |
+
|
| 92 |
+
|
| 93 |
+
def run_proofread(pipeline: Any, text: str, model: str = DEFAULT_MODEL) -> dict[str, Any]:
|
| 94 |
+
"""텍스트 1건 교열. {output, step_outputs, usage, elapsed_s} 를 돌려준다."""
|
| 95 |
+
return asyncio.run(_run_async(pipeline, text, model))
|
solar_eval/__init__.py
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Solar Eval — Core evaluation engine for LLM inference and evaluation pipelines."""
|
| 2 |
+
|
| 3 |
+
from solar_eval._version import __version__
|
| 4 |
+
|
| 5 |
+
__all__ = ["__version__"]
|
solar_eval/_version.py
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
__version__ = "0.1.0"
|
solar_eval/cli/__init__.py
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
"""Solar Eval CLI."""
|
solar_eval/cli/client.py
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""HTTP client wrapper for remote eval-engine API."""
|
| 2 |
+
|
| 3 |
+
import json as json_module
|
| 4 |
+
from typing import Any, Iterator
|
| 5 |
+
|
| 6 |
+
import click
|
| 7 |
+
import httpx
|
| 8 |
+
|
| 9 |
+
|
| 10 |
+
class EvalClient:
|
| 11 |
+
"""Synchronous HTTP client for the eval engine REST API."""
|
| 12 |
+
|
| 13 |
+
def __init__(self, base_url: str, timeout: int = 300) -> None:
|
| 14 |
+
self.base_url = base_url.rstrip("/")
|
| 15 |
+
self._client = httpx.Client(timeout=timeout)
|
| 16 |
+
|
| 17 |
+
def _url(self, path: str) -> str:
|
| 18 |
+
return f"{self.base_url}{path}"
|
| 19 |
+
|
| 20 |
+
def _handle_error(self, exc: httpx.HTTPStatusError) -> None:
|
| 21 |
+
try:
|
| 22 |
+
detail = exc.response.json().get("detail", exc.response.text)
|
| 23 |
+
except Exception:
|
| 24 |
+
detail = exc.response.text
|
| 25 |
+
raise click.ClickException(f"API error ({exc.response.status_code}): {detail}")
|
| 26 |
+
|
| 27 |
+
def get(self, path: str, params: dict[str, Any] | None = None) -> Any:
|
| 28 |
+
resp = self._client.get(self._url(path), params=params)
|
| 29 |
+
try:
|
| 30 |
+
resp.raise_for_status()
|
| 31 |
+
except httpx.HTTPStatusError as e:
|
| 32 |
+
self._handle_error(e)
|
| 33 |
+
return resp.json()
|
| 34 |
+
|
| 35 |
+
def post(self, path: str, json: dict[str, Any] | None = None) -> Any:
|
| 36 |
+
resp = self._client.post(self._url(path), json=json)
|
| 37 |
+
try:
|
| 38 |
+
resp.raise_for_status()
|
| 39 |
+
except httpx.HTTPStatusError as e:
|
| 40 |
+
self._handle_error(e)
|
| 41 |
+
return resp.json()
|
| 42 |
+
|
| 43 |
+
def put(self, path: str, json: dict[str, Any] | None = None) -> Any:
|
| 44 |
+
resp = self._client.put(self._url(path), json=json)
|
| 45 |
+
try:
|
| 46 |
+
resp.raise_for_status()
|
| 47 |
+
except httpx.HTTPStatusError as e:
|
| 48 |
+
self._handle_error(e)
|
| 49 |
+
return resp.json()
|
| 50 |
+
|
| 51 |
+
def stream_sse(self, path: str, json: dict[str, Any] | None = None) -> Iterator[dict]:
|
| 52 |
+
with self._client.stream("POST", self._url(path), json=json, timeout=None) as resp:
|
| 53 |
+
for line in resp.iter_lines():
|
| 54 |
+
if not line or not line.startswith("data: "):
|
| 55 |
+
continue
|
| 56 |
+
data = line[len("data: "):]
|
| 57 |
+
if data.strip():
|
| 58 |
+
yield json_module.loads(data)
|
solar_eval/cli/commands/__init__.py
ADDED
|
File without changes
|
solar_eval/cli/commands/compare.py
ADDED
|
@@ -0,0 +1,127 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Compare runs side by side."""
|
| 2 |
+
|
| 3 |
+
import json
|
| 4 |
+
|
| 5 |
+
import click
|
| 6 |
+
from tabulate import tabulate
|
| 7 |
+
|
| 8 |
+
|
| 9 |
+
@click.command("compare")
|
| 10 |
+
@click.argument("project")
|
| 11 |
+
@click.option("--task", "-t", default=None, help="Filter by task name")
|
| 12 |
+
@click.option(
|
| 13 |
+
"--runs",
|
| 14 |
+
"run_ids",
|
| 15 |
+
default=None,
|
| 16 |
+
help="Comma-separated run IDs to compare",
|
| 17 |
+
)
|
| 18 |
+
@click.option("--last", "-n", default=None, type=int, help="Compare last N runs for a task")
|
| 19 |
+
@click.pass_context
|
| 20 |
+
def compare_command(ctx, project, task, run_ids, last):
|
| 21 |
+
"""Compare evaluation scores across runs.
|
| 22 |
+
|
| 23 |
+
Examples:
|
| 24 |
+
solar-eval compare my-project --task ci-v1-all --last 5
|
| 25 |
+
solar-eval compare my-project --runs "run1,run2"
|
| 26 |
+
"""
|
| 27 |
+
cfg = ctx.obj["config"]
|
| 28 |
+
if cfg.is_remote:
|
| 29 |
+
raise click.ClickException("Compare is local-mode only")
|
| 30 |
+
|
| 31 |
+
artifacts_dir = cfg.artifacts_dir(project)
|
| 32 |
+
if not artifacts_dir.exists():
|
| 33 |
+
click.secho("No artifacts found.", fg="yellow")
|
| 34 |
+
return
|
| 35 |
+
|
| 36 |
+
# Collect runs to compare
|
| 37 |
+
if run_ids:
|
| 38 |
+
# Explicit run IDs
|
| 39 |
+
run_dirs = []
|
| 40 |
+
for rid in run_ids.split(","):
|
| 41 |
+
rid = rid.strip()
|
| 42 |
+
d = artifacts_dir / rid
|
| 43 |
+
if d.is_dir() and (d / "run.json").exists():
|
| 44 |
+
run_dirs.append(d)
|
| 45 |
+
else:
|
| 46 |
+
click.secho(f" Run not found: {rid}, skipping", fg="yellow")
|
| 47 |
+
else:
|
| 48 |
+
# Scan all runs, optionally filtered by task
|
| 49 |
+
run_dirs = []
|
| 50 |
+
for d in sorted(artifacts_dir.iterdir()):
|
| 51 |
+
if not d.is_dir() or not (d / "run.json").exists():
|
| 52 |
+
continue
|
| 53 |
+
if task:
|
| 54 |
+
run_meta = json.loads((d / "run.json").read_text())
|
| 55 |
+
if run_meta.get("task") != task:
|
| 56 |
+
continue
|
| 57 |
+
run_dirs.append(d)
|
| 58 |
+
|
| 59 |
+
if last and last < len(run_dirs):
|
| 60 |
+
run_dirs = run_dirs[-last:]
|
| 61 |
+
|
| 62 |
+
if not run_dirs:
|
| 63 |
+
click.secho("No runs found to compare.", fg="yellow")
|
| 64 |
+
return
|
| 65 |
+
|
| 66 |
+
# Load run metadata and evaluation data
|
| 67 |
+
runs_info = []
|
| 68 |
+
all_categories = set()
|
| 69 |
+
for d in run_dirs:
|
| 70 |
+
run_meta = json.loads((d / "run.json").read_text())
|
| 71 |
+
eval_file = d / "evaluation.json"
|
| 72 |
+
if not eval_file.exists():
|
| 73 |
+
continue
|
| 74 |
+
eval_data = json.loads(eval_file.read_text())
|
| 75 |
+
runs_info.append(
|
| 76 |
+
{
|
| 77 |
+
"run_id": d.name,
|
| 78 |
+
"task": run_meta.get("task", "-"),
|
| 79 |
+
"model": run_meta.get("model", "-"),
|
| 80 |
+
"prompt": run_meta.get("prompt", run_meta.get("prompt_version", "-")),
|
| 81 |
+
"pipeline": run_meta.get("pipeline", "-"),
|
| 82 |
+
"eval_data": eval_data,
|
| 83 |
+
}
|
| 84 |
+
)
|
| 85 |
+
all_categories.update(eval_data.get("scores", {}).keys())
|
| 86 |
+
|
| 87 |
+
if not runs_info:
|
| 88 |
+
click.secho("No evaluation data available for comparison.", fg="yellow")
|
| 89 |
+
return
|
| 90 |
+
|
| 91 |
+
# Build comparison table
|
| 92 |
+
headers = ["Category"] + [f"{r['prompt']}/{r['model']}" for r in runs_info]
|
| 93 |
+
|
| 94 |
+
rows = []
|
| 95 |
+
for cat in sorted(all_categories):
|
| 96 |
+
row = [cat]
|
| 97 |
+
for r in runs_info:
|
| 98 |
+
score = r["eval_data"].get("scores", {}).get(cat)
|
| 99 |
+
row.append(f"{score:.4f}" if score is not None else "-")
|
| 100 |
+
rows.append(row)
|
| 101 |
+
|
| 102 |
+
# Separator and overall row
|
| 103 |
+
rows.append(["─" * 20] + ["─" * 8] * len(runs_info))
|
| 104 |
+
overall_row = ["Overall"]
|
| 105 |
+
for r in runs_info:
|
| 106 |
+
overall = r["eval_data"].get("overall_score")
|
| 107 |
+
overall_row.append(f"{overall:.4f}" if overall is not None else "-")
|
| 108 |
+
rows.append(overall_row)
|
| 109 |
+
|
| 110 |
+
task_label = task or "all tasks"
|
| 111 |
+
click.secho(f"\nComparison: {project}/{task_label}", fg="blue", bold=True)
|
| 112 |
+
|
| 113 |
+
# Show run details
|
| 114 |
+
for r in runs_info:
|
| 115 |
+
click.echo(f" {r['prompt']} ({r['model']}, {r['pipeline']})")
|
| 116 |
+
click.echo()
|
| 117 |
+
|
| 118 |
+
click.echo(tabulate(rows, headers=headers, tablefmt="simple"))
|
| 119 |
+
|
| 120 |
+
# Highlight best
|
| 121 |
+
best_run = max(runs_info, key=lambda r: r["eval_data"].get("overall_score", 0))
|
| 122 |
+
best_score = best_run["eval_data"].get("overall_score", 0)
|
| 123 |
+
click.secho(
|
| 124 |
+
f"\n Best: {best_run['prompt']}/{best_run['model']} ({best_score:.4f})",
|
| 125 |
+
fg="green",
|
| 126 |
+
bold=True,
|
| 127 |
+
)
|