파파고 번역 시 내용을 합쳐서 한번에 처리하지 않고 개별로 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" private val papagoTranslateUrl = "https://papago.apigw.ntruss.com/nmt/v1/translation"
fun translate(request: TranslateRequest): TranslateResult { fun translate(request: TranslateRequest): TranslateResult {
if (request.texts.isEmpty()) { if (request.texts.isEmpty() || request.sourceLanguage == request.targetLanguage) {
return TranslateResult(emptyList()) return TranslateResult(emptyList())
} }
@@ -32,17 +32,14 @@ class PapagoTranslationService(
set("X-NCP-APIGW-API-KEY", papagoClientSecret) set("X-NCP-APIGW-API-KEY", papagoClientSecret)
} }
val chunks = chunkTexts(request.texts)
val translatedTexts = mutableListOf<String>() val translatedTexts = mutableListOf<String>()
chunks.forEach { chunk -> request.texts.forEach { text ->
val textsInChunkCount = chunk.split(DELIMITER).size
try { try {
val body = mapOf( val body = mapOf(
"source" to request.sourceLanguage, "source" to request.sourceLanguage,
"target" to request.targetLanguage, "target" to request.targetLanguage,
"text" to chunk "text" to text
) )
val requestEntity = HttpEntity(body, headers) val requestEntity = HttpEntity(body, headers)
@@ -58,13 +55,8 @@ class PapagoTranslationService(
} }
val translated = response.body?.message?.result?.translatedText val translated = response.body?.message?.result?.translatedText
if (translated.isNullOrBlank()) { translatedTexts.add(translated ?: "")
repeat(textsInChunkCount) { translatedTexts.add("") }
} else {
translated.split(DELIMITER).forEach { translatedTexts.add(it) }
}
} catch (_: Exception) { } 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 { companion object {
private val SUPPORTED_LANGUAGE_CODES = setOf( private val SUPPORTED_LANGUAGE_CODES = setOf(
"ko", "ko",
@@ -120,8 +92,5 @@ class PapagoTranslationService(
"pt", "pt",
"it" "it"
) )
private const val DELIMITER = "\u001F\u001E\u001D\u001C\u001F\u001E\u001D\u001C"
private const val MAX_TEXT_LENGTH = 3000
} }
} }