Working with ABBYY FineReader Engine Regular Expressions
Regular expressions are used in regular-expression-based dictionaries to define what words are allowed in a language and what are not.
Regular expression rules
The ABBYY FineReader Engine regular expression alphabet is described in the following table:
- Some characters used in regular expressions are "auxiliary," i.e., they are used for system purposes. As you can see from the list above, such characters include square brackets, periods, etc. If you wish to enter an auxiliary character as a normal one, put a backslash (\) before it. Example: [t-v]x+ denotes words like "tx", "txx", "txxx", etc., "ux", "uxx", etc., but \[t-v\]x+ denotes words like "[t-v]x", "[t-v]xx", "[t-v]xxx" etc.
- If you need to group certain regular expression elements, use brackets. For example, (a|b)+|c denotes "c" and any combinations like "abbbaaabbb", "ababab", etc. (a word of any non-zero length in which there may be any number of a's and b's in any order), whilst a|b+|c denotes "a", "c", and "b", "bb", "bbb", etc.
Sample regular expressions
Regular expression for dates
The number denoting day may consist of one digit (e.g., 1, 2 etc.) or two digits (e.g., 02, 12), but it cannot be zero (00 or 0). The regular expression for the day will then look like this: ((|0)[1-9])|([0-9])|(30)|(31).
The regular expression for the month will look like this: ((|0)[1-9])|(10)|(11)|(12).
The regular expression for the year will look like this: (((19)|(20))[0-9][0-9])|([0-9][0-9]).
What is left is to combine all this together and separate the numbers by a period (e.g., 1.03.1999). The period is an auxiliary sign, so we must put a backslash (\) before it. The regular expression for the full date will then look like this:
Regular expression for e-mail addresses
You can easily make a language for denoting e-mail addresses. The regular expression for an e-mail address may look like this:
Using for data capture
If you use regular expressions in field-level recognition, you generally need to recognize only the words which are exact matches for the regular expression. In this case, we recommend creating a separate language for recognizing the fields and setting the following properties for it:
- Only dictionary words must be allowed as recognition results: set the IBaseLanguage::AllowWordsFromDictionaryOnly property to TRUE. This is necessary for the exact matching.
- The letter set for the recognition language must contain only those characters that are included in the regular expression: specify the IBaseLanguage::LetterSet property. This is necessary because the characters from the language alphabet can be recognized even if they do not fit the regular expression.
- Set the IBaseLanguage::IsNaturalLanguage property to FALSE.
// Global ABBYY FineReader Engine object FREngine.IEngine engine; // A LanguageDatabase object FREngine.ILanguageDatabase languageDatabase = engine.CreateLanguageDatabase(); // Create a TextLanguage object FREngine.ITextLanguage textLang = languageDatabase.CreateTextLanguage(); // Create a BaseLanguage object and specify the settings FREngine.IBaseLanguage baseLang = textLang.BaseLanguages.AddNew(); baseLang.set_LetterSet(FREngine.BaseLanguageLetterSetEnum.BLLS_Alphabet, "$0123456789,."); baseLang.IsNaturalLanguage = false; baseLang.AllowWordsFromDictionaryOnly = true; // Create a new regular-expression-based dictionary and attach it to the language FREngine.IDictionaryDescription dictDescr = baseLang.DictionaryDescriptions.AddNew(FREngine.DictionaryTypeEnum.DT_RegularExpression); // Set the regular expression dictDescr.GetAsRegExpDictionaryDescription().SetText(@"[$0-9,.]+");
3/24/2023 8:51:52 AM