Use this file to discover all available pages before exploring further.
ABBYY FineReader Engine vous permet d’ajouter à un dictionnaire des mots contenant des espaces. Cette fonctionnalité peut être très utile pour vérifier des mots comme “New York”. Nous vous recommandons d’utiliser un dictionnaire pour les mots contenant des espaces lors de la Field-Level Recognition, lorsque vous pouvez reconnaître les champs (petites portions d’image contenant de courts fragments de texte) à l’aide d’informations spécifiques sur le type de données qu’ils peuvent contenir. Le mot “New York”, par exemple, peut être utile si vous reconnaissez des adresses.Pour reconnaître des mots avec des espaces, procédez comme suit :
Ajoutez le caractère “espace” à l’alphabet de la langue active.
Ajoutez au dictionnaire les mots contenant des espaces nécessaires.
Ajoutez l’objet UserDictionaryDescription à la collection DictionaryDescriptions de l’objet BaseLanguage.
Dans l’objet RecognizerParams de tous les blocs de texte, assignez l’objet TextLanguage créé précédemment à la propriété TextLanguage et la valeur TRUE à la propriété OneWordPerLine.
Vous trouverez ci-dessous un exemple dans lequel le caractère “espace” a été ajouté à l’alphabet de la langue anglaise et le mot “New York” a été ajouté au Dictionary.
Code C++ (COM)
// Créer un objet LanguageDatabaseFREngine::ILanguageDatabasePtr pLanguageDatabase = Engine->CreateLanguageDatabase();// Créer un objet TextLanguageFREngine::ITextLanguagePtr pTextLanguage = pLanguageDatabase->CreateTextLanguage();// Copier tous les attributs de la langue anglaise prédéfinieFREngine::ITextLanguagePtr pEnglishLanguage = Engine->PredefinedLanguages->Find( "English" )->TextLanguage;pTextLanguage->CopyFrom( pEnglishLanguage );pTextLanguage->InternalName = L"SampleTL";// Associer le nouveau Dictionary au premier objet BaseLanguage (et unique) dans TextLanguageFREngine::IBaseLanguagePtr pBaseLanguage = pTextLanguage->BaseLanguages->Item(0);// Remplacer le nom interne du Dictionary par un nom défini par l'utilisateurpBaseLanguage->InternalName = L"SampleBL"; // Ajouter le caractère « espace »_bstr_t alphabet = pBaseLanguage->GetLetterSet( FREngine::BLLS_Alphabet );pBaseLanguage->put_LetterSet( FREngine::BLLS_Alphabet, alphabet + L" " );// Créer un nouveau Dictionary_bstr_t dictionaryFile = L"D:\\sample.amd";FREngine::IDictionaryPtr pDictionary =pLanguageDatabase->CreateNewDictionary( dictionaryFile, FREngine::LI_EnglishUnitedStates );pDictionary->Name = L"Sample";// Ajouter au Dictionary des mots contenant des espacespDictionary->AddWord( "New York", 100 );// Récupérer la collection des descriptions de Dictionary et supprimer tous les élémentsFREngine::IDictionaryDescriptionsPtr pDictionaryDescriptions = pBaseLanguage->DictionaryDescriptions;pDictionaryDescriptions->DeleteAll();// Créer une description de Dictionary utilisateur et l'ajouter à la collectionFREngine::IDictionaryDescriptionPtr dic = pDictionaryDescriptions->AddNew(FREngine::DT_UserDictionary);// Indiquer le chemin vers le Dictionary qui contient des mots avec des espacesFREngine::IUserDictionaryDescriptionPtr userDic = dic->GetAsUserDictionaryDescription();userDic->FileName = dictionaryFile;FREngine::ILayoutPtr pLayout;...// Définir les propriétés de l'objet RecognizerParams pour tous les blocs de texte// Parcourir les blocsfor( int i = pLayout->Blocks->Count - 1; i >= 0; i-- ) { FREngine::BlockTypeEnum blockType = pLayout->Blocks->Item( i )->Type; // Rechercher le bloc de texte 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; }}...
Code C#
// Créer un objet LanguageDatabaseFREngine.ILanguageDatabase languageDatabase = engineLoader.Engine.CreateLanguageDatabase();// Créer un objet TextLanguageFREngine.ITextLanguage textLanguage = languageDatabase.CreateTextLanguage();// Copier tous les attributs de la langue anglaise prédéfinieFREngine.ITextLanguage englishLanguage = engineLoader.Engine.PredefinedLanguages.Find( "English" ).TextLanguage;textLanguage.CopyFrom( englishLanguage );textLanguage.InternalName = "SampleTL";// Associer le nouveau Dictionary au premier objet BaseLanguage (et au seul) de TextLanguageFREngine.IBaseLanguage baseLanguage = textLanguage.BaseLanguages[0];// Remplacer le nom interne du Dictionary par un nom défini par l'utilisateurbaseLanguage.InternalName = "SampleBL";// Ajouter le caractère "espace"string alphabet = baseLanguage.get_LetterSet( FREngine.BaseLanguageLetterSetEnum.BLLS_Alphabet );baseLanguage.set_LetterSet( FREngine.BaseLanguageLetterSetEnum.BLLS_Alphabet, alphabet + " " );// Créer un nouveau Dictionarystring dictionaryFilePath = "D:\\sample.amd";FREngine.IDictionary dictionary = languageDatabase.CreateNewDictionary( dictionaryFilePath, FREngine.LanguageIdEnum.LI_EnglishUnitedStates );dictionary.Name = "Sample";// Ajouter au Dictionary des mots contenant un espacedictionary.AddWord( "New York", 100 );// Récupérer la collection de descriptions de Dictionary et supprimer tous ses élémentsFREngine.IDictionaryDescriptions dictionaryDescriptions = baseLanguage.DictionaryDescriptions;dictionaryDescriptions.DeleteAll();// Créer une description de Dictionary utilisateur et l'ajouter à la collectionFREngine.IDictionaryDescription dic = dictionaryDescriptions.AddNew(FREngine.DictionaryTypeEnum.DT_UserDictionary);// Indiquer le chemin du Dictionary contenant des mots avec des espacesFREngine.IUserDictionaryDescription userDic = dic.GetAsUserDictionaryDescription();userDic.FileName = dictionaryFilePath;FREngine.ILayout layout;...// Définir les propriétés de l'objet RecognizerParams pour tous les blocs de texte// Parcourir les blocsfor( int i = layout.Blocks.Count - 1; i >= 0; i-- ) { FREngine.IBlockTypeEnum blockType = layout.Blocks[i].Type; // Rechercher le bloc de texte 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; }}...