Está en la página 1de 14

TOMO I

Apndices tcnicos

APNDICE A: INDEXACIN DE INFORMACIN. LUCENE


1. INTRODUCCIN: INDEXACIN DE INFORMACIN
El desarrollo y crecimiento masivo de las redes de computadoras y medios
de almacenamiento a lo largo de los ltimos aos, ha motivado la aparicin de
un creciente inters por los sistemas de clasificacin automtica de documentos.
Estos sistemas realizan diferentes operaciones de clasificacin basndose en el
anlisis del contenido del texto de los documentos que procesan. La mayora de
las tcnicas de anlisis y representacin de documentos utilizadas en la
actualidad

en

los

sistemas

de

clasificacin,

se

basan

en

criterios

fundamentalmente estadsticos, centrados en frecuencias de aparicin de


trminos en documentos.
Dentro de los sistemas de clasificacin de documentos podemos distinguir
los sistemas de recuperacin de texto, que seleccionan aquellos textos o
documentos que son adecuados a una necesidad del usuario entre un conjunto
ms amplio, y sistemas de agrupamiento de textos que, a partir de un conjunto
de textos, construyen subconjuntos de stos con contenidos semejantes.
Si trabajamos con este tipo de sistemas, debemos centrarnos en tres
cuestiones fundamentales:

Mtodo de representacin: forma en que sern representados


internamente los documentos.

Mtodo de anlisis: proceso que permitir obtener las representaciones


concretas de los documentos a partir del anlisis de su contenido.

Motor de bsqueda para un SRI con agrupamiento

97

TOMO I

Apndices tcnicos

Mtodo de clculo de similitud: entre las representaciones de los


documentos y la representacin del otro elemento de la operacin de
clasificacin.

En la figura que se muestra a continuacin se representa la operacin de


recuperacin de textos centrada en las tres cuestiones descritas. En ella se puede
observar que, en este caso, el elemento especfico de la operacin de
clasificacin es una consulta de usuario; es decir, que los documentos que se
recuperaran seran aquellos cuya representacin interna presentase una mayor
similitud con la de la consulta del usuario.

Consulta del
usuario

Documentos de
texto

Anlisis

Anlisis

Representacin
de Documentos

Representacin
de consulta

Clculo de
similitud

Documentos
recuperados

Motor de bsqueda para un SRI con agrupamiento

98

TOMO I

Apndices tcnicos

Una vez introducida la recuperacin de textos, diremos que el trmino de


indexacin hace referencia a un mtodo que engloba la definicin de uno de
representacin

y uno de anlisis. El trmino proceso de indexacin hace

referencia al proceso de anlisis de documentos para

la obtencin de una

representacin concreta de los mismos.


Existe una serie de elementos que se pueden utilizar para la definicin de
mtodos de indexacin y clculo de similitud. En concreto, el modelo del
espacio vectorial proporciona las bases para definir un mtodo de
representacin y clculo de similitud.
En el modelo del espacio vectorial se propone la representacin de cada
documento mediante un vector cuyos componentes son los pesos asociados a
los trminos utilizados en la representacin.
Para realizar el proceso de indexacin utilizando una representacin
basada en el espacio vectorial se pueden utilizar los siguientes elementos, que
permiten obtener la representacin interna de los documentos mediante un
anlisis automtico de su contenido:
1. Peso de los trminos
El concepto de poder de resolucin de un trmino proporciona una base
para los mtodos de indexacin basados en frecuencia de aparicin de trminos.
El poder de resolucin de un trmino proporciona informacin acerca de su
adecuacin como trmino de indexacin.
2. Listas de parada
Las listas de parada(stoplists) se utilizan en el anlisis de los documentos
para la eliminacin de una serie de palabras que no resultan tiles para la
obtencin de trminos de indexacin, por ejemplo, de, en, el, etc.
3. Extraccin de races
Los algoritmos de extraccin de races(stemming), o de eliminacin de
sufijos, se encuentran orientados a obtener un nico trmino a partir de
Motor de bsqueda para un SRI con agrupamiento

99

TOMO I

Apndices tcnicos

diferentes palabras que constituyen, esencialmente, variaciones morfolgicas


con un mismo significado. El resultado del algoritmo debe ser una misma
forma regular para las diferentes variantes morfolgicas de una palabra, que no
tiene por qu ser, necesariamente, la raz lingstica.
4. Frases de trminos
Las frases de trminos se orientan a la obtencin de trminos de
indexacin con un significado ms preciso que el de los trminos obtenidos
directamente a partir de las palabras individuales. Una frase de trminos es una
tupla de trminos y constituye en s misma un nuevo trmino de indexacin.
5. Thesaurus
Un thesaurus proporciona una agrupacin o clasificacin de trminos en
un determinado dominio o rea en categoras denominadas clases. Permite
recuperar documentos que son relevantes a la consulta de un usuario, aunque
no aparezcan en ellos los trminos de la consulta, pero si sinnimos de estos.

2. LUCENE
2.1. INTRODUCCIN
Lucene es una novedosa herramienta que permite tanto la indexacin
cmo la bsqueda de documentos. Creada bajo una metodologa orientada a
objetos e implementada completamente en Java, no se trata de una aplicacin
que pueda ser descargada, instalada y ejecutada sino de una API flexible, muy
potente y realmente fcil de utilizar, a travs de la cual se pueden aadir, con
pocos esfuerzos de programacin, capacidades de indexacin y bsqueda a
cualquier sistema que se est desarrollando.

Originalmente escrita por Doug Cutting, en Septiembre de 2001 pas a


formar parte de la familia de cdigo abierto de la fundacin Jakarta. Desde
Motor de bsqueda para un SRI con agrupamiento

100

TOMO I

Apndices tcnicos

entonces, debido a su mayor disponibilidad, ha atrado a un gran nmero de


desarrolladores, incluso empresas como Hewlett Packard, FedEx, etc. usan, o al
menos lo han evaluado.

Existen otras herramientas, a parte de Lucene, que permiten realizar la


indexacin y bsqueda de documentos pero dichas herramientas han sido
optimizadas para usos concretos, lo que implica que el intentar adaptar dichas
herramientas a un proyecto especfico sea una tarea realmente difcil. La idea
que engloba Lucene es completamente diferente, ya que su principal ventaja es
su flexibilidad, que permite su utilizacin en cualquier sistema que lleve a cabo
procesos de indexacin.

2.2. CARACTERSTICAS
A continuacin se detallan algunas caractersticas que hacen de Lucene
una herramienta flexible y adaptable:
Indexacin incremental vs indexacin por lotes.
El trmino de indexacin por lotes se utiliza para referirse a aquellos
procesos de indexacin, en los cuales, una vez que ha sido creado el ndice para
un conjunto de documentos, el intentar aadir algunos documentos nuevos es
una tarea difcil por lo que se opta por reindexar todos los documentos de
nuevo. Sin embargo en la indexacin incremental se pueden aadir documentos
a un ndice ya creado con anterioridad de forma fcil. Lucene soporta ambos
tipos de indexacin.
Origen de datos.
Muchas herramientas de indexacin slo permiten indexar ficheros o
pginas web, lo que supone un serio inconveniente cuando se tiene que indexar
contenido almacenado en una base de datos. Lucene permite indexar tanto

Motor de bsqueda para un SRI con agrupamiento

101

TOMO I

Apndices tcnicos

documentos y pginas web como el contenido procedente de una base de


datos.
Contenido Etiquetado.
Algunas herramientas, tratan los documentos como simples flujos de
palabras. Pero otras como Lucene permiten dividir el contenido de los
documentos en campos y as poder realizar consultas con un mayor contenido
semntico. Esto es, se pueden buscar trminos en los distintos campos del
documento concedindole ms importancia segn el campo en el que aparezca.
Por ejemplo, si se dividen los documentos en dos campos, ttulo y contenido,
puede concederse mayor importancia a aquellos documentos que contengan los
trminos de la bsqueda en el campo ttulo.

Tcnica de indexacin.
Existen palabras tales como a, unos, el, la etc.

que

aaden poco

significado al ndice, son palabras poco representativas del documento. Al


eliminar estas palabras del ndice se reduce considerablemente el tamao del
mismo as como el tiempo de indexacin. Estas palabras estn contenidas en lo
que se denomina lista de parada, que es la tcnica de indexacin contemplada
por Lucene.
Concurrencia.
Lucene gestiona que varios usuarios puedan buscar en el ndice de forma
simultnea as como tambin que un usuario modifique el ndice al mismo
tiempo que otro lo consulta.
Eleccin del idioma
Tal y como ya se indic con anterioridad Lucene trabaja con listas de
parada, las cuales son proporcionadas por el desarrollador que est utilizando
Lucene, esto permite escoger el idioma a utilizar.

Motor de bsqueda para un SRI con agrupamiento

102

TOMO I

Apndices tcnicos

2.3. COMO OBTENER LUCENE


Como la mayora de los proyectos de Jakarta, Lucene se distribuye en
forma de ficheros binarios precompilados o de cdigo fuente. Ambas
distribuciones pueden ser descargadas de la pgina oficial de Jakarta,
http://jakarta.apache.org/lucene, as como tambin una demo que permite ver
el funcionamiento de Lucene.

2.4. FUNCIONALIDAD BSICA


Como ya se ha mencionado anteriormente, en la introduccin de este
anexo, Lucene es una herramienta que permite tanto la indexacin cmo la
bsqueda de documentos. A continuacin, y puesto que indexacin y bsqueda
son dos operaciones muy generales, que abarcan multitud de aspectos, se trata
en detalle cada una de ellas.

2.4.1. Indexacin De Documentos


Creacin de un ndice
La creacin de un ndice constituye el punto de partida para el trabajo con
Lucene, puesto que una vez que ha sido creado, se irn aadiendo todos
aquellos documentos susceptibles de ser indexados.

El sencillo programa que se muestra a continuacin, CrearIndice.java,


construye un ndice vaco, para lo cual simplemente crea un objeto IndexWriter.

Motor de bsqueda para un SRI con agrupamiento

103

TOMO I

Apndices tcnicos

public class CreateIndice {


public static void main(String[] args) throws Exception {
String indexPath = args[0];
IndexWriter writer;
writer = new IndexWriter(indexPath, null, true);
writer.close();
}
}

La clase IndexWriter se utiliza tanto para la creacin de ndices como para


su mantenimiento. Cuando se crea un objeto de esta clase, como se puede
observar en el ejemplo, al constructor se le pasan tres parmetros. Puesto que en
este caso, lo que nos interesa es la creacin del ndice, solamente son relevantes
el primero y el tercero: el primero representa el path dnde ser almacenado el
ndice(en el ejemplo, se introduce en lnea de comandos)y con el valor del
tercero establecido a true, indicamos que lo que estamos es creando el ndice y
no abrindolo para su mantenimiento. El segundo de los parmetros se
establece a un valor null.

El mtodo close() se llama para liberar todos los recursos asociados a la


creacin del ndice.

Motor de bsqueda para un SRI con agrupamiento

104

TOMO I

Apndices tcnicos

Aadir documentos a un ndice


Una vez que tenemos un ndice creado, est listo para empezar a aadirle
documentos. La siguiente porcin de cdigo, IndexFile.java, muestra cmo
podemos

llevar

cabo

esta

operacin.

Para

cada

uno

de

los

documentos(nombrados en la lnea de comandos), se crea un objeto Document


y posteriormente se llama al mtodo addDocument del IndexWriter para
aadirlo al ndice.

public class IndexFiles {


public static void main(String[] args) throws Exception {
String indexPath = args[0];
IndexWriter writer;
writer = new IndexWriter(indexPath, new SimpleAnalyzer(), false);
for (int i=1; i<args.length; i++) {
System.out.println("Indexing file " + args[i]);
InputStream is = new FileInputStream(args[i]);
Document doc = new Document();
doc.add(Field.UnIndexed("path", args[i]));
doc.add(Field.Text("body", (Reader) new InputStreamReader(is)));
writer.addDocument(doc);
is.close();
};
writer.close();
}
}

Motor de bsqueda para un SRI con agrupamiento

105

TOMO I

Apndices tcnicos

Los documentos constituyen la unidad de indexacin y bsqueda en


Lucene. Un objeto Document representa un nico documento, modelado como
un conjunto de campos(Fields) de la forma <nombre,valor>.

Cuando creamos un objeto Document, la llamada al constructor, como se


puede observar en el ejemplo, no requiere ningn parmetro y construye un
nuevo documento sin ningn campo. Una vez creado el documento, para
aadirle campos, se utiliza el mtodo add, al que pasamos el campo como
parmetro.

A la hora de crear un objeto Field, tenemos que tener en cuenta una serie
de importantes consideraciones, ya que algunas de las decisiones que se tomen
en este punto afectarn en los posteriores procesos de bsqueda sobre el ndice.
Cuando creamos un objeto Field, aparte del nombre de dicho campo y de su
valor, debemos proporcionar tres valores booleanos adicionales que indican lo
siguiente:

El primero de ellos indica si el campo ser indexado para las


bsquedas. En determinados casos, puede interesarnos almacenar
campos de un documento que no son relevantes para los procesos
de bsqueda.

El segundo de los valores indica si el valor de un campo ser


tokenizado previamente a que sea indexado; es decir, en caso de
que este parmetro sea true el valor de dicho campo es convertido
en una secuencia de tokens o trozos de texto.

Finalmente se puede indicar si se desea que el valor de un campo


sea almacenado en el ndice. En el caso de que el contenido del
campo sea razonablemente pequeo, Lucene permite que ste sea
almacenado en el ndice. Con los campos almacenados en el ndice,
en lugar de utilizar el Documento para localizar el fichero o los
datos originales, se pueden recuperar directamente del ndice.

Motor de bsqueda para un SRI con agrupamiento

106

TOMO I

Apndices tcnicos

Una vez construido el documento con los campos deseados, ste se aade
al ndice a travs del mtodo addDocument de IndexWriter. Esta clase ya ha
sido comentada para la operacin de creacin del ndice, pero en este caso se
utiliza para la manipulacin de uno ya creado. Cuando queremos abrir un
ndice para aadir documentos, al constructor de IndexWriter le pasamos el
nombre de dicho ndice, un objeto Analizer, y un valor booleano establecido a
false, para indicar que no estamos creando un ndice sino abriendo uno ya
existente.

Un objeto Analyzer se crea para analizar un texto y en base a un


determinado criterio, obtener la representacin interna de dicho texto en el
ndice. Los Analizadores preprocesan el texto de entrada convirtiendo ste en
una secuencia de tokens y se utilizan tanto al aadir un documento a un ndice
como en los procesos de bsqueda, puesto que el texto o criterio de bsqueda
debe de ser procesado de la misma manera que el contenido de los campos del
documento cuando ste es aadido al ndice.
Uno de los criterios de anlisis ms utilizados es el de la lista de parada,
que consiste en eliminar del texto una serie de palabras que no resultan tiles
para la obtencin de trminos tanto de indexacin como de bsqueda, como por
ejemplo, de, en, el, etc. En este caso, el objeto que se pasa al constructor de
IndexWriter, es un objeto StopAnalyzer, subclase de Analyzer.
Cualquier aplicacin que haga uso de Lucene debe proporcionar los datos
que van a ser indexados bien como un String o bien como InputStream. Es por
esta razn que Lucene permite la indexacin de datos, no slo de ficheros, sino
de cualquier fuente(bd,etc.) En el caso de que los documentos se encuentren
almacenados en ficheros, se utiliza FileInputStream para recuperarlos; En caso de
que se encuentren almacenados en una base de datos, se hace uso de
InputStream y de manera similar, se puede recuperar contenido HTML, por
ejemplo, utilizando FilterInputStream, que permite la eliminacin de etiquetas.

Motor de bsqueda para un SRI con agrupamiento

107

TOMO I

Apndices tcnicos

2.4.2. Bsqueda De Documentos


La bsqueda de documentos constituye la funcionalidad principal
proporcionada por Lucene. Para ello aporta mltiples clases y mtodos para la
representacin de consultas y para buscar en el ndice aquellos documentos que
son relevantes y cumplen con los criterios de la bsqueda. El cdigo que se
muestra a continuacin, Search.java, es un sencillo ejemplo de cmo buscar en
un ndice.

public class Search {


public static void main(String[] args) throws Exception {
String indexPath = args[0], queryString = args[1];
Searcher searcher = new IndexSearcher(indexPath);
Query query = QueryParser.parse(queryString, "body",
new SimpleAnalyzer());
Hits hits = searcher.search(query);
for (int i=0; i<hits.length(); i++) {
System.out.println(hits.doc(i).get("path") + "; Score: " +
hits.score(i));
};
}
}

Las tres clases ms importantes que proporcionan mtodos relacionados


con la bsqueda de documentos indexados son Search, Hits y Query(con sus
respectivas subclases)

Motor de bsqueda para un SRI con agrupamiento

108

TOMO I

Apndices tcnicos

La clase Searcher es una clase abstracta y constituye la base para cualquier


bsqueda en un ndice de documentos. Declara mtodos que son
implementados

por

sus

subclases,

como

por

ejemplo,

IndexSearcher,

proporcionando as la forma de acceder y recuperar informacin indexada.


En el caso de Search.java, se crea un objeto de este tipo, pasando al
constructor un nico parmetro, que no es otro que el path dnde se encuentra
el ndice de documentos.
El mtodo ms importante de esta clase es el mtodo search(), que
devuelve todos aquellos documentos que cumplen con las condiciones de la
bsqueda. Su sintaxis es la siguiente:
Hits search (Query query)
en la cual se corrobora que junto con Searcher, a la hora de realizar bsquedas
de documentos en un ndice destacan Hits y Query.

La clase Query, al igual que Searcher es una clase abstracta siendo


QueryParser su subclase ms importante, de la cual el mtodo que ms
funcionalidad proporciona a la bsqueda de documentos es parse(). Este
mtodo partiendo de una cadena de entrada, del campo del documento dnde
se desea realizar la bsqueda y de un analizador7, obtiene como parmetro de
salida una Query. Una Query est formada por una serie de clusulas de la
forma:
1. Toda clusula debe ir predecida de:
Un smbolo ms(+) o un smbolo menos(-) indicando si la clusula
es requerida o es rechazada, o
Un termino seguido de una coma, indicando el campo dnde se va
a realizar la bsqueda, lo cual permite la construccin de Querys
que implementen bsquedas en varios campos de un documento
indexado.
2. Adems de:
7

Los analizadores ya han sido explicados en el apartado anterior.

Motor de bsqueda para un SRI con agrupamiento

109

TOMO I

Apndices tcnicos
Un trmino, indicando todos los documentos que contienen a
dicho trmino, o
Una Query anidada, encerrada entre parntesis.

En formato BNF, la gramtica que resume esto, sera:


Query ::= ( Clause )*
Clause ::= ["+", "-"] [<TERM> ":"] ( <TERM> | "(" Query ")" )
Una vez que hemos obtenido una Query, pasada como argumento al
mtodo search(), ste devuelve un objeto Hits, que representa una coleccin
ordenada de documentos(podemos pensar en un Hits como en un Vector,
ordenado, claro). El orden viene determinado por la relevancia de cada
documento en la bsqueda implementada por la Query.

De esta manera habremos obtenido aquellos documentos que cumplen con


las expectativas de la bsqueda introducida.

Motor de bsqueda para un SRI con agrupamiento

110

También podría gustarte