Trabajo Práctico 1: Tokenizador/Segmentador

Fecha de Entrega: 18 de Mayo de 2011

Objetivo

Tokenizar o segmentar es el proceso de partir un texto en elementos denominado tokens. Llamamos tokens a unidades indivisibles. Un tokenizador o segmentador es el primero de los componentes que se utiliza en el procesamiento de texto. La lista de tokens generados se usa en las siguientes etapas de esta tarea.

Si bien hay muchos tokenizadores disponibles, siempre es necesario adaptarlos para objetivos o dominios específicos.

El objetivo del trabajo es entender el funcionamiento de un tokenizador y los problemas que presenta la segmentación.

Especificaciones

Escribir un tokenizador para el siguiente texto de muestra, cuyo output pueda ser usado para procesamiento posterior (por ej., POS tagging o tipado semántico). Pensando en esto, se debe asumir que los tokens generados por el tokenizador se deberían corresponder con entradas de un léxico. Debería suponerse, por ejemplo, que las siguientes formas no se encuentran en un léxico:

El tokenizador deberá ser entregado como un ejecutable, que tenga como argumento el nombre del archivo o un string a tokenizar y el tipo de salida ("A" o "P") y como salida: si el tipo de salida es "A", un archivo con una línea por cada token y si es "P" debe salir por pantalla una línea por cada token. En el apartado Reglas se especifican algunos supuestos que tiene que hacer para realizar este ejercicio. Si realiza otros, debe incluir un párrafo en el informe indicando cuáles son los supuestos, las decisiones tomadas y su justificación.

Se entrega el archivo de muestra referenciado más arriba, que puede servir para realizar pruebas y como fuente de ideas de reglas a aplicar en el tokenizador. Dos días antes de la entrega se enviará por e-mail/se subirá a la página de la materia un archivo, que denominamos de prueba, correspondiente a otro dominio. Se solicita no realizar modificaciones en el tokenizador a partir de ver los resultados de ejecución con el archivo de prueba. Se pedirá que se incluyan en la entrega: Una vez realizada la entrega, se le enviará por e-mail o se subirá a la página de la materia un archivo de control correspondiente al archivo de prueba (con resultados generados por otro tokenizador, y que no necesariamente son correctos). Asuma que las separaciones correctas de tokens son aquellas hechas por los archivos de control. Cuántos verdaderos positivos y falsos positivos arroja su tokenizador? Informe precision. Envíe dicha información por mail (con subject: "PLN: Resultados Archivos de Control").

Reglas

  1. Mantenga las formas unidas con guión como un solo token. Es decir, los compuestos con guiones, como ser "palabra1-palabra2" deben mantenerse así.   Ningún léxico contiene todas las formas posibles que contengan un guión. Se asume, entonces, que la separación de guiones se resuelve en un paso posterior del procesamiento.  Por ejemplo:
    se mantienen como están.
  2. Mantenga las formas con "barra" como un solo token.  Por ejemplo:
  3. Asuma que cualquier abreviatura que está en el léxico contiene punto(s). Por ejemplo:

    Su tokenizador deberá mantener el punto como parte de la abreviatura.

    Recuerde que esto puede ser complicado. Compare el tratamiento distinto que puede tener 'Inc.' si ocurre al final de una oración.   Uno de los problemas es cómo saber si un punto indica el fin de una abreviatura o el fin de una oración.   Intente (siempre) obtener una estrategia lo más general posible. (Tratar de tener una lista de todas las abreviaturas posibles no es de gran ayuda.   Usar una lista de abreviaturas que ocurren en el texto muestra tampoco es una buena estrategia.)

  4. Su tokenizador no debe separar 'nombres' (compañías, archivos, URLs, etc.) con puntuación. Por ejemplo: Trate de obtener una estrategia general.
  5. Separe '%' de los números.
  6. Asuma que el léxico contiene todas las formas con un sufijo parte de una contracción.  Por ejemplo, contiene "not" pero también "n't" (don't), "will" pero también "'ll" (we will, we'll); Sin embargo este léxico no contiene variaciones del prefijo que es parte de la contracción: contiene will, pero no wo  (e.g., won't); contiene can, pero no ca (e.g., can't). Así el tokenizer debería expandir todas las contracciones:

    Considere que la forma 's (genitivo) no es una contracción en frases como John's book.  En estos casos su tokenizador debe separar 's de la palabra en la que aparece.

  7. Los signos de puntuación (, ! ( ) ? ; . etc.) deben tratarse como tokens distintos. Abajo se muestra cómo deberían ser las salidas antes las siguientes entradas:

    Este último ejemplo no es trivial, se debe cambiar el orden de la secuencia de puntuación: '",' (Debe hacerse de esta forma en orden de tratar de una forma coherente la secuencia de '"' mas '.' como en la ultima oración del texto de muestra. '... at least 2 dead". ')

  8. Introduzca marcadores de párrafo ('<PP>') entre los párrafos, de modo de no perder información de cómo se marca el texto.
    Idealmente debería haber un sólo marcador de párrafo entre dos párrafos, aún si están separados por más de dos espacios de línea.

Acerca de la entrega

El trabajo debe ser absolutamente individual.   Se puede utilizar código obtenido de otra fuente, por ejemplo NLTK.org, adaptar un tokenizador para un compilador (e.g. Lex u otro). En ese caso, se debe documentar cuál es el código original y cuáles son los cambios introducidos.

Utilice el lenguaje de programación de su preferencia.

La entrega consiste en:

  1. el envío por e-mail (con subject: "PLN: Entrega TP1) de:
    1. el ejecutable del tokenizer (con las entradas y salidas detalladas en el punto Especificaciones),
    2. el archivo con el código fuente,
    3. el archivo de output correspondiente al archivo de muestra,
    4. el archivo de output correspondiente al archivo de testeo y
  2. entrega de informe impreso (breve y conciso) indicando:
    1. carátula, objetivo, conclusiones,
    2. supuestos, decisiones tomadas y justificaciones,
    3. ejemplos de las pruebas hechas, si cree que aporta claridad a la explicación de las decisiones tomadas,
    4. si la ejecución del tokenizador con el archivo de prueba le generó ideas de otras reglas que debería haber considerado, y cuáles son, y
    5. documentación necesaria para correr el tokenizador (en caso de ser necesario).