- О программе ABBYY FlexiCapture
- Установка и запуск программы
- Архитектура комплекса ABBYY FlexiCapture
-
Настройка программы
- Настройка программы ABBYY FlexiCapture
- Работа в мультитенантной системе
-
Создание проекта
- Свойства проекта
- Переменные окружения
- Импорт изображений
- Типы пакета
- Настройка процесса обработки
- Инструменты
- Приоритет пакета по умолчанию
- Настройка SLA
- Управление правами пользователей
- Регистрационные параметры
- Загрузка проекта на сервер
- Тестовый проект
- Настройка внешнего вида программы
- Качество отображения изображений
-
Создание определения документа
- Создание определений структурированного документа
- Создание определений для неструктурированных и частично структурированных документов
- Создание определений документов без автоматического извлечения данных
- Комплекты документов
-
Поля определения документа
- Текстовые поля ввода
- Метки
- Группы меток
- Штрих-коды
- Картинки
- Таблицы
- Группы полей
- Служебные поля
- Индексные поля
- Ссылка на существующее поле
- Поля без разметки
- Создание поля с непрямоугольной областью
- Поля с несколькими областями
- Поля с несколькими экземплярами
- Изменение названия поля
- Копирование, перемещение, удаление полей
- Исключение региона из распознавания
- Мастер создания определения документа
- Редактирование и публикация определения документа
- Настройка сборки многостраничных документов
- Свойства определения документа
- Свойства раздела документа
- Проверка с помощью правил
- Настройка экспорта
- Настройка отображения данных в окне документа
- Тестирование определения документа
- Локализация определения документа
-
Классификация
- Сценарии классификации
- Профили классификации
- Типы ошибок и баланс точности\полноты
-
Настройка классификации во FlexiCapture
- Предварительная настройка
- Загрузка изображений и настройка классификатора
- Обучение классификатора
- Анализ результатов классификации
- Рекомендации по улучшению качества работы классификатора
- Экспорт и подключение классификатора
- Соответствие классов и определений документов
- Классификация документов по справочнику компаний
- Обучение поиску полей
- Работа оператора с настроенным проектом
-
Работа с ABBYY FlexiCapture for Invoices
- Возможности ABBYY FlexiCapture for Invoices
- Процесс ввода инвойсов
-
Настройка проекта для ввода инвойсов
- Настройка стран и языков
- Подключение справочников поставщиков и подразделений компаний
- Настройка экспорта данных
- Статус документа в проекте ABBYY FlexiCapture for Invoices
- Обучение в ABBYY FlexiCapture for Invoices
- Правила
- Извлечение дополнительных полей инвойсов
- Проверка позиций инвойса
- Дополнительные возможности работы операторов
- Использование более одного определения документа
- Редактирование настроек обработки инвойсов в XML
- Обновление определения документа для обработки инвойсов
- Налоговые схемы
- Спецификации
- Обработка чеков в ABBYY FlexiCapture for Invoices
- Обработка заказов в ABBYY FlexiCapture for Invoices
- Обработка документов при помощи NLP
- Интерфейс программы ABBYY FlexiCapture
-
Приложения
-
Использование скриптов в ABBYY FlexiCapture
- Особенности .Net скриптов
- Подключение внешней сборки
- Объектная модель
-
Использование скриптов для настройки этапов обработки
-
Типы скриптов
- Скрипт правила
- Скрипт автозамены
- Скрипт экспорта
- Пользовательский скрипт
- Скрипт сборки документа
- Скрипт пользовательского распознавания
- Скрипт маршрутизации
- Скрипты обработки
- Скрипт обновления набора данных
- Скрипт валидации набора данных
- Скрипт классификации документа
-
Обработчики событий
- Создание пакета
- Удаление пакета
- Изменение свойств пакета
- Изменение состава пакета
- Перемещение страниц
- Открытие/закрытие пакета
- Проверка целостности пакета
- Изменение свойства документа
- Изменение состояния документа
- Скрипт после экспорта
- Скрипт после проверки правил
- Перед наложением определений документов
- Запрос на верификацию поля
-
Объекты
- IActionResult
- IAssemblingError
- IAssemblingErrors
- IBatch
- IBatchCheckResults
- IBatchItem
- IBatchItems
- IBatchTypeClassifier
- IBatchTypeClassifierResult
- IBinarizationParams
- IBoxedBoolean
- ICharacterParams
- ICharactersParams
- ICheckmarkGroupValue
- ICheckmarkValue
- IDataSet
- IDataSetQuery
- IDataSetRecord
- IDocument
- IDocuments
- IDocumentExportResults
- IDocumentsExportResults
- IDocumentDefinitionInfo
- IDocumentDefinitionInfoArray
- IEditablePictureObject
- IExportFieldsToRedact
- IExportImageSavingOptions
- IField
- IFieldRegion
- IFieldRegions
- IFields
- IFlexiCaptureTools
- ILocalContrastParams
- IMatchedSectionInfo
- IMatchingInfo
- IPage
- IPageClassificationResult
- IPages
- IPictureObject
- IPictureObjectsInfo
- IPrincipal
- IPrincipals
- IProcessingCallback
- IProject
- IProperties
- IProperty
- IPropertyModificationInfo
- IRecordCheckResult
- IRecordset
- IRect
- IRects
- IRoutingRuleResult
- IRuleContext
- IRuleError
- IRuleErrors
- IRuleTag
- IRuleTags
- IScriptBinaryAttributes
- IScriptDefinitionContext
- ISectionDefinitionInfo
- ISectionDefinitionInfoArray
- IShadowsHighlightsParams
- IStageInfo
- IUserAttachment
- IUserAttachments
- IUserSessionInfo
- IValue
- IVARIANTArray
- TAssemlingErrorType
- TBatchItemType
- TColorToFilter
- TExportFieldType
- TExportType
- TImageCompressionType
- TPageClassificationType
- TPdfAVersion
- TPdfDocumentInfoType
- TPdfTextSearchAreaType
- TPrincipalType
- TProcessingPriority
- TPropertyType
- TRuleErrorType
- TStateType
- Примеры скриптов
- Внутренние имена языков распознавания
-
Типы скриптов
-
Использование скриптов для обработки событий интерфейса
-
События
- После закрытия документа
- После закрытия проекта
- При активации документа в окне задания
- При активации поля
- При возврате из задания
- При вызове пользовательской команды
- При деактивации поля
- При закрытии документа
- При закрытии задания
- При закрытии проекта
- При изменении региона
- При изменении режима окна задания
- При открытии документа
- При открытии окна задания
- При отмене задания
- При отображении региона
- При отправке задания на этап
- При подтверждении текстового поля
-
Объекты
- IBoolean
- IBoxedFieldControl
- IDocumentEditor
- IDocumentItem
- IDocumentItems
- IDocumentsCollection
- IDocumentsWindow
- IDrawContext
- IErrorControl
- IErrorControls
- IErrorsWindow
- IFieldControl
- IFieldRegionControl
- IFieldRegionControls
- IFormWindow
- IImageWindow
- IMainMenu
- IMainWindow
- IMenu
- IMenuItem
- IPageControl
- IPageItem
- IPageItems
- IPagesCollection
- IPoint
- ISelection
- IShellRational
- IShellRect
- IShellRects
- ITaskWindow
- ITextEditor
- IToolbar
- IToolbarButton
- IToolbars
- TCommandBarType
- TCommandID
- TDockingType
- TDocumentState
- TErrorType
- TSelectionType
- TTaskWindowMode
- TTextSize
- TUserRole
- TWorkWindowType
-
События
- Пользовательский скрипт (Web Custom Action) для Веб-станции Верификации
- Создание машиночитаемых форм
-
Горячие клавиши
- Горячие клавиши на Станции Настройки Проектов
- Горячие клавиши на Станции Верификации
- Горячие клавиши на станции верификации данных
- Горячие клавиши в окне Редактора определения документа
- Горячие клавиши в окне групповой верификации
- Горячие клавиши в окне контекстной верификации
- Настройка горячих клавиш
- Дополнительные настройки
- Описание команд Сервера Обработки
- Встроенные примеры проектов FlexiCapture
- Поддерживаемые языки распознавания
- Поддерживаемые языки классификатора
- Шрифты для корректного отображения символов
- Поддерживаемые типы текста
- Поддерживаемые типы штрих-кодов
- Поддерживамые входные форматы
- Особенности работы с файлами формата PDF
- Форматы файлов экспорта
- Формат отображения даты
- Алфавит, используемый в регулярных выражениях
- Патенты
- Технологии других компаний
- Глоссарий
- Техническая поддержка
- Как купить программу ABBYY FlexiCapture
- Лицензионный договор с конечным пользователем
-
Использование скриптов в ABBYY FlexiCapture
Примеры скриптов для создания пользовательских правил
Automation правило
Данный пример демонстрирует проверку данных в таблице. В правиле проверяется соответствие данных таблицы значению, содержащемуся в итоговом поле. Таблица имеет колонки с ценами и количеством некоторых товаров. Правило написано на уровне раздела, содержащего таблицу и результирующее поле.
[JScript] var autoRule = new ActiveXObject( "AutomationRule.CheckDoc" ); autoRule.CheckResult( Field("cost"), Field("number"), Field("Result"), this ); [VBScript] dim autoRule set autoRule = CreateObject( "AutomationRule.CheckDoc" ) autoRule.CheckResult me.FIELD("cost"), me.FIELD("number"), me.FIELD("Result"), me
Код компонента ActiveX
Данный пример является кодом класса CheckDoc из проекта AutomationRule, который используется в вышеупомянутых сценариях.
Option Explicit
' Проверяет соответствие данных таблицы значению в итоговом поле
' column1 - цена
' column2 - количество
' resultField - итоговое поле (<Total> или эквивалентное)
' docObj - проверка узла документа
Public Sub CheckResult(ByRef column1 As Object, ByRef column2 As Object, _
ByRef resultField As Object, ByRef docObj As Object)
On Error GoTo err_h
Dim costItems AsObject, numItems AsObject
Dim curCost AsDouble, curNum AsLong, sum AsDouble
Dim result AsDouble
Dim i AsLong
Set costItems = column1.Items
Set numItems = column2.Items
' суммирование данных таблицы
sum = 0
For i = 0 To costItems.Count - 1
curCost = costItems.Item(i).Value
curNum = numItems.Item(i).Value
sum = sum + curNum * curCost
Next
' округление точности сравнения результата до двух знаков после запятой
result = resultField.Value
If (Round(result, 2) = Round(sum, 2)) Then
docObj.CheckSucceeded = True
Else
docObj.CheckSucceeded = False
docObj.ErrorMessage = "Данные таблицы не соответствуют результирующему значению"
resultField.Suggest sum
End If
Exit Sub
err_h:
docObj.ErrorMessage = Err.Description
docObj.CheckSucceeded = False
End Sub
Поиск в списке вариантов
Код правила, приведенный ниже, проверяет, что значение поля соответствует одному из значений списка. Если это не так, то устанавливается флажок ошибки правила, а поле получает список предлагаемых значений (suggests). В зависимости от результата проверки поле помечается либо как уверенно распознанное, либо как неуверенно.
[JScript] // запомнить значение поля var fieldValue = Field("Field6").Value; // создать список значений для проверки var list = new Array(5); for( i = 0; i < 5; i++ ) { list[i] = "2" + i } var success = false; // проверить значение поля на соответствие значениям из списка for( i = 0; i < 5; i++ ) { if( list[i] == fieldValue ) { success = true; break; } } // в зависимости от результатов проверки выставить уверенность полю Field("Field6").IsVerified = success; // заполнить список подсказок для поля - подсказкой может быть любое из // подходящих значений if( !success ) { for( i = 0; i < 5; i++ ) { Field("Field6").Suggest( list[i] ); } } // установить флажок ошибки CheckSucceeded = success; [/JScript] [VBScript] 'запомнить значение поля Dim fieldValue fieldValue = me.Field("Field6").Value 'создать список значений для проверки Dim list(5) dim i for i = 0 to 4 list(i) = "2" & i next dim success success = false 'проверить значение поля на соответствие значениям из списка for i = 0 to 4 if list(i) = fieldValue Then success = true exit for end if next 'в зависимости от результатов проверки выставить уверенность полю me.Field("Field6").IsVerified = success 'заполнить список подсказок для поля - подсказкой может быть любое из 'подходящих значений if success = false then for i = 0 to 4 me.Field("Field6").Suggest( list(i) ) next end if 'установить флажок ошибки me.CheckSucceeded = success [/VBScript]
Проверка наложения полей
Код правила, приведенный ниже, определяет, наложилось ли проверяемое поле. [JScript] if( Field("InvoiceNumber ").IsMatched ) { CheckSucceeded = true; } else { CheckSucceeded = false; ErrorMessage = "Поле InvoiceNumber не наложилось"; } [/JScript] [VBScript] if me.Field("InvoiceNumber").IsMatched then me.CheckSucceeded = true else me.CheckSucceeded = false me.ErrorMessage = "Поле InvoiceNumber не наложилось" end if [/VBScript]
Проверка метки
Код правила, приведенный ниже проверяет, отмечена метка или нет
[JScript] if( Field("Page status").Value ) { CheckSucceeded = true; } else { CheckSucceeded = false; ErrorMessage = "Статус страницы не отмечен"; FocusedField = Field("Page status"); } [/JScript] [VBScript] if me.Field("Page status").Value then me.CheckSucceeded = true else me.CheckSucceeded = false me.ErrorMessage = "Статус страницы не отмечен" me.FocusedField = me.Field(Page status) "" end if [/VBScript]
Проверка меток в группе
Код правила, приведенный ниже, перебирает все метки в группе и, если ни одна из них не выбрана, выбирает первую. Правило написано на уровне группы меток. В список полей, участвующих в правиле, добавлены все метки из данной группы. Сама группа удалена из списка полей. Для метки по умолчанию (первой) снят флажок Readonly. Если в группе нет ни одной метки, устанавливается флаг ошибки правила.
Данный пример демонстрирует возможность итерации по всем полям правила. Поскольку имена полей в коде не используются, код может быть использован для любой группы меток.
[JScript] if( Fields.Count == 0 ) { CheckSucceeded = false; ErrorMessage = "В группе нет меток"; } else { var isChosen = false; var i; for( i = 0; i < Fields.Count; i++ ) { if( Fields.Item( i ).Value ) { isChosen = true; break; } } if( !isChosen ) { Fields.Item(0).Value = true; } CheckSucceeded = true; } [/JScript] [VBScript] if me.Fields.Count = 0 then me.CheckSucceeded = false me.ErrorMessage = "В группе нет меток" else dim isChosen, i isChosen = false for i = 0 to me.Fields.Count - 1 if me.Fields.Item( i ).Value then isChosen = true exit for end if next if Not isChosen then me.Fields.Item(0).Value = true end if me.CheckSucceeded = true end if [/VBScript]
Проверка уверенности распознавания поля
Скрипт проверяет количество неуверенно распознанных символов в поле и очищает его, если их количество больше или равно трем. Данный скрипт является скриптом автозамены.
[JScript] var susp, qty, strpos, i, SC, strposPrev strposPrev = 1 qty = 0 SC = "1" susp = SuspiciousSymbols for ( i = 0; i < susp.length; i++) { strpos = susp.indexOf (SC,i) if ((strpos != strposPrev) && (strpos != -1)) { qty = qty + 1 strposPrev = strpos } } if (qty >= 3) { text = "" } [/JScript] [VBScript] Dim totQty, suspQty Dim i totQty = me.Symbols.Count suspQty = 0 for i = 0 to totQty - 1 if me.Symbols.Item(i).IsSuspicious = true then suspQty = suspQty + 1 end if next if suspQty >= 3 then me.Text = "" end if [/VBScript]
Замена символов без потери регионов и флагов верификации
Скрипт заменяет символы "+" на "&" без потери регионов и флагов верификации. Данный скрипт является скриптом автозамены.
[VBScript] Dim totQty Dim i totQty = me.Symbols.Count for i = 0 to totQty - 1 if me.Symbols(i).Symbol = "+" then me.Symbols(i).Symbol = "&" end if [/VBScript]
Проверка целостности пакета
Проверяет, совпадает ли количество документов на специальной контрольной страничке с описью в пакете (inv) и количеством обработанных документов в пакете. Если не совпадает, выдает ошибку.
[VBScript] dim DQty dim i for i = 0 to me.Batch.Documents.Count - 1 if me.Batch.Documents.Item(i).DefinitionName = "Inv" then DQty = me.Batch.Documents.Item(i).IndexedItemValue("DocQty") exit for end if next dim AcQty AcQty = me.Batch.Documents.Count if acqty <> DQty then me.CheckSucceeded = false me.ErrorMessage = "Некорректное количество документов в пакете:" & " " & AcQty& ". " & "Должно быть:" & " " & DQty & "!" end if [JScript] for ( i = 0; i < [Batch.Documents.Count - 1]; i++ ) { var TemplName = Batch.Documents.Item(0).DefinitionName; if (TemplName = "Inv") { var DQty = Batch.Documents.Item(i).IndexedItemValue("DocQty"); break ; } } var AcQty = Batch.Documents.Count -1 if (AcQty != DQty) { CheckSucceeded = false; ErrorMessage = "Некорректное количество документов в пакете:" + " " + AcQty + "." + "Должно быть:" + " " + DQty +"!" ; }
Подсчет количества страниц и документов в комплекте
Скрипт считает количество страниц в разделе комплекта документов. Выдает ошибку, если комплект содержит неизвестный тип элемента.
[C# .Net] using System; int subDocumentsCount = 0; int pagesCount = 0; IBatchItem asBatchItem = Context.Document.AsBatchItem; IBatchItems items = asBatchItem.ChildItems; foreach (IBatchItem item in items) { if ( item.Type == TBatchItemType.BIT_Page ) { pagesCount ++; } else if( item.Type == TBatchItemType.BIT_Document ) { subDocumentsCount ++; } else { Context.CheckSucceeded = false; Context.ErrorMessage = "Неизвестный тип элемента"; } } Context.Field("Field").Text = subDocumentsCount.ToString() + " " + pagesCount.ToString(); [/C# .Net]
14.01.2021 14:17:24