Use this file to discover all available pages before exploring further.
ABBYY FineReader Engine에서는 공백이 있는 단어를 사전에 추가할 수 있습니다. 이 기능은 “New York”과 같은 단어를 검사할 때 매우 유용합니다. 필드 수준 인식에서는 공백이 있는 단어용 사전을 사용하는 것이 좋습니다. 이 경우 필드(짧은 텍스트 조각이 들어 있는 작은 이미지 조각)에 포함될 수 있는 데이터 유형에 대한 특정 정보를 바탕으로 필드를 인식할 수 있기 때문입니다. 예를 들어 주소를 인식하는 경우 “New York”이라는 단어가 유용할 수 있습니다.공백이 있는 단어를 인식하려면 다음과 같이 하십시오.
아래에서 영어 알파벳에 “space” 문자를 추가하고 “New York”이라는 단어를 사전에 추가한 예를 볼 수 있습니다.
C++ (COM) 코드
// LanguageDatabase 객체를 생성합니다FREngine::ILanguageDatabasePtr pLanguageDatabase = Engine->CreateLanguageDatabase();// 새 TextLanguage 객체를 생성합니다FREngine::ITextLanguagePtr pTextLanguage = pLanguageDatabase->CreateTextLanguage();// 미리 정의된 영어 언어의 모든 속성을 복사합니다FREngine::ITextLanguagePtr pEnglishLanguage = Engine->PredefinedLanguages->Find( "English" )->TextLanguage;pTextLanguage->CopyFrom( pEnglishLanguage );pTextLanguage->InternalName = L"SampleTL";// TextLanguage 내 첫 번째(이자 유일한) BaseLanguage 객체에 새 사전을 바인딩합니다FREngine::IBaseLanguagePtr pBaseLanguage = pTextLanguage->BaseLanguages->Item(0);// 내부 사전 이름을 사용자 정의 이름으로 변경합니다pBaseLanguage->InternalName = L"SampleBL"; // 공백 문자를 추가합니다_bstr_t alphabet = pBaseLanguage->GetLetterSet( FREngine::BLLS_Alphabet );pBaseLanguage->put_LetterSet( FREngine::BLLS_Alphabet, alphabet + L" " );// 새 사전을 생성합니다_bstr_t dictionaryFile = L"D:\\sample.amd";FREngine::IDictionaryPtr pDictionary =pLanguageDatabase->CreateNewDictionary( dictionaryFile, FREngine::LI_EnglishUnitedStates );pDictionary->Name = L"Sample";// 공백이 포함된 단어를 사전에 추가합니다pDictionary->AddWord( "New York", 100 );// 사전 설명 컬렉션을 가져와 모든 항목을 삭제합니다FREngine::IDictionaryDescriptionsPtr pDictionaryDescriptions = pBaseLanguage->DictionaryDescriptions;pDictionaryDescriptions->DeleteAll();// 사용자 사전 설명을 생성하고 컬렉션에 추가합니다FREngine::IDictionaryDescriptionPtr dic = pDictionaryDescriptions->AddNew(FREngine::DT_UserDictionary);// 공백이 포함된 단어가 들어 있는 사전의 경로를 지정합니다FREngine::IUserDictionaryDescriptionPtr userDic = dic->GetAsUserDictionaryDescription();userDic->FileName = dictionaryFile;FREngine::ILayoutPtr pLayout;...// 모든 텍스트 블록의 RecognizerParams 객체 속성을 지정합니다// 블록을 순회합니다for( int i = pLayout->Blocks->Count - 1; i >= 0; i-- ) { FREngine::BlockTypeEnum blockType = pLayout->Blocks->Item( i )->Type; // 텍스트 블록을 찾습니다 if( blockType != FREngine::BT_Text ) { pLayout->Blocks->DeleteAt(i); } else { pLayout->Blocks->Item(i)->GetAsTextBlock()->RecognizerParams-> TextLanguage = pTextLanguage; pLayout->Blocks->Item(i)->GetAsTextBlock()->RecognizerParams-> OneWordPerLine = VARIANT_TRUE; }}...
C# 코드
// LanguageDatabase 객체를 생성합니다.FREngine.ILanguageDatabase languageDatabase = engineLoader.Engine.CreateLanguageDatabase();// 새 TextLanguage 객체를 생성합니다.FREngine.ITextLanguage textLanguage = languageDatabase.CreateTextLanguage();// 미리 정의된 English 언어의 모든 속성을 복사합니다.FREngine.ITextLanguage englishLanguage = engineLoader.Engine.PredefinedLanguages.Find( "English" ).TextLanguage;textLanguage.CopyFrom( englishLanguage );textLanguage.InternalName = "SampleTL";// TextLanguage 내의 첫 번째(그리고 유일한) BaseLanguage 객체에 새 사전을 바인딩합니다.FREngine.IBaseLanguage baseLanguage = textLanguage.BaseLanguages[0];// 내부 사전 이름을 사용자 정의 이름으로 변경합니다.baseLanguage.InternalName = "SampleBL";// 공백 문자를 추가합니다.string alphabet = baseLanguage.get_LetterSet( FREngine.BaseLanguageLetterSetEnum.BLLS_Alphabet );baseLanguage.set_LetterSet( FREngine.BaseLanguageLetterSetEnum.BLLS_Alphabet, alphabet + " " );// 새 사전을 생성합니다.string dictionaryFilePath = "D:\\sample.amd";FREngine.IDictionary dictionary = languageDatabase.CreateNewDictionary( dictionaryFilePath, FREngine.LanguageIdEnum.LI_EnglishUnitedStates );dictionary.Name = "Sample";// 공백이 포함된 단어를 사전에 추가합니다.dictionary.AddWord( "New York", 100 );// 사전 설명 컬렉션을 가져와 모든 항목을 제거합니다.FREngine.IDictionaryDescriptions dictionaryDescriptions = baseLanguage.DictionaryDescriptions;dictionaryDescriptions.DeleteAll();// 사용자 사전 설명을 생성해 컬렉션에 추가합니다.FREngine.IDictionaryDescription dic = dictionaryDescriptions.AddNew(FREngine.DictionaryTypeEnum.DT_UserDictionary);// 공백이 포함된 단어가 들어 있는 사전의 경로를 지정합니다.FREngine.IUserDictionaryDescription userDic = dic.GetAsUserDictionaryDescription();userDic.FileName = dictionaryFilePath;FREngine.ILayout layout;...// 모든 텍스트 블록의 RecognizerParams 객체 속성을 지정합니다.// 블록을 반복합니다.for( int i = layout.Blocks.Count - 1; i >= 0; i-- ) { FREngine.IBlockTypeEnum blockType = layout.Blocks[i].Type; // 텍스트 블록을 찾습니다. if( blockType != FREngine.BlockTypeEnum.BT_Text ) { layout.Blocks.DeleteAt(i); } else { layout.Blocks[i].GetAsTextBlock().RecognizerParams.TextLanguage = textLanguage; layout.Blocks[i].GetAsTextBlock().RecognizerParams.OneWordPerLine = true; }}...