Zum Hauptinhalt springen
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:
  1. Fügen Sie das Zeichen “Leerzeichen” zum Alphabet der aktuellen Sprache hinzu.
  2. Fügen Sie dem Wörterbuch die erforderlichen Wörter mit Leerzeichen hinzu.
  3. Setzen Sie die Eigenschaft OneWordPerLine des Objekts RecognizerParams auf TRUE.
Nachfolgend finden Sie eine detaillierte Beschreibung dieses Vorgangs:
  1. Erstellen Sie auf Grundlage einer vordefinierten Sprache eine neue Textsprache. Erstellen Sie dazu mithilfe der Methode CreateTextLanguage des Objekts LanguageDatabase ein Objekt vom Typ TextLanguage und kopieren Sie die Attribute der vordefinierten Sprache.
  2. Fügen Sie das Zeichen “Leerzeichen” mithilfe der Eigenschaft LetterSet des Objekts BaseLanguage zum Objekt BaseLanguage innerhalb des TextLanguage-Objekts hinzu.
  3. 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.
  4. Erstellen Sie ein Objekt vom Typ UserDictionaryDescription. Weisen Sie der Eigenschaft FileName dieses Objekts den Pfad zum neuen Wörterbuch zu.
  5. Fügen Sie das Objekt UserDictionaryDescription der Sammlung DictionaryDescriptions des Objekts BaseLanguage hinzu.
  6. 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.
// Ein LanguageDatabase-Objekt erstellen
FREngine::ILanguageDatabasePtr pLanguageDatabase = Engine->CreateLanguageDatabase();
// Ein neues TextLanguage-Objekt erstellen
FREngine::ITextLanguagePtr pTextLanguage = pLanguageDatabase->CreateTextLanguage();
// Alle Attribute aus der vordefinierten englischen Sprache übernehmen
FREngine::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 binden
FREngine::IBaseLanguagePtr pBaseLanguage = pTextLanguage->BaseLanguages->Item(0);
// Den internen Namen des Wörterbuchs in einen benutzerdefinierten Namen ändern
pBaseLanguage->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ügen
pDictionary->AddWord( "New York", 100 );
// Die Sammlung der Wörterbuchbeschreibungen abrufen und alle Einträge entfernen
FREngine::IDictionaryDescriptionsPtr pDictionaryDescriptions =
 pBaseLanguage->DictionaryDescriptions;
pDictionaryDescriptions->DeleteAll();
// Eine Benutzerwörterbuchbeschreibung erstellen und der Sammlung hinzufügen
FREngine::IDictionaryDescriptionPtr dic =
 pDictionaryDescriptions->AddNew(FREngine::DT_UserDictionary);
// Den Pfad zum Wörterbuch angeben, das Wörter mit Leerzeichen enthält
FREngine::IUserDictionaryDescriptionPtr userDic =
 dic->GetAsUserDictionaryDescription();
userDic->FileName = dictionaryFile;
FREngine::ILayoutPtr pLayout;
...
// Die Eigenschaften des RecognizerParams-Objekts für alle Textblöcke festlegen
// Blöcke durchlaufen
for( 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;
  }
}
...
// Erstellen Sie ein LanguageDatabase-Objekt
FREngine.ILanguageDatabase languageDatabase = engineLoader.Engine.CreateLanguageDatabase();
// Erstellen Sie ein neues TextLanguage-Objekt
FREngine.ITextLanguage textLanguage = languageDatabase.CreateTextLanguage();
// Kopieren Sie alle Attribute aus der vordefinierten Sprache Englisch
FREngine.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 zu
FREngine.IBaseLanguage baseLanguage = textLanguage.BaseLanguages[0];
// Setzen Sie den internen Wörterbuchnamen auf einen benutzerdefinierten Namen
baseLanguage.InternalName = "SampleBL";
// Fügen Sie das Leerzeichen hinzu
string alphabet = baseLanguage.get_LetterSet( FREngine.BaseLanguageLetterSetEnum.BLLS_Alphabet );
baseLanguage.set_LetterSet( FREngine.BaseLanguageLetterSetEnum.BLLS_Alphabet, alphabet + " " );
// Erstellen Sie ein neues Wörterbuch
string 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 hinzu
dictionary.AddWord( "New York", 100 );
// Rufen Sie die Sammlung der Wörterbuchbeschreibungen ab und entfernen Sie alle Einträge
FREngine.IDictionaryDescriptions dictionaryDescriptions = baseLanguage.DictionaryDescriptions;
dictionaryDescriptions.DeleteAll();
// Erstellen Sie eine Benutzerwörterbuchbeschreibung und fügen Sie sie der Sammlung hinzu
FREngine.IDictionaryDescription dic = dictionaryDescriptions.AddNew(FREngine.DictionaryTypeEnum.DT_UserDictionary);
// Geben Sie den Pfad zum Wörterbuch an, das Wörter mit Leerzeichen enthält
FREngine.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öcke
for( 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;
    }
}
...

Siehe auch

Arbeiten mit Sprachen Arbeiten mit Wörterbüchern Felderkennung