Saltar al contenido principal
Una consulta especifica qué palabras o combinaciones de palabras debe contener un documento. El lenguaje de consulta que usan los scripts de extracción se basa en XML.
<Request>
<Query>
<Contain>
<Required>
<Form><Text>first</Text></Form>
</Required>
<Optional>
<Form><Text>second</Text></Form>
</Optional>
<Except>
<Query>
<Contain>
<Required>
<Form><Text>third</Text></Form>
</Required>
<Optional>
<Form><Text>fourth</Text></Form>
</Optional>
</Contain>
</Query>
</Except>
</Contain>
</Query>
</Request>
  • <Request> — Es el elemento raíz de una consulta.
  • <Query> — Es una consulta básica. Una consulta básica contiene un árbol de consulta que especifica determinadas condiciones que debe cumplir la combinación de palabras buscada. Una consulta básica puede formar parte de una combinación de formas de palabra dentro de una consulta de nivel superior. Es un elemento obligatorio.
  • <Contain> — Especifica qué palabras o combinaciones de palabras debe contener un documento. Una consulta solo puede tener un elemento <Contain>. Es un elemento obligatorio. Este elemento puede incluir cualquiera de los siguientes elementos, en cualquier orden y en cualquier cantidad:
    • <Required> — Especifica una forma de palabra o una subconsulta que una combinación de palabras debe contener. Es un elemento opcional.
    • <Optional> — Especifica una forma de palabra o una subconsulta que una combinación de palabras puede contener. Es un elemento opcional.
    • <Except> — Especifica una forma de palabra o una subconsulta que una combinación de palabras no debe contener. Es un elemento opcional.
Cada uno de los elementos anteriores debe contener uno de los siguientes elementos:
  • <Query> — Especifica si una secuencia de formas de palabra debe incluirse en la combinación de palabras o excluirse de ella.
  • <Form> — Especifica si una forma de palabra debe incluirse en una combinación de palabras o excluirse de ella.
El elemento <Contain> debe contener al menos un elemento <Required> o <Optional>.

Atributos de la etiqueta <Contain>

Se pueden especificar restricciones adicionales para una combinación de formas de palabra en los atributos de la etiqueta <Contain>.

Atributo MinCount para el número mínimo de elementos en una combinación de formas de palabra

El número mínimo de elementos de una combinación de formas de palabra puede especificarse mediante el atributo MinCount. Cada elemento es una forma de palabra o una cadena de formas de palabra devuelta por la subconsulta. El valor predeterminado de este atributo es 1. El valor de este parámetro no debe ser mayor que el número total de elementos <Required> y <Optional> de la combinación de formas de palabra especificada. Este parámetro resulta útil cuando una combinación de formas de palabra contiene uno o varios elementos <Optional>.
<Query>
<Contain>
<Optional>
<Form><Text>first</Text></Form>
</Optional>
<Optional>
<Form><Text>second</Text></Form>
</Optional>
</Contain>
</Query>
<Query>
<Contain MinCount="3">
<Optional>
<Form><Text>US</Text></Form>
</Optional>
<Required>
<Form><Text>President</Text></Form>
</Required>
<Optional>
<Form><Text>Barack</Text></Form>
</Optional>
<Required>
<Form><Text>Obama</Text></Form>
</Required>
</Contain>
</Query>
La consulta anterior encontrará las frases siguientes: “US President Barack Obama”, “President Barack Obama” y “US President Obama”.

Atributo KeepOrder para fijar el orden de los elementos en una combinación de formas de palabra

Para especificar que el orden de los elementos de una combinación de formas de palabra es fijo, puede usar un atributo KeepOrder de tipo booleano. El valor predeterminado del atributo es false.
<Query>
<Contain KeepOrder="true">
<Required>
<Form><Text>first</Text></Form>
</Required>
<Required>
<Form><Text>second</Text></Form>
</Required>
<Required>
<Form><Text>third</Text></Form>
</Required>
</Contain>
</Query>
La combinación “first third second third” no coincidirá con la consulta, aunque esta contiene una secuencia de palabras dispuestas en el orden requerido. KeepOrder también se aplicará a todos los elementos <Except>. Las palabras correspondientes a los elementos <Except> de una consulta no deben aparecer entre las palabras que dichos elementos separan en la consulta; sin embargo, pueden aparecer en cualquier otra posición fuera de las secuencias de consulta de orden fijo. Por ejemplo, si modificamos la consulta anterior colocando la forma de palabra “second” en un elemento <Except> en lugar de <Required>, un documento que contenga la combinación de formas de palabra “first third second” coincidirá con la consulta (pero la forma de palabra “second” no se incluirá en el resultado). Si además modificamos la consulta anterior eliminando el atributo KeepOrder, un documento que contenga la combinación de formas de palabra “first third second” no se incluirá en el resultado, porque la forma de palabra “second” no debe aparecer en ninguna parte del texto del documento.

Atributos MinDistance y MaxDistance para especificar distancias

Los atributos MinDistance y MaxDistance especifican la distancia mínima y máxima entre palabras en una consulta. Estos atributos no tienen valores predeterminados. Si no se especifica alguno de los dos atributos, no se aplicará ninguna limitación de distancia. La distancia entre palabras se mide en palabras y se calcula como la diferencia entre las posiciones de las dos palabras correspondientes. La distancia entre dos palabras contiguas es igual a 1 y, por tanto, el valor mínimo de cualquiera de los atributos es 1. MaxDistance debe ser mayor o igual que MinDistance. La distancia entre dos cadenas de palabras se calcula de la siguiente manera. Si las cadenas no se superponen, la distancia se calcula como la diferencia entre la posición de la palabra situada más a la izquierda de la cadena de la derecha y la posición de la palabra situada más a la derecha de la cadena de la izquierda. Si las cadenas se superponen, se considera que la distancia es 0. Por ejemplo, en la frase “The quick brown fox jumped over the lazy dog,” la distancia entre las cadenas “quick fox” y “lazy dog” es 4, y la distancia entre las cadenas “quick fox” y “brown lazy dog” es 0. Para los elementos <Except>, la distancia entre palabras se calcula de la siguiente manera:
  • Si KeepOrder=“true,” la palabra no debe aparecer a la distancia especificada de las palabras vecinas de la cadena (es decir, las palabras entre las que aparece en la consulta). Al mismo tiempo, la distancia entre las palabras vecinas del elemento <Except> debe estar dentro del rango especificado.
  • Si **KeepOrder=“**false,” la palabra no debe aparecer a la distancia especificada de ninguna otra palabra de la cadena.
<Query>
<Contain KeepOrder="true" MaxDistance="2">
<Required>
<Form><Text>sodium /Text></Form>
</Required>
<Except>
<Form><Text>tetraborate</Text></Form>
</Except>
<Optional>
<Form><Text>carborate</Text></Form>
</Optional>
<Optional>
<Form><Text>sulfate</Text></Form>
</Optional>
<Required>
<Form><Text>decahydrate</Text></Form>
</Required>
</Contain>
</Query>
Esta consulta encontrará frases como “sodium carborate decahydrate” y “sodium sulfate decahydrate”.
<Query>
<Contain KeepOrder="false" MaxDistance="2">
<Required>
<Form><Text>sodium /Text></Form>
</Required>
<Except>
<Form><Text>tetraborate</Text></Form>
</Except>
<Optional>
<Form><Text>carborate</Text></Form>
</Optional>
<Optional>
<Form><Text>sulfate</Text></Form>
</Optional>
<Required>
<Form><Text>decahydrate</Text></Form>
</Required>
</Contain>
</Query>
Esta consulta solo encontrará “sodium sulfate decahydrate”, porque la palabra “tetraborate” está dentro de las etiquetas <Except></Except> y la distancia máxima entre “tetraborate” y “sodium” es de dos palabras.

elemento <Form> para obtener la forma de una palabra

Una consulta para una forma de palabra se especifica mediante un elemento <Form>. Este elemento puede contener los siguientes elementos:
  • <Attributes> — Un elemento opcional que contiene una consulta sobre los atributos de una forma de palabra.
  • <Text> — Un elemento opcional que contiene el texto Unicode de una forma de palabra. Si no se especifica ninguna palabra en el texto, coincidirá cualquier palabra que cumpla la consulta de atributos, que en este caso es obligatoria.
  • Las condiciones de búsqueda adicionales para una forma de palabra pueden especificarse en los atributos de la etiqueta <Form>.
El tipo de búsqueda de formas de palabra se puede especificar en el atributo SearchType de la etiqueta <Form>. Este atributo puede tener los siguientes valores:
  • AllFormsSearch – El programa buscará todas las formas de la palabra especificada.
  • ExactSearch – El programa buscará solo la forma especificada de la palabra.
  • PrefixSearch – El programa buscará cualquier forma de palabra que empiece por la cadena especificada.
  • FuzzySearch – El programa realizará una búsqueda difusa de la palabra especificada. FuzzySearch puede ser útil si tiene motivos para creer que sus textos pueden contener errores de OCR y que ExactSearch no funcionará. FuzzySearch solo se puede utilizar con palabras que contengan al menos 3 caracteres. Para palabras de entre 3 y 5 caracteres de longitud, FuzzySearch permite 1 error de OCR. Para palabras de más de 5 caracteres, FuzzySearch permite hasta 2 errores de OCR.
  • FuzzyPrefixSearch – El programa realizará una búsqueda difusa de cualquier palabra que empiece por la cadena especificada.
El atributo SearchType es opcional y, de forma predeterminada, se establece en AllFormsSearch.

Atributo CaseSensitive para búsquedas con distinción entre mayúsculas y minúsculas

Para las búsquedas con distinción entre mayúsculas y minúsculas, puede usarse el atributo CaseSensitive de la etiqueta <Form>. Este atributo es opcional y, de manera predeterminada, se establece en false.
<Query>
<Contain KeepOrder="true">
<Required>
<Form SearchType="ExactSearch" CaseSensitive="true">
<Text>WHO</Text>
</Form>
</Required>
</Contain>
</Query>
Esta consulta buscará el acrónimo WHO exactamente con esta forma, lo que ayuda a evitar una gran cantidad de resultados redundantes que contienen “who”, “whom” o “whose”.

elemento <Attributes> para obtener atributos de formas de palabra

Una consulta de atributos de formas de palabra es una expresión lógica construida con los operadores AND, OR y NOT. NOT es un operador unario, mientras que AND y OR son n-arios. Los operandos de esta expresión lógica son valores de tipo Bool. Esta expresión lógica se escribe en forma de árbol. El resultado de la consulta serán las formas de palabra del texto de un documento que satisfagan esta expresión lógica. Para obtener atributos de formas de palabra, se utiliza un elemento <Attributes>. Este elemento puede contener los siguientes elementos:
  • <Attribute> — Este elemento contiene el texto del atributo de palabra requerido. Es una hoja del árbol de expresión lógica.
  • <Or> ­— El operador OR es un nodo del árbol.
  • <And> — El operador AND es un nodo del árbol.
  • <Not> — El operador NOT es un nodo del árbol.
El elemento <Not> se construye de la misma manera que el elemento <Attributes> y solo puede contener uno de los elementos anteriores. Los elementos <Or> y <And> deben contener al menos dos de los elementos anteriores. La etiqueta <Attribute> tiene un atributo opcional SearchType, que especifica el tipo de búsqueda de atributos. Este atributo puede tener los siguientes valores:
  • ExactSearch — El programa buscará el atributo exactamente en la misma forma en que se especifica en la consulta.
  • PrefixSearch — El programa buscará cualquier atributo que empiece por el texto especificado.
La búsqueda de atributos siempre distingue entre mayúsculas y minúsculas. El atributo SearchType se establece en ExactSearch de forma predeterminada. Supongamos que tenemos un documento en el que ya hemos identificado:
  • objetos NER (llamando a la función ExtractNerObjects)
  • formas de palabra de un diccionario de usuario llamado “dictionary” (llamando a la función ExtractWordsFromUserDictionary)
  • todos los objetos que satisfacen una expresión regular que hemos pasado como parámetro (llamando a la función ExtractRegularExpression)
Supongamos también que la colección resultante de estos objetos se llama “regExp.”
El nombre de la colección puede utilizarse en consultas XML realizadas sobre el documento indexado. También se puede acceder a la propia colección resultante por su nombre.
<Query>
<Contain>
<Required>
<Form>
<Attributes>
<Attribute>regExp1</Attribute>
</Attributes>
</Form>
</Required>
<Required>
<Form>
<Attributes>
<And>
<Attribute>NerOrg1</Attribute>
<Not>
<Attribute> dictionary1</Attribute>
</Not>
</And>
</Attributes>
</Form>
</Required>
</Contain>
</Query>
Esta consulta buscará una frase de dos palabras, en la que la primera palabra debe coincidir con la expresión regular especificada y la segunda debe ser un nombre de organización permitido. Los dígitos que siguen a los nombres de los atributos sirven para identificar las palabras requeridas en los objetos detectados de varias palabras que se han indexado con los atributos correspondientes. Por ejemplo, una expresión regular llamada “date” puede encontrar una fecha con el formato “May 31, 2019.” Entonces, date 1 corresponderá a la palabra “May,” date 2 corresponderá a “31,” y date 3 corresponderá a “2019.”

elemento <FormSet> para obtener un conjunto de formas de palabra

Una consulta para varias formas de palabra se especifica mediante un elemento <FormSet>. Este tipo de consulta combina varias consultas de una sola forma mediante OR. Equivale a una consulta <Query> en la que todas las subconsultas son consultas opcionales de formas de palabra. Sin embargo, en una consulta <FormSet> puede especificar una consulta de atributos común a todas las formas. Esto permite realizar búsquedas más eficientes cuando se usa ExactSearch para encontrar todas las formas de palabra, hay una consulta de atributos para cada forma y todas esas consultas de atributos comparten algún fragmento común. Un elemento <FormSet> contiene los siguientes elementos:
  • <Attributes> — Es un elemento opcional que contiene una consulta para los atributos de la forma. Esta consulta se combina con las consultas de atributos de las formas mediante AND.
  • <Form> — Es un elemento obligatorio que contiene una consulta para una forma de palabra. Un elemento <FormSet> debe contener al menos un elemento <Form>.

Consulta de ejemplo para extraer direcciones en XML

El resultado de una consulta de extracción de direcciones será una cadena de texto que contendrá la primera palabra del país, la primera palabra de la calle, la primera palabra de la ciudad, la primera palabra del estado y la primera palabra del código postal (en ese orden, siempre que no estén separadas entre sí por más de 5 palabras). La cadena de palabras consecutivas que forma un componente (por ejemplo, el nombre de una calle) también se numera en el índice, empezando por 1.
var xmlQuery = "<Request> \
<Query> \
     <Contain MaxDistance=\"5\" KeepOrder=\"true\"> \
          <Optional> \
               <Form><Attributes><Attribute>NerCountry1</Attribute></Attributes></Form> \
          </Optional> \
          <Optional> \
               <Form><Attributes><Attribute>NerStreet1</Attribute></Attributes></Form> \
          </Optional> \
          <Optional> \
               <Form><Attributes><Attribute>NerCity1</Attribute></Attributes></Form> \
          </Optional> \
          <Optional> \
               <Form><Attributes><Attribute>NerState1</Attribute></Attributes></Form> \
          </Optional> \
          <Required> \
               <Form><Attributes><Attribute>NerZipCode1</Attribute></Attributes></Form> \
          </Required> \
     </Contain> \
</Query> \
</Request>";
El resultado de una consulta para extraer direcciones se guarda en un campo repetible xmlQueryResult: this.RunQueryAndSaveToField( xmlQuery, “query”, “xmlQueryResult” );