파파고 번역 시 내용을 합쳐서 한번에 처리하지 않고 개별로 API를 호출해서 번역 처리

This commit is contained in:
2025-12-11 19:35:05 +09:00
parent 3ff38bb73a
commit 1748b26318

View File

@@ -20,7 +20,7 @@ class PapagoTranslationService(
private val papagoTranslateUrl = "https://papago.apigw.ntruss.com/nmt/v1/translation"
fun translate(request: TranslateRequest): TranslateResult {
if (request.texts.isEmpty()) {
if (request.texts.isEmpty() || request.sourceLanguage == request.targetLanguage) {
return TranslateResult(emptyList())
}
@@ -32,17 +32,14 @@ class PapagoTranslationService(
set("X-NCP-APIGW-API-KEY", papagoClientSecret)
}
val chunks = chunkTexts(request.texts)
val translatedTexts = mutableListOf<String>()
chunks.forEach { chunk ->
val textsInChunkCount = chunk.split(DELIMITER).size
request.texts.forEach { text ->
try {
val body = mapOf(
"source" to request.sourceLanguage,
"target" to request.targetLanguage,
"text" to chunk
"text" to text
)
val requestEntity = HttpEntity(body, headers)
@@ -58,13 +55,8 @@ class PapagoTranslationService(
}
val translated = response.body?.message?.result?.translatedText
if (translated.isNullOrBlank()) {
repeat(textsInChunkCount) { translatedTexts.add("") }
} else {
translated.split(DELIMITER).forEach { translatedTexts.add(it) }
}
translatedTexts.add(translated ?: "")
} catch (_: Exception) {
repeat(textsInChunkCount) { translatedTexts.add("") }
}
}
@@ -83,26 +75,6 @@ class PapagoTranslationService(
}
}
private fun chunkTexts(texts: List<String>): List<String> {
if (texts.isEmpty()) return emptyList()
val chunks = mutableListOf<String>()
var startIndex = 0
while (startIndex < texts.size) {
var endIndex = texts.size
while (endIndex > startIndex) {
val candidate = texts.subList(startIndex, endIndex)
val joined = candidate.joinToString(DELIMITER)
if (joined.length <= MAX_TEXT_LENGTH || endIndex - startIndex == 1) {
chunks.add(joined)
startIndex = endIndex
break
}
endIndex--
}
}
return chunks
}
companion object {
private val SUPPORTED_LANGUAGE_CODES = setOf(
"ko",
@@ -120,8 +92,5 @@ class PapagoTranslationService(
"pt",
"it"
)
private const val DELIMITER = "\u001F\u001E\u001D\u001C\u001F\u001E\u001D\u001C"
private const val MAX_TEXT_LENGTH = 3000
}
}