Wednesday, September 24, 2014

Normalización

La normalización es un proceso de canonizar los tokens para que al momento de almacenarlos se puedan recuperar, a pesar de contener diferencias superficiales de caracteres. Por ejemplo, si realizamos una búsqueda por "USA", deberíamos también obtener los tokens que digan "U.S.A". Esto se hace realizando clases equivalentes, que usualmente son llamadas por un mismo término.  

También es importante considerar los otros elementos como acentos, apóstrofes, guiones, etcétera. Si tenemos la palabra "lower-case", el sistema debe ser capaz de encontrar la palabra buscando "lower-case" "lower case" o "lowercase". 
En el caso de palabras juntas que pueden ser separadas, por ejemplo en el Alemán, que tienen la tendencia a juntar las palabras, la solución sería separarlas. Si tenemos la palabra "Computerlinguistik" debería subdividirse en dos palabras "Computer" y "linguistik". En español, la palabra "pena" y "peña" tienen un significado completamente diferente. 

Con las mayúsculas sucede lo mismo. Una solución que se puede realizar es pasando todos los tokens a minúscula, incluso si son al principio de una oración. El único caso en que se pueden dejar en minúscula es cuando las palabras tienen que ir con mayúscula, ya sea siglas, o nombres propios. 

Los documentos usualmente usan derivados que usan las mismas palabras raiz, por ejemplo organización, organizar, organizando. El proceso de Stemming consiste en reducir dichos términos a su base original recortando sus terminaciones.

Por ejemplo:
  • am, are, is = be
  • car, cars, car's, cars' = car
En español
  • gatos, gato = gato
Bibliografía

Tokenización

Tokenización es la acción de cortar una frase o una serie de palabras en pedazos llamados tokens. El token es la instancia de una secuencia de caracteres en un documento en particular que se agrupan en cierto orden para formar una frase en particular.

Por ejemplo, si tenemos de entrada la frase:
To sleep perchance to dream
Se separa en tokens de la siguiente manera:
[To] [sleep] [perchance] [to] [dream]

Un tipo es una clase de token con una secuencia única de caracteres. Se pueden identificar y eliminar los tokens iguales dentro del documento. En el ejemplo anterior, podemos observar que tenemos dos tokens [to], entonces al final quedaría de la siguiente manera:
[To][sleep][perchance][dream]
Un término es un tipo (normalizado) que se incluye en el diccionario del sistema de procesamiento de información. El vocabulario es el conjunto de términos de una colección de documentos.

Realizando un borrado de Stopwords, se puede reducir la dimensión del vocabulario y eliminar información innecesaria y de poco valor para el documento. Un ejemplo de tokens que pueden ser eliminados son los artículos, pronombres, preposiciones, conjunciones, etcétera.
En este caso, nuestra frase final quedaría reducida a [sleep][perchance][dream], que son los elementos importantes de la frase. Cabe mencionar que dichas palabras se eliminan en base su utilidad en la frase, por ejemplo, en la frase "flights to london" la palabra to forma parte importante de la frase y si se elimina podría perder su significado.

Bibliografía



Monday, August 25, 2014

GeoJSON

GeoJSON es una herramienta que se utiliza comúnmente para codificar y ubicar información geográfica. Es un formato que sirve para el intercambio de datos geoespaciales. Es soportada por numerosas aplicaciones. Está basado en JSON (Javascript Object Notation), por lo que podemos decir que las herramientas y métodos que son diseñados para JSON también funcionan con GeoJSON.

Si la información necesaria se encuentra en un archivo local, con el mismo dominio que la API de Maps, es posible obtenerla utilizando la clase de Javascript XMLHttpRequest. Se puede hacer por ejemplo un request a files.example.com desde www.example.com. Aquí se muestra un ejemplo donde se crea un nuevo objeto XMLHttpRequest y luego hace un request a http://yourdomain.com/earthquakes.json.


El request es enviado al momento de llamar xhr.send(). Si funciona correctamente, la información se pasa a loadEarthquakes(). 

GeoJSON es un formato estandarizado, cualquier información que reciba como GeoJSON debe tener la misma estructura básica. Esto permite que los scripts sean fácil de escribir y se pueda accesar a la información más fácilmente. 
GeoJSON siempre consiste de un sólo objeto. Dicho objeto representa una geometría, característica o colección de características. Cada uno de los objetos tiene un número de miembros. 

Un objeto puede estar compuesto de diferentes miembros:
  • Geometry: Su valor es un objeto de geometría como se ha definido anteriormente, o un valor nulo JSON. Puede ser:
    • "Point", "MultiPoint", "LineString","MultiLineString", "Polygon", "MultiPolygon", or "GeometryCollection". 
    • Cada uno de los mencionados anterior, a excepción de “GeometryCollection” debe tener un miembro con el nombre coordinates. 
  • Coordinates: El miembro coordinates está compuesto de una posición (Point) o un arreglo de posiciónes (LineString o MultiPoint). Una posición tiene que seguir el orden (x, y, z) (este, norte, y altitud) para un sistema proyectado o (longitud, latitud, altitud) para coordenadas de un sistema geográfico. 
  • Properties: Su valor es un objeto (cualquier objeto JSON o un valor nulo).
  • Type: Es un identificador que determina el tipo de objeto GeoJSON. Puede ser:
    • "Point", "MultiPoint", "LineString","MultiLineString", "Polygon","MultiPolygon", "GeometryCollection","Feature", or "FeatureCollection". 
  • Crs: Significa Coordinate Reference System Objects). Este objeto utiliza el datum WGS84, con las unidades de longitud y latitud en grados decimales. No se puede cambiar el orden de las coordenadas. 
  • Bbox: Significa Bounding Boxes. El valor de dicho miembro debe ser un arreglo 2*n, donde n es el número de dimensiones representadas en las geometrías contenidas, con los valores más bajos y los más altos. 
Aquí se puede ver un ejemplo escrito con las especificaciones y estructura del formato de GeoJSON que se mencionaron anteriormente.

Bibliografía



Thursday, July 24, 2014

Ponderación por pesos

Otra manera de procesar la información es por pesos. Supongamos que tenemos una pregunta o query q y un documento d. (q,d) con una puntuación de 0 a 1 [0,1]. Si obtenemos combinaciones lineales según la zona, cada zona del documento tiene un valor. Supongamos que hay l zonas. Tendríamos g1, g2, ... gl. La sumatoria de dichos valores debe dar 1. 

∑ l1 . F o r 1 ≤ ≤ l

El valor de si se le llama ponderación Booleana, la cual busca coincidencias entre la pregunta y la zona, es decir, se tiene un valor de 1 cuando la pregunta es verdadera y la búsqueda coincide con la zona, mientras que tiene un valor de 0 cuando no. Para obtener el peso de la zona se usa la siguiente fórmula:

                                                                                                     l
gisi. i=

En el procesamiento de un libro, por ejemplo, para 3 zonas g (autor, título, fecha) con un peso determinado g1=0.5, g2 =0.3 y g3 =0.2 (la sumatoria sería 1), se puede observar que la categoría 1, en este caso el autor, tiene más peso que la 1, la fecha. Esto tiene sentido, ya que en una búsqueda es más importante tener el autor correcto, y la fecha de publicación sería un factor adicional.

Bibliografía

Índices por zona y parámetros


Los documentos electrónicos usualmente codifican metadatos (en inglés metadata) asociados con el documento y que sólo puedan ser reconocidos por las computadoras. Podríamos definir metadatos como formas específicas de información sobre un documento (por ejemplo el autor, título, fecha de publicación, etc). Dicha información generalmente incluye campos como la fecha de creación y el formato del documento, así como las que mencionamos anteriormente. Los valores posibles de un campo se dice que son finitos (por ejemplo en las fechas, sería el conjunto de fechas posibles).

Por ejemplo si queremos encontrar documentos escritos por Shakespeare en 1601, conteniendo la frase "alas poor Yorick", se van a realizar intersecciones, a menos de que éstas se puedan fusionar invertidos de forma estándar a índices paramétricos. Existe un índice paramétrico para cada campo, el cual permite seleccionar únicamente los documentos que coinciden con el parámetro en específico. Algunos tienen ya valores ordenados. También se pueden asignar rangos a los valores de los índices, como en las fechas. En un diccionario se pueden tener campos con cada una de las letras.

Las zonas son parecidas a los campos, sin embargo, los contenidos de una zona pueden variar mucho más. Incluso se puede agregar texto de manera libre. Por ejemplo, los títulos de un documento, así como el resumen puede ser clasificado como zona. Se pueden realizar índices separados para cada zona del documento. En el ejemplo del diccionario, su índice de la zona debería estructurar el vocabulario principal del texto de dicha zona.

En una búsqueda por parámetros el usuario puede especificar los requerimientos en cada uno de los campos y zonas.


De lado izquierdo de la imagen se puede observar que la búsqueda de los libros se realiza por diferentes parámetros, tales como editorial, autor, categoría, entre otros. De esta forma se van filtrando los resultados.
En el índice por parámetros se clasifica uno por cada campo o zona.


En el índice por zona, los campos y zonas se codifican como extensiones donde hay un término. Una ventaja es que facilita la búsqueda y las respuestas a preguntas. También ayuda a reducir el tamaño de la búsqueda considerablemente. 


Bibliografía

Procesamiento de datos (Information Retrieval)




El procesamiento de datos (en inglés information retrieval o IR) consiste en encontrar material que contenga grandes cantidades de información no estructurada. Normalmente dicha información se almacena en documentos de texto electrónicos.

Con el paso del tiempo y las nuevas tecnologías, la recuperación de datos cada vez se ha vuelto más importante y ha ido evolucionando. Millones de personas utilizan procesamiento o recuperación de datos todos los días al momento de buscar información por internet, por ejemplo desde un buscador, cuando buscan en sus correos, entre otras. Es una forma de acceso a la información que cada vez se vuelve más dominante e importante, y está cambiando la manera en la que se busca información almacenada en bases de datos. Un ejemplo es cuando queremos buscar un pedido, que para facilitar la búsqueda introducimos un número de confirmación. En una búsqueda web, por ejemplo, el sistema tiene que mostrar resultados de búsqueda que se acerquen a las necesidades del usuario en billones de documentos almacenados en millones de computadoras.

Como se dijo anteriormente, la información que se recupera en estos casos normalmente no tiene ningún tipo de estructura semántica, clara o que sea fácil de organizar. Al obtener información de los documentos, se tiene que ordenar de manera adecuada. Es como cuando se acomodan libros en un librero, se busca ordenarlos por categorías, temas, tareas, etc. Otro ejemplo podría ser el Spotlight que se usa en Mac OS X para realizar búsquedas instantáneas de información personal almacenada en la computadora.

Para entender mejor el problema de recuperación de datos podemos compararlo con un libro, donde queremos buscar palabras claves o personajes de la historia, excluyendo otros. Una manera de realizar la búsqueda es empezando a buscar las palabras en todo el texto desde el principio. La computadora puede realizar una búsqueda lineal en los documentos que se quieren encontrar. A este proceso se le conoce como grepping, llamado así por el comando grep, que realiza este proceso. Grepping puede ser un proceso muy efectivo.

La cantidad de información que existe en internet aumenta cada vez más, y es necesario procesar colecciones largas de documentos de manera más rápida, por lo que se han ido creando diferentes técnicas para realizar esta tarea. Dichas técnicas se verán más adelante. 






Monday, June 30, 2014

Proyecto Servicio Social

En esta entrada se va a explicar de qué consiste mi proyecto del servicio social. El día 30 de Junio, mis compañeros del servicio y Elisa Schaeffer (para quien voy a realizar el servicio social) tuvimos una reunión donde definimos las actividades que cada uno va a realizar, los horarios en los que vamos a trabajar, la forma de trabajo, entre otras cosas. A continuación se mencionarán los aspectos principales que se definieron para mi proyecto del servicio social. 

Tema

Procesamiento y clasificación automática de texto para identificación de elementos clave.

Problema

Las actas de liberación penal ayudan a verificar la situación de liberación de los presos. Existe gente encargada de verificar manualmente las actas y extraer la información necesaria para el caso de la persona (estado socio-económico, familiar, etc). Dichas actas contienen mucha información irrelevante que podría ser omitida, por lo que a los trabajadores les toma mucho tiempo realizar estas tareas. También, por razones de seguridad, se deberían anonimizar las actas, es decir, que no aparezcan los nombres ni los domicilios exactos de las personas. 

Objetivo

La idea de mi proyecto es ayudar a minimizar el tiempo requerido para estas labores, procesando automáticamente el texto de las actas y reduciéndolo únicamente a una tabla que contenga la información indispensable para la liberación. 

Calendarización

En este diagrama se muestran las actividades que voy a llevar a cabo durante el semestre.


Primeramente se debe realizar investigación y lectura para comprender completamente el tema y poder trabajar en la segunda fase. Después se van a obtener los datos de las actas con los que se va a trabajar y se va a buscar la forma de realizar el proyecto. En la tercera fase se va a implementar el sistema, se va a codificar y después se van a realizar pruebas y experimentos con el programa. Finalmente, se va a realizar una publicación con el trabajo realizado. 

En las siguientes entradas de mi blog voy a seguir publicando los avances del proyecto.