借助字典进行处理
ABBYY FineReader Engine 支持您将各种类型的字典附加到识别语言,这大幅改善了识别质量。
字典类型
字典可有多种 类型:
标准字典
用户字典
基于正则表达式的字典
外部字典
ABBYY FineReader Engine 提供了 DictionaryDescription 对象来描述所有类型的字典。这个对象是融合了不同字典类型描述的基本对象。
所有这些字典描述都是 DictionaryDescriptions 集合的元素。
创建字典描述
要创建字典描述,则需使用DictionaryDescriptions 对象的 AddNew 方法。这些方法将返回一个对 DictionaryDescription 对象的引用。若要获取描述相应字典类型的对象参考,请使用 DictionaryDescription 对象的 GetAsStandardDictionaryDescription、GetAsUserDictionaryDescription、GetAsRegExpDictionaryDescription 和 GetAsExternalDictionaryDescription 方法。
字典属性
对于每个字典,必须指定字典的标识属性:
- 对于标准字典,(StandardDictionaryDescription),指定其 LanguageId 属性,以定义语言的 ID。
- 对于用户字典(UserDictionaryDescription),指定它的 FileName 属性,以提供用户字典路径。
- 对于基于正则表达式的字典(RegExpDictionaryDescription),使用 SetText 方法指定正则表达式。请参见使用 ABBYY FineReader Engine 正则表达式。
- 对于外部字典(ExternalDictionaryDescription),使用 SetDictionary 方法指定字典。
会给所有字典类型分配一个权重。字典的权重会影响给定字典中的词汇在识别过程中被检测到时的权重。权重参数是百分比,必须为非负数。权重为0不会默认没有此类字典。允许权重超过百分之百,但是用户在使用此类参数时必须非常小心。在 IDictionaryDescription::Weight 属性中指定权重,默认设为 100。
标准字典还有个 CanUseTrigrams 选项,允许或禁止程序使用建立在所选字典基础之上的三元语法。Trigrams 是三个字母的组合。不是所有这些组合都出现在真实的词汇中。一个具有非字典三元语法的词汇大概率会很拗口。三元语法可用来去除不可靠的词汇。我们建议,在使用“通用”标准字典时启用三元语法,而使用术语字典时禁用。
识别语言字典
文本识别语言(TextLanguage 对象)可以既有包含语言词汇的字典,也有含禁止词汇的字典。第一类字典被指定用于文本语言的每个 基本识别语言 指定,可通过 IBaseLanguage::DictionaryDescriptions 属性进行访问。基本语言可以没有附加字典。禁用字典可通过 ITextLanguage::ProhibitingDictionaries 属性直接附加于文本识别语言。
如果在识别中只想允许字典词汇,请设置 IBaseLanguage::AllowWordsFromDictionaryOnly 属性为 TRUE。在这种情况下,只有在ABBYY FineReader Engine 未发现词典变量的情况下,在基础语言字典中找不到的词汇才能出现在识别的文本中。
如何在语言识别中添加字典
- 通过众多可用方法之一创建一个 TextLanguage 对象(例如,LanguageDatabase 对象的 CreateTextLanguage 方法)。
- 获取新文本语言的基本语言集合 (使用 BaseLanguages 属性)。
- 新建 BaseLanguage 对象,然后将其添加到基本语言集合中。
- 获取新基本语言的字典描述集合(DictionaryDescriptions 属性)。
- 创建字典描述,然后将其添加到基本语言的字典描述集合。使用 DictionaryDescriptions 集合的 AddNew 方法。
注:您可以创建多个不同类型的字典,然后将其添加到一个基本识别语言的 DictionaryDescriptions 集合。
- [Optional] 指定已创建字典的权重。
- 指定字典的标识属性:LanguageId 属性适用于标准字典,FileName 属性适用于用户字典,调用 IRegExpDictionaryDescription::SetText 方法用于基于正则表达式的字典,或者调用 IExternalDictionaryDescription::SetDictionary 方法用于外部字典。
- [Optional] 指定 BaseLanguage 对象的其它属性。
- [Optional] 使用 TextLanguage 对象的 ProhibitingDictionaries 属性设置禁止字典。
- 将创建的 TextLanguage 对象分配给 RecognizerParams 对象的 TextLanguage 属性。
C++ (COM) 代码
C# 代码
缓存字典
缓存字典是一个小型字典(大约100个词汇),在处理期间具有易更改性。在可以更精确地选择字典时,例如当您在处理期间发现了新的文档信息时,可以选择使用缓存字典。此类字典适用于字段级别的识别。
例如,假设表单上有两个您需要识别的字段:城市名称和街道名称。您已识别了城市名称,且您有该城市的街道列表。在此情况下,您可以加载有街道名称的缓存字典,从而更迅速、准确地识别街道名称。
ABBYY FineReader Engine 可提供 FRPage 对象的 AddWordsToCacheDictionary、AddWordToCacheDictionary 和 CleanCacheDictionary 方法来处理缓存字典。
重要事项!要使用缓存字典,应将 IEngine::AutoCleanRecognizerSession 属性设为 FALSE。AutoCleanRecognizerSession 属性默认设为 TRUE,这意味着 FineReader Engine 会在识别每个页面后清理识别会话,在此情况下缓存字典也会被清理。为了防止意外销毁用户数据,FineReader Engine 禁止在此模式中使用缓存字典。如果使用缓存字典,您可在必要时通过调用 IEngine::CleanRecognizerSession 方法,手动清理识别会话。请查看方法说明,了解何时需要清理识别会话。
另请参阅
17.09.2024 15:14:41