feat: pipeline options translate/target_language; allow HTML-only without translation
This commit is contained in:
@@ -25,16 +25,16 @@ class DocumentPipeline:
|
||||
self.output_dir = Path(output_dir)
|
||||
(self.output_dir / "html").mkdir(parents=True, exist_ok=True)
|
||||
|
||||
def translate_to_korean(self, parts: List[str]) -> List[str]:
|
||||
def translate(self, parts: List[str], target_language: str = "ko") -> List[str]:
|
||||
translated: List[str] = []
|
||||
sys_prompt = (
|
||||
"당신은 전문 번역가입니다. 입력 텍스트를 자연스러운 한국어로 충실히 번역하세요. "
|
||||
"당신은 전문 번역가입니다. 입력 텍스트를 대상 언어로 자연스럽고 충실하게 번역하세요. "
|
||||
"의미를 임의로 축약하거나 추가하지 마세요. 코드/수식/표기는 가능한 유지하세요."
|
||||
)
|
||||
for p in parts:
|
||||
messages = [
|
||||
{"role": "system", "content": sys_prompt},
|
||||
{"role": "user", "content": f"아래 텍스트를 한국어로 번역하세요:\n\n{p}"},
|
||||
{"role": "user", "content": f"아래 텍스트를 {target_language}로 번역하세요.\n\n{p}"},
|
||||
]
|
||||
resp = self.ollama.chat(self.boost_model, messages, stream=False, options={"temperature": 0.2, "num_ctx": 32768})
|
||||
content = resp.get("message", {}).get("content") or resp.get("response", "")
|
||||
@@ -58,9 +58,9 @@ h1{{font-size: 1.6rem; margin-bottom: 1rem;}}
|
||||
html_path.write_text(html, encoding="utf-8")
|
||||
return str(html_path)
|
||||
|
||||
def process(self, *, doc_id: str, text: str, index, generate_html: bool = True) -> PipelineResult:
|
||||
def process(self, *, doc_id: str, text: str, index, generate_html: bool = True, translate: bool = True, target_language: str = "ko") -> PipelineResult:
|
||||
parts = chunk_text(text, max_chars=1200, overlap=200)
|
||||
translated = self.translate_to_korean(parts)
|
||||
translated = self.translate(parts, target_language=target_language) if translate else parts
|
||||
|
||||
to_append: List[IndexRow] = []
|
||||
for i, t in enumerate(translated):
|
||||
@@ -70,7 +70,8 @@ h1{{font-size: 1.6rem; margin-bottom: 1rem;}}
|
||||
|
||||
html_path: str | None = None
|
||||
if generate_html:
|
||||
html_path = self.build_html(doc_id, title=f"문서 {doc_id} (한국어 번역본)", ko_text="\n\n".join(translated))
|
||||
title_suffix = "번역본" if translate else "원문"
|
||||
html_path = self.build_html(doc_id, title=f"문서 {doc_id} ({title_suffix})", ko_text="\n\n".join(translated))
|
||||
|
||||
return PipelineResult(doc_id=doc_id, html_path=html_path, added_chunks=added, chunks=len(translated))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user