OCR 및 NLP를 InterSystems IRIS로 통합

5897 단어 tutorialnlpocrapi
IDC에 따르면 정보의 80% 이상이 NoSQL이며 특히 문서에 대한 텍스트입니다. 디지털 서비스나 애플리케이션이 이 모든 정보를 처리하지 않으면 비즈니스는 손해를 보게 됩니다. 이 문제에 대처하기 위해 OCR 기술을 사용할 수 있습니다. OCR은 기계 학습 및/또는 훈련된 이미지 패턴을 사용하여 이미지 픽셀을 텍스트로 변환합니다. 많은 문서가 PDF 내부의 이미지로 스캔되거나 내부에 텍스트가 있는 이미지가 포함된 문서가 많기 때문에 이는 중요합니다. 따라서 OCR은 문서에서 가능한 모든 데이터를 가져오는 중요한 단계입니다.

OCR을 수행하기 위해 사용되는 주요 오픈 소스 솔루션은 Python 및 Java 커뮤니티에서 가장 인기 있는 솔루션인 Google Tesseract입니다. Tesseract는 100개 이상의 숙어를 지원하며 자동차 번호판, 캡차 등을 인식하는 새로운 모델로 훈련할 수 있습니다. Tesseract는 C++로 만들어졌으므로 Java는 Tess4J라는 중간체를 사용하여 Tesseract를 사용합니다. 다음 코드는 이를 보여줍니다.

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 Gateway 솔루션을 사용해야 합니다.

먼저 프로덕션에 Java 프록시를 구성하고 두 번째로 IRIS 및 Java를 프로덕션에 전달하도록 PEX 비즈니스 작업 또는 서비스를 구성해야 합니다.

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 프로덕션이 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() 테이블을 참조하고 OCRTable(텍스트가 추출된 위치)을 참조하는 NLP가 있는 다음 코드를 참조하십시오. 보다:

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 해킹!

좋은 웹페이지 즐겨찾기