tag:blogger.com,1999:blog-85777290630544948272024-03-08T17:30:09.546+01:00Aplicaciones Documentales de la Recuperación de InformaciónAplicaciones prácticas de la recuperación de información para su mejor explotación documentalm4reloxhttp://www.blogger.com/profile/17813464729615565056noreply@blogger.comBlogger17125tag:blogger.com,1999:blog-8577729063054494827.post-77906889413148555812011-11-08T09:55:00.037+01:002018-12-04T11:28:27.186+01:0016.- Sistemas de recuperación masiva basados en técnicas de sindicación de contenidos<div style="text-align: justify;">
Las técnicas de lectura y recuperación de canales de sindicación hacen posible el desarrollo de una nueva generación de buscadores especializados, muy parecidos conceptualmente a los tradicionales motores de búsqueda como Google, Yahoo, Bing y muy distintos en cuanto a su alimentación contextual y corpus documental. La principal diferencia reside en la selección de las fuentes de información, su control, descripción y recuperación de contenidos de forma exhaustiva y precisa. Ello hace posible que una búsqueda en MedWorm, sea más productiva para el colectivo de médicos y especialistas clínicos que por ejemplo en Google...</div>
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://www.mblazquez.es/blog-ccdoc-recuperacion/imagenes/imagen002.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://www.mblazquez.es/blog-ccdoc-recuperacion/imagenes/imagen002.png"></a></div>
<div style="text-align: center;">
<a href="http://www.medworm.com/"><span style="font-size: x-large;">http://www.medworm.com/</span></a></div>
<br />
<div style="text-align: justify;">
La sindicación de contenidos es clave para la las ciencias de la Documentación no sólo por el interés que suscita el mero hecho de poder controlar y desarrollar técnicas que permitan la transmisión de catálogos bibliográficos, registros, datos, o información. Es mucho más importante ser conscientes de que la mayor parte de los sitios web y sistemas de publicación digital tienen un canal de sindicación paralelo. Esto significa que una gran cantidad de información se está generando día a día, de forma limpia, resumida o completa, constantemente y cuyas fuentes de información pueden ser y son en muchos casos de gran importancia y relevancia. Millones de canales de sindicación y formatos que aún quedan por descubrir y desarrollar aguardan a que algún investigador o documentalista sea capaz de reconocerlos, emplearlos y aprovecharlos para hacer lo que siempre ha caracterizado a nuestra profesión, recuperarlos, documentarlos, describirlos y ponerlos al servicio de todos nuestros usuarios y lectores.</div>
<br />
<div style="text-align: justify;">
Finalmente, hay que recordar que todo buscador de esta naturaleza, así como de cualquier otra, emplea constantemente las técnicas de sindicación, agrupación (clustering), algoritmos de recuperación, SQL e indexación de los contenidos en centenares de bases de datos y clusters de almacenamiento repartidos en miles de servidores por todo el mundo. De tal forma que hasta este punto y según todo lo explicado hasta el momento, sea asienta la primera piedra de los conocimientos necesarios para comprender mejor y en algún momento configurar y desarrollar un verdadero sistema de recuperación de información.<br />
<br />
<br />
<br /></div>
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-8577729063054494827.post-39754499349027844792011-11-08T09:50:00.002+01:002011-11-08T09:50:00.323+01:0015.- Práctica6: Lectura y recuperación de canales de sindicación<div style="text-align: justify;">El segundo elemento esencial para demostrar un proceso de sindicación de contenidos es la disposición de un lector de canales de sindicación, capaz de interpretar el lenguaje de cada formato RSS1.0, RSS2.0 y ATOM. Con la práctica6 se evidenciará irrefutablemente que MARC-XML no sólamente puede ser generado y compartido como cualquier canal de sindicación, sino que también puede ser capturado, recuperado y leído perfectamente con un programa parser similar al que se utiliza para todos los demás formatos de sindicación. De esta forma se demuestra que la técnica de sindicación de contenidos puede ser empleada también para otras actividades y finalidades como las bibliográficas, archivísticas, biblioteconómicas o documentales.</div><ul><li><a href="http://www.mblazquez.es/blog-ccdoc-recuperacion/documentos/parsers-mblazquez.zip">Descargar programas parser de prueba</a></li>
<li><a href="http://www.mblazquez.es/blog-ccdoc-recuperacion/documentos/practica6-lectura-recuperacion-canales.doc">Descargar instrucciones de la práctica6</a></li>
</ul>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-8577729063054494827.post-40172732811702310572011-11-07T09:55:00.002+01:002011-11-07T09:55:00.819+01:0014.- Práctica5: Generación de canales de sindicación<div style="text-align: justify;">La generación de canales de sindicación es un proceso que lleva a cabo un programa adjunto a las principales herramientas de publicación digital (blogs, wikis, cms y otros sistemas). Su ejecución se activa en el momento en el que se publican nuevos contenidos. En ese momento se regenera un archivo con extensión XML que porta la información del canal y cuyo lenguaje de codificación suele ser un formato de sindicación RSS1.0, RSS2.0 o ATOM. Es ese archivo el que comúnmente se denomina canal de sindicación y que almacena los titulares, resúmenes y contenidos completos del artículo o elemento documental que se publica. En la práctica5 se abordará este asunto y se comprobará cómo trabajan este tipo de programas, generadores de canales de sindicación, comprobando que su funcionamiento es el mismo tanto para los casos de formatos de sindicación tradicionales como para cualquier otro formato como MARC-XML, demostrando empíricamente que al menos el primer elemento de la comunicación de la teoría de sindicación de contenidos, es decir, el emisor del canal es siempre el mismo para cualquier tipo de formato. </div><ul><li><a href="http://www.mblazquez.es/blog-ccdoc-recuperacion/documentos/practica5-generacion-canales-sindicacion.doc">Descargar instrucciones de la práctica5</a></li>
</ul>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-8577729063054494827.post-44988946746728533882011-11-07T09:50:00.065+01:002011-11-07T09:50:00.780+01:0013.- Demostrador de procesos de sindicación de contenidos: OrangeUP<div style="text-align: justify;">La sindicación de contenidos es un proceso de comunicación y transmisión de datos ampliamente utilizado para efectuar el seguimiento de una serie de fuentes de información de forma sencilla y rápida. Dicho proceso es posible gracias a la disposición de una serie de programas capaces de generar los canales de sindicación en formato XML y a otros capaces de leer dichos canales en los formatos que se especifiquen. Dicho de otra forma, para que pueda darse una comunicación entre el emisor del canal de sindicación y el lector, ambos deberán compartir y entender el lenguaje en el que está codificado la información. En estos casos el lenguaje extensible de marcado XML ha dado lugar a terceros formatos RSS1.0, RSS2.0 y ATOM. Todos ellos son considerados por la comunidad científica como formatos de sindicación debido a que son legibles para la mayoría de los lectores de canales de sindicación, especialmente los que incorporan los navegadores web. Otra razón por la que se consideran formatos de sindicación es por su amplia difusión en el ámbito de los medios de comunicación y entre los usuarios que diariamente los utilizan. </div><div style="text-align: justify;"><br />
</div><div style="text-align: justify;">La pregunta que hay que hacer llegados a este punto es: ¿Podría crearse un canal de sindicación con información bibliográfica? ¿Podrían utilizarse otros formatos derivados de XML, que al igual que RSS1.0, RSS2.0 y ATOM, permitieran la transmisión de registros bibliográficos, archivísticos o documentales? ¿Rigen las mismas normas de transmisión de datos para todos los formatos? ¿Las mismas técnicas de sindicación de contenidos pueden emplearse para otros casos? ¿Es cierto que con un generador de canales y un programa lector se pueden utilizar las mismas técnicas que se están utilizando para la sindicación de contenidos, empleando formatos especializados?</div><br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://www.mblazquez.es/blog-ccdoc-recuperacion/imagenes/imagen001.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="http://www.mblazquez.es/blog-ccdoc-recuperacion/imagenes/imagen001.png" width="363" /></a></div><br />
<div style="text-align: center;"><span style="font-size: x-large;"><a href="http://mblazquez.es/testbench/orangeup/">http://mblazquez.es/testbench/orangeup/</a></span></div><br />
<br />
<div style="text-align: justify;">Todas estas dudas y preguntas razonables, tienen su respuesta en el programa demostrador de procesos de sindicación de contenidos OrangeUP, desarrollado exprofeso, para explicar el funcionamiento de las técnicas de sindicación, sus formatos, aplicaciones y realidades desconocidas para la comunidad científica. </div>Unknownnoreply@blogger.com1tag:blogger.com,1999:blog-8577729063054494827.post-14691410450021073612011-10-31T09:41:00.002+01:002011-11-05T12:32:41.570+01:0012.- Sindicación de contenidos y recuperación de información<div style="text-align: justify;">La sindicación de contenidos, también denominada redifusión de contenidos se emplea habitualmente en el marco de la transmisión de noticias para su lectura mediante diversos sistemas de lectura. La gran cantidad de información que se genera en estos medios hace necesario su conocimiento, de cara a su explotación documental, organización, clasificación y posterior recuperación. En el documento que se muestra a continuación se explican algunas de las bases sobre las que se alambica esta técnica.</div><br />
<iframe src="http://www.mblazquez.es/blog-ccdoc-recuperacion/documentos/mblazquez-sindicacion-contenidos.pdf" style="height: 600px; width: 100%;"></iframe><br />
<a href="http://www.mblazquez.es/blog-ccdoc-recuperacion/documentos/mblazquez-sindicacion-contenidos.pdf">Descargar documento</a><br />
<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://www.mblazquez.es/blog-ccdoc-recuperacion/esquemas/esquema001.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="502" src="http://www.mblazquez.es/blog-ccdoc-recuperacion/esquemas/esquema001.png" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><i>Cronograma de la evolución de los formatos de sindicación</i></td></tr>
</tbody></table><br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://www.mblazquez.es/blog-ccdoc-recuperacion/esquemas/esquema002.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="452" src="http://www.mblazquez.es/blog-ccdoc-recuperacion/esquemas/esquema002.png" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><i>Esquema de funcionamiento de la sindicación de contenidos en el entorno web</i></td></tr>
</tbody></table><br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://www.mblazquez.es/blog-ccdoc-recuperacion/esquemas/esquema003.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="360" src="http://www.mblazquez.es/blog-ccdoc-recuperacion/esquemas/esquema003.png" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><i>Fisionomía de un canal de sindicación</i></td></tr>
</tbody></table>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-8577729063054494827.post-60252472514419264572011-10-25T13:47:00.001+02:002011-10-25T13:48:35.383+02:0011.- Práctica4bis: Recuperación con Carrot2<div style="text-align: justify;"><div style="text-align: justify;">Para los alumnos que no dispongan de ordenador personal o que no puedan probar el programa Carrot2 en su casa, se presenta la práctica4bis, que sí es posible llevar a cabo en los ordenadores de la facultad y de cualquier aula. Para poner a prueba los conceptos aprendidos, se propone la resolución de una práctica basada en la colección de prueba ODP239.</div><ul><li><a href="http://www.mblazquez.es/blog-ccdoc-recuperacion/documentos/practica4bis-recuperacion-carrot2.doc">Descargar instrucciones de la práctica4bis</a></li>
</ul></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-8577729063054494827.post-56604182538400697362011-10-24T09:59:00.000+02:002011-10-24T09:59:00.547+02:0010.- Práctica4: Recuperación con Carrot2<div style="text-align: justify;"><div style="text-align: justify;">Las técnicas de agrupación de contenidos pueden ser de gran utilidad para la recuperación masiva de documentos y su clasificación automática. Para poner a prueba los conceptos aprendidos, se propone la resolución de una práctica basada en un caso real "recuperación de empresas especializadas en ingeniería".</div><ul><li><a href="http://www.mblazquez.es/blog-ccdoc-recuperacion/documentos/practica4-recuperacion-carrot2.doc">Descargar instrucciones de la práctica4</a></li>
</ul></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-8577729063054494827.post-63192106511551105402011-10-24T09:57:00.000+02:002011-10-24T09:57:00.146+02:0009.- Sistemas de clustering<div style="text-align: justify;">Los sistemas de clustering son aquellos sistemas de recuperación que emplean algoritmos de agrupación de contenidos, por ello el proceso también puede adoptar otras denominaciones como categorización de los documentos de la colección. </div><blockquote><div style="text-align: justify;">El concepto de clasificación de documentos refiere al problema de encontrar para cada documento la clase a la que pertenece, asumiendo que las clases están predefinidas y que se tienen documentos preclasificados para utilizar como ejemplos. En la presente tesis, se estudia la categorización o agrupamiento de documentos, entendiéndose por esto el proceso de encontrar grupos dentro de una colección de documentos basándose en las similitudes existentes entre ellos, sin un conocimiento a priori de sus características. (GOLDENBERG, D. 2007)</div></blockquote><div style="text-align: justify;">Algunos de los algoritmos empleados para efectuar los procesos de agrupación son: </div><ul><li style="text-align: justify;"><b>Categorización por objeto</b>. El objetivo es encontrar agrupaciones entre todos los documentos que conforman la colección. Esto significa que un porcentaje de términos relevantes de un grupo de documentos deberá estar presente en todos y cada uno de ellos.</li>
<li style="text-align: justify;"><b>Representación vectorial</b>. Cada documento de la colección se representa mediante vectores, quedando caracterizado por la frecuencia de aparición de los términos más relevantes y representativos. De esta forma se pueden comparar los vectores y agrupar los documentos en función de su similaridad. </li>
<ul style="text-align: justify;"><li><i>Cálculo del Centroide</i>. A partir de un grupo de documentos representados vectorialmente, se define el centroide que es el promedio de los vectores que componen el grupo. </li>
<li><i>Reducción de términos a su raíz</i>.</li>
<li> <i>Eliminación de palabras vacías</i>.</li>
<li><i>Eliminación de términos con bajo poder discriminatorio</i>.</li>
<li><i>Eliminación de HAPAX</i>.</li>
</ul><li><b>Similaridad documental</b>. Consiste en medir la distancia entre los vectores de cada documento para los que existen los algoritmos de:</li>
<ul><li><i>Coeficiente del coseno</i>. Cálculo del ángulo alfa. La semejanza entre los documentos se calcula como el producto vectorial entre ellos.</li>
<li>Otros: <i>Jaccard, Distancia Euclideana, Coeficiente de Dice, Sorensen, Hamming, Tversky</i>. </li>
</ul><li style="text-align: justify;"><b>Métodos Jerárquicos</b>. Emplean algoritmos que permiten caracterizar los documentos de la colección con una estructura arbórea denominada dendograma, quedando definidos los grupos con cada vértice del árbol representado. A partir de la raíz del árbol (conformada por un único grupo que contiene todos los documentos), la división por grupos se produce cuando se analiza en el documentoA qué otro documento tiene mayor presencia sus términos.</li>
<li style="text-align: justify;"><b>Métodos Particionales</b>. En vez de trabajar a varios niveles para crear una estructura arbórea como en el caso anterior, se trabaja a un sólo nivel. Esto implica que el patrón de agrupación viene dado de antemano. Este factor establece las divisiones o partes con las que se calcula la similitud de los documentos. </li>
<li><b>Mapas auto-organizados</b>. También denominado sistema de redes neuronales.</li>
</ul><div style="text-align: justify;"><u><b><span style="font-size: small;">Bibliografía</span></b></u></div><ul><li>FIGUEROLA, C.G.; ALONSO BERROCAL, J.L.; ZAZO RODRÍGUEZ, A.F.; RODRÍGUEZ, E. 2002. Algunas Técnicas de Clasificación Automática de Documentos. Disponible en: <a href="http://multidoc.rediris.es/cdm/include/getdoc.php?id=90&article=28&mode=pdf">http://multidoc.rediris.es/cdm/include/getdoc.php?id=90&article=28&mode=pdf</a><br />
</li>
<li>GOLDENBERG, D. 2007. [Tesis Doctoral]. Categorización automática de documentos con mapas auto-organizados de Kohonen. Disponible en: <a href="http://www.itba.edu.ar/archivos/secciones/goldenberg-tesisdemagister.pdf">http://www.itba.edu.ar/archivos/secciones/goldenberg-tesisdemagister.pdf</a></li>
</ul><br />
<span style="font-size: large;">Un ejemplo de Clustering: Carrot2</span><br />
<div style="text-align: justify;">Carrot2 es un sistema de recuperación basado en técnicas de agrupación de documentos y contenidos web, sin requerir de bases de conocimiento externas como taxonomías o contenido preclasificado. Uno de sus algoritmos de agrupación es el correspondiente al método jerárquico, con los que es capaz de agrupar los contenidos de los motores de búsqueda Google o Bing. No obstante también puede emplearse para la recuperación de documentación dentro de un equipo cliente, siempre que disponga de una instalación previa "Google Desktop".</div><br />
<div style="text-align: justify;">Para trabajar con Carrot2, se puede cargar su versión online desde el navegador web en la siguiente dirección: <a href="http://search.carrot2.org/stable/search">http://search.carrot2.org/stable/search</a>. No obstante a efectos de probar todas sus posibilidades se recomienda la descarga de su <a href="http://download.carrot2.org/stable/carrot2-workbench-win32.win32.x86-3.5.2.zip">versión carrot2-workbench-win32</a>. Una vez descargado, descomprimir y ejecutar el archivo <b>carrot2-workbench.exe</b>.</div><ul><li><b>Opciones de búsqueda</b>. </li>
<ul><li><u>Fuente</u>. Se puede especificar qué base de conocimiento se desea utilizar para efectuar la búsqueda. </li>
<li><u>Algoritmo</u>. Se permite la elección del algoritmo de agrupación de Carrot2. Por defecto se emplea Lingo, pero puede utilizarse K-mean, STC ó emplear los métodos habituales de agrupación por URL y fuente.</li>
</ul></ul><ul><li><b>Páginas de resultados</b>.</li>
<ul><li><u>Clusters</u>. Muestra un listado de todos los grupos identificados.</li>
<li><u>Documentos</u>. Presenta un listado con los resultados más pertinentes de cada grupo. </li>
</ul></ul><ul><li><b>Visualización</b>.</li>
<ul><li style="text-align: justify;"><u>Esquema relacional Aduna</u>. (Aduna cluster map visualization). Muestra las relaciones entre unos grupos y otros. </li>
<li style="text-align: justify;"><u>Diagrama circular de grupos</u>. (Circles visualization). Muestra una visión de los principales temas agrupados. </li>
<li style="text-align: justify;"><u>Mapa de superficie por grupos</u>. (FoamTree visualization). Muestra un mapa de áreas con los grupos más pertinentes con colores cálidos en el margen superior de la imagen y los grupos menos relevantes en el margen inferior destacados con colores fríos. En la base del dibujo aparece el grupo desconectado "Other Topics".</li>
</ul></ul><ul><li><b>Edición y configuración de atributos de consulta</b>.</li>
<ul><li><u>Grupos - Clusters</u></li>
<ul style="text-align: justify;"><li><i>Cluster count base</i>: Número que establece el factor base para la creación de grupos. Cuanto mayor sea el número mayor será el número de grupos que generará. No existe equiparación entre este número y el número de grupos, significa que a partir del factor base se creará un número proporcional de grupos.</li>
<li><i>Size-score sorting ratio</i>: Establece el equilibrio entre la puntuación de los grupos y el tamaño según cantidad de documentos. Si toma valor 0 el algoritmo ordenará según tamaño. Si toma el valor 1 los resultados se ordenarán en función de un ranking de puntuaciones. Un valor intermedio tendrá en cuenta ambos factores.</li>
</ul><li><u>Filtrado de etiquetas</u>. Efectúa un proceso de reducción de los términos, eliminación de palabras vacías, números, términos interrogativos, para efectuar posteriores procesos de indexación más eficaces.</li>
<li><u>Etiquetas</u></li>
<ul><li><i>Cluster label assignment method</i>. </li>
<ul><li style="text-align: justify;"><i>Método único</i>. Asigna etiquetas únicas para cada vector en cada grupo o cluster. De esta forma evita duplicaciones de grupos. Por este motivo, al requerir contrastar todos los vectores de todos los documentos entre sí, puede resultar un método lento pero más exhaustivo.</li>
<li style="text-align: justify;"><i>Método simple</i>. Asigna etiquetas en todos los vectores de cada grupo contrastándolos mediante similaridad documental, obteniendo grupos duplicados y no duplicados. En tal caso finalmente se eliminan aquellos grupos con etiquetas duplicadas, quedando un resultado más reducido. Se trata de un método rápido, pero menos exhaustivo. </li>
</ul><li style="text-align: justify;"><i>Cluster merging threshold</i>. Es el porcentaje de coincidencia entre los documentos de dos cluster para que se fusionen en uno. Si se utilizan valores bajos, significa que los grupos tendrán un mayor nivel de coincidencia, con un corpus muy parecido. Cuando mayor es el valor, más riesgos de que el grupo sea más heterogeneo.</li>
<li style="text-align: justify;"><i>Phrase label boost</i>. Es el peso o puntuación específica que se otorga a varios términos cuando aparecen junto con otro. De esta forma se establecen relaciones de palabras o frases que siempre se recuperan juntas. Cuanto mayor sea el valor, mayor será la capacidad discriminatoria de las frases. </li>
<li style="text-align: justify;"><i>Phrase length penalty start</i>. Número de palabras máximo antes de ser infraponderada la frase o grupo de palabras. </li>
<li style="text-align: justify;"><i>Phrase length penalty stop</i>. Si la frase supera el número máximo de palabras será eliminada.</li>
<li style="text-align: justify;"><i>Title word boost</i>. Determina el peso que otorga a las palabras clave que coincidan con la consulta en el campo título.</li>
</ul><li><u>Modelo de matriz</u></li>
<ul><li><i>Factorization method</i>. Es el método de factorización de la matriz de documentos.</li>
<ul><li style="text-align: justify;">Partial singular. Factoriza en función del número máximo de vectores K.</li>
<li>Factorization ED. Tiene en cuenta todos los factores de configuración de etiquetas, filtrado y clusters.</li>
</ul><li style="text-align: justify;"><i>Factorization quality</i>. Es el número de iteraciones del proceso de factorización.</li>
<li><i>Maximum matrix size</i>. Determina el número máximo de elementos de cada matriz de cada documento</li>
<li style="text-align: justify;"><i>Maximum word document frequency</i>. Determina la frecuencia máxima de las palabras en cada documento. Si la frecuencia supera a la especificada, la palabra será eliminada. El valor por defecto es 0,90 que indica 90%.</li>
<li style="text-align: justify;"><i>Term weighting</i>. Determina el método para calcular el peso de las palabras del documento. Logaritmo de TF-IDF, Función lineal de TF-IDF o sólamente Factor TF.</li>
</ul><li><u>Grupos multilingües</u></li>
<ul><li><i>Default clustering language</i>. Idioma por defecto para efectuar el proceso de agrupación.</li>
<li><i>Language aggregation strategy</i>. Define la estrategia de agregación idiomática. Se puede establecer que efectúe un tratamiento de cluster para todos los idiomas, por idioma mayoritario ó creando grupos para cada idioma.</li>
</ul><li><u>Extracción de frases</u></li>
<ul style="text-align: justify;"><li><i>Phrase Document Frequency threshold</i>. Umbral de la frecuencia de aparición de frases en documentos. Las frases con una frecuencia de aparición menor a la indicada serán ignoradas.</li>
<li><i>Truncated label threshold</i>. Umbral de truncamiento en etiquetas. Valores bajos determinan grupos más grandes, ya que el factor de truncamiento de términos es más alto. </li>
</ul><li><u>Preprocesamiento</u></li>
<ul><li><i>Exact phrase assignment</i>. Determina que los contenidos disponibles en cada agrupación coincidan con la consulta efectuada de forma exacta. </li>
<li><i>Merge lexical resources</i>. Combina todas las palabras de todos los idiomas para formar parte del mismo lexicón de recuperación.</li>
<li>Minimun cluster resources. Define el número mínimo de documentos por grupo.</li>
<li><i>Reload lexical resources</i>. Recarga todo el lexicón en cada consulta.</li>
<li><i>Word Document Frequency threshold</i>. Umbral de frecuencia de los términos del documento, determina que cualquier término con un número de ocurrencias menor al especificado sea ignorado.</li>
</ul></ul></ul>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-8577729063054494827.post-17960394685673685862011-10-24T09:50:00.004+02:002011-10-24T09:50:00.301+02:0008.- Práctica3: Asentando conocimientos de MySQL<div style="text-align: justify;">Con la intención de asentar los conocimientos adquiridos en cuanto a consulta de datos y recuperación de informaión se propone el desarrollo del siguiente ejercicio. Se deberá descargar el archivo SQL con estructura y datos correspondientes a un servicio de información global, instalar correctamente desde el gestor de bases de datos PhpMyAdmin y finalmente responder a las preguntas y consultas que se plantean.</div><ul><li><a href="http://www.mblazquez.es/blog-ccdoc-recuperacion/documentos/items2000es.sql">Descargar archivo items2000es.sql</a></li>
<li><a href="http://www.mblazquez.es/blog-ccdoc-recuperacion/documentos/practica3-asentando-mysql.doc">Descargar instrucciones de la práctica3</a></li>
</ul><br />
<span style="font-size: large;">Instalación de AppServ. </span><br />
<div style="text-align: justify;">Para llevar a cabo las prácticas fuera del horario de clase, se recomienda la instalación de una distribución de programas denominada AppServ (Sólo para S.O. Windows). Contiene los componentes necesarios, el servidor Apache HTTP, PHP, MySQL y el gestor de bases de datos PHPmyAdmin. Para instalar la distribución Appserv, hay que descargar el archivo <span style="font-weight: bold;">appserv-win32-2.5.10.exe</span> dado que es la última versión estable. <a href="http://prdownloads.sourceforge.net/appserv/appserv-win32-2.5.10.exe">Descargar AppServ</a></div><div style="text-align: justify;"><br />
Una vez descargada, ejecutar el archivo <span style="font-weight: bold;">appserv-win32-2.5.10.exe</span> y aparecerá el instalador de la distribución con el mensaje típico de bienvenida.</div><br />
<div style="text-align: justify;"><a href="http://mblazquez.es/blog_ccdoc-automatizacion/imagenes/appserv-00.jpg"><img alt="" border="0" src="http://mblazquez.es/blog_ccdoc-automatizacion/imagenes/appserv-00.jpg" style="cursor: pointer; display: block; height: 391px; margin: 0px auto 10px; text-align: center; width: 505px;" /></a>El siguiente paso es la ubicación de la instalación de toda la distribución. Por defecto Appserv, crea su propia carpeta en <span style="font-weight: bold;">C:\appserv\</span> se recomienda no tocar esta ruta, puesto que organiza perfectamente todos los repositorios de todos los componentes.</div><br />
<div style="text-align: justify;"><a href="http://mblazquez.es/blog_ccdoc-automatizacion/imagenes/appserv-01.jpg"><img alt="" border="0" src="http://mblazquez.es/blog_ccdoc-automatizacion/imagenes/appserv-01.jpg" style="cursor: pointer; display: block; height: 391px; margin: 0px auto 10px; text-align: center; width: 502px;" /></a>El siguiente paso es la selección de los componentes a instalar. Se recomienda la instalación de todos ellos.</div><br />
<div style="text-align: justify;"><a href="http://mblazquez.es/blog_ccdoc-automatizacion/imagenes/appserv-02.jpg"><img alt="" border="0" src="http://mblazquez.es/blog_ccdoc-automatizacion/imagenes/appserv-02.jpg" style="cursor: pointer; display: block; height: 391px; margin: 0px auto 10px; text-align: center; width: 501px;" /></a>El paso de Configuración del servidor es parecido al señalado anteriormente en este artículo. Por lo tanto incluir el nombre de servidor <span style="font-weight: bold;">localhost</span>, correo electrónico de prueba y mantener el <span style="font-weight: bold;">puerto 80</span> de comunicación para Apache.</div><br />
<div style="text-align: justify;"><a href="http://mblazquez.es/blog_ccdoc-automatizacion/imagenes/appserv-03.jpg"><img alt="" border="0" src="http://mblazquez.es/blog_ccdoc-automatizacion/imagenes/appserv-03.jpg" style="cursor: pointer; display: block; height: 392px; margin: 0px auto 10px; text-align: center; width: 502px;" /></a>El siguiente paso, permite la configuración de la base de datos MySQL. Sólo hay que incluir una password de conexión al servicio MySQL que se utilizará siempre en casos posteriores. Dado que el contexto es de prueba y en servidor local, se recomienda introducir la password "<span style="font-weight: bold;">root</span>" que es la convenida en estos casos por defecto.</div><br />
<div style="text-align: justify;"><a href="http://mblazquez.es/blog_ccdoc-automatizacion/imagenes/appserv-04.jpg"><img alt="" border="0" src="http://mblazquez.es/blog_ccdoc-automatizacion/imagenes/appserv-04.jpg" style="cursor: pointer; display: block; height: 392px; margin: 0px auto 10px; text-align: center; width: 504px;" /></a>Seguidamente se continúa con la instalación de la distribución hasta su finalización con éxito.</div><br />
<div style="text-align: justify;"><a href="http://mblazquez.es/blog_ccdoc-automatizacion/imagenes/appserv-05.jpg"><img alt="" border="0" src="http://mblazquez.es/blog_ccdoc-automatizacion/imagenes/appserv-05.jpg" style="cursor: pointer; display: block; height: 394px; margin: 0px auto 10px; text-align: center; width: 505px;" /></a>Finalmente, aparece un mensaje de instalación completa e inicio de los servicios Apache y MySQL. Es recomendable iniciarlos a fin de llevar a cabo las pruebas pertinentes de correcto funcionamiento.</div><br />
<a href="http://mblazquez.es/blog_ccdoc-automatizacion/imagenes/appserv-06.jpg"><img alt="" border="0" src="http://mblazquez.es/blog_ccdoc-automatizacion/imagenes/appserv-06.jpg" style="cursor: pointer; display: block; height: 395px; margin: 0px auto 10px; text-align: center; width: 507px;" /></a><br />
<br />
<div style="text-align: justify;">Llegados a este punto, todo el paquete fue instalado correctamente y ya se puede trabajar con el gestor de bases de datos PHPmyAdmin. Para acceder al programa introduzca la siguiente URL en la barra de direcciones de su navegador: <a href="http://localhost/phpmyadmin/">http://localhost/phpmyadmin/</a> le aparecerá una ventana emergente solicitando el usuario y contraseña de MySQL, utilizar "<b>root</b>", "<b>root</b>" para acceder. Superado este paso accederá al panel de control de PHPmyAdmin, ya conocido y explicado a lo largo de las sesiones del curso.</div><ul></ul>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-8577729063054494827.post-65755976136984904422011-10-18T09:50:00.000+02:002011-10-18T09:50:00.163+02:0007.- Práctica2: Consultas FULLTEXT<div style="text-align: justify;">Conocida la sintaxis de consulta FULLTEXT, se propone la resolución de una práctica consistente en la experimentación con sentencias MATCH() AGAINST(). Se deberá descargar un archivo SQL con estructura y datos correspondientes a un servicio de información global, instalar correctamente desde el gestor de bases de datos PhpMyAdmin y finalmente responder a las preguntas y consultas que se plantean.</div><ul><li><a href="http://www.mblazquez.es/blog-ccdoc-recuperacion/documentos/items1.sql">Descargar archivo items1.sql</a></li>
<li><a href="http://www.mblazquez.es/blog-ccdoc-recuperacion/documentos/items2.sql">Descargar archivo items2.sql</a></li>
<li><a href="http://www.mblazquez.es/blog-ccdoc-recuperacion/documentos/items3.sql">Descargar archivo items3.sql</a></li>
<li><a href="http://www.mblazquez.es/blog-ccdoc-recuperacion/documentos/practica2-consultas-fulltext.doc">Descargar instrucciones de la práctica2</a></li>
</ul>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-8577729063054494827.post-52918052052537406882011-10-17T09:50:00.004+02:002011-10-17T09:50:00.230+02:0006.- Recuperación avanzada con SQL<div style="text-align: justify;">La base de datos MySQL dispone de una serie de funciones de recuperación de información para aquellos campos definidos como de tipo <a href="http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html">FULLTEXT</a>. Esto significa que MySQL es capaz de indexar el texto completo de los campos que el administrador le especifique. Este proceso implica la creación de un fichero inverso, el cálculo de frecuencias o la eliminación de palabras vacías del texto. Todo ello se lleva a cabo de manera automática en el momento en que se almacena información en los campos definidos para este fin. </div><div style="text-align: justify;"><br />
</div><div style="text-align: justify;"><b>Particularidades del método FULLTEXT</b></div><div style="text-align: justify;">Las opciones de búsqueda e indexación FULLTEXT, tienen múltiples características y aspectos que deben ser considerados. Por un lado efectúa un proceso automático de eliminación de palabras vacías y por otro lado consta de una serie de limitaciones que no aconsejan su uso para pequeñas colecciones de documentos.</div><ul><li><b>Eliminación de palabras vacías</b><br />
<a href="http://dev.mysql.com/doc/refman/5.0/en/fulltext-stopwords.html">http://dev.mysql.com/doc/refman/5.0/en/fulltext-stopwords.html</a><br />
<div style="text-align: justify;">Cuando se efectúan búsquedas FULLTEXT, el fichero inverso de los textos indexados es tratado para eliminar las palabras vacías de la recuperación. También los términos de la consulta son tratados. Por defecto MySQL incluye tales palabras vacías en inglés en el archivo <i>ft_static.c</i>, por lo que la inclusión de un nuevo listado de palabras vacías conlleva su edición o la modificación de la ruta de la variable de configuración de MySQL <i>ft_stopword_file</i>.</div></li>
</ul><ul><li><b>Limitaciones</b><br />
<a href="http://dev.mysql.com/doc/refman/5.0/en/fulltext-fine-tuning.html">http://dev.mysql.com/doc/refman/5.0/en/fulltext-fine-tuning.html</a><br />
<div style="text-align: justify;">No todo son ventajas, ya que FULLTEXT también tiene limitaciones. En primer lugar la extensión de las palabras susceptibles de recuperación o consulta, tienen un límite de 3 caracteres, por lo tanto se deberán utilizar términos a partir de 4 o más caracteres. Esta propiedad puede ser editada desde la variable de configuración de MySQL <i>ft_min_word_len</i>. En segundo lugar las búsquedas en lenguaje natural se efectúan con un umbral de corte en torno al 50% de los términos indexados. Dicho de otro modo, elimina la mitad de los términos o palabras a partir del análisis de frecuencias aplicando la <a href="http://www.dcs.gla.ac.uk/Keith/Chapter.2/Ch.2.html">técnica de cortes de Luhn</a>, eliminando los términos más comunes y HAPAX.</div></li>
</ul><div style="text-align: justify;"><b>Algoritmo de recuperación FULLTEXT en MySQL</b></div><div style="text-align: justify;"><a href="http://forge.mysql.com/wiki/MySQL_Internals_Algorithms#Full-text_Search">http://forge.mysql.com/wiki/MySQL_Internals_Algorithms#Full-text_Search</a></div><div style="text-align: justify;"><a href="http://www.miislita.com/term-vector/term-vector-1.html">http://www.miislita.com/term-vector/term-vector-1.html</a></div><div style="text-align: justify;">MySQL utiliza un algoritmo de recuperación muy parecido al de ponderación de los términos mediante TF-IDF, es decir, frecuencia de aparición de los términos y frecuencia inversa del documento. <a href="http://nlp.stanford.edu/IR-book/html/htmledition/tf-idf-weighting-1.html">TF-IDF</a> es una medida de tipo estadístico utilizada para determinar la importancia de una palabra dentro de un documento en una colección o corpus documental. La importancia o peso del término se incrementa proporcionalmente al número de veces que una palabra aparece en el documento, compensándose con la frecuencia de la palabra en el corpus. Por ejemplo si un término aparece recurrentemente en el documento y a lo largo de toda la colección se obtiene una puntuación más baja. De hecho para evitar ese tipo de casos, MySQL procede a la eliminación de palabras vacías previamente al proceso de indexado.</div><div style="text-align: justify;"><br />
<b>Preparar la tabla en MySQL para FULLTEXT</b><br />
La preparación de la tabla que almacena los registros y contenidos es clave para un buen funcionamiento del método FULLTEXT. Cuando se crea una tabla, el código para reseñar los campos que serán indexados a texto completo es FULLTEXT(campo1, campo2, campo3,...), véase <i>tabla1</i>.<br />
<br />
<div style="text-align: justify;"><div style="border: 2px outset rgb(192, 192, 192); color: black; font-family: courier; margin: 10px; padding: 10px; text-align: left;">CREATE TABLE comments (<br />
<b style="color: blue;">id</b> INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(id),<br />
<b style="color: blue;">title</b> TEXT CHARACTER SET utf8 COLLATE utf8_general_ci,<b><span style="color: blue;"><br />
user</span></b> VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci,<br />
<b style="color: blue;">date</b> VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci,<br />
<b><span style="color: blue;">comments</span></b> LONGTEXT CHARACTER SET utf8 COLLATE utf8_general_ci,<br />
<b><span style="color: blue;">responses</span></b> LONGTEXT CHARACTER SET utf8 COLLATE utf8_general_ci,<br />
<b style="color: orange;">indexer</b> LONGTEXT CHARACTER SET utf8 COLLATE utf8_general_ci,<br />
<b style="color: red;">FULLTEXT(indexer)</b><br />
) CHARACTER SET utf8 COLLATE utf8_general_ci</div><div style="text-align: center;"><i> Tabla1. </i><i>Código para crear una tabla de comentarios en el que existe un campo indexer que almacenará todos los datos del comentario para su indexación.</i></div><br />
Aunque es posible utilizar múltiples campos para la recuperación a texto completo, se considera más eficiente crear un solo campo de tipo FULLTEXT expresamente dedicado para la indexación de textos. Esto es lo que ocurre en el ejemplo anterior con el campo <i>indexer</i>, ya que almacenará el título de los comentarios, el nombre del usuario, los comentarios propiamente dichos y las respuestas a los mismos. También es muy recomendable tratar la información textual antes de que esta sea insertada en la tabla de la base de datos. Esto significa que siempre que sea posible se aconseja efectuar un proceso de eliminación de palabras vacías, sustitución de caracteres extraños por equivalentes en código HTML o ASCII, sustitución de caracteres acentuados por caracteres no acentuados, transliteración de caracteres, etc. Todo ello se puede conseguir utilizando junto con MySQL programas de tratamiento y depuración de textos, diseñados en muy diversos lenguajes de programación, por ejemplo PHP.</div></div><div style="text-align: justify;"><br />
</div><div style="text-align: justify;"><span style="font-size: large;">Búsquedas a texto completo con lenguaje natural</span></div><div style="text-align: justify;"><a href="http://dev.mysql.com/doc/refman/5.0/en/fulltext-natural-language.html">http://dev.mysql.com/doc/refman/5.0/en/fulltext-natural-language.html</a></div><div style="text-align: justify;">Las búsquedas de tipo FULLTEXT se llevan a cabo utilizando dos cláusulas especiales. La cláusula MATCH() que indica entre paréntesis los campos indexados mediante FULLTEXT y la cláusula AGAINST() que contiene los términos de la consulta. Por defecto este tipo de consultas siempre son mediante lenguaje natural, esto es confrontar las palabras o términos de la consulta con la colección registrada en FULLTEXT. Este proceso se lleva a cabo por similaridad documental. El modelo de construcción de este tipo de consultas es el expresado en la <i>tabla2</i>.<br />
<br />
</div><div style="text-align: justify;"><div style="border: 2px outset rgb(192, 192, 192); color: black; font-family: courier; margin: 10px; padding: 10px; text-align: left;">SELECT * FROM catalogo WHERE MATCH(indexer) AGAINST('término/s de consulta')</div><div style="text-align: center;"><i> Tabla2. </i><i>Consulta MATCH básica busca en lenguaje natural</i></div><br />
Cuando se emplea la fórmula WHERE MATCH() los resultados devueltos se clasifican automáticamente por orden de relevancia. La relevancia se calcula en base al número de palabras del registro, el número de palabras únicas de ese registro, el número total de palabras en la colección, y el número de registros que contengan cada palabra determinada, esto es el <a href="http://www.miislita.com/term-vector/term-vector-3.html">modelo clásico de representación de documentos en el espacio vectorial</a>.<br />
<br />
</div><div style="text-align: justify;"><span style="font-size: large;">Búsquedas booleanas a texto completo</span></div><div style="text-align: justify;"><a href="http://dev.mysql.com/doc/refman/5.0/en/fulltext-boolean.html">http://dev.mysql.com/doc/refman/5.0/en/fulltext-boolean.html</a></div><div style="text-align: justify;">Cuando se especifica en la cláusula AGAINST el atributo IN BOOLEAN MODE, se está indicando que la consulta en lenguaje natural adquiere propiedades booleanas. Esto habilita por ejemplo la posibilidad de decidir qué términos deben aparecer, cuáles no, o determinar qué frases deberán buscarse literalmente. Véase la sintaxis de la consulta en la <i>tabla3</i>. </div><div style="text-align: justify;"><div style="border: 2px outset rgb(192, 192, 192); color: black; font-family: courier; margin: 10px; padding: 10px; text-align: left;">SELECT * FROM catalogo WHERE MATCH(indexer) AGAINST('+t1 -t1 t3 >t4 <t5 (t6 t7 t8) ~t9 t10* "t11 t12 t13"' IN BOOLEAN MODE)</div><div style="text-align: center;"><i> Tabla3. </i><i>Consulta FULLTEXT en modo booleano</i></div></div><div style="text-align: justify;"><br />
El método IN BOOLEAN MODE, admite el empleo de modificadores para indicar operaciones muy precisas con los términos de consulta, a continuación se reseñan los más importantes:<br />
<ul><li>( <b>+término</b> ) el signo más precediendo al término es el equivalente del operador AND e indica que obligatoriamente dicho término debe constar entre los resultados.</li>
<li>( <b>-término</b> ) el signo menos precediendo al término equivale al operador NOT e indica que el término no deberá figurar entre los resultados.</li>
<li>( <b>término1 termino2</b> ) si los términos no tienen ningún modificador o signo por defecto se emplea el operador OR, por lo que uno u otro término podrán figurar en los resultados.</li>
<li>( <b>>término4</b> ) un signo mayor que precediendo al término, le otorga un mayor peso en el cálculo de la relevancia, influyendo en un mayor número de resultados que contengan dicho término.</li>
<li>( <b><término5</b> ) un signo menor que precediendo al término, le corresponde un menor peso en el cálculo de la relevancia, haciendo que los resultados tengan con menor frecuencia dicho término incluido.</li>
<li>( <b>(término1 término2 término3)</b> ) Cuando los términos están encerrados entre paréntesis, se indica a MySQL que deberán encontrarse lo más próximos posibles. Esto significa que los primeros resultados a mostar serán aquellos que cumplan dicha condición.</li>
<li>( <b>~término</b> ) una tilde apaisada precediendo al término indica a MySQL que dicho término provoca ruido en la consulta, lo que le llevará a infraponderarlo para mejorar los resultados.</li>
<li>( <b>término*</b> ) un asterisco ulterior al término se emplea a modo de truncamiento y concordará con aquellas palabras que empiecen por el término referido. Su empleo es de gran utilidad cuando se efectúan búsquedas a partir de las raices de un término/s.</li>
<li>( <b>"término1 término2 término3"</b> ) Cuando varios términos estan agrupados en un entrecomillado doble implica una búsqueda por frase exacta. Es muy importante reseñar el aspecto de la comilla doble en este caso en contraposición con la comilla simple que envuelve toda la consulta dentro de la cláusula AGAINST('consulta "subconsulta" '). </li>
</ul><br />
</div><div style="text-align: justify;"><span style="font-size: large;">Búsquedas a texto completo con expansión de consulta</span></div><div style="text-align: justify;"><a href="http://dev.mysql.com/doc/refman/5.0/en/fulltext-query-expansion.html">http://dev.mysql.com/doc/refman/5.0/en/fulltext-query-expansion.html</a><br />
Las consultas basadas en FULLTEXT también soportan el método expansión de consulta, para recuperar la información. Esto es el empleo del algoritmo de <a href="http://www.scimago.es/publications/jotri-03b.pdf">retroalimentación automática por relevancia</a>. Este funciona ejecutando dos consultas, por un lado la búsqueda con los términos de la consulta original y una segunda búsqueda en la concatena los términos de los documentos más representativos encontrados en la primera consulta. Para efectuar este tipo de consultas se añade el atributo WITH QUERY EXPANSION en la cláusula AGAINST(), véase <i>tabla4</i>.<br />
<br />
<div style="border: 2px outset rgb(192, 192, 192); color: black; font-family: courier; margin: 10px; padding: 10px; text-align: left;">SELECT * FROM catalogo WHERE MATCH(indexer) AGAINST('término/s de consulta' WITH QUERY EXPANSION)</div><div style="text-align: center;"><i> Tabla4. </i><i>Consulta FULLTEXT con expansión de consulta</i></div><br />
<span style="font-size: large;">Búsquedas FULLTEXT con ranking de tipo SCORE</span><br />
Para ordenar los resultados de las consultas en función del valor de relevancia obtenido en los procesos de recuperación, se necesita incorporar un campo temporal que almacene dicho valor. Esto se conoce como ranking de tipo <i>score</i>. Obsérvese la sintáxis de la consulta de la <i>tabla5</i>, se seleccionan los campos id, title, content y MATCH(campos) AGAINST('consulta') AS score. Esto significa que el coeficiente del ranking de la consulta expresada se almacenará en un campo que se ha resuelto llamar <i>score</i> (podría llamarse de cualquier otra forma, pero esta es la forma más común de denominarlo). A continuación el resto de la consulta es similar a las anteriormente expresadas, con la salvedad de que el ordenamiento puede realizarse por orden decreciente de relevancia e importancia desde el campo temporal <i>score</i>.<br />
<br />
<div style="border: 2px outset rgb(192, 192, 192); color: black; font-family: courier; margin: 10px; padding: 10px; text-align: left;">SELECT id, title, content, MATCH(indexer) AGAINST('término/s de consulta') AS score FROM catalogo WHERE MATCH(indexer) AGAINST('término/s de consulta') ORDER BY score DESC</div><div style="text-align: center;"><i> Tabla5. </i><i>Consulta utilizando ordenación por ranking</i></div></div><div style="text-align: justify;"></div><div style="text-align: justify;"></div><div style="text-align: justify;"></div><div style="text-align: justify;"></div><div style="text-align: justify;"></div><div style="text-align: justify;"></div><div style="text-align: justify;"></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-8577729063054494827.post-40255054098895395142011-10-11T09:40:00.000+02:002011-10-11T09:40:00.727+02:0005.- Práctica1: Experimentando con SQL<div style="text-align: justify;">Aprendida la teoría esencial para efectuar consultas de datos y contenidos en MySQL, se propone la resolución de una práctica en la que se pondrán en práctica todos los conocimientos aprendidos. Se deberá descargar un archivo SQL con estructura y datos correspondientes a un catálogo bibliográfico, instalar correctamente desde el gestor de bases de datos PhpMyAdmin, incluir un campo de identificación autonumérico para la identificación de los registros y finalmente responder a las preguntas y consultas que se plantean. </div><ul><li><a href="http://www.mblazquez.es/blog-ccdoc-recuperacion/documentos/ucm1000ciencias.sql">Descargar archivo SQL de estructura y datos</a></li>
<li><a href="http://www.mblazquez.es/blog-ccdoc-recuperacion/documentos/practica1-recuperacion-mysql.doc">Descargar instrucciones de la práctica</a></li>
</ul>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-8577729063054494827.post-51464076054280519742011-10-10T21:00:00.000+02:002015-10-27T12:59:06.771+01:0004bis - Cláusulas SQL para ordenar resultados y mostrar valores únicos: ORDER BY y SELECT DISTINCT<br />
<b>Cláusula ORDER BY</b><br />
<div style="text-align: justify;">
La cláusula ORDER BY se utiliza para ordenar el resultado de la consulta conforme a una o más columnas o campos. La cláusula ORDER BY permite ordenar mediante orden ascendente, descendente y orden natural. </div>
<br />
<table border="1" cellpadding="0" cellspacing="0" class="MsoTableGrid" style="border-collapse: collapse; border: none; mso-border-alt: solid #7F7F7F .5pt; mso-border-insideh-themecolor: text1; mso-border-insideh-themetint: 128; mso-border-insideh: .5pt solid #7F7F7F; mso-border-insidev-themecolor: text1; mso-border-insidev-themetint: 128; mso-border-insidev: .5pt solid #7F7F7F; mso-border-themecolor: text1; mso-border-themetint: 128; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-yfti-tbllook: 1184; width: 100%px;">
<tbody>
<tr>
<td style="border: solid #7F7F7F 1.0pt; mso-border-alt: solid #7F7F7F .5pt; mso-border-themecolor: text1; mso-border-themecolor: text1; mso-border-themetint: 128; mso-border-themetint: 128; padding: 0cm 5.4pt 0cm 5.4pt; width: 100.0%;" valign="top" width="100%"><div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-size: 12pt;">SELECT
<i><span style="color: blue;">nombre-de-campo1</span></i></span><span style="font-size: large;">,</span><span style="font-size: 12pt;"> <i><span style="color: blue;">nombre-de-campo2</span></i> FROM <i><span style="color: blue;">nombre-de-tabla</span></i> ORDER BY
<i><span style="color: blue;">nombre-de-campo3</span></i> ASC</span><span style="font-size: large;">,</span><span style="font-size: 12pt;"> <span style="color: blue;"><i>nombre-de-campo4</i></span> DESC</span><o:p></o:p></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
</td>
</tr>
<tr>
<td style="background: #E7E6E6; border-top: none; border: solid #7F7F7F 1.0pt; mso-background-themecolor: background2; mso-border-alt: solid #7F7F7F .5pt; mso-border-themecolor: text1; mso-border-themecolor: text1; mso-border-themetint: 128; mso-border-themetint: 128; mso-border-top-alt: solid #7F7F7F .5pt; mso-border-top-themecolor: text1; mso-border-top-themetint: 128; padding: 0cm 5.4pt 0cm 5.4pt; width: 100.0%;" valign="top" width="100%"><div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-size: 12pt;">SELECT
titulo, autor FROM catalogo ORDER BY fecha ASC, titulo DESC</span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<o:p></o:p></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
</td></tr>
</tbody></table>
<i>Tabla 1. Resultados según orden ascendente del campo3 y descendente del campo4</i><br />
<br />
<table border="1" cellpadding="0" cellspacing="0" class="MsoTableGrid" style="border-collapse: collapse; border: none; mso-border-alt: solid #7F7F7F .5pt; mso-border-insideh-themecolor: text1; mso-border-insideh-themetint: 128; mso-border-insideh: .5pt solid #7F7F7F; mso-border-insidev-themecolor: text1; mso-border-insidev-themetint: 128; mso-border-insidev: .5pt solid #7F7F7F; mso-border-themecolor: text1; mso-border-themetint: 128; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-yfti-tbllook: 1184; width: 100%px;">
<tbody>
<tr>
<td style="border: solid #7F7F7F 1.0pt; mso-border-alt: solid #7F7F7F .5pt; mso-border-themecolor: text1; mso-border-themecolor: text1; mso-border-themetint: 128; mso-border-themetint: 128; padding: 0cm 5.4pt 0cm 5.4pt; width: 100.0%;" valign="top" width="100%"><div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-size: 12pt;">SELECT * FROM
<i><span style="color: blue;">nombre-de-tabla</span></i> ORDER BY <span style="color: blue;"><i>nombre-de-campo1</i></span> + 0 DESC</span><o:p></o:p></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
</td>
</tr>
<tr>
<td style="background: #E7E6E6; border-top: none; border: solid #7F7F7F 1.0pt; mso-background-themecolor: background2; mso-border-alt: solid #7F7F7F .5pt; mso-border-themecolor: text1; mso-border-themecolor: text1; mso-border-themetint: 128; mso-border-themetint: 128; mso-border-top-alt: solid #7F7F7F .5pt; mso-border-top-themecolor: text1; mso-border-top-themetint: 128; padding: 0cm 5.4pt 0cm 5.4pt; width: 100.0%;" valign="top" width="100%"><div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-size: 12pt;">SELECT * FROM catalogo ORDER BY titulo +0 DESC</span><o:p></o:p></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
</td>
</tr>
</tbody></table>
<br />
<div class="MsoNormal">
<i>Tabla 2. Resultados según orden natural descendente por el campo1</i></div>
<br />
<table border="1" cellpadding="0" cellspacing="0" class="MsoTableGrid" style="border-collapse: collapse; border: none; mso-border-alt: solid #7F7F7F .5pt; mso-border-insideh-themecolor: text1; mso-border-insideh-themetint: 128; mso-border-insideh: .5pt solid #7F7F7F; mso-border-insidev-themecolor: text1; mso-border-insidev-themetint: 128; mso-border-insidev: .5pt solid #7F7F7F; mso-border-themecolor: text1; mso-border-themetint: 128; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-yfti-tbllook: 1184; width: 100%px;">
<tbody>
<tr>
<td style="border: solid #7F7F7F 1.0pt; mso-border-alt: solid #7F7F7F .5pt; mso-border-themecolor: text1; mso-border-themecolor: text1; mso-border-themetint: 128; mso-border-themetint: 128; padding: 0cm 5.4pt 0cm 5.4pt; width: 100.0%;" valign="top" width="100%"><div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-size: 12pt;">SELECT * FROM
<i><span style="color: blue;">nombre-de-tabla</span></i> ORDER BY <i><span style="color: blue;">nombre-de-campo1</span></i> +0 ASC</span><span style="font-size: large;">,</span><span style="font-size: 12pt;">
<span style="color: blue;"><i>nombre-de-campo2</i></span> +0 DESC</span><o:p></o:p></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
</td>
</tr>
<tr>
<td style="background: #E7E6E6; border-top: none; border: solid #7F7F7F 1.0pt; mso-background-themecolor: background2; mso-border-alt: solid #7F7F7F .5pt; mso-border-themecolor: text1; mso-border-themecolor: text1; mso-border-themetint: 128; mso-border-themetint: 128; mso-border-top-alt: solid #7F7F7F .5pt; mso-border-top-themecolor: text1; mso-border-top-themetint: 128; padding: 0cm 5.4pt 0cm 5.4pt; width: 100.0%;" valign="top" width="100%"><div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-size: 12pt;">SELECT * FROM catalogo
ORDER BY titulo +0 ASC, fecha +0 DESC</span><o:p></o:p></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
</td></tr>
</tbody></table>
<i>Tabla 3. Resultados según orden natural ascendente del campo1 y orden natural descendente del campo2</i><br />
<br />
<br />
<b>Cláusula SELECT DISTINCT</b><br />
<div style="text-align: justify;">
La cláusula SELECT DISTINCT permite seleccionar resultados de la consulta cuyos datos no sean duplicados en las columnas que se indican. </div>
<br />
<table border="1" cellpadding="0" cellspacing="0" class="MsoTableGrid" style="border-collapse: collapse; border: none; mso-border-alt: solid #7F7F7F .5pt; mso-border-insideh-themecolor: text1; mso-border-insideh-themetint: 128; mso-border-insideh: .5pt solid #7F7F7F; mso-border-insidev-themecolor: text1; mso-border-insidev-themetint: 128; mso-border-insidev: .5pt solid #7F7F7F; mso-border-themecolor: text1; mso-border-themetint: 128; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-yfti-tbllook: 1184; width: 100%px;">
<tbody>
<tr>
<td style="border: solid #7F7F7F 1.0pt; mso-border-alt: solid #7F7F7F .5pt; mso-border-themecolor: text1; mso-border-themecolor: text1; mso-border-themetint: 128; mso-border-themetint: 128; padding: 0cm 5.4pt 0cm 5.4pt; width: 100.0%;" valign="top" width="100%"><div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-size: 12pt;">SELECT DISTINCT
<i><span style="color: blue;">nombre-de-campo1</span></i> FROM <i><span style="color: blue;">nombre-de-tabla</span></i></span><o:p></o:p></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
</td>
</tr>
<tr>
<td style="background: #E7E6E6; border-top: none; border: solid #7F7F7F 1.0pt; mso-background-themecolor: background2; mso-border-alt: solid #7F7F7F .5pt; mso-border-themecolor: text1; mso-border-themecolor: text1; mso-border-themetint: 128; mso-border-themetint: 128; mso-border-top-alt: solid #7F7F7F .5pt; mso-border-top-themecolor: text1; mso-border-top-themetint: 128; padding: 0cm 5.4pt 0cm 5.4pt; width: 100.0%;" valign="top" width="100%"><div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-size: 12pt;">SELECT DISTINCT autor FROM catalogo</span><o:p></o:p></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
</td></tr>
</tbody></table>
<div class="MsoNormal">
<i><span lang="EN-US"> </span>Tabla 4. Seleccionar registros de la tabla cuyos valores en el campo1 sean diferentes o distintos</i></div>
<br />
<table border="1" cellpadding="0" cellspacing="0" class="MsoTableGrid" style="border-collapse: collapse; border: none; mso-border-alt: solid #7F7F7F .5pt; mso-border-insideh-themecolor: text1; mso-border-insideh-themetint: 128; mso-border-insideh: .5pt solid #7F7F7F; mso-border-insidev-themecolor: text1; mso-border-insidev-themetint: 128; mso-border-insidev: .5pt solid #7F7F7F; mso-border-themecolor: text1; mso-border-themetint: 128; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-yfti-tbllook: 1184; width: 100%px;">
<tbody>
<tr>
<td style="border: solid #7F7F7F 1.0pt; mso-border-alt: solid #7F7F7F .5pt; mso-border-themecolor: text1; mso-border-themecolor: text1; mso-border-themetint: 128; mso-border-themetint: 128; padding: 0cm 5.4pt 0cm 5.4pt; width: 100.0%;" valign="top" width="100%"><div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-size: 12pt;">SELECT DISTINCT
<i><span style="color: blue;">nombre-de-campo1</span></i></span><span style="font-size: large;">,</span><span style="font-size: 12pt;"> <i><span style="color: blue;">nombre-de-campo2</span></i></span><span style="font-size: large;">,</span><span style="font-size: 12pt;"> <i><span style="color: blue;">nombre-de-campo3</span></i> FROM <i><span style="color: blue;">nombre-de-tabla</span></i>
WHERE <span style="color: blue;"><i>condición-de-consulta</i></span></span><o:p></o:p></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
</td>
</tr>
<tr>
<td style="background: #E7E6E6; border-top: none; border: solid #7F7F7F 1.0pt; mso-background-themecolor: background2; mso-border-alt: solid #7F7F7F .5pt; mso-border-themecolor: text1; mso-border-themecolor: text1; mso-border-themetint: 128; mso-border-themetint: 128; mso-border-top-alt: solid #7F7F7F .5pt; mso-border-top-themecolor: text1; mso-border-top-themetint: 128; padding: 0cm 5.4pt 0cm 5.4pt; width: 100.0%;" valign="top" width="100%"><div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-size: 12pt;">SELECT DISTINCT materia,
autor, titulo FROM catalogo WHERE fecha LIKE '%2010%'</span><o:p></o:p></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
</td></tr>
</tbody></table>
<div class="MsoNormal">
<i>Tabla 5. Seleccionar registros de la tabla que cumpla las condiciones de consulta establecidas y cuyos valores en los campos 1, 2 y 3 sean diferentes o distintos</i></div>
<br />
<br />m4reloxhttp://www.blogger.com/profile/17813464729615565056noreply@blogger.com0tag:blogger.com,1999:blog-8577729063054494827.post-77692584845819423162011-10-10T09:56:00.000+02:002011-10-10T09:56:09.436+02:0004.- Operaciones de consulta SQL esenciales<div style="text-align: justify;">Hasta el momento se han advertido los mecanismos más sencillos de interactuación en lenguaje SQL. En este apartado se comenzará a explorar las posibilidades de consulta esenciales de SQL, concretamente el uso del operador LIKE, REGEXP (de comparación de cadenas) y los operadores AND, OR, XOR y NOT ( booleanos ).</div><br />
<b>Consulta con operador LIKE</b> <br />
<div style="text-align: justify;">El operador LIKE al igual que REGEXP, son operadores cuya misión es la comparación de cadenas o patrones dados en la consulta. La principal diferencia es que LIKE efectúa un reconocimiento de la cadena de consulta de forma absoluta a no ser que se especifiquen los caracteres precedentes y antecedentes con:</div><div style="text-align: justify;"><ul><li>( % ) Establece coincidencia con cualquier extensión y tipo de caracter delante o detrás de la cadena de consulta, según se ubique el porcentaje.</li>
<li>( _ ) Establece coincidencia con 1 caracter de cualquier tipo delante o detrás de la cadena de consulta, según se ubique el guión bajo.</li>
</ul></div><br />
<div style="border: 2px outset rgb(192, 192, 192); color: black; font-family: courier; margin: 10px; padding: 10px; text-align: left;">SELECT * FROM catalogo WHERE titulo <b style="color: red;">LIKE</b> '<b style="color: blue;">%</b><b><span style="color: blue;">cupe</span></b><b style="color: blue;">%</b>'</div><div style="text-align: center;"><i> Tabla1. </i><i>Buscar cualquier registro de la tabla catálogo cuyo título contenga la cadena <b>cup</b>e. Esta consulta obtendría como resultado registros con la palabra recuperación, irrecuperable, ocupe, desocupen, etc. </i><br />
<div style="text-align: left;"><i> </i><b><br />
</b></div><div style="border: 2px outset rgb(192, 192, 192); color: black; font-family: courier; margin: 10px; padding: 10px; text-align: left;">SELECT * FROM catalogo WHERE isbn <b style="color: red;">LIKE</b> '<b style="color: blue;">978-84-____-___-5</b>'</div><div style="text-align: center;"><i> Tabla2. </i><i>Buscar cualquier registro de la tabla catálogo cuyo isbn contenga cualquier caracter entre 978-84- y -5. Por ejemplo se obtendría como resultado 978-84-1234-123-5.</i></div></div><br />
<b>Consulta con operador AND ( && )</b><br />
<div style="text-align: justify;">Recupera registros siempre y cuando se cumplan todas las condiciones establecidas. Si alguna no se cumple, no se incluye como resultando, saltando a los siguientes registros de la tabla. Por ejemplo la consulta de la <i>tabla3</i>, establece que los registros deberán cumplir la condición de contener en su título, subtítulo, resumen, descripción y autor la palabra texto. Obsérvese la sintaxis empleada (SELECT + campos + FROM + tabla afectada + WHERE + condición1(campo + LIKE + 'texto de consulta') AND condición2(campo + LIKE + 'texto de consulta') AND condición3(campo + LIKE + 'texto de consulta' ))</div><div style="text-align: justify;"><br />
</div><div style="border: 2px outset rgb(192, 192, 192); color: black; font-family: courier; margin: 10px; padding: 10px; text-align: left;">SELECT * FROM catalogo WHERE <br />
titulo LIKE '%texto%' <b><span style="color: red;">AND </span></b> subtitulo LIKE '%texto%' <b style="color: red;">AND</b> <br />
resumen LIKE '%texto%' <b style="color: red;">AND </b><br />
descripcion LIKE '%texto%' <b style="color: red;">AND</b> <br />
autor LIKE '%texto%'<br />
LIMIT 0,30</div><div style="text-align: center;"><i> Tabla3. </i><i>Consulta utilizando el operador AND</i></div><br />
<b>Consulta con operador OR ( || )</b><br />
<div style="text-align: justify;">Recupera registros siempre que al menos una de las condiciones establecidas se verifique.<b> </b>Por ejemplo, en la tabla4 se establece que los registros deberán cumplir que o bien el título coincida con el patrón, o bien sea el subtítulo, el resumen, descripción o autor. No devolverá ningún registro si no se cumple al menos una de las condiciones.<b></b></div><div style="text-align: justify;"><b><br />
</b></div><div style="border: 2px outset rgb(192, 192, 192); color: black; font-family: courier; margin: 10px; padding: 10px; text-align: left;">SELECT * FROM catalogo WHERE <br />
titulo LIKE '%texto%' <b style="color: red;">OR </b> subtitulo LIKE '%texto%' <b style="color: red;">OR </b><br />
resumen LIKE '%texto%' <b><span style="color: red;">OR </span></b><br />
descripcion LIKE '%texto%' <b style="color: red;">OR</b><br />
autor LIKE '%texto%' <br />
LIMIT 0,30</div><div style="text-align: center;"><i> Tabla4. </i><i>Consulta utilizando el operador OR</i></div><br />
<b>Consulta con operador XOR</b><br />
<div style="text-align: justify;">Variante absoluta del operador OR, recupera registros que cumplan una condición u otra pero nunca recuperará registros en que ambas condiciones se cumplan a la vez. Por ejemplo la consulta de la tabla5 recuperará cualquier libro del catálogo cuya temática sea arquitectura o bibliotecas, pero nunca arquitectura de bibliotecas. </div><b> </b><br />
<div style="border: 2px outset rgb(192, 192, 192); color: black; font-family: courier; margin: 10px; padding: 10px; text-align: left;">SELECT * FROM catalogo WHERE <br />
tematica LIKE '%arquitectura%' <b style="color: red;">XOR </b><br />
tematica LIKE '%bibliotecas%'<br />
LIMIT 0,30 </div><div style="text-align: center;"><i> Tabla5. </i><i>Consulta utilizando el operador XOR</i></div><br />
<b>Consulta con operador NOT ( ! )</b><br />
<div style="color: black; text-align: justify;">Se utiliza como operador de precedencia con los operadores de comparación de cadenas de tipo LIKE, permite establecer una negación en las consultas. Por ejemplo en la tabla6, se recuperará todos los registros del catálogo cuyo autor sea <i>Cervantes</i> y cuyos títulos no contengan la palabra <i>Quijote. </i>El resultado probable sería<i> La Gitanilla, Rinconete y Cortadillo, El Licenciado Vidriera, etc, menos El Quijote. </i></div><div style="border: 2px outset rgb(192, 192, 192); font-family: courier; margin: 10px; padding: 10px; text-align: left;"><div style="color: black;">SELECT * FROM catalogo WHERE </div><b style="color: red;"></b> autor LIKE '%cervantes%' AND<br />
title <b style="color: red;">NOT LIKE</b> '%quijote%'<br />
LIMIT 0,30</div><div style="text-align: center;"><i> Tabla6. </i><i>Consulta utilizando el operador NOT</i></div><br />
<b>Consulta con operador REGEXP </b><br />
<div style="text-align: justify;">REGEXP es un operador especializado en la comparación de cadenas de texto mediante expresiones regulares (REGular EXPressions)<b>. </b>Las expresiones regulares se utilizan para afinar de forma mucho más precisa la consulta de datos o cadenas de texto. Estas se componen a base de caracteres especiales, los más comunes son:</div><div style="text-align: justify;"><ul><li>( . ) Cada punto corresponde a un caracter individual, puede ser un número, letra o cualquier otro caracter.</li>
<li>( ^ ) Indica que el patrón comienza por la instrucción que siga a ^.</li>
<li>( $ ) Indica que el patrón finaliza con la cadena o instrucción que preceda a $.</li>
<li>( ... ) Tantos puntos se indiquen, tantos caracteres tendrá la cadena de texto objetivo.</li>
<li>( ^[Az]{5} ) Indica que el patron a buscar comienza por cualquier letra, con una extensión de 5 caracteres.</li>
<li>( ^.*[0-9]{2}$ ) Establece que la cadena comienza por cualquier caracter repetido n veces y que finaliza con un número de 2 cifras.</li>
</ul>Por ejemplo en la<i> tabla7 </i>se consultan todos los autores cuyo apellido comience por Bal. El resultado podrá ser muy diverso, <i>Balzac, Balz, Balza</i>, etc.<br />
<ul></ul></div><div style="border: 2px outset rgb(192, 192, 192); color: black; font-family: courier; margin: 10px; padding: 10px; text-align: left;">SELECT * FROM catalogo WHERE<br />
autor REGEXP '^Bal'<br />
LIMIT 0,30 </div><div style="text-align: center;"><i> Tabla7. </i><i>Consulta utilizando el operador REGEXP</i></div><br />
Algunas referencias de interés para el estudio de expresiones regulares y sus pruebas son las siguientes:<br />
<ul><li>FRIEDL, J. 2006. Mastering Regular Expressions: Understand Your Data and Be More Productive. Disponible en: <a href="http://www.minek.com/files/Mastering%20Regular%20Expressions.pdf">http://www.minek.com/files/Mastering%20Regular%20Expressions.pdf</a></li>
</ul><ul><li>SKINNER, G. 2011. RegExr. Disponible en: <a href="http://gskinner.com/RegExr/">http://gskinner.com/RegExr/</a></li>
</ul>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-8577729063054494827.post-22248742340930540352011-10-10T09:55:00.000+02:002011-10-10T09:55:59.864+02:0003.- Principios de SQL y sintaxis básica<div style="text-align: justify;">Por lo tanto SQL es un lenguaje de consulta estándar diseñado para operar en bases de datos. Como se ha explicado actúa en MySQL, pero también puede operar en otras bases de datos como Oracle, DB2, SQL server, PostgreSQL, etc. Qué operaciones permite llevar a cabo:</div><ul><li>Ejecutar consultas y recuperar datos</li>
<li>Efectuar procesos de recuperación de información</li>
<li>Insertar, actualizar y eliminar registros</li>
<li>Crear nuevas bases de datos, tablas y campos</li>
<li>Establecer permisos de administración para los usuarios</li>
<li>Crear distintas vistas de una base de datos</li>
</ul><br />
<b>Aprendiendo la sintaxis básica</b> <br />
<div style="text-align: justify;">En este curso nos centraremos en los métodos de recuperación por medio de SQL. Pero para ello es necesario aprender una sintaxis básica con la que se explican los principios de consulta SQL. En la siguiente <i>tabla1</i> se observan una serie de palabras reservadas o cláusulas (coloreadas en rojo) que corresponden al selector de campos (SELECT), al selector de tablas (FROM) y a la cláusula condicional (WHERE).<br />
<br />
</div><div style="border: outset 2px #c0c0c0; font-family: courier; margin: 10px; padding: 10px;"><b style="color: red;">SELECT</b> <b><span style="color: blue;">campos</span></b> <b style="color: red;">FROM</b> <b style="color: blue;">tabla</b> <b style="color: red;">WHERE</b> <b><span style="color: blue;">condición</span></b></div><div style="text-align: justify;"><div style="text-align: center;"><i> Tabla1. Sintáxis de consulta básica</i></div><br />
Siempre que se desea obtener datos o resultados de una consulta SQL se requiere un selector de los campos que son objetivo de la búsqueda, seleccionar la tabla en la que se desea buscar la información y establecer las condiciones oportunas que deben cumplir los resultados. Véase el siguiente ejemplo de la <i>tabla2</i>:</div><br />
<div style="border: outset 2px #c0c0c0; font-family: courier; margin: 10px; padding: 10px;">SELECT <b style="color: #6aa84f;">isbn</b> FROM <b style="color: #6aa84f;">catalogo</b> WHERE <b><span style="color: #6aa84f;">autor</span></b> LIKE '<b style="color: #6aa84f;"><span style="color: blue;">%</span><span style="color: blue;">bryson</span></b><b><span style="color: blue;">%</span></b>'</div><div style="text-align: justify;"><div style="text-align: center;"><i> Tabla2. </i><i>Ejemplo de consulta de todos los isbn del catálogo de libros cuyo autor sea bryson</i></div><br />
Este ejemplo se puede traducir de la siguiente forma: Selecciona el campo <i>isbn</i> de todos los registros de la tabla <i>catálogo</i> que cumplan la condición de que dentro del campo <i>autor </i>se contenga el término <i>bryson</i>. Obsérvese que el término de consulta esta rodeado de porcentajes. Esos caracteres también denominados truncamientos actúan sobre la consulta para indicar que la cadena <i>bryson</i> puede tener cadenas de texto que le precedan y que le sigan, como por ejemplo <i><u>bill </u><b>bryson</b><u> natural de</u></i>. </div><div style="text-align: justify;"><br />
</div><div style="text-align: justify;"><b>Crear una base de datos</b><br />
Para crear una base de datos solo es necesario recordar la fórmula (CREATE DATABASE + nombre de la base de datos), véase <i>tabla3</i>. El nombre de la base de datos es recomendable que se escriba siempre en minúsculas, sin caracteres extraños, símbolos o acentos. Tampoco debería preceder al nombre ningún número. Por otro lado los espacios en el nombre deben ser sustituidos por guiones bajos (_) o guiones medios (-). Finalmente es recomendable el uso de nombres sencillos que puedan ser fácilmente recordados.<b><br />
</b><br />
<div style="border: outset 2px #c0c0c0; font-family: courier; margin: 10px; padding: 10px;"><b style="color: red;">CREATE DATABASE</b> <b><span style="color: blue;">biblioteca</span></b></div><div style="text-align: center;"><i> Tabla3. </i><i>Crear una base de datos denominada "biblioteca"</i></div><br />
<b>Crear una tabla con campos</b><br />
La creación de una tabla en mysql implica también el diseño de su estructura de campos y con ello definir sus características. Resulta vital la forma en que se diseñan las tablas para así poder efectuar una mejor recuperación y utilizar funciones específicamente diseñadas para tal propósito, es el caso de las consultas de tipo FULLTEXT.<b> </b>Cuando se diseña la tabla, se deben establecer el tipo de campos que la componen en función al tipo de información que albergarán y a su extensión, por otro lado su set de codificación o set de caracteres que se utilizará, véase <i>tabla4</i>.<b><br />
</b><br />
<div style="border: 2px outset rgb(192, 192, 192); font-family: courier; margin: 10px; padding: 10px; text-align: left;"><b style="color: red;">CREATE TABLE</b> <b style="color: blue;">users</b> (<br />
<span style="color: blue;">id</span> <b style="color: #76a5af;">INT</b> NOT NULL AUTO_INCREMENT, <b><span style="color: orange;">PRIMARY KEY(id)</span></b>,<br />
<span style="color: blue;">name </span> <b style="color: #76a5af;">VARCHAR(255)</b> CHARACTER SET <b style="color: #c27ba0;">utf8</b> COLLATE <b><span style="color: #93c47d;">utf8_general_ci</span></b>,<br />
<span style="color: blue;">surname</span> <b><span style="color: #76a5af;">VARCHAR(255)</span></b> CHARACTER SET <b style="color: #c27ba0;">utf8</b> COLLATE <b><span style="color: #93c47d;">utf8_general_ci</span></b>,<br />
<span style="color: blue;">allvisits</span> <b style="color: #76a5af;">LONGTEXT</b> CHARACTER SET <b style="color: #c27ba0;">utf8</b> COLLATE <b><span style="color: #93c47d;">utf8_general_ci</span></b>,<br />
<span style="color: blue;">lastvisit</span> <b style="color: #76a5af;">VARCHAR(255)</b> CHARACTER SET <b style="color: #c27ba0;">utf8</b> COLLATE <b><span style="color: #93c47d;">utf8_general_ci</span></b>,<br />
<span style="color: blue;">lastsession</span> <b style="color: #76a5af;">VARCHAR(255)</b> CHARACTER SET <b style="color: #c27ba0;">utf8</b> COLLATE <b style="color: #93c47d;">utf8_general_ci</b>,<br />
<span style="color: blue;">online</span> <b style="color: #76a5af;">VARCHAR(50)</b> CHARACTER SET <b style="color: #c27ba0;">utf8</b> COLLATE <b style="color: #93c47d;">utf8_general_ci</b>,<br />
<span style="color: blue;">level</span> <b style="color: #76a5af;">VARCHAR(255)</b> CHARACTER SET <b style="color: #c27ba0;">utf8</b> COLLATE <b><span style="color: #93c47d;">utf8_general_ci</span></b>,<br />
<span style="color: blue;">username</span> <b style="color: #76a5af;">VARCHAR(255)</b> CHARACTER SET <b style="color: #c27ba0;">utf8</b> COLLATE <b style="color: #93c47d;">utf8_general_ci</b>,<br />
<span style="color: blue;">password</span> <b style="color: #76a5af;">VARCHAR(255)</b> CHARACTER SET <b style="color: #c27ba0;">utf8</b> COLLATE <b style="color: #93c47d;">utf8_general_ci</b>,<br />
<span style="color: blue;">trash</span> <b style="color: #76a5af;">VARCHAR(500)</b> CHARACTER SET <b style="color: #c27ba0;">utf8</b> COLLATE <b style="color: #93c47d;">utf8_general_ci</b>,<br />
<span style="color: blue;">snumber</span> <b style="color: #76a5af;">VARCHAR(2)</b> CHARACTER SET <b style="color: #c27ba0;">utf8</b> COLLATE <b style="color: #93c47d;">utf8_general_ci</b>,<br />
<span style="color: blue;">email</span> <b style="color: #76a5af;">VARCHAR(255)</b> CHARACTER SET <b style="color: #c27ba0;">utf8</b> COLLATE <b style="color: #93c47d;">utf8_general_ci</b><br />
) CHARACTER SET <b style="color: #c27ba0;">utf8</b> COLLATE <b><span style="color: #93c47d;">utf8_general_ci</span></b></div><div style="text-align: center;"><i> Tabla4. </i><i>Crear una tabla denominada "users"</i></div><br />
<b>Insertar un nuevo registro en la tabla</b><br />
Crear un nuevo registro en la tabla anterior se lleva a cabo con la sentencia de la <i>tabla5</i>. Obsérvese la sintaxis (INSERT INTO + nombre de tabla afectada + SET + nombre del campo = 'datos', nombre del campo = 'datos', nombre del campo = 'datos'...) Esta forma de insertar datos permite al operador de MySQL tener un mayor control sobre la información que inserta en el registro, pues no esta obligado a introducir todos los datos de todos los campos si no lo desea. Es posible introducir sólo la información de los campos que se reseñen.<br />
<br />
<div style="border: 2px outset rgb(192, 192, 192); font-family: courier; margin: 10px; padding: 10px; text-align: left;"><b style="color: red;">INSERT INTO</b> <b><span style="color: blue;">users</span></b> <b style="color: red;">SET</b> <b style="color: #45818e;">name</b>='<i>nombre</i>', <b style="color: #45818e;">surname</b>='<i>apellidos</i>', <b style="color: #45818e;">allvisits</b>='<i>registro de todas las visitas</i>', <b style="color: #45818e;">lastvisits</b>='<i>última visita</i>', <b style="color: #45818e;">lastsession</b>='<i>última sesión</i>', <b style="color: #45818e;">online</b>='<i>estado</i>', <b style="color: #45818e;">level</b>='<i>nivel de acceso</i>', <b style="color: #45818e;">username</b>='<i>nombre de usuario</i>', <b style="color: #45818e;">password</b>='<i>contraseña</i>', <b style="color: #45818e;">trash</b>='<i>código de encriptación</i>', <b style="color: #45818e;">snumber</b>='<i>código de seguridad</i>', <b style="color: #45818e;">email</b>='<i>correo electrónico</i>'</div><div style="text-align: center;"><i> Tabla5. </i><i>Ejemplo de inserción de un registro completo en la tabla</i></div><br />
<b>Modificar y actualizar un registro de la tabla</b><br />
Se utiliza la sintaxis (UPDATE + nombre de tabla afectada + SET + nombre del campo = 'nuevo dato', nombre del campo = 'nuevo dato', nombre del campo = 'nuevo dato' + WHERE + condición) Al igual que en el caso anterior de la inserción, no se está obligado a repetir todos los campos de la estructura que conforma la tabla de MySQL. Es suficiente reseñando sólo aquellos campos del registro en el que se van a suceder los cambios con nuevos datos. Finalmente se requiere la condición de la consulta de actualización, es decir, qué registro es el que se desea actualizar. En el caso de la tabla6, es sobre un registro en concreto, por lo que es necesario expresar que el identificador del usuario sea igual al que establezcamos.<b><br />
</b><br />
<div style="border: 2px outset rgb(192, 192, 192); font-family: courier; margin: 10px; padding: 10px; text-align: left;"><b style="color: red;">UPDATE</b> <b style="color: blue;">users</b> <b><span style="color: red;">SET</span></b> <b style="color: #45818e;">name</b> = '<i>nuevo nombre</i>', <b style="color: #45818e;">surname</b> = '<i>nuevos apellidos</i>' <b style="color: red;">WHERE</b> <b style="color: #45818e;">id</b> = '<i>identificador del registro</i>'</div><div style="text-align: center;"><i> Tabla6. </i><i>Ejemplo de modificación y actualización de un registro de una tabla</i></div><br />
<b>Eliminar un registro de la tabla</b><br />
Para eliminar un registro de una tabla se emplea la sintaxis (DELETE FROM + nombre de tabla afectada + WHERE + condición), véase <i>tabla7</i>. Al igual que en el caso de la modificación y actualización de una tabla es preciso determinar la condición bajo la que se eliminará los registros o registro concreto. Una vez más señalando el número de identificación es suficiente para indicar a MySQL cómo proceder.<b><br />
</b><br />
<div style="border: 2px outset rgb(192, 192, 192); font-family: courier; margin: 10px; padding: 10px; text-align: left;"><b style="color: red;">DELETE FROM</b> <b style="color: blue;">items</b> <b><span style="color: red;">WHERE</span></b> <b style="color: #45818e;">id</b> = '<i>identificador del registro</i>'</div><div style="text-align: center;"><i> Tabla7. </i><i>Borrar un registro de una tabla</i></div><br />
</div>Unknownnoreply@blogger.com1tag:blogger.com,1999:blog-8577729063054494827.post-68769791939804696432011-10-04T10:03:00.000+02:002011-10-04T10:03:14.980+02:0002.- Recuperación de información en bases de datos<b>¿Qué es una base de conocimiento?</b><br />
<div style="text-align: justify;">Es cualquier colección o fondo documental que constituye el corpus de un sistema de recuperación de información. Habitualmente esta base de conocimiento se organiza y estructura en bases de datos para su mejor gestión, tratamiento y recuperación. Esto significa que base de conocimiento puede ser desde un compendio de datos, cifras y cadenas de texto inconexas, hasta documentos, referencias bibliográficas y compendios informativos y semánticos con plena significación. </div><br />
<b>¿Qué es una base de datos?</b><br />
<div style="text-align: justify;">La base de datos es el sistema que posibilita la organización y estructuración de los contenidos o bases de conocimiento en tablas y éstas a su vez en campos, de tal forma que cada campo represente una característica o rasgo descriptivo de la información o contenido registrado en la base de datos y cada tabla represente el dominio general que se está almacenando. Por ejemplo una tabla de <i>usuarios</i> contendrá campos lógicos que definan, describan e identifiquen a cada usuario. Por ejemplo el <i>nombre, apellidos, dni, direccion, correo, website, telefono, cp</i>, etc. Dentro de las distintas tablas de una base de datos es posible encontrar relaciones evidentes, ampliando la magnitud de la información. Es el caso de las bases de datos relacionales. Por ejemplo la tabla usuarios puede estar relacionada con la tabla <i>prestamos</i> en la que se relacionan los documentos y materiales librarios que se les presta. Esta operación en todo caso requiere de un campo clave de relación, que puede ser el identificador del usuario, sobre el que se registra los datos del préstamo y el identificador del libro que se le está prestando. Este mecanismo tan sencillo hace posible que distintas tablas queden vinculadas y puedan ser contrastadas y filtradas. Pero una base de datos comporta muchos más aspectos, el tipo de campos, sus características especiales para almacenar determinados contenidos, por ejemplo datos binarios, imágenes, textos de gran extensión, numeración en coma flotante, etc. Todos estos componentes hacen que cualquier base de conocimiento pueda ser recogida sea cual sea su naturaleza y características.</div><br />
<b>¿Qué es un gestor de bases de datos?</b><br />
<div style="text-align: justify;">El manejo de las bases de datos habitualmente se lleva a cabo mediante comandos bien definidos en terminales especializados, shell (Linux), cmd (Windows). Estos comandos en la mayoría de los casos responden al lenguaje de consulta normalizado SQL (Structured Query Language) con el que la base de datos entiende qué debe hacer. Mediante este lenguaje es posible dar ordenes al sistema para que inserte un registro, lo borre, lo edite y por supuesto recupere un determinado dato, información o documento. Dado que este método de comunicación requiere un tecleado continuo para interactuar con el sistema, se han desarrollado programas informáticos que llevan a cabo dicha función de manera automática, facilitando al administrador un interfaz gráfico para la edición, tratamiento y recuperación de la información. Estos programas que permiten trabajar con las bases de datos, las tablas, los campos y los datos almacenados en ellas se denominan <i>gestores de bases de datos</i>. Uno de los más conocidos y utilizados en todo el mundo es <a href="http://www.phpmyadmin.net/home_page/index.php">PhpMyAdmin</a>. Diseñado para trabajar principalmente con bases de datos que emplean el lenguaje SQL.</div><br />
<b>¿Qué es MySQL?</b><br />
<div style="text-align: justify;">MySQL es la principal base de datos que alambica la web. Utiliza el lenguaje de consulta SQL y es utilizada conjuntamente con el lenguaje de programación PHP para crear las principales aplicaciones de la red. Normalmente actúa como un componente más que se instala en el paradigma de desarrollo web WAMP (SO. Windows, Servidor http Apache, BD MySQL, intérprete PHP), LAMP (SO. Linux, Servidor http Apache, BD MySQL, intérprete PHP) o MAMP (SO. Mac, Servidor http Apache, BD MySQL, intérprete PHP). Dicho de otra forma es la base de datos que sirve para almacenar la mayoría de los datos y transacciones comunicativas que se producen en internet. Es muy notable su utilización en Sitios Web, CMS (Content Management System) o gestores de contenidos, Sistemas de Gestión Integral de Bibliotecas, Archivos, Museos y un largo etcétera de herramientas y aplicaciones de software libre. Entre sus características más importantes destaca su capacidad para ejecutar múltiples consultas en distintos hilos de ejecución por segundo, gran capacidad de almacenamiento y motor de almacenamiento que efectúa un proceso de indexación automático de los contenidos y en todo caso de la base de conocimiento con que se alimente. Estas últimas características permiten hablar de recuperación de información y no de recuperación de datos, ya que efectúa por si solo los procesos de tratamiento previos a la recuperación de información. </div><ul><li>Eliminación de palabras vacías</li>
<li>Indexación de contenidos</li>
<li>Creación de fichero inverso</li>
<li>Análisis de frecuencias de cada término</li>
<li>Recuperación booleana</li>
<li>Recuperación a texto completo</li>
<li>Recuperación con lenguaje natural</li>
<li>Recuperación con expansión de consulta</li>
</ul><ul></ul><br />
<b>¿Cómo funciona?</b><br />
<div style="text-align: justify;">Para trabajar con MySQL se necesita previamente instalarlo. Esta tarea se lleva a cabo con la instalación de un servidor http y sus componentes habituales, utilizando uno de los paradigmas de desarrollo web mencionados anteriormente. Por ejemplo mediante la instalación de una distribución WAMP ( <a href="http://www.appservnetwork.com/">AppServ</a> ), LAMP ( <a href="http://www.apachefriends.org/es/xampp.html">Xampp</a> ) o MAMP ( <a href="http://www.mamp.info/en/index.html">mamp</a> ). Una vez instalado se requieren unos datos de conexión fundamentales para empezar a operar, estos son:</div><ul><li style="text-align: justify;"> <b>Nombre del servidor</b>. Esto es la dirección IP o el nombre de dominio o la máquina en el que está instalado el servicio HTTP, la base de datos MySQL y el intérprete PHP. Por ejemplo si se trata de una instalación local que corresponde a nuestro equipo u ordenador, la dirección IP del servidor siempre será <i>127.0.0.1</i> y el nombre de servidor <i>localhost</i>, normalmente.</li>
<li style="text-align: justify;"><b>Nombre de la base de datos</b>. Para que MySQL sepa con que base de datos se va a trabajar, es necesario indicar o seleccionar en todo caso su nombre. Se debe pensar que MySQL puede generar tantas bases de datos como requiera el usuario, lo que implica que en todo momento es necesario distinguir sobre cuál se desea operar.</li>
<li style="text-align: justify;"><b>Usuario y contraseña MySQL</b>. Es el nombre del usuario y su contraseña de acceso a la base de datos MySQL. Éste puede ser un simple usuario con unos privilegios limitados o el administrador del sistema. En una instalación local de prueba, tanto el usuario como la contraseña siempre será <i>root</i> (Convenido por defecto). </li>
</ul><i>Ejemplo de sintaxis de conexión en PHP</i><br />
<div style="border: outset 2px #c0c0c0; font-family: Courier; margin: 10px; padding: 10px;"><b style="color: red;"><?php</b> <br />
<b style="color: #660000;">$con</b> = mysql_connect('<b style="color: blue;">localhost</b>', '<b style="color: blue;">root</b>', '<b><span style="color: blue;">root</span></b>') or die ('error: no se pudo conectar a mysql'); <br />
<b style="color: #660000;">$database</b> = '<b style="color: blue;">openbiblio</b>'; <br />
<div style="color: red;"><b>?></b></div></div><br />
Especificados los datos de conexión e introducidos en el sistema MySQL, se hace posible su consulta y operación mediante sentencias SQL o bien empleado el interfaz gráfico de un gestor de bases de datos como el mencionado anteriormente.<br />
<br />
<ul></ul>Unknownnoreply@blogger.com3tag:blogger.com,1999:blog-8577729063054494827.post-33033300253168103242011-10-03T18:40:00.000+02:002011-10-03T17:02:04.857+02:0000.- Introducción<div style="text-align: justify;">La continua proliferación y crecimiento de la información publicada en la red, hace necesario un conocimiento más profundo de las técnicas, herramientas y aplicaciones en recuperación de información. En este sentido los sistemas de gestión de contenidos también denominados CMS (Como <a href="http://www.joomla.org/">Joomla</a> o <a href="http://drupal.org/">Drupal</a>) han contribuido a facilitar la organización de la información y al mismo tiempo multiplicar el número de vías y medios de acceso a la misma. En este marco de trabajo también se circunscriben los sistemas de redifusión o sindicación de contenidos, así como las herramientas y modelos de recuperación.</div><div style="text-align: justify;"><br />
</div><div style="text-align: justify;">Se consideran aplicaciones documentales en su sentido más amplio, todas aquellas herramientas cognitivas de tipo clasificatorio, librario o informático que facilitan y ayudan al documentalista en su actividad profesional. En el contexto en el que se abordará la asignatura, en el de la recuperación de información, se consideran aplicaciones documentales a los sistemas de redifusión y recuperación de información bibliográfica sindicada (<a href="http://mblazquez.es/testbench/orangeup/">OrangeUp</a>), sistemas de recuperación basados en técnicas de agrupación o clustering (<a href="http://search.carrot2.org/stable/search">Carrot2</a>), la metodología de consulta en bases de datos SQL, sistemas de recuperación con expansión de consulta, los sistemas de indexación y análisis de contenidos a gran escala (<a href="http://www-01.ibm.com/software/data/enterprise-search/omnifind-enterprise/">OmniFind</a>), así como a los motores de recuperación de alto rendimiento como (<a href="http://lucene.apache.org/java/docs/index.html">Apache Lucene</a>).</div>Unknownnoreply@blogger.com0