메인 콘텐츠로 건너뛰기
C# 샘플은 Windows용 FRE에만 적용됩니다.
ABBYY FineReader Engine에서는 다양한 유형의 사전을 인식 언어에 추가할 수 있으며, 이를 통해 인식 품질을 크게 높일 수 있습니다.

사전 유형

사전은 여러 유형으로 나눌 수 있습니다.
이 유형의 사전은 내장 사전 지원이 있는 미리 정의된 언어에 대해 이미 제공됩니다(미리 정의된 언어 목록의 설명 참조). 또한 일부 언어의 경우 .zmd 아카이브에 전문 용어 사전(예: 의료, 법률)이 포함되어 있습니다. 표준 사전은 3개 또는 4개의 파일로 구성됩니다. 파일 이름은 일반적으로 언어의 전체 이름 또는 약식 이름과 같으며, 확장자는 .amd, .amm, .amt 또는 .ame입니다. .amd, .amm, .amt 확장자의 파일은 항상 제공됩니다. 이 파일들은 다음 폴더에 저장되며 변경할 수 없습니다. Data/ExtendedDictionaries (Linux), Resources/ExtendedDictionaries (macOS), Data\ExtendedDictionaries (Windows).ABBYY FineReader Engine에는 .ame 파일이 제공되지 않습니다. .ame는 사전 확장, 즉 사용자가 사전에 추가한 단어를 저장하는 형식입니다. ABBYY FineReader에서 사전 확장을 만들 수 있으며, 여기서는 이를 user dictionary라고 합니다. 그런 다음 생성된 파일을 위에서 언급한 ABBYY FineReader Engine 폴더 아래의 해당 폴더로 복사하면 됩니다(또는 ILanguageDatabase::DictionaryExtensionsPath 속성에 전체 경로를 지정할 수도 있습니다). ABBYY FineReader는 표준 사전의 확장 파일을 %appdata%\ABBYY\FineReader\15\FineReaderShell\UserDictionaries에 저장합니다. 사전 확장은 ABBYY FineReader Engine에서 ILanguageDatabase::OpenDictionaryExtension 메서드를 사용해 편집할 수 있습니다.이 사전 유형은 StandardDictionaryDescription 객체로 설명됩니다.
Dictionary 객체를 사용해 만들 수 있습니다. Dictionary 객체를 사용하면 해당 메서드를 통해 단어를 추가하고 제거할 수 있습니다.Windows에서는 Dictionary 객체를 사용해 Dictionary dialog box에서 사전을 편집할 수도 있습니다. 이 dialog box에서는 Windows ANSI 및 Unicode 인코딩의 모든 텍스트 파일을 가져올 수 있습니다(유일한 조건은 단어가 공백이나 기타 알파벳이 아닌 문자로 구분되어 있어야 한다는 점입니다).이 사전 유형은 UserDictionaryDescription 객체로 설명됩니다.
FineReader Engine의 사용자 사전은 .amd 파일 형식이며 어떤 언어에 대해서도 만들 수 있습니다. 사전 지원이 없는 언어에서는 표준 사전을 대신할 수 있습니다. ABBYY FineReader의 사용자 사전은 FineReader Engine에서 dictionary extension이라고 하며, .ame 파일입니다. 이 파일은 사전 지원이 있는 언어에 대해서만 해당 언어의 표준 사전을 확장하는 형태로 만들 수 있습니다.
해당 언어에서 어떤 단어를 허용하고 어떤 단어를 허용하지 않을지를 정의하는 규칙을 지정합니다.이 사전 유형은 RegExpDictionaryDescription 객체로 설명됩니다.
사용자 고유의 사전 유형을 구현할 수 있습니다. 이 사전은 클라이언트 측에서 구현되는 IExternalDictionary 인터페이스로 표현됩니다. 외부 사전을 만드는 방법에 대한 지침은 이 인터페이스의 설명에서 확인할 수 있습니다.이 사전 유형은 ExternalDictionaryDescription 객체로 설명됩니다.
ABBYY FineReader Engine은 모든 유형의 사전을 설명하기 위한 DictionaryDescription 객체를 제공합니다. 이것은 서로 다른 사전 유형 설명의 기본이 되는 객체입니다. 이 모든 사전 설명은 DictionaryDescriptions 컬렉션의 요소입니다.

사전 설명 만들기

사전 설명을 만들려면 DictionaryDescriptions 객체의 AddNew 메서드를 사용합니다. 이 메서드는 DictionaryDescription 객체에 대한 참조를 반환합니다. 해당 사전 유형을 설명하는 객체에 대한 참조를 얻으려면 DictionaryDescription 객체의 GetAsStandardDictionaryDescription, GetAsUserDictionaryDescription, GetAsRegExpDictionaryDescription, GetAsExternalDictionaryDescription 메서드를 사용합니다.

사전 속성

각 사전에 대해 해당 사전의 식별 속성을 지정해야 합니다.
  • 표준 사전(StandardDictionaryDescription)의 경우 언어 ID를 정의하는 LanguageId 속성을 지정합니다.
  • 사용자 사전(UserDictionaryDescription)의 경우 사용자 사전의 경로를 제공하는 FileName 속성을 지정합니다.
  • 정규식 기반 사전(RegExpDictionaryDescription)의 경우 SetText 메서드를 사용하여 정규식을 지정합니다. ABBYY FineReader Engine 정규식 사용을 참조하세요.
  • 외부 사전(ExternalDictionaryDescription)의 경우 SetDictionary 메서드를 사용하여 사전을 지정합니다.
모든 사전 유형에는 가중치가 할당됩니다. 사전의 가중치는 인식 과정에서 해당 사전의 단어가 검출될 때 그 단어의 가중치에 영향을 줍니다. 가중치 매개변수는 백분율이며 음수가 아니어야 합니다. 가중치가 0이라고 해서 해당 사전이 없다는 뜻은 아닙니다. 100%를 초과하는 가중치도 허용되지만, 이러한 매개변수는 사용할 때 매우 주의해야 합니다. 가중치는 IDictionaryDescription::Weight 속성에서 지정하며, 기본값은 100입니다. 표준 사전에는 선택한 사전을 기준으로 만든 트라이그램을 프로그램에서 사용할지 여부를 지정하는 CanUseTrigrams 옵션도 있습니다. 트라이그램은 세 글자의 조합입니다. 이러한 조합이 모두 실제 단어에 나타나는 것은 아닙니다. 사전에 없는 트라이그램이 포함된 단어는 발음할 수 없을 가능성이 매우 높습니다. 트라이그램은 신뢰할 수 없는 단어를 걸러내는 데 사용됩니다. “general” 표준 사전에서는 트라이그램을 활성화하고, 용어 사전에서는 비활성화하는 것이 좋습니다.

인식 언어의 사전

텍스트 인식 언어(TextLanguage 객체)에는 해당 언어의 단어를 포함하는 사전과 금지어 사전이 모두 있을 수 있습니다. 전자는 텍스트 언어의 각 기본 인식 언어에 대해 지정되며, IBaseLanguage::DictionaryDescriptions 속성을 통해 액세스할 수 있습니다. 기본 언어에는 연결된 사전이 없을 수도 있습니다. 금지어 사전은 ITextLanguage::ProhibitingDictionaries 속성을 통해 텍스트 인식 언어에 직접 연결됩니다. 인식 중 사전에 있는 단어만 허용하려면 IBaseLanguage::AllowWordsFromDictionaryOnly 속성을 TRUE로 설정합니다. 이 경우 기본 언어의 사전에서 찾을 수 없는 단어는 ABBYY FineReader Engine이 사전상의 대체 후보를 전혀 찾지 못한 경우에만 인식된 텍스트에 나타날 수 있습니다.

인식 언어에 사전을 연결하는 방법

  1. 사용 가능한 방법 중 하나를 사용해 TextLanguage 객체를 만듭니다(예: LanguageDatabase 객체의 CreateTextLanguage 메서드).
  2. 새 텍스트 언어의 기본 언어 컬렉션을 가져옵니다(BaseLanguages 속성 사용).
  3. BaseLanguage 객체를 만들고 기본 언어 컬렉션에 추가합니다.
  4. 새 기본 언어의 사전 설명 컬렉션을 가져옵니다(DictionaryDescriptions 속성).
  5. 사전 설명을 만들고 이를 기본 언어의 사전 설명 컬렉션에 추가합니다. DictionaryDescriptions 컬렉션의 AddNew 메서드를 사용합니다.
서로 다른 유형의 사전을 여러 개 만들어 하나의 기본 인식 언어에 대한 DictionaryDescriptions 컬렉션에 추가할 수 있습니다.
  1. [선택 사항] 생성한 사전의 가중치를 지정합니다.
  2. 사전의 식별 속성을 지정합니다. 표준 사전의 경우 LanguageId 속성을, 사용자 사전의 경우 FileName 속성을 지정하고, 정규식 기반 사전의 경우 IRegExpDictionaryDescription::SetText 메서드를 호출하며, 외부 사전의 경우 IExternalDictionaryDescription::SetDictionary 메서드를 호출합니다.
  3. [선택 사항] BaseLanguage 객체의 다른 속성을 지정합니다.
  4. [선택 사항] TextLanguage 객체의 ProhibitingDictionaries 속성을 사용해 금지 사전을 설정합니다.
  5. 생성한 TextLanguage 객체를 RecognizerParams 객체의 TextLanguage 속성에 할당합니다.
Windows에서 이러한 단계를 구현하려면 아래 코드 예제를 참조하세요.
// 전역 ABBYY FineReader Engine 객체
FREngine::IEnginePtr Engine;
// LanguageDatabase 객체
FREngine::ILanguageDatabasePtr languageDatabase;
...
// TextLanguage 객체를 만들고 해당 기본 언어 컬렉션을 가져옵니다
FREngine::ITextLanguagePtr pTextLang = languageDatabase->CreateTextLanguage();
FREngine::IBaseLanguagesPtr pBaseLangCollection = pTextLang->BaseLanguages;
// BaseLanguage 객체를 만들고 해당 사전 설명 컬렉션을 가져옵니다
FREngine::IBaseLanguagePtr pBaseLang = pBaseLangCollection->AddNew();
pBaseLang->InternalName = L"SampleBaseLanguage";
pBaseLang->PutLetterSet( FREngine::BLLS_Alphabet, L"abc123" );
FREngine::IDictionaryDescriptionsPtr pDictDescCollection = pBaseLang->DictionaryDescriptions;
// 표준 사전 설명을 만들고 컬렉션에 추가합니다
FREngine::IDictionaryDescriptionPtr pDicDescription =
 pDictDescCollection->AddNew( FREngine::DT_SystemDictionary);
// [선택 사항] 생성한 사전의 가중치를 지정합니다
pDicDescription->Weight = 100;
// 사전의 식별 속성을 지정합니다
FREngine::IStandardDictionaryDescriptionPtr pStandardDic = pDicDescription->GetAsStandardDictionaryDescription();
pStandardDic->LanguageId = FREngine::LI_EnglishUnitedStates;
// [선택 사항] BaseLanguage 객체의 다른 속성을 지정합니다
pBaseLang->AllowWordsFromDictionaryOnly = VARIANT_TRUE;
// RecognizerParams 객체를 만듭니다
FREngine::IRecognizerParamsPtr pParams = Engine->CreateRecognizerParams();
// 생성한 TextLanguage 객체를 TextLanguage 속성에 할당합니다
pParams->TextLanguage = pTextLang;
...
// 전역 ABBYY FineReader Engine 객체
FREngine.IEngine engine;
// LanguageDatabase 객체
FREngine.ILanguageDatabase languageDatabase;
...
// TextLanguage 객체를 만들고 기본 언어 컬렉션을 가져옵니다
FREngine.ITextLanguage TextLang = languageDatabase.CreateTextLanguage();
FREngine.IBaseLanguages BaseLangCollection = TextLang.BaseLanguages;
// BaseLanguage 객체를 만들고 사전 설명 컬렉션을 가져옵니다
FREngine.IBaseLanguage BaseLang = BaseLangCollection.AddNew();
BaseLang.InternalName = "SampleBaseLanguage";
BaseLang.set_LetterSet( FREngine.BaseLanguageLetterSetEnum.BLLS_Alphabet, "abc123" );
FREngine.IDictionaryDescriptions DictDescCollection = BaseLang.DictionaryDescriptions;
// 표준 사전 설명을 만들고 컬렉션에 추가합니다
FREngine.IDictionaryDescription DicDescription = DictDescCollection.AddNew( FREngine.DictionaryTypeEnum.DT_SystemDictionary );
// [선택 사항] 생성한 사전의 가중치를 지정합니다
DicDescription.Weight = 100;
// 사전의 식별 속성을 지정합니다
FREngine.IStandardDictionaryDescription StandardDic = DicDescription.GetAsStandardDictionaryDescription();
StandardDic.LanguageId = FREngine.LanguageIdEnum.LI_EnglishUnitedStates;
// [선택 사항] BaseLanguage의 다른 속성을 지정합니다
BaseLang.AllowWordsFromDictionaryOnly = true;
// RecognizerParams 객체를 만듭니다
FREngine.IRecognizerParams recParams = engine.CreateRecognizerParams();
// 생성한 TextLanguage 객체를 TextLanguage 속성에 할당합니다
recParams.TextLanguage = TextLang;
...

캐시 사전

캐시 사전은 처리 중에도 쉽게 변경할 수 있는 작은 사전(약 100개 단어)입니다. 예를 들어 처리 도중 문서에 대한 새로운 정보를 발견해 사전을 더 정확하게 선택할 수 있는 경우, 캐시 사전을 사용할 수 있습니다. 이러한 사전은 field 수준 인식에 적합합니다. 예를 들어, 인식해야 하는 양식에 두 개의 field가 있다고 가정해 보겠습니다. 하나는 도시 이름이고 다른 하나는 거리 이름입니다. 도시 이름은 이미 인식했고 해당 도시의 거리 목록도 가지고 있습니다. 이 경우 적절한 캐시 사전에 거리 이름을 로드하면 거리 이름을 더 빠르고 정확하게 인식할 수 있습니다. ABBYY FineReader Engine은 캐시 사전을 다루기 위해 FRPage 객체의 AddWordsToCacheDictionary, AddWordToCacheDictionary, CleanCacheDictionary 메서드를 제공합니다.
캐시 사전을 사용하려면 IEngine::AutoCleanRecognizerSession 속성을 FALSE로 설정해야 합니다. AutoCleanRecognizerSession 속성의 기본값은 TRUE이며, 이는 FineReader Engine이 각 페이지 인식 후 인식 세션을 정리한다는 의미입니다. 이 경우 캐시 사전도 함께 정리됩니다. 사용자 데이터가 실수로 삭제되는 것을 방지하기 위해 FineReader Engine은 이 모드에서 캐시 사전 사용을 허용하지 않습니다. 캐시 사전을 사용하는 경우에는 필요할 때 IEngine::CleanRecognizerSession 메서드를 호출해 인식 세션을 수동으로 정리해야 합니다. 인식 세션을 언제 정리해야 하는지는 해당 메서드 설명을 참조하십시오.

참고 항목

언어 사용하기 공백이 포함된 단어 인식하기