Gli esempi in C# sono applicabili solo a FRE per Windows.
ABBYY FineReader Engine consente di associare alla lingua di riconoscimento dizionari di vario tipo, migliorando notevolmente la qualità del riconoscimento.
Questo tipo di dizionario è già fornito per le lingue predefinite che dispongono del supporto integrato per i dizionari (vedere i commenti nell’elenco delle lingue predefinite). Inoltre, per alcune lingue, sono disponibili dizionari di termini specialistici (ad esempio, medicina e diritto) inclusi nell’archivio .zmd. I dizionari standard sono rappresentati da tre o quattro file. I loro nomi di solito coincidono con il nome completo o abbreviato della lingua e hanno estensione .amd, .amm, .amt o .ame. I file con estensione .amd, .amm e .amt sono sempre presenti. Sono archiviati nelle cartelle seguenti e non possono essere modificati: Data/ExtendedDictionaries (Linux), Resources/ExtendedDictionaries (macOS), Data\ExtendedDictionaries (Windows).Con ABBYY FineReader Engine non viene fornito alcun file .ame: si tratta di un formato per memorizzare un’estensione del dizionario, cioè parole aggiunte al dizionario dall’utente. È possibile creare un’estensione del dizionario in ABBYY FineReader, dove viene chiamata dizionario utente, e poi copiare il file creato nella cartella sopra indicata all’interno della cartella di ABBYY FineReader Engine (oppure è possibile specificarne il percorso completo nella proprietà ILanguageDatabase::DictionaryExtensionsPath). ABBYY FineReader memorizza le estensioni dei dizionari standard in %appdata%\ABBYY\FineReader\15\FineReaderShell\UserDictionaries. Le estensioni del dizionario possono essere modificate in ABBYY FineReader Engine utilizzando il metodo ILanguageDatabase::OpenDictionaryExtension.Questo tipo di dizionario è descritto dall’oggetto StandardDictionaryDescription.
Dizionario utente
Può essere creato utilizzando l’oggetto Dictionary. L’oggetto Dictionary consente di aggiungere e rimuovere parole tramite i suoi metodi.In Windows, l’oggetto Dictionary consente anche di modificare il dizionario tramite la finestra di dialogo Dictionary. Questa finestra di dialogo consente di importare qualsiasi file di testo con codifica Windows ANSI e Unicode (l’unico requisito è che le parole siano separate da spazi o da altri caratteri non alfabetici).Questo tipo di dizionario è descritto dall’oggetto UserDictionaryDescription.
Il dizionario utente in FineReader Engine ha il formato di file .amd e può essere creato per qualsiasi lingua. Può sostituire il dizionario standard per le lingue che non dispongono del supporto per i dizionari. Il dizionario utente di ABBYY FineReader è chiamato estensione del dizionario in FineReader Engine; è un file .ame e può essere creato solo per le lingue con supporto per i dizionari, come estensione del dizionario standard per quella lingua.
Dizionario basato su espressioni regolari
Specifica le regole che definiscono quali parole sono consentite in una lingua e quali parole non sono consentite.Questo tipo di dizionario è descritto dall’oggetto RegExpDictionaryDescription.
Dizionario esterno
Consente di implementare un proprio tipo di dizionario. Questo dizionario è rappresentato dall’interfaccia IExternalDictionary, implementata sul lato client. Le linee guida per la creazione di un dizionario esterno sono disponibili nella descrizione di questa interfaccia.Questo tipo di dizionario è descritto dall’oggetto ExternalDictionaryDescription.
ABBYY FineReader Engine fornisce un oggetto DictionaryDescription per descrivere tutti i tipi di dizionari. Questo è l’oggetto di base da cui derivano le descrizioni dei diversi tipi di dizionario.Tutte queste descrizioni di dizionario sono elementi della raccolta DictionaryDescriptions.
Per un dizionario esterno (ExternalDictionaryDescription), utilizzare il metodo SetDictionary per specificare il dizionario.
A tutti i tipi di dizionario viene assegnato un peso. Il peso di un dizionario influisce sul peso delle parole del dizionario specificato quando vengono rilevate durante il riconoscimento. Il parametro weight è espresso in percentuale e deve essere non negativo. Un peso pari a 0 non significa automaticamente che il dizionario non esista. Sono consentiti pesi superiori al 100 percento, ma l’utente deve prestare molta attenzione quando utilizza tali valori. Il peso viene specificato nella proprietà IDictionaryDescription::Weight ed è impostato su 100 per impostazione predefinita.I dizionari standard hanno anche un’opzione CanUseTrigrams che consente o impedisce al programma di usare trigrammi costruiti sulla base del dizionario selezionato. I trigrammi sono combinazioni di tre lettere. Non tutte queste combinazioni compaiono in parole reali. È molto probabile che una parola contenente un trigramma non presente nel dizionario sia impronunciabile. I trigrammi vengono usati per escludere parole non affidabili. Si consiglia di abilitare i trigrammi per i dizionari standard “general” e di disabilitarli per i dizionari terminologici.
Una lingua di riconoscimento del testo (l’oggetto TextLanguage) può avere sia dizionari contenenti le parole della lingua sia dizionari con parole vietate. I primi sono specificati per ogni lingua di riconoscimento di base della lingua di riconoscimento del testo e sono accessibili tramite la proprietà IBaseLanguage::DictionaryDescriptions. A una lingua di base potrebbe non essere associato alcun dizionario. I dizionari di parole vietate sono associati direttamente alla lingua di riconoscimento del testo tramite la proprietà ITextLanguage::ProhibitingDictionaries.Se si desidera consentire durante il riconoscimento solo le parole presenti nel dizionario, impostare la proprietà IBaseLanguage::AllowWordsFromDictionaryOnly su TRUE. In questo caso, una parola non presente nel dizionario della lingua di base può comparire nel testo riconosciuto solo se ABBYY FineReader Engine non ha trovato alcuna variante nel dizionario.
Ottenere la raccolta delle lingue di base del nuovo linguaggio di testo (tramite la proprietà BaseLanguages).
Creare un nuovo oggetto BaseLanguage e aggiungerlo alla raccolta delle lingue di base.
Ottenere la raccolta delle descrizioni dei dizionari della nuova lingua di base (la proprietà DictionaryDescriptions).
Creare una descrizione del dizionario e aggiungerla alla raccolta delle descrizioni dei dizionari della lingua di base. Utilizzare il metodo AddNew della raccolta DictionaryDescriptions.
È possibile creare più dizionari di tipi diversi e aggiungerli alla raccolta DictionaryDescriptions di una singola lingua di riconoscimento di base.
[Facoltativo] Specificare il peso del dizionario creato.
Specificare la proprietà identificativa del dizionario: la proprietà LanguageId per un dizionario standard, la proprietà FileName per un dizionario utente, chiamare il metodo IRegExpDictionaryDescription::SetText per un dizionario basato su espressioni regolari oppure il metodo IExternalDictionaryDescription::SetDictionary per un dizionario esterno.
[Facoltativo] Specificare altre proprietà dell’oggetto BaseLanguage.
[Facoltativo] Impostare i dizionari di esclusione tramite la proprietà ProhibitingDictionaries dell’oggetto TextLanguage.
Per implementare questi passaggi in Windows, vedere gli esempi di codice riportati di seguito.
Codice C++ (COM)
// Oggetto globale ABBYY FineReader EngineFREngine::IEnginePtr Engine;// Oggetto LanguageDatabaseFREngine::ILanguageDatabasePtr languageDatabase;...// Crea un oggetto TextLanguage e ottiene la relativa raccolta di lingue di baseFREngine::ITextLanguagePtr pTextLang = languageDatabase->CreateTextLanguage();FREngine::IBaseLanguagesPtr pBaseLangCollection = pTextLang->BaseLanguages;// Crea un oggetto BaseLanguage e ottiene la relativa raccolta di descrizioni dei dizionariFREngine::IBaseLanguagePtr pBaseLang = pBaseLangCollection->AddNew();pBaseLang->InternalName = L"SampleBaseLanguage";pBaseLang->PutLetterSet( FREngine::BLLS_Alphabet, L"abc123" );FREngine::IDictionaryDescriptionsPtr pDictDescCollection = pBaseLang->DictionaryDescriptions;// Crea una descrizione di dizionario standard e la aggiunge alla raccoltaFREngine::IDictionaryDescriptionPtr pDicDescription = pDictDescCollection->AddNew( FREngine::DT_SystemDictionary);// [facoltativo] Specifica il peso del dizionario creatopDicDescription->Weight = 100;// Specifica la proprietà identificativa del dizionarioFREngine::IStandardDictionaryDescriptionPtr pStandardDic = pDicDescription->GetAsStandardDictionaryDescription();pStandardDic->LanguageId = FREngine::LI_EnglishUnitedStates;// [facoltativo] Specifica altre proprietà della lingua di base BaseLanguagepBaseLang->AllowWordsFromDictionaryOnly = VARIANT_TRUE;// Crea un oggetto RecognizerParamsFREngine::IRecognizerParamsPtr pParams = Engine->CreateRecognizerParams();// Assegna l'oggetto TextLanguage creato alla proprietà TextLanguagepParams->TextLanguage = pTextLang;...
Codice C#
// Oggetto globale ABBYY FineReader EngineFREngine.IEngine engine;// Oggetto LanguageDatabaseFREngine.ILanguageDatabase languageDatabase;...// Crea un oggetto TextLanguage e ne ottiene la raccolta delle lingue di baseFREngine.ITextLanguage TextLang = languageDatabase.CreateTextLanguage();FREngine.IBaseLanguages BaseLangCollection = TextLang.BaseLanguages;// Crea un oggetto BaseLanguage e ne ottiene la raccolta delle descrizioni del dizionarioFREngine.IBaseLanguage BaseLang = BaseLangCollection.AddNew();BaseLang.InternalName = "SampleBaseLanguage";BaseLang.set_LetterSet( FREngine.BaseLanguageLetterSetEnum.BLLS_Alphabet, "abc123" );FREngine.IDictionaryDescriptions DictDescCollection = BaseLang.DictionaryDescriptions;// Crea una descrizione di dizionario standard e la aggiunge alla raccoltaFREngine.IDictionaryDescription DicDescription = DictDescCollection.AddNew( FREngine.DictionaryTypeEnum.DT_SystemDictionary );// [facoltativo] Specifica il peso del dizionario creatoDicDescription.Weight = 100;// Specifica la proprietà identificativa del dizionarioFREngine.IStandardDictionaryDescription StandardDic = DicDescription.GetAsStandardDictionaryDescription();StandardDic.LanguageId = FREngine.LanguageIdEnum.LI_EnglishUnitedStates;// [facoltativo] Specifica altre proprietà della lingua di baseBaseLang.AllowWordsFromDictionaryOnly = true;// Crea un oggetto RecognizerParamsFREngine.IRecognizerParams recParams = engine.CreateRecognizerParams();// Assegna l'oggetto TextLanguage creato alla proprietà TextLanguagerecParams.TextLanguage = TextLang;...
Un dizionario cache è un piccolo dizionario (di circa un centinaio di parole) che può essere modificato facilmente durante l’elaborazione. I dizionari cache possono essere usati quando è possibile selezionare un dizionario in modo più mirato, ad esempio se durante l’elaborazione emergono nuove informazioni sul documento. Questi dizionari sono adatti al riconoscimento a livello di field.Per esempio, supponiamo che in un modulo siano presenti due field da riconoscere: il nome di una città e il nome di una via. Avete riconosciuto il nome della città e disponete dell’elenco delle vie di quella città. In questo caso, potete caricare il dizionario cache appropriato con i nomi delle vie e riconoscere così il nome della via in modo più rapido e accurato.ABBYY FineReader Engine fornisce i metodi AddWordsToCacheDictionary, AddWordToCacheDictionary e CleanCacheDictionary dell’oggetto FRPage per lavorare con i dizionari cache.
Per usare il dizionario cache, è necessario impostare la proprietà IEngine::AutoCleanRecognizerSession su FALSE. Per impostazione predefinita, la proprietà AutoCleanRecognizerSession è impostata su TRUE, il che significa che FineReader Engine pulisce la sessione di riconoscimento dopo il riconoscimento di ogni pagina; in questo caso viene pulito anche il dizionario cache. Per evitare la cancellazione accidentale dei dati dell’utente, FineReader Engine non consente l’uso dei dizionari cache in questa modalità. Se usate il dizionario cache, dovete occuparvi voi stessi di pulire manualmente la sessione di riconoscimento chiamando il metodo IEngine::CleanRecognizerSession quando necessario. Consultate la descrizione del metodo per sapere quando è necessario pulire la sessione di riconoscimento.