Saltar al contenido principal
Esta sección presenta algunos ejemplos de reglas de extracción creadas con el editor de código, que ofrece más flexibilidad que la interfaz gráfica de usuario (consulta la sección Sintaxis para obtener una descripción detallada de la sintaxis utilizada).

Buscar la última instancia de una entidad con nombre

En este ejemplo, se usa una regla de extracción para encontrar el nombre de la organización del inquilino en un contrato de arrendamiento. Este nombre aparece después de los nombres de todas las demás organizaciones y no puede extraerse usando la configuración de la GUI, donde solo se puede seleccionar Instances > First. Sin embargo, puede usar una regla de extracción para buscar el nombre de la organización que precede inmediatamente a la palabra “Tenant” entre corchetes. Primero, localizamos la palabra clave “Tenant” como elemento de búsqueda auxiliar. Luego buscamos el nombre de la organización que aparece antes de esa palabra clave. En este ejemplo, hay dos tokens intermedios —un corchete de apertura y una comilla—, por lo que limitamos la distancia a tres tokens, dejando un margen de seguridad. Si sus documentos tienen más tokens intermedios que separan la palabra clave del nombre de la organización, aumente este número en consecuencia.

Regla para extraer la última instancia de organización

// Buscamos solo una instancia
~TenantName
// Buscar el nombre de la organización que aparece antes de la palabra clave "Tenant"
// y que esté separado de ella por no más de tres tokens
// Los tokens intermedios no deben contener el nombre de otra organización
[ t: @NEROrganization ]+ [ ~@NEROrganization ~@kw_Tenant ]{0,3} [ @kw_Tenant ]
=>
TenantName( t );

Ejemplo

Ejemplo que muestra la extracción del nombre del arrendatario

Extracción de un monto de dinero indicado tanto en palabras como en números

En este ejemplo, se utiliza una regla de extracción con expresiones regulares para localizar un monto de dinero que primero está escrito con palabras y luego en dígitos entre paréntesis, por ejemplo: Two Thousand One Hundred Forty-Seven Dollars and Sixty Cents ($2,147.60) Two Thousand One Hundred Forty-Seven Dollars and Sixty Cents (in numbers: $2,147.60)

Regla para extraer un monto de dinero

// La variable a recibe la entidad nombrada Money que no está en números
// y aún no ha sido asignada a ninguna otra instancia del elemento de búsqueda Money
[ a: @NERMoney( same ) ~@Money ~/\d+/ ]+
[ br: '(' ]
// El signo de interrogación significa que las palabras "in numbers" son opcionales
// Los símbolos ^ y $ significan que toda la cadena debe coincidir con la expresión regular
// La opción i significa que la coincidencia no distingue entre mayúsculas y minúsculas
( [ e1: /^in$/i ] [ e2: /^numbers$/i ] [ e3: ':' ]? )?
// La variable b recibe la entidad nombrada Money que está colocada dentro de corchetes
[ b: @NERMoney( same ) ~@Money ]+
=>
Money( a + br + e1 + e2 + e3 + b );

Ejemplo

Ejemplo que muestra la extracción de importes

Búsqueda de segmentos mediante palabras clave

En este ejemplo se emplean reglas de extracción para encontrar segmentos que la actividad Segmentation no puede detectar de forma confiable. Las reglas buscan palabras clave que inician o terminan un segmento y extraen el texto intermedio. Suponemos que nuestros documentos tienen encabezados de segundo nivel numerados y escritos en mayúsculas, por ejemplo: 1.1 PREMISES, 2.3 LIABILITY AND INDEMNITY, etc. También suponemos que ya hemos extraído los encabezados de primer nivel en un elemento de búsqueda llamado “kw_Heading1” (se omite la regla de extracción correspondiente por brevedad). Primero, buscamos palabras clave que inicien cada párrafo del documento y las extraemos en un elemento de búsqueda llamado “kw_Heading2”. A continuación, colocamos el texto entre dos palabras clave consecutivas en un elemento de búsqueda llamado “Segment”. En la versión actual de Advanced Designer, el editor de código solo está disponible para elementos de búsqueda utilizados para encontrar entidades con nombre. Como solución alternativa, para extraer texto como encabezados o segmentos mediante código, simplemente cree un elemento de búsqueda para cualquiera de las entidades con nombre admitidas (por ejemplo, Organization) e introduzca el código de la regla en el editor de código de ese elemento.

Regla para extraer encabezados de segundo nivel en el elemento de búsqueda kw_Heading2

// Buscar un encabezado de segundo nivel numerado que tenga hasta cinco palabras en mayúsculas
// El número de encabezado se puede encontrar como un solo token: 1.1
[ t1: /\d{1,2}\.\d{1,2}/ ] [ t2: <all_letters_capitalized> ]{1,5}
=>
kw_Heading2( t1 + t2 );
// El número de encabezado se puede encontrar como tres tokens separados: 1, punto, 1
[ t1: /\d{1,2}/ ] [ t2: '.' ] [ t3: /\d{1,2}/ ] [ t4: <all_letters_capitalized> ]{1,5}
=>
kw_Heading2( t1 + t2 + t3 + t4 );

Regla para extraer el segmento en el elemento de búsqueda Segment

// Encuentra el segmento de texto entre dos encabezados de sección consecutivos
// Excluye también los encabezados de primer nivel
[ @kw_Heading2 ] [ interval: ~@kw_Heading2 ~@kw_Heading1 ]+
=>
Root.Segment( interval );

Ejemplo

Ejemplo que muestra la extracción de segmentos En este ejemplo, las cadenas “3.1 FIRSTLY” y “3.2 SECONDLY” se extraen en el elemento de búsqueda kw_Heading2, y luego el texto comprendido entre dos instancias consecutivas del elemento de búsqueda kw_Heading2 se extrae en una instancia del elemento de búsqueda Segment.

Agrupar la información de cada entidad

En este ejemplo, se utilizan reglas de extracción para asegurarse de que los detalles de cada parte de un acuerdo se agrupen correctamente (es decir, que el nombre y la dirección de cada parte pertenezcan a una única instancia de grupo y no se dividan en varias instancias ni se mezclen con los detalles de la otra parte). La idea es encontrar información identificativa de una parte que siempre aparezca primero. Hay varias formas de hacerlo, según cómo estén redactados los acuerdos. En este ejemplo, suponemos que el nombre de cada organización siempre aparece primero, seguido de su dirección y su función en el acuerdo. Por lo tanto, haremos lo siguiente:
  1. Buscar nombres de organizaciones, crear una nueva instancia del elemento de búsqueda de grupo Party_Group para cada nombre encontrado y rellenar su elemento de búsqueda secundario denominado “Organization_Name”.
  2. Buscar la dirección y la función que estén separadas por no más de, por ejemplo, 20 tokens de cada instancia del nombre de la organización, acceder a la instancia de Party_Group que es el elemento primario del nombre de la organización y rellenar los elementos de búsqueda secundarios denominados “Address” y “Role” en esa instancia.
Los datos solo se buscarán dentro del segmento encontrado por la actividad Segmentation y pasado a la actividad Extraction Rules como un campo de entrada denominado “Parties_Segment”.

Regla para extraer el elemento de búsqueda Organization_Name

// Buscar el nombre de la organización y crear una nueva instancia de grupo para cada una
[ org: @NEROrganization( same ) ~@Party_Group.Organization_Name @Parties_Segment ]+
=>
// Crear una nueva instancia de Party_Group y completar Organization_Name
Party_Group.Organization_Name( org );

Regla para extraer el elemento de búsqueda de dirección

// Ahora buscar la dirección que esté separada por no más de 20 tokens
// del nombre de la organización
// y que aún no haya sido asignada a ninguna de las organizaciones en Party_Group
[ org: @Party_Group.Organization_Name( same ) ]+
[ ~@NERAddress ]{0,20}
[ t: @NERAddress( same ) ~@Party_Group.Address @Parties_Segment ]+
=>
// Acceder a la instancia de Party_Group que es el elemento principal del nombre de la organización
// y completar su elemento secundario Address
parent( obj( org )).Address( t );

Regla para extraer el elemento de búsqueda de rol

// Repetir lo mismo para el rol
// Para encontrar el rol, utilice palabras clave
[ org: @Party_Group.Organization_Name( same ) ]+
[ ~("Tenant" | "Landlord" | "Broker") ]{0,20}
[ t: "Tenant" | "Landlord" | "Broker" ~@Party_Group.Role @Parties_Segment ]+
=>
parent( obj( org )).Role( t );

Ejemplo

Los elementos de búsqueda se extraerán del siguiente modo: Example showing grouped data extraction En el formulario de datos, también puede ver que el nombre, la dirección y el rol de cada empresa están agrupados en instancias de grupo independientes: Example showing grouped data fields Los detalles de cada organización están agrupados, como lo indican los números de instancia entre corchetes.

Buscar la fecha y la hora juntas

En este ejemplo, se utiliza una regla de extracción para encontrar una combinación de hora y fecha. Primero, usamos un elemento de búsqueda llamado “Time” de tipo Value from Regular Expression (la expresión regular utilizada es [1]?\d:\d{2}\s+(([ap]\.m\.)|([AP]M))?). A continuación, buscamos una entidad con nombre Date ubicada cerca. Por último, concatenamos las secuencias de tokens encontradas y asignamos el resultado a un elemento de búsqueda llamado “TimeAndDate”.

Regla para extraer la fecha y la hora combinadas

// Usar un valor del elemento de búsqueda de expresión regular para encontrar la hora
// Usar @NERDate para encontrar una entidad nombrada de fecha cercana a la hora
[ time: @Time ~@TimeAndDate ]+ [ t: ~@NERDate ]{0,3} [ date: @NERDate( same ) ]+
=>
// Combinar los valores para escribirlos en un campo
// Solo se pueden combinar secuencias de tokens consecutivas, por lo que también se agrega el token auxiliar
TimeAndDate( time + t + date );

Ejemplo

Ejemplo que muestra la extracción de fecha y hora