Use this file to discover all available pages before exploring further.
ABBYY FineReader Engine le permite agregar palabras con espacios a un diccionario. Esta función puede ser muy útil para comprobar palabras como “New York”. Recomendamos usar un diccionario de palabras con espacios durante el reconocimiento a nivel de campo cuando pueda reconocer los campos (pequeños fragmentos de imagen que contienen fragmentos cortos de texto) utilizando información específica sobre el tipo de datos que pueden contener. La palabra “New York”, por ejemplo, puede ser útil si está reconociendo direcciones.Para reconocer palabras con espacios, haga lo siguiente:
Agregue el carácter “espacio” al alfabeto del idioma actual.
Agregue al diccionario las palabras con espacios necesarias.
Agregue el objeto UserDictionaryDescription a la colección DictionaryDescriptions del objeto BaseLanguage.
En el objeto RecognizerParams de todos los bloques de texto, asigne el objeto TextLanguage creado anteriormente a la propiedad TextLanguage y el valor TRUE a la propiedad OneWordPerLine.
A continuación puede ver un ejemplo en el que se ha agregado el carácter “espacio” al alfabeto del idioma inglés y se ha agregado la palabra “New York” al diccionario.
Código C++ (COM)
// Crear un objeto LanguageDatabaseFREngine::ILanguageDatabasePtr pLanguageDatabase = Engine->CreateLanguageDatabase();// Crear un nuevo objeto TextLanguageFREngine::ITextLanguagePtr pTextLanguage = pLanguageDatabase->CreateTextLanguage();// Copiar todos los atributos del idioma inglés predefinidoFREngine::ITextLanguagePtr pEnglishLanguage = Engine->PredefinedLanguages->Find( "English" )->TextLanguage;pTextLanguage->CopyFrom( pEnglishLanguage );pTextLanguage->InternalName = L"SampleTL";// Asociar el nuevo diccionario al primer (y único) objeto BaseLanguage dentro de TextLanguageFREngine::IBaseLanguagePtr pBaseLanguage = pTextLanguage->BaseLanguages->Item(0);// Cambiar el nombre interno del diccionario por un nombre definido por el usuariopBaseLanguage->InternalName = L"SampleBL"; // Agregar el carácter de espacio_bstr_t alphabet = pBaseLanguage->GetLetterSet( FREngine::BLLS_Alphabet );pBaseLanguage->put_LetterSet( FREngine::BLLS_Alphabet, alphabet + L" " );// Crear un diccionario nuevo_bstr_t dictionaryFile = L"D:\\sample.amd";FREngine::IDictionaryPtr pDictionary =pLanguageDatabase->CreateNewDictionary( dictionaryFile, FREngine::LI_EnglishUnitedStates );pDictionary->Name = L"Sample";// Agregar palabras con espacios al diccionariopDictionary->AddWord( "New York", 100 );// Obtener la colección de descripciones de diccionarios y eliminar todos los elementosFREngine::IDictionaryDescriptionsPtr pDictionaryDescriptions = pBaseLanguage->DictionaryDescriptions;pDictionaryDescriptions->DeleteAll();// Crear una descripción de diccionario de usuario y agregarla a la colecciónFREngine::IDictionaryDescriptionPtr dic = pDictionaryDescriptions->AddNew(FREngine::DT_UserDictionary);// Especificar la ruta del diccionario que contiene palabras con espaciosFREngine::IUserDictionaryDescriptionPtr userDic = dic->GetAsUserDictionaryDescription();userDic->FileName = dictionaryFile;FREngine::ILayoutPtr pLayout;...// Especificar las Propiedades del objeto RecognizerParams para todos los bloques de texto// Recorrer los bloquesfor( int i = pLayout->Blocks->Count - 1; i >= 0; i-- ) { FREngine::BlockTypeEnum blockType = pLayout->Blocks->Item( i )->Type; // Buscar el bloque de texto 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; }}...
Código C#
// Crear un objeto LanguageDatabaseFREngine.ILanguageDatabase languageDatabase = engineLoader.Engine.CreateLanguageDatabase();// Crear un objeto TextLanguageFREngine.ITextLanguage textLanguage = languageDatabase.CreateTextLanguage();// Copiar todos los atributos del idioma inglés predefinidoFREngine.ITextLanguage englishLanguage = engineLoader.Engine.PredefinedLanguages.Find( "English" ).TextLanguage;textLanguage.CopyFrom( englishLanguage );textLanguage.InternalName = "SampleTL";// Asociar el nuevo diccionario al primer (y único) objeto BaseLanguage de TextLanguageFREngine.IBaseLanguage baseLanguage = textLanguage.BaseLanguages[0];// Cambiar el nombre interno del diccionario por uno definido por el usuariobaseLanguage.InternalName = "SampleBL";// Agregar el carácter de espaciostring alphabet = baseLanguage.get_LetterSet( FREngine.BaseLanguageLetterSetEnum.BLLS_Alphabet );baseLanguage.set_LetterSet( FREngine.BaseLanguageLetterSetEnum.BLLS_Alphabet, alphabet + " " );// Crear un diccionario nuevostring dictionaryFilePath = "D:\\sample.amd";FREngine.IDictionary dictionary = languageDatabase.CreateNewDictionary( dictionaryFilePath, FREngine.LanguageIdEnum.LI_EnglishUnitedStates );dictionary.Name = "Sample";// Agregar al diccionario palabras con espaciosdictionary.AddWord( "New York", 100 );// Obtener la colección de descripciones de diccionarios y eliminar todos los elementosFREngine.IDictionaryDescriptions dictionaryDescriptions = baseLanguage.DictionaryDescriptions;dictionaryDescriptions.DeleteAll();// Crear una descripción de diccionario de usuario y agregarla a la colecciónFREngine.IDictionaryDescription dic = dictionaryDescriptions.AddNew(FREngine.DictionaryTypeEnum.DT_UserDictionary);// Especificar la ruta al diccionario que contiene palabras con espaciosFREngine.IUserDictionaryDescription userDic = dic.GetAsUserDictionaryDescription();userDic.FileName = dictionaryFilePath;FREngine.ILayout layout;...// Especificar las propiedades del objeto RecognizerParams para todos los bloques de texto// Recorrer los bloquesfor( int i = layout.Blocks.Count - 1; i >= 0; i-- ) { FREngine.IBlockTypeEnum blockType = layout.Blocks[i].Type; // Buscar el bloque de texto 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; }}...