集成数据捕获以处理发票和其他半结构化表单
本白皮书介绍了使用半结构化表单处理开发工具包,部署 .NET 解决方案以实现应付账款自动化的基本步骤。该解决方案可通过 API 集成到应用程序中。
引言
IBM、Gartner 和美林证券最近进行的研究得出结论,今天公司中约有 80% 的数据是半结构化或非结构化的。
随着对指标、电子决策支持、全自动化后台功能甚至大数据利用工具的日益依赖,这些海量的非结构化数据在 IT 领域造成了一个巨大的鸿沟,这是一个庞大的数据存储库,如果没有成本高昂且易出错的手动干预来捕获和排序数据以供自动化系统使用,就无法加以利用。
因此,IT 部门承受着控制非结构化数据的巨大压力。但由于缺乏有效且经济实惠的技术,以及过时的商业文化,这项工作一直受阻。尽管企业采用计算机化业务流程已有半个世纪,但数据仍然以难以准确捕获的格式生成。
在零售、医疗保健、金融服务、交通运输和其他行业,半结构化表单,如纸质或 Microsoft Word 或 PDF 格式的发票和合同,仍然是核心的前线业务工具。源自非结构化电子邮件、信件和传真的数据激增,阻碍了经济高效、准确捕获的尝试。
控制非结构化数据的努力也因解决方案需要多种成熟技术协同工作而受到阻碍。例如,从半结构化表单捕获数据需要先进的识别技术来扫描和纠正表单图像,加上准确的光学字符识别(OCR)技术,加上智能字符识别(ICR)来捕获手写体和签名,再加上一个智能处理组件来正确地将识别的数据映射到数据库字段供其他应用程序使用。如果这些组件中的任何一个不够快速和准确,或者不能轻松地与其他组件集成,整个数据捕获开发项目就会失败。
新一代的成熟识别技术最近已问世,可帮助开发人员开始解决公司数据中缺失的 80%。这些解决方案包含了捕获所需所有组件的成熟实现,并通过 API 使这些功能易于集成到应用程序中。
例如,本白皮书介绍了设置自动发票捕获的基本步骤,然后可以通过 API 轻松集成到应用程序中。所使用的 SDK 可从 www.accusoft.com/formsinvoicedownload.htm 下载进行评估。
基本捕获概念
本白皮书中使用的示例软件开发工具包(SDK)是 Accusoft 的 FormSuite for Invoices。作为 Accusoft 成熟的表单处理和清理、OCR 和 ICR 解决方案的演进,FormSuite for Invoices 旨在处理发票的扫描图像(或 Word 或 PDF 文件),然后通过将数据组织成标记-数据对(称为 FormField)来搜索和提取发票号、发票日期、总金额和明细等数据。
FormField 中的标记是文档中定义数据的文本。诸如“Invoice Number”、“Date of Invoice”和“Invoice #”之类的措辞是 FormField 标记的示例。更准确地说,这些是 FormField 标记的“标记别名”。例如,“Invoice Total Amount Due”可以是一个标记的名称,但在某些文档中,这可能不是标识总金额的措辞。为了考虑标记的差异,每个标记都可以被分配任意数量的别名;对于“Invoice Total Amount Due”,别名可以是“Pay this Amount”、“Amount Due”、“Total Due”和“Total”。
FormField 中的数据是 FormSuite for Invoices 与标记关联的文档中的文本,如“$100.00”、“1/23/2014”或“Jan. 12, 2013”之类的措辞。
FormSuite for Invoices 还可以识别和提取发票图像中表格的明细数据,并从这些数据构建 FormTable。FormTable 由一组列标题和一组行数据列表组成。
在处理过程中,会将供应商与输入发票进行匹配。这是通过将图像上找到的供应商电话号码和地址与供应商列表中发布的电话号码和地址进行匹配来实现的。
一旦发票被处理和验证,就会创建并保存该发票的模板。此模板将用于将来处理同一供应商的其他发票,以提高字段匹配的准确性。每次使用模板时,都会根据旧的位置和大小数据以及为文档中识别的所有字段找到和验证的新信息来更新其位置和大小数据。
部署步骤
在执行了典型的 .NET 安装、分发和许可初始步骤后,FormSuite for Invoices 的部署需要一些简单的编码来
- 加载和处理发票
- 验证结果
- 更新模板
要加载和处理发票,必须将图像标识符列表传递给处理器组件。标识符是图像文件的完整路径。在对图像进行任何处理之前,还必须向发票处理器提供其他几个基本标识符,例如 CompanyData、FormDefinition 和 Vendor List。
下面的代码示例说明了将发票图像加载到处理器的基本操作
public void ProcessInvoices(List<string> fileNames,
FormDefinition formDefiniton,
ICompanyData companyData,
IEnumerable<IVendor> vendorList)
{
using ( Licensing license = new Licensing())
{
// Setup the license keys
license.SetSolutionName("YourSolutionName");
license.SetSolutionKey(12345, 12345, 12345, 12345);
license.SetOEMLicenseKey("2.0.AStringForOEMLicensingContactAccusoftSalesForMoreInformation…");
// Create a processor for invoicing
using (Processor invoiceProcessor = new Processor(license))
{
// Set the initial data
invoiceProcessor.CompanyData = companyData;
invoiceProcessor.VendorList = vendorList;
invoiceProcessor.FormDefinition = formDefiniton;
// Run Analyze on the file
AnalyzeResults results = invoiceProcessor.Analyze(fileNames);
}
}
}
输出数据被收集到 FormResults 列表中。每个 FormResult 包含发票文档所有页面上的数据。
验证实际上是一项手动操作。用户必须在屏幕上查看结果,然后接受、编辑或拒绝它们。设置字段和表中的“UserValidated
”标志即可验证它们。此标志也用于模板处理,以便更倾向于这些“已验证”的值和位置。
最后一步是更新模板。FormSuite for Invoices 能够创建新模板;但是,开发人员的应用程序必须管理和维护所有模板。包含了一个简单的接口组件,提供了 FormSuite for Invoices 和开发人员的应用程序进行模板来回传递所需的所有工具。以下代码示例演示了模板操作在应用程序处理方案中的位置。
// Create an instance of the license class
using (Licensing license = new Licensing())
{
license.SetSolutionName("YourSolutionName");
license.SetSolutionKey(12345, 12345, 12345, 12345);
license.SetOEMLicenseKey("2.0.AStringForOEMLicensingContactAccusoftSalesForMoreInformation…");
// Update the templates for the form result
TemplateIO.UpdatePageTemplates(templateProvider, formResult, companyData, vendor, true, license);
}
一旦完成这些基本步骤,FormSuite for Invoices 不仅可以处理发票,还可以通过 API 进行程序化控制,该 API 已在 FormSuite for Invoices 帮助文件中完整记录。
摘要
FormSuite for Invoices 只是帮助开发人员轻松地将半结构化和非结构化数据引入自动化系统所迈出的第一步。未来,Accusoft 将提供用于处理其他表单类型(如采购订单、装运文件和健康表格)的 SDK。在此期间,开发人员可以在 www.accusoft.com/formsinvoice.htm 了解更多关于 FormSuite for Invoices 的信息,并下载完整 SDK 进行试用。
关于作者
在加入 Accusoft 之前,Ned Averill-Snell 曾是普华永道的全球最佳实践分析师。作为一名长期的计算机记者和作家,他曾是 DATAMATION 和 Inside Technology Training 杂志的特约编辑,并著有二十多本关于 IT 的书籍。