Últimos Cambios |
||
Blog personal: El hilo del laberinto |
Última Actualización: 30 de Enero de 2003 - Jueves
ZOPE incluye un potente motor de indexación y búsqueda de objetos, llamado ZCatalog. En este documento se describirá con detalle cómo utilizar esas funcionalidades para implementar un buscador capaz de indexar páginas en español, con las siguientes características:
Esta funcionalidad es interesante porque la ortografía, tanto en las páginas como en las búsquedas, no siempre es muy correcta...
ZCatalog realiza la indexación invocando métodos o atributos de los objetos a indexar. Es decir, para indexar el código fuente de un documento DTML, podemos indexar el atributo "raw", por ejemplo.
Asimismo, se aplican como siempre los mecanismos de adquisición de ZOPE, por lo que podemos tener definido un método a nivel global del sitio web, y ejecutarlo sobre cada uno de los objetos a indexar, sin que éstos tengan que proporcionar ningún tipo de soporte explícito adicional.
Los pasos que hay que dar para crear nuestro sistema de indexación serán:
Al reindexar los objetos, ZCatalog intentará indexar el método "castellano", que no existe en los objetos normales pero que se "adquiere" del directorio raíz, mediante los mecanismos normales y automáticos de ZOPE.
El script Python en sí es:
texto=context(indexando=1) # Eliminación de HTML # http://www.argo.es/~jcea/artic/python-cadenas.htm # Si en vez de un TextIndex se usa un ZCTextIndex, éste ofrece ya la modalidad # de 'HTMLSplitter', y si la usamos podemos eliminar esta parte. s="" a=b=0 while a>=0 : a=texto.find("<",b) if a>=0 : s+=texto[b:a] b=texto.find(">",a)+1 if b : s+=texto[b:] if s: texto=s # Normalizacion de palabras # Lo que sigue no consume apenas CPU for i,j in (('a','á'),('e','é'),('i','í'),('o','ó'),('u','ú')) : texto=texto.replace(j,i) i=i.upper() j=j.upper() texto=texto.replace(j,i) return texto
En la primera línea se procesa y genera la "vista" del objeto a indexar. A dicho objeto se le pasa la variable "indexando", que le advierte de que el resultado va a ser indexado. La mayoría de los objetos van a ignorar esa información, pero los objetos "inteligentes" pueden reconocerla para, por ejemplo, obviar el control de sesiones, creación de menús, o acciones colaterales. Es algo que el indexador indica y que el objeto indexado puede procesar o no, de forma discreccional.
En la siguiente sección de código se buscan y eliminan etiquetas HTML. Una etiqueta HTML empieza con un signo "menor" ("<") y termina con un signo "mayor" (">").
Es tremendamente importante que todos los signos "menor" ("<") presentes en el documento se correspondan a etiquetas HTML. Si ese signo debe aparecer en el texto en sí, debe usarse su "HTML encoding", que es "<". Es importante también que el primer signo "mayor" (">") tras un "menor" se corresponda escrupulosamente con el cierre de la etiqueta HTML. Si es necesario que en medio de la etiqueta aparezca este símbolo, debe usarse también su "HTML encoding", que es ">".
En el último segmento de código se eliminan las tildes, para que se reconozcan como iguales palabras como "solo" y "sólo".
Con estos pasos y este código, tendremos nuestro web indexado en un correcto castellano, y sin contaminar debido al HTML. A la hora de buscar es importante que el script de búsqueda elimine también las tildes, para lo que se puede usar este mismo código.
Más información sobre los OpenBadges
Donación BitCoin: 19niBN42ac2pqDQFx6GJZxry2JQSFvwAfS