Saltar al contenido principal
Versión: 20 R7 BETA

GET TEXT KEYWORDS

GET TEXT KEYWORDS ( texto ; arrPalabrasClaves {; *} )

ParámetroTipoDescripción
textoTextTexto original
arrPalabrasClavesText arrayArray que contiene las palabras claves
*OperadorSi se pasa = palabras únicas

Descripción

El comando GET TEXT KEYWORDS divide todo el texto en palabras individuales y crea, para cada palabra obtenida, un elemento en el array texto arrPalabrasClaves para cada palabra.

4D utiliza el mismo algoritmo para dividir el texto en palabras individuales que utiliza para crear los Índice de palabras claves. Este algoritmo está basado en la librería ICU. Para más información sobre cómo se separa un texto en palabras, consulte la siguiente dirección: http://userguide.icu-project.org/boundaryanalysis.

Nota: por petición de los usuarios, se introdujo una excepción para el francés y el italiano: el apóstrofe (') seguido por una vocal o la letra "h" se considera como un separador de palabra. Por ejemplo, las cadenas "L'homme" o "l'arbre" se dividen en "L’"+"homme" y "l'"+"arbre".

El algoritmo utilizado difiere si la opción Considerar sólo caracteres no alfanuméricos para las palabras claves está seleccionada en las propiedades de la base.

En el parámetro texto, pase el texto original a dividir en palabras. Este texto puede tener estilo, en cuyo caso las etiquetas de estilo se ignoran.

Para el parámetro arrPalabrasClaves, el comando llena este array texto con las palabras extraídas del texto.

Si pasa el parámetro opcional *, el comando sólo almacena cada palabra diferente una vez en arrPalabrasClaves. Por defecto, si este parámetro se omite, todas las palabras extraídas del texto se guardan en el array, incluso si aparecen varias veces.

Este comando permite efectuar de manera simple las búsquedas entre los registros que contienen grandes cantidades de texto garantizando utilizar las mismas palabras claves que 4D. Por ejemplo, imagine que tiene un texto que contiene "10,000 Jean-Pierre BC45". Si este texto se divide en las palabras claves "10,000" + "Jean-Pierre" + "BC45", el array contendrá 4 elementos. Entonces es fácil hacer un bucle en este array para encontrar los registros que contienen una o más de estas palabras clave utilizando el operador % (ver ejemplos).

Ejemplo 1

En un formulario que contiene un área de búsqueda, los usuarios pueden introducir una o más palabras. Cuando un usuario valida este formulario, buscamos los registros cuyo campo Micampo contenga al menos una de las palabras claves introducidas por el usuario.

  // vSearch es la variable del área de búsqueda en el formulario
 GET TEXT KEYWORDS(vSearch;arrSearch;*)
  //* en el caso de que un usuario introduzca la misma palabra más de una vez
 CREATE SET([MiTabla];"Totalfound")
 $n:=Size of array(arrSearch)
 For($i;1;$n)
    QUERY([MiTabla];[MiTabla]MiCampo % arrSearch{$i})
    CREATE SET(([MiTabla];"encontrado")
    UNION("Totalfound";"encontrado";"Totalfound")
 End for
 USE SET("Totalfound")

Ejemplo 2

En el mismo formulario que antes, buscamos los registros donde el campo MiCampo contenga todas las palabras claves introducidas por el usuario.

  // vSearch es la variable del área de entrada en el formulario
 GET TEXT KEYWORDS(vSearch;arrSearch;*)
 $n:=Size of array(arrSearch)
 QUERY([MiTabla];[MiTabla]MiCampo >=0;*)
  // inicializar la búsqueda = todos los registros
 For($i;1;$n)
    QUERY([MyTable];&;[MyTable]MyField % arrSearch{$i};*)
  // añadir el criterio
 End for
 QUERY([MiTabla]) //búsqueda

Ejemplo 3

Para contar las palabras de un texto:

 GET TEXT KEYWORDS(vText;arrWords) // todas las palabras
 $n:=Size of array(arrWords)
 GET TEXT KEYWORDS(vText;arrWords;*) // palabras diferentes
 $m:=Size of array(arrWords)
 ALERT("Este texto contiene "+String($n)+" palabras de "+String($m))

Ver también

DISTINCT VALUES