Erkennen Sie Wörter mit Leerzeichen (wie etwa ‘New York’) in ABBYY FineReader Engine, indem Sie das Leerzeichen zum Sprachalphabet, zum Wörterbuch und zu OneWordPerLine hinzufügen.
Use this file to discover all available pages before exploring further.
ABBYY FineReader Engine ermöglicht es, Wörter mit Leerzeichen zu einem Wörterbuch hinzuzufügen. Diese Funktion kann sehr nützlich sein, um Wörter wie “New York” zu überprüfen. Wir empfehlen, bei der Felderkennung ein Wörterbuch für Wörter mit Leerzeichen zu verwenden, wenn sich die Felder (kleine Bildausschnitte mit kurzen Textfragmenten) anhand bestimmter Informationen über die Art der enthaltenen Daten erkennen lassen. Das Wort “New York” kann zum Beispiel nützlich sein, wenn Sie Adressen erkennen.Gehen Sie wie folgt vor, um Wörter mit Leerzeichen zu erkennen:
Fügen Sie das Zeichen “Leerzeichen” zum Alphabet der aktuellen Sprache hinzu.
Fügen Sie dem Wörterbuch die erforderlichen Wörter mit Leerzeichen hinzu.
Fügen Sie das Zeichen “Leerzeichen” mithilfe der Eigenschaft LetterSet des Objekts BaseLanguage zum Objekt BaseLanguage innerhalb des TextLanguage-Objekts hinzu.
Erstellen Sie ein neues Wörterbuch und fügen Sie diesem Wörterbuch alle erforderlichen Wörter mit Leerzeichen hinzu. Dazu können Sie das Objekt Dictionary verwenden.
Erstellen Sie ein Objekt vom Typ UserDictionaryDescription. Weisen Sie der Eigenschaft FileName dieses Objekts den Pfad zum neuen Wörterbuch zu.
Fügen Sie das Objekt UserDictionaryDescription der Sammlung DictionaryDescriptions des Objekts BaseLanguage hinzu.
Weisen Sie im Objekt RecognizerParams aller Textblöcke der Eigenschaft TextLanguage das zuvor erstellte TextLanguage-Objekt und der Eigenschaft OneWordPerLine den Wert TRUE zu.
Nachfolgend sehen Sie ein Beispiel, in dem das Zeichen “Leerzeichen” zum Alphabet der englischen Sprache hinzugefügt und das Wort “New York” zum Wörterbuch hinzugefügt wurde.
C++ (COM)-Code
// Ein LanguageDatabase-Objekt erstellenFREngine::ILanguageDatabasePtr pLanguageDatabase = Engine->CreateLanguageDatabase();// Ein neues TextLanguage-Objekt erstellenFREngine::ITextLanguagePtr pTextLanguage = pLanguageDatabase->CreateTextLanguage();// Alle Attribute aus der vordefinierten englischen Sprache übernehmenFREngine::ITextLanguagePtr pEnglishLanguage = Engine->PredefinedLanguages->Find( "English" )->TextLanguage;pTextLanguage->CopyFrom( pEnglishLanguage );pTextLanguage->InternalName = L"SampleTL";// Das neue Wörterbuch an das erste (und einzige) BaseLanguage-Objekt in TextLanguage bindenFREngine::IBaseLanguagePtr pBaseLanguage = pTextLanguage->BaseLanguages->Item(0);// Den internen Namen des Wörterbuchs in einen benutzerdefinierten Namen ändernpBaseLanguage->InternalName = L"SampleBL"; // Das Leerzeichen hinzufügen_bstr_t alphabet = pBaseLanguage->GetLetterSet( FREngine::BLLS_Alphabet );pBaseLanguage->put_LetterSet( FREngine::BLLS_Alphabet, alphabet + L" " );// Ein neues Wörterbuch erstellen_bstr_t dictionaryFile = L"D:\\sample.amd";FREngine::IDictionaryPtr pDictionary =pLanguageDatabase->CreateNewDictionary( dictionaryFile, FREngine::LI_EnglishUnitedStates );pDictionary->Name = L"Sample";// Wörter mit Leerzeichen zum Wörterbuch hinzufügenpDictionary->AddWord( "New York", 100 );// Die Sammlung der Wörterbuchbeschreibungen abrufen und alle Einträge entfernenFREngine::IDictionaryDescriptionsPtr pDictionaryDescriptions = pBaseLanguage->DictionaryDescriptions;pDictionaryDescriptions->DeleteAll();// Eine Benutzerwörterbuchbeschreibung erstellen und der Sammlung hinzufügenFREngine::IDictionaryDescriptionPtr dic = pDictionaryDescriptions->AddNew(FREngine::DT_UserDictionary);// Den Pfad zum Wörterbuch angeben, das Wörter mit Leerzeichen enthältFREngine::IUserDictionaryDescriptionPtr userDic = dic->GetAsUserDictionaryDescription();userDic->FileName = dictionaryFile;FREngine::ILayoutPtr pLayout;...// Die Eigenschaften des RecognizerParams-Objekts für alle Textblöcke festlegen// Blöcke durchlaufenfor( int i = pLayout->Blocks->Count - 1; i >= 0; i-- ) { FREngine::BlockTypeEnum blockType = pLayout->Blocks->Item( i )->Type; // Den Textblock ermitteln 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#-Code
// Erstellen Sie ein LanguageDatabase-ObjektFREngine.ILanguageDatabase languageDatabase = engineLoader.Engine.CreateLanguageDatabase();// Erstellen Sie ein neues TextLanguage-ObjektFREngine.ITextLanguage textLanguage = languageDatabase.CreateTextLanguage();// Kopieren Sie alle Attribute aus der vordefinierten Sprache EnglischFREngine.ITextLanguage englishLanguage = engineLoader.Engine.PredefinedLanguages.Find( "English" ).TextLanguage;textLanguage.CopyFrom( englishLanguage );textLanguage.InternalName = "SampleTL";// Weisen Sie das neue Wörterbuch dem ersten (und einzigen) BaseLanguage-Objekt innerhalb von TextLanguage zuFREngine.IBaseLanguage baseLanguage = textLanguage.BaseLanguages[0];// Setzen Sie den internen Wörterbuchnamen auf einen benutzerdefinierten NamenbaseLanguage.InternalName = "SampleBL";// Fügen Sie das Leerzeichen hinzustring alphabet = baseLanguage.get_LetterSet( FREngine.BaseLanguageLetterSetEnum.BLLS_Alphabet );baseLanguage.set_LetterSet( FREngine.BaseLanguageLetterSetEnum.BLLS_Alphabet, alphabet + " " );// Erstellen Sie ein neues Wörterbuchstring dictionaryFilePath = "D:\\sample.amd";FREngine.IDictionary dictionary = languageDatabase.CreateNewDictionary( dictionaryFilePath, FREngine.LanguageIdEnum.LI_EnglishUnitedStates );dictionary.Name = "Sample";// Fügen Sie dem Wörterbuch Wörter mit Leerzeichen hinzudictionary.AddWord( "New York", 100 );// Rufen Sie die Sammlung der Wörterbuchbeschreibungen ab und entfernen Sie alle EinträgeFREngine.IDictionaryDescriptions dictionaryDescriptions = baseLanguage.DictionaryDescriptions;dictionaryDescriptions.DeleteAll();// Erstellen Sie eine Benutzerwörterbuchbeschreibung und fügen Sie sie der Sammlung hinzuFREngine.IDictionaryDescription dic = dictionaryDescriptions.AddNew(FREngine.DictionaryTypeEnum.DT_UserDictionary);// Geben Sie den Pfad zum Wörterbuch an, das Wörter mit Leerzeichen enthältFREngine.IUserDictionaryDescription userDic = dic.GetAsUserDictionaryDescription();userDic.FileName = dictionaryFilePath;FREngine.ILayout layout;...// Geben Sie die Properties des RecognizerParams-Objekts für alle Textblöcke an// Durchlaufen Sie die Blöckefor( int i = layout.Blocks.Count - 1; i >= 0; i-- ) { FREngine.IBlockTypeEnum blockType = layout.Blocks[i].Type; // Suchen Sie den Textblock 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; }}...