> ## Documentation Index
> Fetch the complete documentation index at: https://docs.abbyy.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Reconnaître des mots avec des espaces

> Reconnaissez les mots contenant des espaces (comme 'New York') dans ABBYY FineReader Engine en ajoutant le caractère espace à l'alphabet de la langue, au dictionnaire et à OneWordPerLine.

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 reconnaissance de champ, 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 :

1. Ajoutez le caractère "espace" à l'alphabet de la langue active.
2. Ajoutez au dictionnaire les mots contenant des espaces nécessaires.
3. Définissez la propriété [OneWordPerLine](/fr/fine-reader/engine/api-reference/parameter-objects/preprocessing-analysis-recognition-and-synthesis-parameters/recognizerparams#onewordperline) de l'objet [RecognizerParams](/fr/fine-reader/engine/api-reference/parameter-objects/preprocessing-analysis-recognition-and-synthesis-parameters/recognizerparams) sur TRUE.

Vous trouverez ci-dessous une description détaillée de cette opération :

1. Créez une nouvelle langue de texte à partir d'une [langue prédéfinie](/fr/fine-reader/engine/specifications/predefined-languages). Pour ce faire, créez un objet [TextLanguage](/fr/fine-reader/engine/api-reference/language-related-objects/textlanguage) à l'aide de la méthode [CreateTextLanguage](/fr/fine-reader/engine/api-reference/language-related-objects/languagedatabase/createtextlanguage-method) de l'objet [LanguageDatabase](/fr/fine-reader/engine/api-reference/language-related-objects/languagedatabase), puis copiez les attributs de la langue prédéfinie.
2. Ajoutez le caractère "espace" à l'objet [BaseLanguage](/fr/fine-reader/engine/api-reference/language-related-objects/baselanguage) de l'objet TextLanguage, à l'aide de la propriété [LetterSet](/fr/fine-reader/engine/api-reference/language-related-objects/baselanguage/letterset-property) de l'objet BaseLanguage.
3. Créez un nouveau Dictionary et ajoutez-y tous les mots contenant des espaces nécessaires. Vous pouvez utiliser l'objet [Dictionary](/fr/fine-reader/engine/api-reference/language-related-objects/dictionary) pour cela.
4. Créez un objet [UserDictionaryDescription](/fr/fine-reader/engine/api-reference/language-related-objects/userdictionarydescription). Assignez le chemin du nouveau Dictionary à la propriété [FileName](/fr/fine-reader/engine/api-reference/language-related-objects/userdictionarydescription#filename) de cet objet.
5. Ajoutez l'objet UserDictionaryDescription à la collection [DictionaryDescriptions](/fr/fine-reader/engine/api-reference/language-related-objects/baselanguage#dictionarydescriptions) de l'objet BaseLanguage.
6. Dans l'objet [RecognizerParams](/fr/fine-reader/engine/api-reference/parameter-objects/preprocessing-analysis-recognition-and-synthesis-parameters/recognizerparams) de tous les blocs de texte, assignez l'objet TextLanguage créé précédemment à la propriété [TextLanguage](/fr/fine-reader/engine/api-reference/parameter-objects/preprocessing-analysis-recognition-and-synthesis-parameters/recognizerparams#textlanguage) et la valeur TRUE à la propriété [OneWordPerLine](/fr/fine-reader/engine/api-reference/parameter-objects/preprocessing-analysis-recognition-and-synthesis-parameters/recognizerparams#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."

<Accordion title="Code C++ (COM)">
  ```cpp theme={null}
  // Créer un objet LanguageDatabase
  FREngine::ILanguageDatabasePtr pLanguageDatabase = Engine->CreateLanguageDatabase();
  // Créer un objet TextLanguage
  FREngine::ITextLanguagePtr pTextLanguage = pLanguageDatabase->CreateTextLanguage();
  // Copier tous les attributs de la langue anglaise prédéfinie
  FREngine::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 TextLanguage
  FREngine::IBaseLanguagePtr pBaseLanguage = pTextLanguage->BaseLanguages->Item(0);
  // Remplacer le nom interne du Dictionary par un nom défini par l'utilisateur
  pBaseLanguage->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 espaces
  pDictionary->AddWord( "New York", 100 );
  // Récupérer la collection des descriptions de Dictionary et supprimer tous les éléments
  FREngine::IDictionaryDescriptionsPtr pDictionaryDescriptions =
   pBaseLanguage->DictionaryDescriptions;
  pDictionaryDescriptions->DeleteAll();
  // Créer une description de Dictionary utilisateur et l'ajouter à la collection
  FREngine::IDictionaryDescriptionPtr dic =
   pDictionaryDescriptions->AddNew(FREngine::DT_UserDictionary);
  // Indiquer le chemin vers le Dictionary qui contient des mots avec des espaces
  FREngine::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 blocs
  for( 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;
    }
  }
  ...
  ```
</Accordion>

<Accordion title="Code C#">
  ```csharp theme={null}
  // Créer un objet LanguageDatabase
  FREngine.ILanguageDatabase languageDatabase = engineLoader.Engine.CreateLanguageDatabase();
  // Créer un objet TextLanguage
  FREngine.ITextLanguage textLanguage = languageDatabase.CreateTextLanguage();
  // Copier tous les attributs de la langue anglaise prédéfinie
  FREngine.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 TextLanguage
  FREngine.IBaseLanguage baseLanguage = textLanguage.BaseLanguages[0];
  // Remplacer le nom interne du Dictionary par un nom défini par l'utilisateur
  baseLanguage.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 Dictionary
  string dictionaryFilePath = "D:\\sample.amd";
  FREngine.IDictionary dictionary = languageDatabase.CreateNewDictionary( dictionaryFilePath, FREngine.LanguageIdEnum.LI_EnglishUnitedStates );
  dictionary.Name = "Sample";
  // Ajouter au Dictionary des mots contenant un espace
  dictionary.AddWord( "New York", 100 );
  // Récupérer la collection de descriptions de Dictionary et supprimer tous ses éléments
  FREngine.IDictionaryDescriptions dictionaryDescriptions = baseLanguage.DictionaryDescriptions;
  dictionaryDescriptions.DeleteAll();
  // Créer une description de Dictionary utilisateur et l'ajouter à la collection
  FREngine.IDictionaryDescription dic = dictionaryDescriptions.AddNew(FREngine.DictionaryTypeEnum.DT_UserDictionary);
  // Indiquer le chemin du Dictionary contenant des mots avec des espaces
  FREngine.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 blocs
  for( 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;
      }
  }
  ...
  ```
</Accordion>

<div id="see-also">
  ## Voir aussi
</div>

[Utilisation des langues](/fr/fine-reader/engine/guided-tour/advanced-techniques/working-with-languages)

[Utilisation des Dictionaries](/fr/fine-reader/engine/guided-tour/advanced-techniques/working-with-dictionaries)

[Reconnaissance champ par champ](/fr/fine-reader/engine/guided-tour/basic-usage-scenarios-implementation/field-level-recognition)
