Vai al contenuto principale
Abbiamo già iniziato a estrarre dati dai documenti in tedesco, quindi per prima cosa configureremo l’attività Extraction Rules per questi documenti.

Passaggi preparatori

  1. Apri l’attività “Sick Note DE” in Activity Editor.
  2. Seleziona uno dei documenti dal set di documenti.
  3. Assicurati che la modalità avanzata per le proprietà degli elementi sia attivata. Per attivare o disattivare questa modalità, fai clic sull’icona nel riquadro Properties.
  4. Tutti i documenti caricati sono stati prerecogniti ed è utile vedere quali oggetti sono stati individuati nell’immagine. Fai clic sull’icona. Se non vedi questa icona a causa delle dimensioni dello schermo, fai clic sull’icona e seleziona Recognized Words. Gli oggetti corrispondenti verranno evidenziati nell’immagine del documento. Puoi passare tra vari tipi di oggetti evidenziati in qualsiasi momento. Ad esempio, passare a Recognized Lines può essere utile quando cerchi paragrafi, mentre passare a Separators semplificherà la configurazione di un elemento di ricerca Separator.
  5. Se un elemento di ricerca si trova al di fuori dell’area di ricerca, non verrà trovato. Attiva l’opzione Show search area nel menu contestuale dell’immagine del documento. L’area di ricerca per ciascun elemento verrà evidenziata in verde quando valuti i risultati di corrispondenza.
Tieni presente che può essere utile sperimentare con le proprietà avanzate degli elementi di ricerca per migliorare l’accuratezza dell’estrazione. Ti invitiamo inoltre a fare spesso clic su Match per verificare come funzionano le tue regole di estrazione e confrontare i risultati di estrazione su diversi documenti del set. Puoi testare un singolo elemento senza relazioni con altri elementi facendo clic su Match Element nel suo menu contestuale. In questo caso, la qualità dell’ipotesi per gli elementi precedenti non influenzerà i risultati di corrispondenza.

Estrazione dei dati del paziente

Iniziamo estraendo i dati mancanti del paziente. Per farlo, dobbiamo creare diversi elementi di ricerca. Consigliamo di raggruppare tutti gli elementi relativi a un’unica entità. Gli elementi vengono confrontati uno dopo l’altro e il mancato reperimento dell’elemento principale riduce la qualità dell’ipotesi per gli elementi successivi. Nel frattempo, i gruppi di elementi di ricerca vengono elaborati in modo indipendente l’uno dall’altro durante il matching e per ogni gruppo viene formulata un’ipotesi distinta. In questo modo è possibile controllare come gli elementi si influenzano a vicenda. È inoltre possibile valutare i risultati del matching a colpo d’occhio verificando se gli elementi del gruppo sono stati trovati correttamente. Infine, il raggruppamento può contribuire a ridurre i tempi di matching.
  1. Fare clic su Create Element e selezionare l’elemento Group dall’elenco a discesa. Cambiarne il nome in “PatientDataArea”.
  2. Un nuovo elemento di ricerca di tipo gruppo è impostato come obbligatorio per impostazione predefinita. Se un elemento obbligatorio non viene trovato, l’Activity Editor genera un errore e il matching viene interrotto. Questo consente di saltare le attività se non sono adatte a un determinato documento. Tuttavia, in questo tutorial stiamo creando un’attività per estrarre dati da tutti i documenti in arrivo, quindi vogliamo che il gruppo sia facoltativo. Nella sezione Under what conditions, modificare il valore Element is in Optional.
  3. Vogliamo trovare il paragrafo che contiene il nome e l’indirizzo del paziente. Nei documenti in tedesco il paragrafo che cerchiamo si trova sempre nel field con l’etichetta “Name, Vorname … ”. Dobbiamo trovare questo testo nel documento e usarlo come riferimento per cercare i dati che vogliamo estrarre.
    a. Le parole chiave possono essere rilevate utilizzando l’elemento di ricerca Static Text. Fare clic su Create Element e selezionare l’elemento Static Text dall’elenco a discesa. Cambiarne il nome in “kwPatientTitle”.
    b. Inserire il testo “Name, Vorname” nel field Text to find nel riquadro Properties.
    c. Fare clic su Match. Al termine dell’elaborazione, si vedrà il Tree of Hypotheses sotto il documento. Assicurarsi che Advanced Designer abbia trovato correttamente il testo statico desiderato. Un punto verde accanto al nome dell’elemento indica che un elemento corrispondente è stato trovato nel documento. Facendo clic sul nome dell’elemento nel Tree of Hypotheses, si vedrà un riquadro viola attorno all’area corrispondente nel documento.
Nota: Se un elemento non viene trovato, si vedrà un punto arancione accanto al suo nome e un riquadro arancione attorno all’immagine del documento. Tenere presente che la qualità dell’ipotesi di un elemento influisce sullo stato degli elementi successivi nella catena e sulla qualità complessiva della catena. È possibile trovare informazioni dettagliate sulla qualità delle ipotesi nella documentazione.
  1. Ora individuiamo il bordo inferiore della cella che contiene il nome e l’indirizzo del paziente. Lo faremo usando un elemento Separator.
    a. Aggiungi un elemento Separator al gruppo e chiamalo “SeparatorBottom”. Imposta la lunghezza minima su 200.
    b. Fai clic con il pulsante destro sull’elemento e seleziona Match Element nel menu contestuale. Vedrai che l’Albero delle ipotesi contiene molti punti verdi. Corrispondono a diversi separatori che soddisfano i criteri di ricerca. Puoi fare clic su ciascun punto per vedere l’oggetto corrispondente nell’immagine.
    c. Per affinare i criteri di ricerca, specifica l’area di ricerca per il separatore. Fai clic su Match per trovare l’elemento “kwPatientTitle” che verrà utilizzato come elemento di ancoraggio. Nella sezione Where to search del riquadro Properties, fai clic su Draw on Image. Seleziona l’elemento “kwPatientTitle” nel documento e fai clic sull’icona della freccia verso il basso per delimitare l’area di ricerca sotto la parola chiave e sull’icona più vicina per cercare il separatore più vicino alla parola chiave. Trovi una descrizione dettagliata degli elementi di ancoraggio nella documentazione.
    d. Fai clic su Match e verifica che Advanced Designer abbia trovato il separatore sotto l’elemento “kwPatientTitle”. Puoi verificare l’ipotesi per ciascun elemento facendo clic sul suo nome nella sezione Tree of Hypotheses.
  2. Un’etichetta e un separatore sono elementi di riferimento affidabili per i dati del paziente. Tuttavia, se la qualità di stampa è troppo bassa, è possibile che il testo dell’etichetta non venga riconosciuto o che il separatore non venga trovato. Per garantire buoni risultati di estrazione, cercheremo un paragrafo compreso tra l’etichetta e il separatore. Un paragrafo è un blocco uniforme di testo, quindi può essere individuato con successo anche se alcuni elementi di contorno non sono stati trovati.
    a. Crea un elemento di ricerca Paragraph e chiamalo “NameAddressParagraph”.
    b. Imposta Text alignment su Left.
    c. I dati del paziente occupano da due a cinque righe, quindi specifica Line count da 2 a 5.
    d. Specifica l’area di ricerca per il paragrafo. Questa volta usa il menu Add nella sezione Where to search. L’elemento deve trovarsi sotto l’elemento “kwPatientTitle” e sopra l’elemento “SeparatorBottom”.
    e. Fai clic su Match.
  3. Ora vogliamo estrarre i dati del paziente. Crea un nuovo elemento di gruppo chiamato “PatientGroup”.
  4. Il nome del paziente può occupare una o due righe. Per acquisire più occorrenze di un elemento, utilizzeremo un gruppo ripetuto.
    a. Crea un elemento di ricerca Repeating Group e chiamalo “NameGroup”. Specifica 2 come numero massimo di ripetizioni. Imposta l’elemento come facoltativo.
    b. Vogliamo cercare le righe che fanno parte del paragrafo “NameAddressParagraph”. Per impostare come area di ricerca la regione dell’elemento, fai clic sull’icona dell’editor di codice sotto l’immagine del documento e incolla il seguente script nella sezione Search Conditions del Code Editor:
RSA:PatientDataArea.NameAddressParagraph.Rect;
c. All’interno del gruppo ripetuto, crea un elemento Character String progettato per acquisire una riga di caratteri. Chiamalo “NameLine”.
d. Il testo che stiamo cercando può contenere lettere maiuscole e minuscole, oltre a un insieme di segni di punteggiatura che possono comparire nei nomi. Configura due insiemi di caratteri separati. Il primo insieme deve contenere tutte le lettere latine maiuscole e minuscole. Per aggiungere caratteri con segni diacritici, modifica la sottorange Unicode oppure incolla direttamente i caratteri nel field Selected characters.
e. L’altro insieme deve contenere i seguenti segni di punteggiatura: ,-.()’. Non vogliamo che la string contenga solo segni di punteggiatura, quindi imposta Portion in text, % per il secondo insieme al 40%. Questa proprietà definisce la percentuale massima consentita di caratteri provenienti da un determinato insieme.
Nota: Le impostazioni predefinite consentono alla string di contenere fino al 30% di caratteri non inclusi in alcun insieme. Questo aiuta a trovare string anche quando alcuni caratteri sono riconosciuti in modo errato o non sono inclusi nell’insieme (ad esempio, caratteri con segni diacritici). Puoi modificare questa impostazione cambiando il valore Allowed errors nel riquadro Properties. f. Disabilitare l’opzione Search for parts of words.
g. Specificare l’area di ricerca per l’elemento “NameLine”: sotto l’elemento “kwPatientTitle” e il più vicino possibile ad esso.
h. Fare clic su Match e verificare l’albero delle ipotesi. Verranno trovate due stringhe di caratteri. Tuttavia, la seconda stringa contiene l’indirizzo del paziente.
i. Per escludere l’indirizzo dai risultati, verificheremo se la prima stringa contiene sia nome sia cognome. È possibile farlo aggiungendo una semplice condizione di ricerca tramite script. Selezionare l’elemento di ricerca “NameLine” e aprire l’editor del codice Search Conditions.
j. Supponiamo che la prima riga contenga un nome completo se include una virgola e uno spazio. Se contiene un nome completo, non vogliamo cercare una seconda occorrenza del gruppo ripetuto. Incollare il seguente script nell’editor:
if (NameGroup.HasInstances and LastFound.NameLine.Value.Find(", ") > 0) then DontFind;
k. Fare clic su Match e verificare che il nome venga trovato correttamente.
  1. Il nome del paziente estratto al passaggio 7 verrà mappato al field “Name”. Estrarremo e mapperemo anche l’indirizzo del paziente.
    a. All’interno di “PatientGroup”, creare un elemento di ricerca Character String denominato “Address” con la stessa configurazione del set di caratteri dell’elemento “NameLine”.
    b. Specificare l’area di ricerca per l’elemento tramite codice: l’indirizzo deve trovarsi sotto “NameLine” oppure, se questo elemento non è stato trovato, sotto la prima riga dell’elemento “NameAddressParagraph”.
RSA: PatientDataArea.NameAddressParagraph.Rect;
if NameGroup.HasInstances then
  RSA.Top: Max(RSA.Top, LastFound.NameLine.Rect.Bottom);
else
  RSA.Top: PatientDataArea.NameAddressParagraph.Lines[0].Rect.Bottom;
c. Disabilitare l’opzione Cerca parti di parole. d. Fare clic su Corrispondenza. Ecco come dovrebbe apparire la struttura dell’elemento di ricerca: AD_Tutorial_DE_Patient_Structure
  1. Aprire la finestra di dialogo Gestisci Fields, creare i relativi Fields e associarli agli elementi di ricerca come segue:
NomeTipoElemento di ricerca
NomeField di tipo Testo nel gruppo “Patient”NameLine
IndirizzoField di tipo Testo nel gruppo “Patient”Address
  1. Eliminare gli elementi di ricerca creati automaticamente per i nuovi Fields.

Estrazione del tipo di certificato di malattia

Il field del tipo di certificato di malattia ha due caselle di controllo, etichettate “Erstbescheinigung” e “Folgebescheinigung”. L’obiettivo è individuare le etichette e verificare se ci sono segni di spunta selezionati accanto a esse.
  1. Crea un elemento Group chiamato “TypeOfSickNoteGroup”. Imposta l’elemento come facoltativo.
  2. Per memorizzare le informazioni su entrambe le caselle di controllo, crea un elemento di ricerca Repeating Group e chiamalo “PrimaryGroup”.
    a. È consigliabile limitare l’area di ricerca per il gruppo di elementi. Specifica l’area di ricerca tramite codice: a destra dell’elemento “PatientGroup” e sopra l’elemento “DoctorAreaGroup” (che verrà creato più avanti). Nota: specifica sempre la condizione “Exists” quando utilizzi elementi futuri.
if PatientGroup.Exists then RSA.Left: PatientGroup.NameGroup.NameLine.Rect.Right;
if DoctorAreaGroup.Exists then RSA.Bottom: DoctorAreaGroup.DataArea.SeparatorTop.Rect.Top;
b. Creare un elemento di ricerca Static Text denominato “kwPrimary” (testo da trovare: “Erstbescheinigung”) e renderlo obbligatorio.
c. Creare un elemento di ricerca Object Collection denominato “Checkmark” con le seguenti impostazioni: Type: Checkmark, Checkmark state: Checked, Minimum height: 10, Maximum width: 20, Maximum height: 20. Specificare che l’elemento è posizionato a sinistra dell’elemento “kwPrimary” ed è quello più vicino.
d. Fare clic su Match.
  1. Copiare e incollare il gruppo “PrimaryGroup”. Rinomina il gruppo copiato in “SecondaryGroup”. Questo gruppo sarà obbligatorio.
  2. Modificare “SecondaryGroup”.
    a. Rinominare l’elemento “kwPrimary” in “kwSecondary” e impostare il testo da trovare su “Folgebescheinigung”. Specificare l’area di ricerca: sotto l’elemento “kwPrimary” del “PrimaryGroup”.
    b. Specificare l’area di ricerca per l’elemento “Checkmark”: a sinistra di “kwSecondary” e il più vicino.
    c. L’elemento di ricerca Object Collection trova una raccolta di tutti gli oggetti idonei nell’area di ricerca. Se i segni di spunta si trovano sulla stessa riga, l’elemento “Checkmark” del “SecondaryGroup” potrebbe trovare anche il segno di spunta primario. Per evitarlo, escludere il segno di spunta primario (elemento “Checkmark” del “PrimaryGroup”) dall’area di ricerca per l’elemento “Checkmark” del “SecondaryGroup”.
    d. Fare clic su Match.
Ecco come dovrebbe apparire la struttura dell’elemento di ricerca: AD_Tutorial_DE_TypeOfSickNote_Structure
  1. Aprire la finestra Manage Fields, creare i relativi field e mappare tali field agli elementi di ricerca come segue:
NameTypeSearch element
Type of Sick NoteCheckmark group
PrimaryCheckmark in the “Type of Sick Note” checkmark groupPrimaryGroup -> Checkmark
SecondaryCheckmark in the “Type of Sick Note” checkmark groupSecondaryGroup -> Checkmark
  1. Eliminare gli elementi di ricerca creati automaticamente per i nuovi field.

Estrazione dei dati del medico

Ora dobbiamo elaborare l’ultimo blocco di dati in questi documenti. Contiene i dati del medico e la sua firma. Per prima cosa individueremo il riquadro che contiene i dati, quindi estrarremo un paragrafo con le informazioni del medico e una regione immagine contenente la firma.
  1. Crea un elemento Group chiamato “DoctorAreaGroup”. Imposta l’elemento come facoltativo.
  2. Il riquadro che cerchiamo contiene un’etichetta. Per trovarla, crea un elemento Static Text chiamato “kwDoctorTitle” (testo da cercare: “Unterschrift des Arztes”).
  3. All’interno del gruppo “DoctorAreaGroup”, crea un altro gruppo chiamato “DataArea”.
  4. Il riquadro che contiene le informazioni e la firma del medico è definito da quattro separatori. Si trovano attorno all’elemento “kwDoctorTitle”. Tuttavia, dobbiamo configurare gli elementi in modo che il programma possa trovarli anche se l’elemento “kwDoctorTitle” non viene individuato. Nel gruppo “DataArea”, crea quattro elementi di ricerca Separator con le seguenti proprietà:
NameOrientationMinimum lengthSearch area
SeparatorRightVertical180Right of “kwDoctorTitle”, Nearest to the right page edge
SeparatorLeftVertical180Left of “kwDoctorTitle”, Left of “SeparatorRight” (in case “kwDoctorTitle” wasn’t found), Nearest to “SeparatorRight”, Below “SeparatorRight” (click the icon to the right of the separator name and select Top Boundary of Region), Exclude “SeparatorRight”
SeparatorBottomHorizontal200Below “kwDoctorTitle” (with adjustment of -10 points), Right of “SeparatorLeft”, Left of “SeparatorRight”, Nearest to the bottom page edge (this setting will be useful in case “kwDoctorTitle” wasn’t found)
SeparatorTopHorizontal200Above “kwDoctorTitle”, Right of “SeparatorLeft”, Nearest to “TypeOfSickNoteGroup”, Exclude “SeparatorBottom”
Disabilita inoltre l’opzione Fits entirely within search area per tutti questi elementi.
  1. Potremmo specificare manualmente l’area di ricerca per la firma e le informazioni del medico rispetto ai separatori trovati. Invece, creeremo un elemento Region che corrisponde all’area delimitata dai separatori. Crea un elemento di ricerca Region chiamato “BoxRegion” e specifica l’area di ricerca: a sinistra di “SeparatorRight”, a destra di “SeparatorLeft”, sopra “SeparatorBottom” e sotto “SeparatorTop”.
  2. Crea un nuovo gruppo chiamato “DoctorGroup”.
  3. Per individuare la firma del medico, crea un elemento Object Collection con le seguenti impostazioni all’interno di “DoctorGroup”:
PropertyValue
NameSignature
TypePicture
Minimum width15
Minimum height15
Maximum width600
Maximum height350
Search Conditions section of the Code EditorLa firma può trovarsi parzialmente all’esterno del riquadro. Per trovare l’intera immagine, espanderemo l’area di ricerca di 100 dot in ogni direzione: RSA: DoctorAreaGroup.DataArea.BoxRegion.Rect.GetInflated(100dot,100dot);
  1. Per estrarre le informazioni testuali nel riquadro, crea un elemento Paragraph con le seguenti impostazioni:
PropertyValue
NameDoctorInformation
Maximum line count6
Search areaAbove “kwDoctorTitle”, Exclude “Signature”
Search Conditions section of the Code EditorRSA: DoctorAreaGroup.DataArea.BoxRegion.Rect;
  1. Fai clic su Match e verifica che gli elementi vengano trovati correttamente.
Ecco come dovrebbe apparire la struttura degli elementi di ricerca: AD_Tutorial_DE_Doctor_Structure
  1. Apri la finestra di dialogo Manage Fields, crea i relativi field e mappali agli elementi di ricerca come segue:
NameTypeSearch element
Doctor InformationText field in the “Doctor” groupDoctorInformation
SignatureImage field in the “Doctor” groupSignature
  1. Elimina gli elementi di ricerca creati automaticamente per i nuovi field.

Test dell’attività

Abbiamo configurato tutti gli elementi di ricerca e i field necessari. Seleziona tutti i documenti, fai clic su Match e passa alla scheda Fields per esaminare le regioni dei field sulle immagini del documento. Tieni presente che una regione verrà assegnata a un field solo se appartiene all’ipotesi del percorso migliore. Quando sei soddisfatto dei risultati, fai clic sull’icona di copia sopra l’immagine del documento per copiare l’etichettatura prevista in quella di riferimento.