> ## 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.

# Trabajar con diccionarios

> Asocie diccionarios estándar, de usuario, de expresiones regulares o agregados a un idioma de reconocimiento de ABBYY FineReader Engine para mejorar la precisión del OCR en textos específicos de un dominio.

<Note>
  Los ejemplos de C# solo se aplican a FRE para Windows.
</Note>

ABBYY FineReader Engine le permite asociar diccionarios de varios tipos a un idioma de reconocimiento, lo que mejora considerablemente la calidad del reconocimiento.

<div id="dictionary-types">
  ## Tipos de diccionario
</div>

Los diccionarios pueden ser de varios tipos:

<Accordion title="Diccionario estándar">
  Este tipo de diccionario ya se proporciona para los idiomas predefinidos que cuentan con compatibilidad integrada con diccionarios (consulte los comentarios en la [lista de idiomas predefinidos](/es/fine-reader/engine/specifications/predefined-languages)). Además, para algunos idiomas, existen diccionarios de términos especializados (por ejemplo, médicos y jurídicos) empaquetados en el archivo .zmd. Los diccionarios estándar constan de tres o cuatro archivos. Sus nombres suelen coincidir con el nombre completo o abreviado del idioma y tienen extensión .amd, .amm, .amt o .ame. Los archivos con extensiones .amd, .amm y .amt siempre están presentes. Se almacenan en las siguientes carpetas y no se pueden cambiar: [Data/ExtendedDictionaries](/es/fine-reader/engine/distribution/distribution-windows/distribution-kit#dictionaries) (Linux), [Resources/ExtendedDictionaries](/es/fine-reader/engine/distribution/distribution-windows/distribution-kit#dictionaries) (macOS), [Data\ExtendedDictionaries](/es/fine-reader/engine/distribution/distribution-windows/distribution-kit#dictionaries) (Windows).

  ABBYY FineReader Engine no incluye archivos .ame: este es un formato para almacenar una extensión de diccionario, es decir, palabras añadidas al diccionario por el usuario. Puede crear una extensión de diccionario en ABBYY FineReader, donde se denomina diccionario de usuario, y después copiar el archivo creado a la carpeta mencionada anteriormente dentro de la carpeta de ABBYY FineReader Engine (o especificar la ruta completa en la propiedad [ILanguageDatabase::DictionaryExtensionsPath](/es/fine-reader/engine/api-reference/language-related-objects/languagedatabase#dictionaryextensionspath)). ABBYY FineReader almacena las extensiones de los diccionarios estándar en %appdata%\ABBYY\FineReader\15\FineReaderShell\UserDictionaries. Las extensiones de diccionario se pueden editar en ABBYY FineReader Engine mediante el método [ILanguageDatabase::OpenDictionaryExtension](/es/fine-reader/engine/api-reference/language-related-objects/languagedatabase/opendictionaryextension-method).

  Este tipo de diccionario se describe mediante el objeto [StandardDictionaryDescription](/es/fine-reader/engine/api-reference/language-related-objects/standarddictionarydescription).
</Accordion>

<Accordion title="Diccionario de usuario">
  Se puede crear mediante el objeto [Dictionary](/es/fine-reader/engine/api-reference/language-related-objects/dictionary). El objeto Dictionary permite agregar y eliminar palabras mediante sus métodos.

  En Windows, el objeto Dictionary también permite editar el diccionario con ayuda del [cuadro de diálogo Dictionary](/es/fine-reader/engine/api-reference/language-related-objects/dictionary/edit-method/dictionary-dialog-box). Este cuadro de diálogo permite importar cualquier archivo de texto con codificación Windows ANSI o Unicode (el único requisito es que las palabras estén separadas por espacios u otros caracteres no alfabéticos).

  Este tipo de diccionario se describe mediante el objeto [UserDictionaryDescription](/es/fine-reader/engine/api-reference/language-related-objects/userdictionarydescription).

  <Note>
    El diccionario de usuario en FineReader Engine tiene formato de archivo .amd y se puede crear para cualquier idioma. Puede sustituir al diccionario estándar en idiomas que no tienen compatibilidad con diccionarios. El diccionario de usuario de ABBYY FineReader se denomina extensión de diccionario en FineReader Engine; es un archivo .ame y solo se puede crear para idiomas con compatibilidad con diccionarios, como extensión del diccionario estándar de ese idioma.
  </Note>
</Accordion>

<Accordion title="Diccionario basado en expresiones regulares">
  Especifica las reglas que definen qué palabras están permitidas en un idioma y cuáles no.

  Este tipo de diccionario se describe mediante el objeto [RegExpDictionaryDescription](/es/fine-reader/engine/api-reference/language-related-objects/regexpdictionarydescription).
</Accordion>

<Accordion title="Diccionario externo">
  Permite implementar su propio tipo de diccionario. Este diccionario se representa mediante la interfaz [IExternalDictionary](/es/fine-reader/engine/api-reference/language-related-objects/iexternaldictionary-interface), que se implementa en el lado del cliente. Puede consultar las directrices para crear diccionarios externos en la descripción de esta interfaz.

  Este tipo de diccionario se describe mediante el objeto [ExternalDictionaryDescription](/es/fine-reader/engine/api-reference/language-related-objects/externaldictionarydescription).
</Accordion>

ABBYY FineReader Engine proporciona un objeto [DictionaryDescription](/es/fine-reader/engine/api-reference/language-related-objects/dictionarydescription) para describir todos los tipos de diccionarios. Este es el objeto base del que heredan las descripciones de los distintos tipos de diccionario.

Todas estas descripciones de diccionarios son elementos de la colección [DictionaryDescriptions](/es/fine-reader/engine/api-reference/language-related-objects/dictionarydescriptions).

<div id="creating-a-dictionary-description">
  ## Crear una descripción de diccionario
</div>

Para crear descripciones de diccionario, se utiliza el método [AddNew](/es/fine-reader/engine/api-reference/language-related-objects/dictionarydescriptions/addnew-method) del objeto DictionaryDescriptions. Este método devuelve una referencia al objeto DictionaryDescription. Para obtener una referencia al objeto que describe el tipo de diccionario correspondiente, utilice los métodos [GetAsStandardDictionaryDescription](/es/fine-reader/engine/api-reference/language-related-objects/dictionarydescription/getasstandarddictionarydescription-method), [GetAsUserDictionaryDescription](/es/fine-reader/engine/api-reference/language-related-objects/dictionarydescription/getasuserdictionarydescription-method), [GetAsRegExpDictionaryDescription](/es/fine-reader/engine/api-reference/language-related-objects/dictionarydescription/getasregexpdictionarydescription-method) y [GetAsExternalDictionaryDescription](/es/fine-reader/engine/api-reference/language-related-objects/dictionarydescription/getasexternaldictionarydescription-method) del objeto DictionaryDescription.

<div id="dictionary-properties">
  ## Propiedades del diccionario
</div>

Para cada diccionario, debe especificarse su propiedad de identificación:

* Para un diccionario estándar (StandardDictionaryDescription), especifique su propiedad LanguageId, que define el identificador del idioma.
* Para un diccionario de usuario (UserDictionaryDescription), especifique su propiedad FileName, que proporciona la ruta al diccionario de usuario.
* Para un diccionario basado en expresiones regulares (RegExpDictionaryDescription), use el método [SetText](/es/fine-reader/engine/api-reference/language-related-objects/regexpdictionarydescription/settext-method) para especificar la expresión regular. Consulte [Trabajo con expresiones regulares en ABBYY FineReader Engine](/es/fine-reader/engine/guided-tour/advanced-techniques/working-with-regular-expressions).
* Para un diccionario externo (ExternalDictionaryDescription), use el método [SetDictionary](/es/fine-reader/engine/api-reference/language-related-objects/externaldictionarydescription/setdictionary-method) para especificar el diccionario.

A todos los tipos de diccionarios se les asigna un peso. El peso de un diccionario influye en la ponderación de las palabras del diccionario correspondiente cuando se detectan durante el reconocimiento. El parámetro de peso es un porcentaje y no debe ser negativo. Un peso de 0 no significa automáticamente que ese diccionario no exista. Se permiten pesos superiores al 100 %, pero el usuario debe tener mucho cuidado al utilizar esos parámetros. El peso se especifica en la propiedad [IDictionaryDescription::Weight](/es/fine-reader/engine/api-reference/language-related-objects/dictionarydescription#weight) y su valor predeterminado es 100.

Los diccionarios estándar también tienen una opción [CanUseTrigrams](/es/fine-reader/engine/api-reference/language-related-objects/standarddictionarydescription#canusetrigrams) que permite o impide que el programa use trigramas basados en el diccionario seleccionado. Los trigramas son combinaciones de tres letras. No todas estas combinaciones aparecen en palabras reales. Es muy probable que una palabra con un trigrama ajeno al diccionario sea impronunciable. Los trigramas se usan para descartar palabras poco fiables. Recomendamos habilitar los trigramas para los diccionarios estándar "generales" y deshabilitarlos para los diccionarios de términos.

<div id="dictionaries-of-a-recognition-language">
  ## Diccionarios de un idioma de reconocimiento
</div>

Un idioma de reconocimiento de texto (el objeto [TextLanguage](/es/fine-reader/engine/api-reference/language-related-objects/textlanguage)) puede tener tanto diccionarios que contienen palabras del idioma como diccionarios de palabras prohibidas. Los primeros se especifican para cada [idioma básico de reconocimiento](/es/fine-reader/engine/api-reference/language-related-objects/baselanguage) del idioma de texto y se puede acceder a ellos mediante la propiedad [IBaseLanguage::DictionaryDescriptions](/es/fine-reader/engine/api-reference/language-related-objects/baselanguage#dictionarydescriptions). Un idioma básico puede no tener ningún diccionario asociado. Los diccionarios de palabras prohibidas se asocian directamente al idioma de reconocimiento de texto mediante la propiedad [ITextLanguage::ProhibitingDictionaries](/es/fine-reader/engine/api-reference/language-related-objects/textlanguage#prohibitingdictionaries).

Si desea permitir durante el reconocimiento únicamente las palabras del diccionario, establezca la propiedad [IBaseLanguage::AllowWordsFromDictionaryOnly](/es/fine-reader/engine/api-reference/language-related-objects/baselanguage#allowwordsfromdictionaryonly) en TRUE. En este caso, una palabra que no se encuentre en el diccionario del idioma básico solo puede aparecer en el texto reconocido si ABBYY FineReader Engine no encontró variantes en el diccionario.

<div id="how-to-attach-a-dictionary-to-a-recognition-language">
  ## Cómo asociar un diccionario a un idioma de reconocimiento
</div>

1. Cree un objeto [TextLanguage](/es/fine-reader/engine/api-reference/language-related-objects/textlanguage) mediante uno de los métodos disponibles (por ejemplo, el método [CreateTextLanguage](/es/fine-reader/engine/api-reference/language-related-objects/languagedatabase/createtextlanguage-method) del objeto [LanguageDatabase](/es/fine-reader/engine/api-reference/language-related-objects/languagedatabase)).
2. Obtenga la colección de idiomas base del nuevo idioma de texto (use la propiedad [BaseLanguages](/es/fine-reader/engine/api-reference/language-related-objects/textlanguage#baselanguages)).
3. Cree un nuevo objeto [BaseLanguage](/es/fine-reader/engine/api-reference/language-related-objects/baselanguage) y agréguelo a la colección de idiomas base.
4. Obtenga la colección de descripciones de diccionarios del nuevo idioma base (la propiedad [DictionaryDescriptions](/es/fine-reader/engine/api-reference/language-related-objects/baselanguage#dictionarydescriptions)).
5. Cree una descripción de diccionario y agréguela a la colección de descripciones de diccionarios del idioma base. Use el método [AddNew](/es/fine-reader/engine/api-reference/language-related-objects/dictionarydescriptions/addnew-method) de la colección [DictionaryDescriptions](/es/fine-reader/engine/api-reference/language-related-objects/dictionarydescriptions).

<Note>
  Puede crear varios diccionarios de distintos tipos y agregarlos a la colección [DictionaryDescriptions](/es/fine-reader/engine/api-reference/language-related-objects/dictionarydescriptions) de un mismo idioma base de reconocimiento.
</Note>

6. \[Opcional] Especifique el peso del diccionario creado.
7. Especifique la propiedad de identificación del diccionario: la propiedad LanguageId para un diccionario estándar, la propiedad FileName para un diccionario de usuario, llame al método IRegExpDictionaryDescription::SetText para un diccionario basado en expresiones regulares o al método IExternalDictionaryDescription::SetDictionary para un diccionario externo.
8. \[Opcional] Especifique otras propiedades del objeto [BaseLanguage](/es/fine-reader/engine/api-reference/language-related-objects/baselanguage).
9. \[Opcional] Configure los diccionarios de exclusión mediante la propiedad ProhibitingDictionaries del objeto [TextLanguage](/es/fine-reader/engine/api-reference/language-related-objects/textlanguage).
10. Asigne el objeto [TextLanguage](/es/fine-reader/engine/api-reference/language-related-objects/textlanguage) creado a la propiedad TextLanguage del objeto [RecognizerParams](/es/fine-reader/engine/api-reference/parameter-objects/preprocessing-analysis-recognition-and-synthesis-parameters/recognizerparams).

Para implementar estos pasos en Windows, consulte los ejemplos de código que se muestran a continuación.

<Accordion title="Código C++ (COM)">
  ```cpp theme={null}
  // Objeto global ABBYY FineReader Engine
  FREngine::IEnginePtr Engine;
  // Objeto LanguageDatabase
  FREngine::ILanguageDatabasePtr languageDatabase;
  ...
  // Crear un objeto TextLanguage y obtener su colección de idiomas base
  FREngine::ITextLanguagePtr pTextLang = languageDatabase->CreateTextLanguage();
  FREngine::IBaseLanguagesPtr pBaseLangCollection = pTextLang->BaseLanguages;
  // Crear un objeto BaseLanguage y obtener su colección de descripciones de diccionarios
  FREngine::IBaseLanguagePtr pBaseLang = pBaseLangCollection->AddNew();
  pBaseLang->InternalName = L"SampleBaseLanguage";
  pBaseLang->PutLetterSet( FREngine::BLLS_Alphabet, L"abc123" );
  FREngine::IDictionaryDescriptionsPtr pDictDescCollection = pBaseLang->DictionaryDescriptions;
  // Crear una descripción de diccionario estándar y agregarla a la colección
  FREngine::IDictionaryDescriptionPtr pDicDescription =
   pDictDescCollection->AddNew( FREngine::DT_SystemDictionary);
  // [opcional] Especificar el peso del diccionario creado
  pDicDescription->Weight = 100;
  // Especificar la propiedad de identificación del diccionario
  FREngine::IStandardDictionaryDescriptionPtr pStandardDic = pDicDescription->GetAsStandardDictionaryDescription();
  pStandardDic->LanguageId = FREngine::LI_EnglishUnitedStates;
  // [opcional] Especificar otras propiedades del objeto BaseLanguage
  pBaseLang->AllowWordsFromDictionaryOnly = VARIANT_TRUE;
  // Crear un objeto RecognizerParams
  FREngine::IRecognizerParamsPtr pParams = Engine->CreateRecognizerParams();
  // Asignar el objeto TextLanguage creado a la propiedad TextLanguage
  pParams->TextLanguage = pTextLang;
  ...
  ```
</Accordion>

<Accordion title="Código C#">
  ```csharp theme={null}
  // Objeto global de ABBYY FineReader Engine
  FREngine.IEngine engine;
  // Un objeto LanguageDatabase
  FREngine.ILanguageDatabase languageDatabase;
  ...
  // Crear un objeto TextLanguage y obtener su colección de idiomas base
  FREngine.ITextLanguage TextLang = languageDatabase.CreateTextLanguage();
  FREngine.IBaseLanguages BaseLangCollection = TextLang.BaseLanguages;
  // Crear un objeto BaseLanguage y obtener su colección de descripciones de diccionarios
  FREngine.IBaseLanguage BaseLang = BaseLangCollection.AddNew();
  BaseLang.InternalName = "SampleBaseLanguage";
  BaseLang.set_LetterSet( FREngine.BaseLanguageLetterSetEnum.BLLS_Alphabet, "abc123" );
  FREngine.IDictionaryDescriptions DictDescCollection = BaseLang.DictionaryDescriptions;
  // Crear una descripción de diccionario estándar y añadirla a la colección
  FREngine.IDictionaryDescription DicDescription = DictDescCollection.AddNew( FREngine.DictionaryTypeEnum.DT_SystemDictionary );
  // [opcional] Especificar el peso del diccionario creado
  DicDescription.Weight = 100;
  // Especificar la propiedad identificadora del diccionario
  FREngine.IStandardDictionaryDescription StandardDic = DicDescription.GetAsStandardDictionaryDescription();
  StandardDic.LanguageId = FREngine.LanguageIdEnum.LI_EnglishUnitedStates;
  // [opcional] Especificar otras propiedades del idioma base
  BaseLang.AllowWordsFromDictionaryOnly = true;
  // Crear un objeto RecognizerParams
  FREngine.IRecognizerParams recParams = engine.CreateRecognizerParams();
  // Asignar el objeto TextLanguage creado a la propiedad TextLanguage
  recParams.TextLanguage = TextLang;
  ...
  ```
</Accordion>

<div id="cache-dictionary">
  ## Diccionario de caché
</div>

Un diccionario de caché es un diccionario pequeño (de unas cien palabras) que puede modificarse fácilmente durante el procesamiento. Los diccionarios de caché pueden utilizarse cuando es posible seleccionar un diccionario de forma más precisa; por ejemplo, si durante el procesamiento se obtiene nueva información sobre el documento. Estos diccionarios son adecuados para el reconocimiento por campo.

Por ejemplo, suponga que en un formulario hay dos campos que deben reconocerse: el nombre de una ciudad y el nombre de una calle. Ya ha reconocido el nombre de la ciudad y dispone de la lista de calles de esa ciudad. En este caso, puede cargar en el diccionario de caché correspondiente los nombres de las calles y, de este modo, reconocer el nombre de la calle con mayor rapidez y precisión.

ABBYY FineReader Engine proporciona los métodos [AddWordsToCacheDictionary](/es/fine-reader/engine/api-reference/document-related-objects/frpage/addwordstocachedictionary-method), [AddWordToCacheDictionary](/es/fine-reader/engine/api-reference/document-related-objects/frpage/addwordtocachedictionary-method) y [CleanCacheDictionary](/es/fine-reader/engine/api-reference/document-related-objects/frpage/cleancachedictionary-method) del objeto [FRPage](/es/fine-reader/engine/api-reference/document-related-objects/frpage) para trabajar con diccionarios de caché.

<Warning>
  Para usar el diccionario de caché, debe establecer la propiedad [IEngine::AutoCleanRecognizerSession](/es/fine-reader/engine/api-reference/engine-object-iengine-interface/properties#autocleanrecognizersession) en FALSE. La propiedad AutoCleanRecognizerSession está establecida en TRUE de forma predeterminada, lo que significa que FineReader Engine limpia su sesión de reconocimiento después de reconocer cada página; en ese caso, el diccionario de caché también se limpia. Para evitar la eliminación accidental de los datos del usuario, FineReader Engine prohíbe el uso de diccionarios de caché en este modo. Si utiliza el diccionario de caché, deberá limpiar manualmente la sesión de reconocimiento llamando al método [IEngine::CleanRecognizerSession](/es/fine-reader/engine/api-reference/engine-object-iengine-interface/supplementary-methods/cleanrecognizersession-method) cuando sea necesario. Consulte la descripción del método para saber cuándo es necesario limpiar la sesión de reconocimiento.
</Warning>

<div id="see-also">
  ## Consulte también
</div>

[Trabajar con idiomas](/es/fine-reader/engine/guided-tour/advanced-techniques/working-with-languages)

[Reconocer palabras con espacios](/es/fine-reader/engine/guided-tour/advanced-techniques/recognizing-words-with-spaces)
