Saltar al contenido principal
Los ejemplos de C# solo se aplican a FRE para Windows.
ABBYY FineReader Engine le permite asociar diccionarios de varios tipos a un idioma de reconocimiento, lo que mejora considerablemente la calidad del reconocimiento.

Tipos de diccionario

Los diccionarios pueden ser de varios tipos:
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). 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 (Linux), Resources/ExtendedDictionaries (macOS), Data\ExtendedDictionaries (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). 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.Este tipo de diccionario se describe mediante el objeto StandardDictionaryDescription.
Se puede crear mediante el objeto 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. 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.
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.
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.
Permite implementar su propio tipo de diccionario. Este diccionario se representa mediante la interfaz IExternalDictionary, 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.
ABBYY FineReader Engine proporciona un objeto 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.

Crear una descripción de diccionario

Para crear descripciones de diccionario, se utiliza el método AddNew 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, GetAsUserDictionaryDescription, GetAsRegExpDictionaryDescription y GetAsExternalDictionaryDescription del objeto DictionaryDescription.

Propiedades del diccionario

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 para especificar la expresión regular. Consulte Trabajo con expresiones regulares en ABBYY FineReader Engine.
  • Para un diccionario externo (ExternalDictionaryDescription), use el método SetDictionary 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 y su valor predeterminado es 100. Los diccionarios estándar también tienen una opción 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.

Diccionarios de un idioma de reconocimiento

Un idioma de reconocimiento de texto (el objeto 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 del idioma de texto y se puede acceder a ellos mediante la propiedad IBaseLanguage::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. Si desea permitir durante el reconocimiento únicamente las palabras del diccionario, establezca la propiedad IBaseLanguage::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.

Cómo asociar un diccionario a un idioma de reconocimiento

  1. Cree un objeto TextLanguage mediante uno de los métodos disponibles (por ejemplo, el método CreateTextLanguage del objeto LanguageDatabase).
  2. Obtenga la colección de idiomas base del nuevo idioma de texto (use la propiedad BaseLanguages).
  3. Cree un nuevo objeto 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).
  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 de la colección DictionaryDescriptions.
Puede crear varios diccionarios de distintos tipos y agregarlos a la colección DictionaryDescriptions de un mismo idioma base de reconocimiento.
  1. [Opcional] Especifique el peso del diccionario creado.
  2. 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.
  3. [Opcional] Especifique otras propiedades del objeto BaseLanguage.
  4. [Opcional] Configure los diccionarios de exclusión mediante la propiedad ProhibitingDictionaries del objeto TextLanguage.
  5. Asigne el objeto TextLanguage creado a la propiedad TextLanguage del objeto RecognizerParams.
Para implementar estos pasos en Windows, consulte los ejemplos de código que se muestran a continuación.
// 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;
...
// 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;
...

Diccionario de caché

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, AddWordToCacheDictionary y CleanCacheDictionary del objeto FRPage para trabajar con diccionarios de caché.
Para usar el diccionario de caché, debe establecer la propiedad IEngine::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 cuando sea necesario. Consulte la descripción del método para saber cuándo es necesario limpiar la sesión de reconocimiento.

Consulte también

Trabajar con idiomas Reconocer palabras con espacios