JavaScriptSQL (JSSQL)
Documentación

En esta sección la documentación de uso del motor JSSQL, del conversor JSBD_Conversor y del indexador JSBD_Indexador


Manual de Uso JSBD_Indexador

Otros manuales disponibles:

Índice

  1. Diseño Inicial
  2. Requisitos e instalación
  3. Ejemplo Básico de Uso
  4. Referencias de la clase JSBD_Conversor
    1. _JSBDbasedir
    2. _DOCSbasedir
    3. _log_arch
    4. _stop_words
    5. _largo_min
    6. _largo_max
    7. _frec_max
    8. _case_sensitive
    9. _acentos
    10. _numeros
    11. Indexar($archivo,$id)
    12. Volcar()
    13. GuardarConf($conf_arch)
    14. CargarConf($conf_arch)

I. Diseño Inicial

A continuación se muestra el diagrama de diseño inicial que describe la relación entre los distintos módulos utilizados para el funcionamiento de la base de datos en JavaScript.

Diagrama de Diseño inicial

El funcionamiento básico de la base de datos para JavaScript consiste en generar mediante un conversor de bases de datos y un indexador de documentos los archivos de definiciones, tablas, índices y demás componentes de la base de datos JSBD. Luego el motor JSSQL permite acceder de manera eficiente a la base de datos JSBD mediante consultas SQL.

Cada uno de estos componentes o subsistemas están conformados por una o más clases a ser usadas por los desarrolladores. El conversor y el indexador están desarrollados en PHP mientras que el motor JSSQL esta desarrollado íntegramente en JavaScript.

Una vez generada una base de datos JSBD, se pueden realizar consultas SQL mediante el motor JSSQL sin necesidad de acceder a ningún orto motor de bases de datos y sin necesidad de utilizar ningún lenguaje de scripting que funcione del lado del servidor (PHP, ASP, etc.).

A continuación se muestra el diagrama de clases que describe la relación entre las distintas clases PHP para la conversión de bases de datos e indexado de documentos.

Diagrama de Clases PHP

JSBD_Indexador permite indexar un conjunto de archivos, generando un índice invertido de palabras.

Este índice consiste en un vector asociativo accesible desde JavaScript con un elemento por palabra, cada palabra se asocia con el listado de identificadores de documentos donde aparece dicha palabra.

Los documentos se indexan de a uno mediante llamadas al método Indexar($archivo,$id), luego una vez indexados todos los documentos se invoca el método Volcar(), generándose el índice general.

También al indexar un documento se genera un archivo .js con el contenido textual del mismo accesible mediante el motor JSSQL.

Índice

II. Requisitos e instalación

La clase fue desarrollada para ser utilizada mediante PHP versión 5 o superior.

En el caso del indexador de archivos PDF es necesario tener instalada la librería xPDF (http://www.foolabs.com/xpdf/) ya que se realiza una llamada de consola al programa pdftotext para la conversión de archivos.

Índice

III. Ejemplo Básico de Uso

A continuación se muestra un ejemplo de cómo utilizar la clase para generar el índice invertido de una serie de documentos.

<?php
/*
 *  Este es un ejemplo de uso del objeto indexador para utilizar con JSSQL
 */

include('../cls_JSBD_Indexador.php');

$ind= new JSBD_Indexador_PDF;

//directorio de escritura de archivos .js
$ind->_basedir='temp';

//largo maximo de las palabras a indexar (maximo 20 caracteres)
$ind->_largo_max=20;

//largo minimo de las palabras a indexar (deben tener 3 o mas caracteres)
$ind->_largo_min=3;

//Las palabras que esten en mas del 60% de los documentos no se indexarán
// y seran agregadas al listado de StopWord
$ind->_frec_max=0.6;

//Nombre del archivo de log donde se imprimen resultados del proceso
$ind->_log_arch="temp/log.txt";

//listado de palabras que no se indexaran
$ind->_stop_words="ARTICULO,RESOLUCION";

//indexado de archivos
if (!$ind->Indexar("temp/arch1.pdf", 121)){
        print $ind->GetError();
        exit;
}

if (!$ind->Indexar("temp/arch2.pdf", 122)){
        print $ind->GetError();
        exit;
}

if (!$ind->Indexar("temp/arch3.pdf", 123)){
        print $ind->GetError();
        exit;
}

// Se pueden indexar asi tantos documentos como se quiera 

//generación del índice invertido
if ( !$ind->Volcar() ){
        print $ind->GetError();
        exit;
}
print "Generación del índice Exitosa";

?>

Índice

IV. Referencias de la clase JSBD_Indexador

A continuación se describen los métodos y atributos de la clase JSBD_Indexador

IV.i _JSBDbasedir

Directorio donde se guardará los archivos de índice en archivos .js.

Índice

IV.ii _DOCSbasedir

Directorio inicial donde se encuentran los documentos a ser indexados.

Índice

IV.iii _log_arch

Ubicación del archivo de Log con la descripción del proceso de conversión, en caso de estar vacío no se guarda el Log del proceso.

Índice

IV.iv _stop_words

Listado de palabras frecuentes que no deben indexarse, separadas por comas.

Índice

IV.v _largo_min

Largo mínimo de las palabras a ser indexadas si es 0 se indexan todas las palabras. Ejemplo: 3 (no se indexa "la" pero si "las" y "laaaa").

Índice

IV.vi _largo_max

Largo máximo de las palabras a ser indexadas, si es cero no se tiene en cuenta el máximo. Ejemplo: 5 (no se indexa "holaquetal" pero si "holas" y "hola").

Índice

IV.vii _frec_max

Frecuencia máxima permitida al momento de indexar una palabra. Las palabras que sobrepasen esta frecuencia no serán agregadas al índice. Aquellas que no se agregan al índice se agregan a la lista de Stop Words. Ejemplo: 0.6 (si la palabra aparece en más del 60% de los documentos indexados no se agrega al índice).

Índice

IV.viii _case_sensitive

Establece si se distingue entre mayúsculas y minúsculas. Ejemplo: false ("algo" y "ALGO" y "ALGo" son la misma palabra).

Índice

IV.ix _acentos

Establece si se distinguen acentos. Ejemplo: false ("álgo" y "algo" y "älgo" son la misma palabra).

Índice

IV.x _numeros

Establece si se incluyen los números en las palabras. Ejemplo: false ("algo123" se toma como "algo" y "algo1alga" como "algo" y "alga").

Índice

IV.xi Indexar($archivo,$id)

Convierte el archivo $archivo en un archivo .js accesible por JSSQL y agrega las palabras del contenido en el índice invertido asociándolas al Id asignado.

Es un método abstracto que debe ser implementado por las clases que heredan de esta.

Parámetros:
$archivo: Ruta del archivo a indexar.
$id: Identificador asociado al archivo (generalmente se asocia a un número de registro de una tabla).

Devuelve:
TRUE en caso de poder indexarse el archivo, FALSE en caso contrario y se agrega una descripción del error en el archivo de Log.

Índice

IV.xii Volcar()

Vuelca el contenido del índice generado en los archivos .js correspondientes dentro del directorio indicepo por _JSBDbasedir. Este método se invoca una vez indexados todos los archivos necesarios.

Devuelve:
TRUE en caso de éxito, FALSE en caso contrario y se agrega una descripción del error en el archivo de Log.

Índice

IV.xiii GuardarConf($conf_arch)

Guarda la configuración del indexador en un archivo de texto.

Parámetros:
$conf_arch: Nombre del archivo donde se guardará la configuración.

Devuelve:
TRUE en caso de éxito, FALSE en caso contrario y se agrega una descripción del error en el archivo de Log.

Índice

IV.xiv CargarConf($conf_arch)

Carga la configuración del indexador desde un archivo de texto.

Parámetros:
$conf_arch: Nombre del archivo desde donde se cargará la configuración.

Devuelve:
TRUE en caso de éxito, FALSE en caso contrario y se agrega una descripción del error en el archivo de Log.

La sintaxis del archivo de configuración es la misma que la utilizada por el archivo php.ini de PHP.

Un ejemplo de archivo de configuración válido:

; JSSQL - ARCHIVO DE CONFIGURACION DEL INDEXADOR DE DOCUMENTOS
; GENERADO: 05-08-2010 03:08
;
; CONFIGURACION GENERAL


; Directorio de almacenamiento de los archivos del indice (.js)
basedir="temp"

; Establece si se distinguen entre mayusculas y minusculas (true/false)
case_sensitive=false

; Establece si se distinguen acentos (true/false)
acentos=false

; Establece si se distinguen numeros (true/false)
numeros=false

; Largo máximo de las palabras a indexar
largo_max=20

; Largo mínimo de las palabras a indexar
largo_min=3

; Frecuencia máxima permitida para las palabras a indexar
frec_max=0.6

; Archivo de log
log_arch="temp/log.txt"

; Listado de palabras que no serán indexadas (separadas por coma)
stop_words="ABRIL"