본문 바로가기
기타Tip

DeepL 용어사전(용어집) 기능 이용해보기(C# 라이브러리)

by 크라크라 2024. 6. 3.

안녕하세요. 오늘은 간단하게 용어사전 관련된 기능을 알아보겠습니다. 

 

용어사전 기능은 특정 언어쌍에만 적용할 수 있는 사전집 같은 것인데요. 기본적인 번역에 내가 원하는 단어뜻을 엎어씌워서 원하는 번역을 만들어내는 기능이라고 할 수 있습니다. 

 

간단한 예시를 들어보면 이런식입니다. 

용어사전에선  make = 부수다  로 정의했다고 합시다.


용어사전 미사용시 :  make the building => 빌딩을 만들다. 
용어사전 사용시 : make the building => 빌딩을 부수다.

 

위에서 든 예는 좀 극단적이고, 실제로 적용을 시켜보면 번역 상황에 따라서 100% 적용은 안되는 경우들이 있습니다. 

그럼에도 특정한 분야에서 일반적이지 않은 용어로 쓰는 뜻이 있다면 기본적으로 DeepL이 번역해서 주니 매우 매력적인 기능이라고 할 수 있겠네요.

 

 

 참고로 사용하시다가 의문이 드실까봐 미리 알아본 내용도 공유드립니다.

- API로 생성된 용어사전과 웹이나 데스크톱 앱에서 생성된 용어사전은 공유되지 않습니다!

- DeepL API 는 무료 및 Pro 구독에서 최대 1000개의 용어 사전을 사용할 수 있으며, 크기 제한은 각 10MB , 각각의 용어 관련 텍스트는

   UTF-8 , 1024바이트로 제한됩니다.

- 웹사이트나 데스크톱 앱에서 만든 용어집을 CSV 로 파일로 만든뒤 업로드 하면 API로 사용할 수 있습니다. 

 


 기본적으로는 HTTP API를 제공하고 있는데요. 직접 호출하시는 방법도 가능하고, 각 언어별 라이브러리를 이용할 때는 해당 라이브러리 별 함수를 사용하셔도 무방합니다. 저는 C# 을 이용해서 한 번 사용해보도록 하겠습니다. 

 

1. 용어사전 생성하기 

 

CreateGlossaryAsync 라는 함수를 사용하고, 0개의 데이터를 넣고 생성하게 되면 예외가 발생합니다. 

단어 2개가 들어있는 용어사전을 만들어보았습니다. 

// 용어사전 만들기
var entriesDictionary = new Dictionary<string, string> { { "artist", "재밌는 사람" }, { "teacher", "불쌍한 사람" } };

// 용어사전 이름 , 번역 source 언어 , 번역 target 언어, 용어사전에 넣을 내용
var glossaryEnToKo = await translator.CreateGlossaryAsync("My Glossary", "EN", "KO", new GlossaryEntries(entriesDictionary));

Console.WriteLine($"Created {glossaryEnToKo.Name}' ({glossaryEnToKo.GlossaryId}) " +
    $"{glossaryEnToKo.SourceLanguageCode}->{glossaryEnToKo.TargetLanguageCode} " +
    $"containing {glossaryEnToKo.EntryCount} entries"
);

///Created My Glossary' (<용어사전 ID>) en->ko containing 2 entries

 

그러면 glossaryEnToKo 라는 응답 데이터에는 실제로 생성된 용어사전의 ID와 이름, 번역에 사용가능여부, 생성시간, 용어사전에 들어있는 데이터 갯수 등이 포함되어 있습니다.

 

 

2. 용어사전 조회하기 

 

생성을 한 용어 사전을 조회할 수 있어야겠죠? 기본적으로 전체 리스트를 조회할 수 있습니다. (0개도 조회됩니다)

var glossaries = await translator.ListGlossariesAsync();
Console.WriteLine(glossaries.Length);
foreach(var glInfo in glossaries){
      Console.WriteLine(glInfo.GlossaryId);
      Console.WriteLine(glInfo.Name);
}

 

 바로 특정한 대상을 보고 싶다면 해당 용어사전의 ID를 입력하면 됩니다. 

var myGlossary = await translator.GetGlossaryAsync("<용어사전ID>");
Console.WriteLine(myGlossary.GlossaryId);
Console.WriteLine(myGlossary.Name);

 

3. 용어사전에 저장된 용어 조회하기 

 

 용어사전 안에 저장되어 있는 용어들은 이렇게 조회해볼 수 있습니다. 

var myGlossary = await translator.GetGlossaryAsync("<용어사전ID>");
var entries = await translator.GetGlossaryEntriesAsync(myGlossary);
foreach (KeyValuePair<string, string> entry in entries.ToDictionary())
{
      Console.WriteLine($"{entry.Key}: {entry.Value}");
}

 

4. 용어사전 삭제하기 

  삭제는 조회한 GlossaryInfo 를 그대로 DeleteGlossaryAsync 함수에 넣어주면 됩니다. 

var glossaries = await translator.ListGlossariesAsync();
foreach(var glinfo in glossaries){
	await translator.DeleteGlossaryAsync(glinfo);
}

 

5. 용어사전을 이용해서 번역하기 

 

용어사전을 이용해서 번역을 해보고 차이를 비교해보겠습니다. 

위에서는 artist 와 teacher 만 사전으로 만들어뒀기 때문에 포함된 문장을 만들어보도록 하겠습니다. 

 

용어 사전1 에는 artist : 음악가, teacher : 청소부으로 

용어 사전2에는 artist : 운동선수, teacher : 교수으로 저장되어 있습니다.

그리고 원 뜻은 다들 아시고 계시죠? (힌트 : 예술가? 선생님?? ) 

 

var translatedText = await translator.TranslateTextAsync(
      "He was a teacher when 20 years old, but now he is an artist",
      LanguageCode.English,
      LanguageCode.Korean);
Console.WriteLine(translatedText);

translatedText = await translator.TranslateTextAsync(
      "He was a teacher when 20 years old, but now he is an artist",
      LanguageCode.English,
      LanguageCode.Korean,
      new TextTranslateOptions { GlossaryId = "<용어사전ID 1>" });
Console.WriteLine(translatedText);

translatedText = await translator.TranslateTextAsync(
      "He was a teacher when 20 years old, but now he is an artist",
      LanguageCode.English,
      LanguageCode.Korean,
      new TextTranslateOptions { GlossaryId = "<용어사전ID 2>" });
Console.WriteLine(translatedText);

 

이렇게 실행한 결과는 다음과 같습니다. 

 

용어사전 미사용 : 스무 살 때 교사였지만 지금은 예술가입니다.
용어사전1 사용 : 스무 살 때는 청소부였지만 지금은 음악가입니다.
용어사전2 사용 : 스무 살 때는 교수였지만 지금은 운동선수입니다.

 

 보시면 용어사전을 적용시에는 artist 와 teacher 의 뜻이 다르게 적용된 것을 알 수 있습니다.  

 

다만, 실제로 써보시면 용어사전을 적용한다고해서 100% 그 뜻대로 번역되지는 않아서 아쉽긴 합니다. 아마도 원래 단어의 뜻과 너무 뜻이 차이가 많이 나기 때문은 아닐까 싶기는 합니다만은 이런 문제 때문에 번역 후에는 한 번씩 확인 과정을 거쳐야 하지 않을까 싶기는 하네요. 

 

 

 

이상으로 이번 DeepL 용어사전 기능에 대한 탐구는 마치도록 하겠습니다. 

댓글