在IRIS中联合运用OCR与NLP技术

2024-03-04 05:40
文章标签 技术 联合 ocr 运用 nlp iris

本文主要是介绍在IRIS中联合运用OCR与NLP技术,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

根据IDC的报道,超过80%的信息是基于NoSQL的,尤其是文本文件。当数字服务或应用程序不能处理所有这些信息时,企业就会遭受损失。为了面对这一挑战,可以使用OCR技术。OCR使用机器学习和/或训练的图像模式将图像像素转化为文本。这一点很重要,因为许多文件被扫描成PDF格式的图像,或者许多文件中包含有文本的图像。因此,OCR是一个重要的步骤,可以从文件中获得所有可能的数据。

为了实现OCR,可以使用开源解决方案Google Tesseract,这是Python和Java社区中最流行的解决方案。Tesseract支持100多个习语,并且可以用新的模型进行训练以识别车牌、验证码等等。Tesseract是在C++中创建的,可以通过Java套用Tess4J构成一个中介层来使用它。下面的代码展示了调用过程。

private String extractTextFromImage ( File tempFile )  throws TesseractException {
 
ITesseract tesseract =  new Tesseract ();
tesseract . setDatapath ( "/usr/share/tessdata/" );  //directory to trained models
tesseract . setLanguage ( "eng+por" );  // choose your language/trained model
 
return tesseract . doOCR (tempFile);  //call tesseract function doOCR() 
//passing the file to be processed with OCR technique
 
}

为了让IRIS使用这个Java类并从Java获得结果,我们需要使用PEX和Java网关解决方案。

首先,有必要在Production中配置Java代理,其次,配置一个PEX业务操作或服务来在Production中连接沟通IRIS和Java。

Class dc . ocr . OcrProduction Extends Ens .Production
{
 
XData ProductionDefinition
{
< Production Name = "dc.ocr.OcrProduction" LogGeneralTraceEvents = "false" >
< Description ></ Description >
< ActorPoolSize > 2 </ ActorPoolSize >
< Item Name = "OcrService" Category = "" ClassName = "dc.ocr.OcrService" PoolSize = "1" Enabled = "true"
Foreground = "false" Comment = "" LogTraceEvents = "false" Schedule = "" >
</ Item >
< Item Name = "JavaGateway" Category = "" ClassName = "EnsLib.JavaGateway.Service" PoolSize = "1"
Enabled = "true" Foreground = "false" Comment = "" LogTraceEvents = "false" Schedule = "" >
< Setting Target = "Host" Name = "ClassPath" > .:/usr/irissys/dev/java/lib/JDK18/*:/opt/irisapp/*
:/usr/irissys/dev/java/lib/gson/*
:/usr/irissys/dev/java/lib/jackson/*:/jgw/ocr-pex-1.0.0.jar
</ Setting >
< Setting Target = "Host" Name = "JavaHome" > /usr/lib/jvm/java-8-openjdk-amd64/ </ Setting >
</ Item >
< Item Name = "OcrOperation" Category = "" ClassName = "EnsLib.PEX.BusinessOperation" PoolSize = "1"
Enabled = "true" Foreground = "false" Comment = "" LogTraceEvents = "false" Schedule = "" >
< Setting Target = "Host" Name = "%gatewayPort" > 55555 </ Setting >
< Setting Target = "Host" Name = "%remoteClassname" > community.intersystems.pex.ocr.OcrOperation </ Setting >
< Setting Target = "Host" Name = "%gatewayExtraClasspaths" > .:/usr/irissys/dev/java/lib/JDK18/*
:/opt/irisapp/*:/usr/irissys/dev/java/lib/gson/*
:/usr/irissys/dev/java/lib/jackson/*
:/jgw/ocr-pex-1.0.0.jar
</ Setting >
</ Item >
</ Production >
}
 
}

现在,任何IRIS Production都可以与Java和Tesseract进行通信了! 如下:

//call ocr method to get text from image, if you want to use pex
Set pRequest =  ##class ( dc . ocr . OcrRequest ). %New ()
Set pRequest . FileName =  file . Filename
// call java pex operation to do ocr, passing file into pRequest and receive ocr text with pResponse
Set tSC = .. SendRequestSync ( "OcrOperation" ,  pRequest , . pResponse ,  1200 )
//save the results into database to use text analytics - nlp
Set ocrTable =  ##class ( dc . ocr . OcrTable ). %New ()
Set ocrTable . FileName =  file . Filename
Set ocrTable . OcrText =  pResponse . StringValue
Set tSC =  ocrTable . %Save ()

所有的代码细节,连同注释都可以在我的OCR服务库(https://openexchange.intersystems.com/package/OCR-Service)中找到。

现在,随着文本的提取,我们需要使用IRIS NLP引擎来分析文本数据,并获得支持决策的见解。为此,当文本被提取后,它被保存到一个表中,这个表被NLP引擎用作文本源。请看上面的表%Save(),请看下面的代码,NLP引用OCRTable(有文本提取的地方)。如下:

Class dc . ocr . OcrNLP Extends %iKnow .DomainDefinition [  ProcedureBlock ]
{
 
XData Domain [  XMLNamespace =  "http://www.intersystems.com/iknow" ]
{
< domain name = "OcrNLP" disabled = "false" allowCustomUpdates = "true" >
< parameter name = "DefaultConfig" value = "OcrNLP.Configuration" isList = "false" />
< data dropBeforeBuild = "true" >
< table listname = "OcrNLPTable" batchMode = "true" disabled = "false"
listerClass = "%iKnow.Source.SQL.Lister" tableName = "dc_ocr.OcrTable" idField = "ID"
groupField = "ID" dataFields = "OcrText" metadataColumns = "FileName" metadataFields = "filename" />
</ data >
< matching disabled = "false" dropBeforeBuild = "true" autoExecute = "true" ignoreDictionaryErrors = "true" />
< metadata >
< field name = "filename" operators = "=" dataType = "STRING" storage = "0" caseSensitive = "false" disabled = "false" />
</ metadata >
< configuration name = "OcrNLP.Configuration" detectLanguage = "true" languages = "en,pt"
userDictionary = "OcrNLP.Dictionary#1" summarize = "true" maxConceptLength = "0" />
< userDictionary name = "OcrNLP.Dictionary#1" />
</ domain >
}
 
}

在我的OCR服务github资源库中看到完整的细节和配置。

现在我们可以上传一些文件,到资源管理器中查看概念和生成的CRC。

请参阅动画与这里讨论的所有步骤。

欢迎尝试 OCR/NLP!

这篇关于在IRIS中联合运用OCR与NLP技术的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/772167

相关文章

Java中的Schema校验技术与实践示例详解

《Java中的Schema校验技术与实践示例详解》本主题详细介绍了在Java环境下进行XMLSchema和JSONSchema校验的方法,包括使用JAXP、JAXB以及专门的JSON校验库等技术,本文... 目录1. XML和jsON的Schema校验概念1.1 XML和JSON校验的必要性1.2 Sche

Python中高级文本模式匹配与查找技术指南

《Python中高级文本模式匹配与查找技术指南》文本处理是编程世界的永恒主题,而模式匹配则是文本处理的基石,本文将深度剖析PythonCookbook中的核心匹配技术,并结合实际工程案例展示其应用,希... 目录引言一、基础工具:字符串方法与序列匹配二、正则表达式:模式匹配的瑞士军刀2.1 re模块核心AP

C语言自定义类型之联合和枚举解读

《C语言自定义类型之联合和枚举解读》联合体共享内存,大小由最大成员决定,遵循对齐规则;枚举类型列举可能值,提升可读性和类型安全性,两者在C语言中用于优化内存和程序效率... 目录一、联合体1.1 联合体类型的声明1.2 联合体的特点1.2.1 特点11.2.2 特点21.2.3 特点31.3 联合体的大小1

python运用requests模拟浏览器发送请求过程

《python运用requests模拟浏览器发送请求过程》模拟浏览器请求可选用requests处理静态内容,selenium应对动态页面,playwright支持高级自动化,设置代理和超时参数,根据需... 目录使用requests库模拟浏览器请求使用selenium自动化浏览器操作使用playwright

springboot自定义注解RateLimiter限流注解技术文档详解

《springboot自定义注解RateLimiter限流注解技术文档详解》文章介绍了限流技术的概念、作用及实现方式,通过SpringAOP拦截方法、缓存存储计数器,结合注解、枚举、异常类等核心组件,... 目录什么是限流系统架构核心组件详解1. 限流注解 (@RateLimiter)2. 限流类型枚举 (

Python实现PDF按页分割的技术指南

《Python实现PDF按页分割的技术指南》PDF文件处理是日常工作中的常见需求,特别是当我们需要将大型PDF文档拆分为多个部分时,下面我们就来看看如何使用Python创建一个灵活的PDF分割工具吧... 目录需求分析技术方案工具选择安装依赖完整代码实现使用说明基本用法示例命令输出示例技术亮点实际应用场景扩

Zabbix在MySQL性能监控方面的运用及最佳实践记录

《Zabbix在MySQL性能监控方面的运用及最佳实践记录》Zabbix通过自定义脚本和内置模板监控MySQL核心指标(连接、查询、资源、复制),支持自动发现多实例及告警通知,结合可视化仪表盘,可有效... 目录一、核心监控指标及配置1. 关键监控指标示例2. 配置方法二、自动发现与多实例管理1. 实践步骤

从入门到精通MySQL联合查询

《从入门到精通MySQL联合查询》:本文主要介绍从入门到精通MySQL联合查询,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下... 目录摘要1. 多表联合查询时mysql内部原理2. 内连接3. 外连接4. 自连接5. 子查询6. 合并查询7. 插入查询结果摘要前面我们学习了数据库设计时要满

MySQL数据库的内嵌函数和联合查询实例代码

《MySQL数据库的内嵌函数和联合查询实例代码》联合查询是一种将多个查询结果组合在一起的方法,通常使用UNION、UNIONALL、INTERSECT和EXCEPT关键字,下面:本文主要介绍MyS... 目录一.数据库的内嵌函数1.1聚合函数COUNT([DISTINCT] expr)SUM([DISTIN

Qt如何实现文本编辑器光标高亮技术

《Qt如何实现文本编辑器光标高亮技术》这篇文章主要为大家详细介绍了Qt如何实现文本编辑器光标高亮技术,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以了解下... 目录实现代码函数作用概述代码详解 + 注释使用 QTextEdit 的高亮技术(重点)总结用到的关键技术点应用场景举例示例优化建议