Mit ABBYY FineReader Engine können Sie einer Erkennungssprache Wörterbücher verschiedener Typen zuweisen, was die Erkennungsqualität erheblich verbessert.
Dieser Wörterbuchtyp ist bereits für die vordefinierten Sprachen verfügbar, die integrierte Wörterbuchunterstützung bieten (siehe die Kommentare in der Liste der vordefinierten Sprachen). Darüber hinaus gibt es für einige Sprachen Wörterbücher mit Fachbegriffen (z. B. für Medizin und Recht), die im .zmd-Archiv enthalten sind. Standardwörterbücher bestehen aus drei oder vier Dateien. Ihre Namen entsprechen in der Regel dem vollständigen oder dem Kurznamen der Sprache und haben die Erweiterung .amd, .amm, .amt oder .ame. Dateien mit den Erweiterungen .amd, .amm und .amt sind immer vorhanden. Sie werden in den folgenden Ordnern gespeichert und können nicht geändert werden: Data/ExtendedDictionaries (Linux), Resources/ExtendedDictionaries (macOS), Data\ExtendedDictionaries (Windows).Mit ABBYY FineReader Engine werden keine .ame-Dateien bereitgestellt: Dieses Format dient zum Speichern einer Wörterbucherweiterung, also von Wörtern, die der Benutzer dem Wörterbuch hinzugefügt hat. Sie können in ABBYY FineReader eine Wörterbucherweiterung erstellen, wo sie als Benutzerwörterbuch bezeichnet wird, und die erstellte Datei dann in den oben genannten Ordner im ABBYY FineReader Engine-Ordner kopieren (alternativ können Sie den vollständigen Pfad dazu in der Eigenschaft ILanguageDatabase::DictionaryExtensionsPath angeben). ABBYY FineReader speichert die Erweiterungen von Standardwörterbüchern in %appdata%\ABBYY\FineReader\15\FineReaderShell\UserDictionaries. Wörterbucherweiterungen können in ABBYY FineReader Engine mit der Methode ILanguageDatabase::OpenDictionaryExtension bearbeitet werden.Dieser Wörterbuchtyp wird durch das Objekt StandardDictionaryDescription beschrieben.
Benutzerwörterbuch
Kann mit dem Objekt Dictionary erstellt werden. Mit dem Objekt Dictionary können Sie über seine Methoden Wörter hinzufügen und entfernen.Unter Windows können Sie mit dem Objekt Dictionary das Wörterbuch außerdem mithilfe des Dialogfelds „Dictionary“ bearbeiten. In diesem Dialogfeld können Sie beliebige Textdateien in Windows-ANSI- und Unicode-Codierung importieren (die einzige Voraussetzung ist, dass Wörter durch Leerzeichen oder andere nicht alphabetische Zeichen getrennt sind).Dieser Wörterbuchtyp wird durch das Objekt UserDictionaryDescription beschrieben.
Das Benutzerwörterbuch in FineReader Engine hat das Dateiformat .amd und kann für jede Sprache erstellt werden. Es kann anstelle des Standardwörterbuchs für Sprachen verwendet werden, die keine Wörterbuchunterstützung haben. Das Benutzerwörterbuch von ABBYY FineReader wird in FineReader Engine als Wörterbucherweiterung bezeichnet; es ist eine .ame-Datei und kann nur für Sprachen mit Wörterbuchunterstützung als Erweiterung des Standardwörterbuchs für diese Sprache erstellt werden.
Auf regulären Ausdrücken basierendes Wörterbuch
Legt die Regeln fest, die definieren, welche Wörter in einer Sprache zulässig sind und welche nicht.Dieser Wörterbuchtyp wird durch das Objekt RegExpDictionaryDescription beschrieben.
Externes Wörterbuch
Ermöglicht es Ihnen, einen eigenen Wörterbuchtyp zu implementieren. Dieses Wörterbuch wird durch die clientseitig implementierte Schnittstelle IExternalDictionary dargestellt. Hinweise zum Erstellen externer Wörterbücher finden Sie in der Beschreibung dieser Schnittstelle.Dieser Wörterbuchtyp wird durch das Objekt ExternalDictionaryDescription beschrieben.
ABBYY FineReader Engine stellt das Objekt DictionaryDescription zur Beschreibung aller Wörterbuchtypen bereit. Dies ist das Basisobjekt, von dem die Beschreibungen der verschiedenen Wörterbuchtypen abgeleitet sind.Alle diese Wörterbuchbeschreibungen sind Elemente der Sammlung DictionaryDescriptions.
Für ein externes Wörterbuch (ExternalDictionaryDescription) verwenden Sie die Methode SetDictionary, um das Wörterbuch anzugeben.
Allen Wörterbuchtypen wird eine Gewichtung zugewiesen. Die Gewichtung eines Wörterbuchs beeinflusst die Gewichtung von Wörtern aus dem jeweiligen Wörterbuch, wenn diese bei der Erkennung gefunden werden. Der Gewichtungsparameter ist ein Prozentsatz und darf nicht negativ sein. Eine Gewichtung von 0 bedeutet nicht automatisch, dass ein solches Wörterbuch nicht vorhanden ist. Gewichtungen von mehr als 100 Prozent sind zulässig, der Benutzer muss bei der Verwendung solcher Parameter jedoch sehr vorsichtig sein. Die Gewichtung wird in der Eigenschaft IDictionaryDescription::Weight angegeben und ist standardmäßig auf 100 gesetzt.Standardwörterbücher verfügen außerdem über die Option CanUseTrigrams, die dem Programm erlaubt oder verbietet, Trigramme zu verwenden, die auf Grundlage des ausgewählten Wörterbuchs gebildet werden. Trigramme sind Kombinationen aus drei Buchstaben. Nicht alle dieser Kombinationen kommen in realen Wörtern vor. Ein Wort mit einem nicht im Wörterbuch enthaltenen Trigramm ist mit hoher Wahrscheinlichkeit nicht aussprechbar. Trigramme werden verwendet, um unzuverlässige Wörter auszusortieren. Wir empfehlen, Trigramme für „allgemeine“ Standardwörterbücher zu aktivieren und für Fachwörterbücher zu deaktivieren.
Eine Texterkennungssprache (das Objekt TextLanguage) kann sowohl Wörterbücher mit Wörtern der jeweiligen Sprache als auch Wörterbücher mit verbotenen Wörtern haben. Erstere werden für jede Basiserkennungssprache der Texterkennungssprache festgelegt und sind über die Eigenschaft IBaseLanguage::DictionaryDescriptions verfügbar. Einer Basissprache kann auch kein Wörterbuch zugeordnet sein. Die Wörterbücher mit verbotenen Wörtern werden über die Eigenschaft ITextLanguage::ProhibitingDictionaries direkt an die Texterkennungssprache angehängt.Wenn Sie möchten, dass bei der Erkennung nur Wörter aus dem Wörterbuch zugelassen werden, setzen Sie die Eigenschaft IBaseLanguage::AllowWordsFromDictionaryOnly auf TRUE. In diesem Fall kann ein Wort, das nicht im Wörterbuch der Basissprache gefunden wird, nur dann im erkannten Text erscheinen, wenn ABBYY FineReader Engine keine Wörterbuchvarianten gefunden hat.
Rufen Sie die Sammlung der Basissprachen der neuen Textsprache ab (verwenden Sie dazu die Eigenschaft BaseLanguages).
Erstellen Sie ein neues BaseLanguage-Objekt und fügen Sie es der Sammlung der Basissprachen hinzu.
Rufen Sie die Sammlung der Wörterbuchbeschreibungen der neuen Basissprache ab (die Eigenschaft DictionaryDescriptions).
Erstellen Sie eine Wörterbuchbeschreibung und fügen Sie sie der Sammlung der Wörterbuchbeschreibungen der Basissprache hinzu. Verwenden Sie dazu die Methode AddNew der Sammlung DictionaryDescriptions.
Sie können mehrere Wörterbücher unterschiedlicher Typen erstellen und sie der Sammlung DictionaryDescriptions einer Basiserkennungssprache hinzufügen.
[Optional] Geben Sie die Gewichtung des erstellten Wörterbuchs an.
Geben Sie die Eigenschaft an, über die das Wörterbuch identifiziert wird: die Eigenschaft LanguageId für ein Standardwörterbuch, die Eigenschaft FileName für ein Benutzerwörterbuch, die Methode IRegExpDictionaryDescription::SetText für ein auf regulären Ausdrücken basierendes Wörterbuch oder die Methode IExternalDictionaryDescription::SetDictionary für ein externes Wörterbuch.
[Optional] Geben Sie weitere Eigenschaften des BaseLanguage-Objekts an.
[Optional] Legen Sie die Ausschlusswörterbücher mithilfe der Eigenschaft ProhibitingDictionaries des TextLanguage-Objekts fest.
Die folgenden Codebeispiele zeigen, wie Sie diese Schritte unter Windows umsetzen.
C++ (COM)-Code
// Globales ABBYY FineReader Engine-ObjektFREngine::IEnginePtr Engine;// Ein LanguageDatabase-ObjektFREngine::ILanguageDatabasePtr languageDatabase;...// Ein TextLanguage-Objekt erstellen und die Sammlung seiner Basissprachen abrufenFREngine::ITextLanguagePtr pTextLang = languageDatabase->CreateTextLanguage();FREngine::IBaseLanguagesPtr pBaseLangCollection = pTextLang->BaseLanguages;// Ein BaseLanguage-Objekt erstellen und die Sammlung seiner Wörterbuchbeschreibungen abrufenFREngine::IBaseLanguagePtr pBaseLang = pBaseLangCollection->AddNew();pBaseLang->InternalName = L"SampleBaseLanguage";pBaseLang->PutLetterSet( FREngine::BLLS_Alphabet, L"abc123" );FREngine::IDictionaryDescriptionsPtr pDictDescCollection = pBaseLang->DictionaryDescriptions;// Eine Standardwörterbuchbeschreibung erstellen und der Sammlung hinzufügenFREngine::IDictionaryDescriptionPtr pDicDescription = pDictDescCollection->AddNew( FREngine::DT_SystemDictionary);// [optional] Die Gewichtung des erstellten Wörterbuchs angebenpDicDescription->Weight = 100;// Die Eigenschaft angeben, über die das Wörterbuch identifiziert wirdFREngine::IStandardDictionaryDescriptionPtr pStandardDic = pDicDescription->GetAsStandardDictionaryDescription();pStandardDic->LanguageId = FREngine::LI_EnglishUnitedStates;// [optional] Weitere Eigenschaften der Basissprache angebenpBaseLang->AllowWordsFromDictionaryOnly = VARIANT_TRUE;// Ein RecognizerParams-Objekt erstellenFREngine::IRecognizerParamsPtr pParams = Engine->CreateRecognizerParams();// Das erstellte TextLanguage-Objekt der Eigenschaft TextLanguage zuweisenpParams->TextLanguage = pTextLang;...
C#-Code
// Globales ABBYY FineReader Engine-ObjektFREngine.IEngine engine;// Ein LanguageDatabase-ObjektFREngine.ILanguageDatabase languageDatabase;...// Ein TextLanguage-Objekt erstellen und die Sammlung der Basissprachen abrufenFREngine.ITextLanguage TextLang = languageDatabase.CreateTextLanguage();FREngine.IBaseLanguages BaseLangCollection = TextLang.BaseLanguages;// Ein BaseLanguage-Objekt erstellen und die Sammlung der Wörterbuchbeschreibungen abrufenFREngine.IBaseLanguage BaseLang = BaseLangCollection.AddNew();BaseLang.InternalName = "SampleBaseLanguage";BaseLang.set_LetterSet( FREngine.BaseLanguageLetterSetEnum.BLLS_Alphabet, "abc123" );FREngine.IDictionaryDescriptions DictDescCollection = BaseLang.DictionaryDescriptions;// Eine Standard-Wörterbuchbeschreibung erstellen und der Sammlung hinzufügenFREngine.IDictionaryDescription DicDescription = DictDescCollection.AddNew( FREngine.DictionaryTypeEnum.DT_SystemDictionary );// [optional] Die Gewichtung des erstellten Wörterbuchs festlegenDicDescription.Weight = 100;// Die Identifikationseigenschaft des Wörterbuchs festlegenFREngine.IStandardDictionaryDescription StandardDic = DicDescription.GetAsStandardDictionaryDescription();StandardDic.LanguageId = FREngine.LanguageIdEnum.LI_EnglishUnitedStates;// [optional] Weitere Eigenschaften der Basissprache festlegenBaseLang.AllowWordsFromDictionaryOnly = true;// Ein RecognizerParams-Objekt erstellenFREngine.IRecognizerParams recParams = engine.CreateRecognizerParams();// Das erstellte TextLanguage-Objekt der Eigenschaft TextLanguage zuweisenrecParams.TextLanguage = TextLang;...
Ein Cache-Wörterbuch ist ein kleines Wörterbuch (etwa hundert Wörter), das sich während der Verarbeitung leicht ändern lässt. Cache-Wörterbücher können verwendet werden, wenn sich ein Wörterbuch genauer auswählen lässt, z. B. wenn Sie während der Verarbeitung neue Informationen über das Dokument erhalten. Solche Wörterbücher eignen sich für die Erkennung auf Feldebene.Angenommen, ein Formular enthält zwei Felder, die Sie erkennen müssen: den Namen einer Stadt und den Namen einer Straße. Sie haben den Namen der Stadt bereits erkannt und verfügen über eine Liste der Straßen in dieser Stadt. In diesem Fall können Sie das passende Cache-Wörterbuch mit den Straßennamen laden und so den Straßennamen schneller und genauer erkennen.ABBYY FineReader Engine stellt für die Arbeit mit Cache-Wörterbüchern die Methoden AddWordsToCacheDictionary, AddWordToCacheDictionary und CleanCacheDictionary des FRPage-Objekts bereit.
Um das Cache-Wörterbuch zu verwenden, sollten Sie die Eigenschaft IEngine::AutoCleanRecognizerSession auf FALSE setzen. Die Eigenschaft AutoCleanRecognizerSession ist standardmäßig auf TRUE gesetzt. Das bedeutet, dass FineReader Engine die Erkennungssitzung nach der Erkennung jeder Seite bereinigt; in diesem Fall wird auch das Cache-Wörterbuch bereinigt. Um eine versehentliche Zerstörung von Benutzerdaten zu verhindern, verbietet FineReader Engine die Verwendung von Cache-Wörterbüchern in diesem Modus. Wenn Sie das Cache-Wörterbuch verwenden, müssen Sie die Erkennungssitzung bei Bedarf selbst manuell bereinigen, indem Sie die Methode IEngine::CleanRecognizerSession aufrufen. In der Beschreibung dieser Methode erfahren Sie, wann die Erkennungssitzung bereinigt werden muss.