113 lines
3.4 KiB
Python
113 lines
3.4 KiB
Python
"""Phase 1~4 prompt templates for the translation pipeline."""
|
|
|
|
|
|
# ── Phase 1: 초벌 번역 + 고유명사 추출 + 요약 + 문체 분석 ─
|
|
|
|
SYSTEM_PROMPT_PHASE1 = """\
|
|
당신은 전문 번역가입니다. 사용자의 지시에 따라 원문을 도착 언어로 번역하고, \
|
|
고유명사를 추출하며, 내용 요약을 작성하고, 문체를 분석합니다.\
|
|
"""
|
|
|
|
|
|
def build_phase1_user_prompt(source_text: str, target_language: str) -> str:
|
|
return f"""\
|
|
다음 원문을 "{target_language}"으로 번역하세요.
|
|
|
|
번역 결과를 반드시 아래 JSON 포맷으로만 반환하세요 (마크다운 코드 블록 없이 순수 JSON):
|
|
|
|
{{
|
|
"translated": "(도착어 번역문)",
|
|
"proper_nouns": [
|
|
{{"original": "(원문 고유명사)", "suggested": "(제안 도착어 번역)"}}
|
|
],
|
|
"summary": "(내용 요약, 2-3문장以内)",
|
|
"style": "(문체 분석: 예: '공식적인', '친근한', '학술적', '보도풍', '문학적이고 서정적인' 등)"
|
|
}}
|
|
|
|
고유명사 추출 규칙:
|
|
- 인물명,地名, 기관명, 제품명, 작품명 등 고유 명사를 포함
|
|
- 일반 명사는 제외 (예: "정부", "회사"는 제외)
|
|
- 없는 경우 빈 배열 []로 반환
|
|
|
|
원문:
|
|
---
|
|
{source_text}
|
|
---"""
|
|
|
|
|
|
# ── Phase 3: 재번역 (고유명사 + 문체 적용) ───────────────
|
|
|
|
SYSTEM_PROMPT_PHASE3 = """\
|
|
당신은 숙련된 번역 교정가입니다. 제공된 초벌 번역문을 고유명사 매핑과 \
|
|
문체 지시를 엄격히 적용하여 재번역하세요.\
|
|
"""
|
|
|
|
|
|
def build_phase3_user_prompt(
|
|
phase1_translated: str,
|
|
proper_nouns: list[dict],
|
|
style: str,
|
|
target_language: str,
|
|
) -> str:
|
|
pn_lines = "\n".join(
|
|
f" - {pn['original']} → {pn.get('final', pn.get('suggested', ''))}"
|
|
for pn in proper_nouns if pn.get("original") or pn.get("suggested")
|
|
)
|
|
|
|
return f"""\
|
|
다음 초벌 번역문을 "{target_language}"으로 재번역하세요.
|
|
|
|
고유명사 매핑 (반드시 적용):
|
|
{pn_lines}
|
|
|
|
문체: {style}
|
|
|
|
재번역 규칙:
|
|
1. 위 고유명사 매핑을 반드시 준수하세요
|
|
2. 지시된 문체에 맞게 어조를 조정하세요
|
|
3. 초벌 번역의 의미는 유지하되 더 자연스럽고 정확히 다듬으세요
|
|
4. 결과만 반환하세요 (설명 없이 번역문만)
|
|
|
|
초벌 번역:
|
|
---
|
|
{phase1_translated}
|
|
---"""
|
|
|
|
|
|
# ── Phase 4: 가독성 개선 ───────────────────────────────
|
|
|
|
SYSTEM_PROMPT_PHASE4 = """\
|
|
당신은 "{target_language}" 원어민 편집자입니다. 제공된 번역문을 \
|
|
"{target_language}" 화자에게 읽기 편하도록 다듬으세요.\
|
|
"""
|
|
|
|
|
|
def build_phase4_user_prompt(
|
|
phase3_result: str,
|
|
proper_nouns: list[dict],
|
|
style: str,
|
|
) -> str:
|
|
pn_lines = "\n".join(
|
|
f" - {pn['original']} → {pn.get('final', pn.get('suggested', ''))}"
|
|
for pn in proper_nouns if pn.get("original") or pn.get("suggested")
|
|
)
|
|
|
|
return f"""\
|
|
다음 번역문을 읽기 편하고 자연스러운 문장으로 다듬으세요.
|
|
|
|
고유명사 (변경 금지):
|
|
{pn_lines}
|
|
|
|
문체: {style}
|
|
|
|
다듬기 규칙:
|
|
1. 고유명사는 절대 변경하지 마세요
|
|
2. 한국어 화자에게 자연스럽게 읽히도록 어순과 표현을 조정하세요
|
|
3. 문장은 간결하고 명확하게 다듬으세요
|
|
4. 의미는 반드시 유지하세요
|
|
5. 결과만 반환하세요 (설명 없이 번역문만)
|
|
|
|
번역문:
|
|
---
|
|
{phase3_result}
|
|
---"""
|