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.
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.
Diccionario de usuario
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.
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.
Diccionario externo
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.
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.
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.
Obtenga la colección de idiomas base del nuevo idioma de texto (use la propiedad BaseLanguages).
Cree un nuevo objeto BaseLanguage y agréguelo a la colección de idiomas base.
Obtenga la colección de descripciones de diccionarios del nuevo idioma base (la propiedad DictionaryDescriptions).
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.
[Opcional] Especifique el peso del diccionario creado.
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.
[Opcional] Especifique otras propiedades del objeto BaseLanguage.
[Opcional] Configure los diccionarios de exclusión mediante la propiedad ProhibitingDictionaries del objeto TextLanguage.
Para implementar estos pasos en Windows, consulte los ejemplos de código que se muestran a continuación.
Código C++ (COM)
// Objeto global ABBYY FineReader EngineFREngine::IEnginePtr Engine;// Objeto LanguageDatabaseFREngine::ILanguageDatabasePtr languageDatabase;...// Crear un objeto TextLanguage y obtener su colección de idiomas baseFREngine::ITextLanguagePtr pTextLang = languageDatabase->CreateTextLanguage();FREngine::IBaseLanguagesPtr pBaseLangCollection = pTextLang->BaseLanguages;// Crear un objeto BaseLanguage y obtener su colección de descripciones de diccionariosFREngine::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ónFREngine::IDictionaryDescriptionPtr pDicDescription = pDictDescCollection->AddNew( FREngine::DT_SystemDictionary);// [opcional] Especificar el peso del diccionario creadopDicDescription->Weight = 100;// Especificar la propiedad de identificación del diccionarioFREngine::IStandardDictionaryDescriptionPtr pStandardDic = pDicDescription->GetAsStandardDictionaryDescription();pStandardDic->LanguageId = FREngine::LI_EnglishUnitedStates;// [opcional] Especificar otras propiedades del objeto BaseLanguagepBaseLang->AllowWordsFromDictionaryOnly = VARIANT_TRUE;// Crear un objeto RecognizerParamsFREngine::IRecognizerParamsPtr pParams = Engine->CreateRecognizerParams();// Asignar el objeto TextLanguage creado a la propiedad TextLanguagepParams->TextLanguage = pTextLang;...
Código C#
// Objeto global de ABBYY FineReader EngineFREngine.IEngine engine;// Un objeto LanguageDatabaseFREngine.ILanguageDatabase languageDatabase;...// Crear un objeto TextLanguage y obtener su colección de idiomas baseFREngine.ITextLanguage TextLang = languageDatabase.CreateTextLanguage();FREngine.IBaseLanguages BaseLangCollection = TextLang.BaseLanguages;// Crear un objeto BaseLanguage y obtener su colección de descripciones de diccionariosFREngine.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ónFREngine.IDictionaryDescription DicDescription = DictDescCollection.AddNew( FREngine.DictionaryTypeEnum.DT_SystemDictionary );// [opcional] Especificar el peso del diccionario creadoDicDescription.Weight = 100;// Especificar la propiedad identificadora del diccionarioFREngine.IStandardDictionaryDescription StandardDic = DicDescription.GetAsStandardDictionaryDescription();StandardDic.LanguageId = FREngine.LanguageIdEnum.LI_EnglishUnitedStates;// [opcional] Especificar otras propiedades del idioma baseBaseLang.AllowWordsFromDictionaryOnly = true;// Crear un objeto RecognizerParamsFREngine.IRecognizerParams recParams = engine.CreateRecognizerParams();// Asignar el objeto TextLanguage creado a la propiedad TextLanguagerecParams.TextLanguage = TextLang;...
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.