요즘 자가번역 트라이하시는 분이 많으신지 용어 적용에 관한 글이 종종 올라오는데
프롬프트에 넣는 용어집도 어쨋든 프롬프트의 일종이기에, 아주 짧게 끊어서 번역하는게 아닌 이상은 오류가 자주 납니다. 이게 어떻게 오류날지를 몰라서 읽기 전에 미리 처리하는것도 어렵구요.
그래서 용어집을 좀 더 강력하게 처리하는 방법을 알려드리고자 하는데, 이 방법은 자가번역을 어느정도 해보신 분들만 추천드립니다. 오류가 생길 건덕지가 꽤 많아요.
# 1. 용어집 (딕셔너리)
# 이곳에 원하시는 단어를 추가하거나 수정할 수 있습니다.
glossary = {
"哈利·波特": "해리 포터"
}
# 원본 파일 경로
input_filepath = '1.cleaned_text.txt'
# 저장할 파일 경로
output_filepath = '2.word_changed.txt'
try:
# 2. 파일 읽기
# utf-8 인코딩으로 파일을 엽니다. 중국어 파일은 보통 utf-8을 사용합니다.
with open(input_filepath, 'r', encoding='utf-8') as f:
original_text = f.read()
print("파일을 성공적으로 읽었습니다.")
modified_text = original_text
# 3. 단어 치환
# 용어집의 모든 단어에 대해 반복하면서 텍스트를 변경합니다.
for chinese, korean in glossary.items():
modified_text = modified_text.replace(chinese, korean)
print(f"'{chinese}' -> '{korean}' 변경 완료.")
# 4. 파일 저장
# 변경된 내용을 새로운 파일에 저장합니다.
with open(output_filepath, 'w', encoding='utf-8') as f:
f.write(modified_text)
print(f"번역된 내용을 '{output_filepath}' 파일에 성공적으로 저장했습니다.")
except FileNotFoundError:
print(f"오류: '{input_filepath}' 파일을 찾을 수 없습니다. 파일 경로를 확인해주세요.")
except Exception as e:
print(f"오류가 발생했습니다: {e}")
이건 제가 쓰는 용어집을 원문에 '강제 적용'하는 파이썬 코드입니다(made in 제미나이)
원리는 간단합니다.
원본(1.cleaned_text.txt)의 '哈利·波特'라는 단어를 모두 '해리 포터'로 강제 치환하는겁니다.
그래서 수정본상으론
"해리 포터?她说的是那个해리 포터吗?"
이렇게 나옵니다.
다만 이렇게 구분할 경우 오류가 많이 생깁니다.
용어집은 반드시 원문 글자 순서대로 정렬.
예를 들어 나루토의 日向日向의 경우(사실 중국어로는 글자가 좀 다르긴 합니다만, 예시를 위해서 일본식으로 적었습니다) '휴우가 히나타'입니다.
그런데 日向 = 휴우가(히나타)가 위에 있고, 日向日向 = 휴우가 히나타가 밑에 있다면 원본에선 日向日向 = 휴우가휴우가로 치환할겁니다. 혹은 히나타히나타가 될거구요 제가 가지고 있는 저 코드는 용어집의 위에서부터 순서대로 치환하기 때문입니다. 그러니 日向日向 = 휴우가 히나타를 위에. 그리고 日向=휴우가를 밑에. 그래야 정상적으로 치환됩니다.이름이 원래의 본 뜻이 있을 경우
원피스의 후지토라 잇쇼의 잇쇼는 원문으로 一笑입니다. 원래는 한번 웃는다, 냉소 이런 뜻이에요. 그런데 이걸 모두 '잇쇼'라고 번역해버릴경우, '캐릭터가 잇쇼했다' 이렇게 번역이 됩니다. 이런 단어들 전부 걸러내셔야 해요원문이 한글자인 경우
風. 바람풍입니다. 그런데 나루토 프롬프트를 씌우면 이건 단조의 부하 야마나카 '후우'입니다. 그렇다고 바람 풍자를 모두 후우로 바꾸면 풍둔이 후우둔이라 번역되겠죠. 바람 풍자를 쓰는 모든 단어가 전부 망가질겁니다. 이런 경우엔 프롬프트로 따로 빼놓고 한글자 단어들은 문맥에 맞게 사용해달라고 적어놓는게 속 편하실 겁니다.이름은 모두 쪼개야 합니다.
원피스의 '겟코 모리아'의 겟코는 月光입니다. 나루토의 겟코 일족도 같은 글자를 쓰죠. 그런데 '겟코 모리아'만 써놓고 '겟코' '모리아'를 따로 써놓지 않으면, 그냥 '겟코' 혹은 그냥'모리아'란 단어에 대해선 치환이 안된 상태로 번역을 시작할겁니다. 그러니 '겟코 모리아', '겟코', '모리아' 전부 따로따로 단어가 필요합니다. 덤으로 '月光'도 사고가 많이 나는 단어입니다. 그냥 달빛이란 단어로 많이 쓰여서요.이 모든걸 충족하는 용어집을 만들때에 오류가 꽤 많이 납니다.
제미나이로 용어집을 다듬는다고 가정할 때에, 용어집의 길이가 꽤 길어집니다. 같은 단어라도 몇개로 쪼개다보니, 용어 10개면 충분할게 20~30개로 늘어나거든요. 그래서 출력중에 json형식이 풀린다던가, 원본이나 단어에 매칭이 안된다던가. 간체, 번체, 구칭, 현칭, 번역본도 정발번역 기준으로 할지, 일반적으로 쓰이는 번역으로 할지 등에 대한 오류가 거의 반드시 생깁니다.
용어를 수정을 하고 번역할때 추가로 또 발생하는 일이
평소보다 오류문의 숫자가 더 많아질 겁니다.
해당 수정본은 프롬프트를 사용할 때에, 미리 한글로 되어있는 부분은 반드시 건들지 말라는 문구를 넣어야 합니다. 안그러면 우리가 작업해놓은 한글부분도 맘대로 수정하거든요. 그런데 이렇게 하면 AI가 문장을 한글을 놔두고 나머지를 어떻게 번역해야 할지 몰라서 유기시키는 문장이 나옵니다. 이걸 뽑아서 다시 번역하고 교체하는 작업을 하셔야 해요. 원래보다 좀 더 양이 많아질겁니다.
그래서 결론을 말씀드리자면, 용어집을 미리 원본에서 치환시키면 용어집을 강력하게 적용한 상태로 번역을 시작할 수 있다. 다만 이에 대한 부작용이 꽤 많으니, 초심자보단 경험이 좀 있으신 분들에게만 추천드린다. 이 정도일 것 같네요