База знаний

Номер статьи: 2063 | Категория: Распознавание | Тип: Задача – Решение | Последнее обновление: 31.01.2017

Создание языка распознавания с дополнительными символами

Описание

Как с помощью API ABBYY FineReader Engine создать копию одного из стандартных языков, которая будет включать в себя дополнительные символы?

Решение

Иногда распознаваемые документы могут содержать символы, которые не входят в язык распознавания. Так, в текстах, которые связаны с матматикой или физикой, могут появляться буквы греческого алфавита, а в финансовых документах могут встречаться символы-обозначения валют. 

Чтобы успешно распознавать такие документы, можно создать новый язык на основе одного из стандартных, добавив в него необходимые символы. Для этого дополнительные символы нужно включить в одно из множеств букв (letterset), заданных для базового языка (символы алфавита, символы-префиксы или символы-суффиксы).

В приведенном ниже примере кода на C# на основе стандартного языка English создается новый язык, к символам-префиксам которого добавляется символ индийской рупии:

// Create new recognition language
TextLanguage textLanguage = makeTextLanguage();
DocumentProcessingParams documentProcessingParams = engineLoader.Engine.CreateDocumentProcessingParams(); documentProcessingParams.PageProcessingParams.RecognizerParams.TextLanguage = textLanguage;
document.Process( documentProcessingParams );
private TextLanguage makeTextLanguage() {     // Create new TextLanguage object     LanguageDatabase languageDatabase = engineLoader.Engine.CreateLanguageDatabase();     TextLanguage textLanguage = languageDatabase.CreateTextLanguage();
    // Copy all attributes from predefined English language     TextLanguage englishLanguage = engineLoader.Engine.PredefinedLanguages.Find("English").TextLanguage;     textLanguage.CopyFrom(englishLanguage);     textLanguage.InternalName = "SampleTextLanguage";
    // Bind new dictionary to first (and single) BaseLanguage object within TextLanguage     BaseLanguage baseLanguage = textLanguage.BaseLanguages[0];
    // Change internal dictionary name to user-defined     baseLanguage.InternalName = "SampleBaseLanguage";
    string letterSet = baseLanguage.get_LetterSet(BaseLanguageLetterSetEnum.BLLS_Prefixes);     letterSet = letterSet.Insert(0, "₹");     baseLanguage.set_LetterSet(BaseLanguageLetterSetEnum.BLLS_Prefixes, letterSet);
    return textLanguage; }
// Create new recognition language
TextLanguage textLanguage = makeTextLanguage();
DocumentProcessingParams documentProcessingParams = engineLoader.Engine.CreateDocumentProcessingParams(); documentProcessingParams.PageProcessingParams.RecognizerParams.TextLanguage = textLanguage;
document.Process( documentProcessingParams );
private TextLanguage makeTextLanguage() {     // Create new TextLanguage object     LanguageDatabase languageDatabase = engineLoader.Engine.CreateLanguageDatabase();     TextLanguage textLanguage = languageDatabase.CreateTextLanguage();
    // Copy all attributes from predefined English language     TextLanguage englishLanguage = engineLoader.Engine.PredefinedLanguages.Find("English").TextLanguage;     textLanguage.CopyFrom(englishLanguage);     textLanguage.InternalName = "SampleTextLanguage";
    // Bind new dictionary to first (and single) BaseLanguage object within TextLanguage     BaseLanguage baseLanguage = textLanguage.BaseLanguages[0];
    // Change internal dictionary name to user-defined     baseLanguage.InternalName = "SampleBaseLanguage";
    string letterSet = baseLanguage.get_LetterSet(BaseLanguageLetterSetEnum.BLLS_Prefixes);     letterSet = letterSet.Insert(0, "₹");     baseLanguage.set_LetterSet(BaseLanguageLetterSetEnum.BLLS_Prefixes, letterSet);
    return textLanguage; }
225 считают это полезным.
Была ли эта информация вам полезна?