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

Prima di iniziare

  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 una singola entità. Gli elementi vengono confrontati uno dopo l’altro e, se l’elemento superiore non viene trovato, la qualità dell’ipotesi per gli elementi successivi diminuisce. Nel frattempo, i gruppi di elementi di ricerca vengono elaborati indipendentemente l’uno dall’altro durante il matching e per ogni gruppo viene formulata un’ipotesi individuale. In questo modo, puoi controllare come gli elementi si influenzano a vicenda. Puoi anche valutare a colpo d’occhio i risultati del matching verificando se gli elementi del gruppo sono stati trovati correttamente. Infine, il raggruppamento può contribuire a ridurre i tempi di matching.
  1. Fai clic su Create Element e seleziona l’elemento Group dall’elenco a discesa. Cambia il nome in “PatientDataArea”.
  2. Un nuovo elemento di ricerca di gruppo è impostato come obbligatorio per impostazione predefinita. Se un elemento obbligatorio non viene trovato, l’Activity Editor restituisce un errore e il matching viene interrotto. Questo scenario 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, modifica il valore Element is in Optional.
  3. Vogliamo trovare il paragrafo che contiene il nome e l’indirizzo del paziente. Nei documenti tedeschi, 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 trovate usando l’elemento di ricerca Static Text. Fai clic su Create Element e seleziona l’elemento Static Text dall’elenco a discesa. Cambia il nome in “kwPatientTitle”.
    b. Inserisci il testo “Name, Vorname” nel field Text to find del riquadro Properties.
    c. fai clic su Match. Al termine dell’elaborazione, vedrai il Tree of Hypotheses sotto il documento. Assicurati 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. Se fai clic sul nome dell’elemento nel Tree of Hypotheses, vedrai una cornice viola attorno all’area corrispondente nel documento.
Se un elemento non è stato trovato, vedrai un punto arancione accanto al suo nome e una cornice arancione attorno all’immagine del documento. Tieni presente che la qualità dell’ipotesi di un elemento influisce sullo stato degli elementi successivi nella catena e sulla qualità complessiva della catena. Puoi 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 del mouse sull’elemento e seleziona Match Element nel menu contestuale. Vedrai che il Tree of Hypotheses 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 restringere i criteri di ricerca, specifica l’area di ricerca del separatore. Fai clic su Match per trovare l’elemento “kwPatientTitle” che verrà usato 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 specificare 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 controllare l’ipotesi per ogni 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, il che significa che può essere trovato correttamente anche se alcuni elementi di contorno non sono stati trovati.
    a. Crea un elemento di ricerca Paragraph e chiamalo “NameAddressParagraph”.
    b. Modifica Text alignment in 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 devi usare 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ù istanze di un elemento, useremo un gruppo ripetuto.
    a. Crea un elemento di ricerca Repeating Group e chiamalo “NameGroup”. Specifica 2 come numero massimo di ripetizioni. Rendi l’elemento facoltativo.
    b. Vogliamo cercare le righe che fanno parte del paragrafo “NameAddressParagraph”. Per specificare la regione dell’elemento come area di ricerca, 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, nonché 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 il sottorange Unicode oppure incolla direttamente i caratteri nel campo Selected characters.
e. L’altro insieme deve contenere i seguenti segni di punteggiatura: ,-.()’. Non vogliamo che la stringa 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.
Le impostazioni predefinite consentono alla stringa di contenere fino al 30% di caratteri non inclusi in alcun insieme. Questo aiuta a trovare stringhe anche quando alcuni caratteri vengono riconosciuti in modo errato o non sono inclusi nell’insieme (ad esempio i caratteri con segni diacritici). Puoi regolare questa impostazione modificando il valore Allowed errors nel riquadro Properties.
f. Disabilita l’opzione Search for parts of words.
g. Specifica l’area di ricerca per l’elemento “NameLine”: sotto l’elemento “kwPatientTitle” e il più vicino possibile a esso.
h. fai clic su Match e controlla il Tree of Hypotheses. Vedrai che vengono trovate due stringhe di caratteri. Tuttavia, la seconda stringa contiene l’indirizzo del paziente.
i. Per escludere l’indirizzo dai risultati di ricerca, verificheremo se la prima stringa contiene sia il nome sia il cognome. Questo può essere fatto aggiungendo una semplice condizione di ricerca tramite script. Seleziona l’elemento di ricerca “NameLine” e apri l’editor di codice Search Conditions.
j. Presumiamo che la prima riga contenga il nome completo se contiene una virgola e uno spazio. Se contiene un nome completo, non vogliamo cercare una seconda istanza del gruppo ripetuto. Incolla il seguente script nell’editor:
if (NameGroup.HasInstances and LastFound.NameLine.Value.Find(", ") > 0) then DontFind;
k. fai clic su Match e assicurati che il nome venga trovato correttamente.
  1. Il nome del paziente estratto nel passaggio 7 verrà mappato al field “Name”. Estraremo e mapperemo anche l’indirizzo del paziente.
    a. All’interno di “PatientGroup”, crea un elemento di ricerca Character String chiamato “Address” con la stessa configurazione del set di caratteri dell’elemento “NameLine”.
    b. Specifica l’area di ricerca per l’elemento usando il 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. Disabilita l’opzione Search for parts of words.
d. fai clic su Match.
La struttura degli elementi di ricerca dovrebbe essere la seguente: AD_Tutorial_DE_Patient_Structure
  1. Apri la finestra di dialogo Manage Fields, crea i field corrispondenti e mappali agli elementi di ricerca come segue:
NameTypeSearch element
NameText field nel gruppo “Patient”NameLine
AddressText field nel gruppo “Patient”Address
  1. elimina gli elementi di ricerca creati automaticamente per i nuovi field.

Estrazione del tipo di certificato di malattia

Il field del tipo di certificato di malattia ha due caselle di controllo. Sono etichettate come “Erstbescheinigung” e “Folgebescheinigung”. Il compito consiste nel trovare le etichette e poi verificare se accanto a esse sono presenti segni di spunta selezionati.
  1. Crea un elemento Group chiamato “TypeOfSickNoteGroup”. Rendi l’elemento facoltativo.
  2. Per memorizzare le informazioni su entrambi i segni di spunta, crea un elemento di ricerca Repeating Group e chiamalo “PrimaryGroup”.
    a. È una buona idea limitare l’area di ricerca per il gruppo di elementi. Specifica l’area di ricerca usando il codice: a destra dell’elemento “PatientGroup” e sopra l’elemento “DoctorAreaGroup” (che verrà creato più avanti). **Note: **Specifica sempre la condizione “Exists” quando usi 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. Crea un elemento di ricerca Static Text chiamato “kwPrimary” (testo da trovare: “Erstbescheinigung”) e rendilo obbligatorio.
c. Crea un elemento di ricerca Object Collection chiamato “Checkmark” con le seguenti impostazioni: Type: Checkmark, Checkmark state: Checked, Minimum height: 10, Maximum width: 20, Maximum height: 20. Specifica che l’elemento si trova a sinistra dell’elemento “kwPrimary” ed è il più vicino a esso.
d. fai clic su Match.
  1. Copia e incolla il gruppo “PrimaryGroup”. Rinomina il gruppo copiato in “SecondaryGroup”. Questo gruppo sarà obbligatorio.
  2. Modifica il gruppo “SecondaryGroup”.
    a. Rinomina l’elemento “kwPrimary” in “kwSecondary” e imposta il testo da trovare su “Folgebescheinigung”. Specifica l’area di ricerca: sotto l’elemento “kwPrimary” del “PrimaryGroup”.
    b. Specifica l’area di ricerca per l’elemento “Checkmark”: a sinistra di “kwSecondary” e il più vicino a esso.
    c. L’elemento di ricerca Object Collection trova una raccolta di tutti gli oggetti idonei all’interno dell’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 Primary. Per evitare questo, escludi il segno di spunta primario (elemento “Checkmark” del “PrimaryGroup”) dall’area di ricerca per l’elemento “Checkmark” del “SecondaryGroup”.
    d. fai clic su Match.
Questa è la struttura che dovrebbero avere gli elementi di ricerca: AD_Tutorial_DE_TypeOfSickNote_Structure
  1. Apri la finestra Manage Fields, crea i field corrispondenti e mappali 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. elimina 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 e la firma del medico. Per prima cosa troveremo il riquadro che contiene i dati e poi 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 stiamo cercando contiene un’etichetta. Per trovarla, crea un elemento Static Text chiamato “kwDoctorTitle” (testo da trovare: “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 è delimitato da una combinazione di quattro separatori. Si trovano attorno all’elemento “kwDoctorTitle”. Tuttavia, dovremmo configurare gli elementi in modo che il programma possa trovarli anche se l’elemento “kwDoctorTitle” non è stato trovato. Nel gruppo “DataArea”, crea quattro elementi di ricerca Separator con le seguenti proprietà:
NameOrientationMinimum lengthSearch area
SeparatorRightVertical180A destra di “kwDoctorTitle”, il più vicino al bordo destro della pagina
SeparatorLeftVertical180A sinistra di “kwDoctorTitle”, a sinistra di “SeparatorRight” (nel caso in cui “kwDoctorTitle” non sia stato trovato), il più vicino a “SeparatorRight”, sotto “SeparatorRight” (fai clic sull’icona a destra del nome del separatore e seleziona Top Boundary of Region), escludi “SeparatorRight”
SeparatorBottomHorizontal200Sotto “kwDoctorTitle” (con regolazione di -10 punti), a destra di “SeparatorLeft”, a sinistra di “SeparatorRight”, il più vicino al bordo inferiore della pagina (questa impostazione sarà utile nel caso in cui “kwDoctorTitle” non sia stato trovato)
SeparatorTopHorizontal200Sopra “kwDoctorTitle”, a destra di “SeparatorLeft”, il più vicino a “TypeOfSickNoteGroup”, escludi “SeparatorBottom”
Dovresti anche disattivare 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 di farlo, 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 in parte 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 areaSopra “kwDoctorTitle”, escludi “Signature”
Search Conditions section of the Code EditorRSA: DoctorAreaGroup.DataArea.BoxRegion.Rect;
  1. Fai clic su Match e assicurati 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 field corrispondenti 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 che sono stati 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.