VISITAS:

lunes, 31 de octubre de 2011

Tokenización (4)

Nos vamos a centrar en los aspectos técnicos que surgen en una de las etapas de la segmentación de un texto: la tokenización.
Los lenguajes creados artificialmente, como por ejemplo, los lenguajes de programación, se definen de forma muy estricta para eliminar las ambigüedades tanto léxicas como estructurales. Esto no ocurre en los lenguajes naturales, en los cuales, un mismo carácter puede servir para propósitos diferentes y en los cuales la sintaxis no se define estrictamente.
Para el caso de la tokenización, podemos distinguir entre lenguajes delimitados por espacios (y otros signos de puntuación perfectamente definidos) y lenguajes no segmentados.
En los lenguajes delimitados por espacios, el carácter espacio hace de separador entre palabras, aunque también se definen otros caracteres separadores de palabras, como los símbolos de puntuación, el tabulador, el salto de línea, etc.
En los lenguajes no segmentados las palabras se escriben una a continuación de otras sin indicación explícita de los límites de las palabras. La tokenización en estos lenguajes requiere información léxica y morfológica adicional.
En cualquiera de estos tipos de lenguajes existen tres categorías para la estructura de las palabras:
  • palabras aisladas, donde una palabra no se divide en otras unidades
  • palabras aglutinantes, donde una palabra se divide en otras unidades más pequeñas llamadas morfemas delimitadas claramente
  • palabras inflexivas, donde una palabra se divide en otras unidades más pequeñas que no están claramente determinadas
Los distintos idiomas pueden mostrar una clara tendencia hacia una de estas categorías: Por ejemplo, el chino es predominantemente aislado, el japonés es aglutinativo y el latín es inflexivo. Pero la mayoría de los idiomas exhiben las tres categorías.
Tokenización en lenguajes delimitados por espacios
Aunque en estas lenguas la tokenización es más sencilla, existen muchos asuntos que resolver. La mayoría de estas ambigüedades vienen de los signos de puntuación, donde el mismo signo puede servir para diferentes funciones. Por ejemplo, el punto puede servir para separar decimales en un número, para marcar el final de una abreviatura o para finalizar una frase. Incluso, en una abreviatura al final de una sentencia, el punto hace de fin de abreviatura y de fin de sentencia. El tokenizador (dependiente del idioma) tiene que ser capaz de determinar cuándo un punto es parte de un token y cuando separa dos tokens. Para ello, el tokenizador tiene que ser capaz de reconocer abreviaturas.
Otra situación que debe tratar el tokenizador es: $40 y 40 dólares. Ambas deberían formar el mismo único token: 40-dólares.
Las comillas dobles y simples son otro caso de ambigüedad en la tokenización. En muchos casos, las comillas indican un texto entrecomillado y lo único que hay que resolver es si se abren o se cierran las comillas. Pero a veces, también se utilizan las comillas en inglés por ejemplo para doesn't, I'm, you're, etc. En estos casos, la tokenización está ligada al análisis sintáctico. Además, en estos casos de comillas como contracción de dos palabras, la tokenización tiene que expandir las palabras eliminando el apóstrofe (I'm ---> I am). Pero siempre, dependiente del idioma.
En algunos idiomas, como el español, existen contracciones de palabras que no utilizan comillas, como por ejemplo "del", que es la contracción de "de el", y que deben expandirse en los dos tokens componentes.
Otro caso es el guión, que se suele utilizar para unir varias palabras en un token: end-of-line, o para unir varios tokens: language-dependent. Además, el guión se usa a veces para partir una palabra en dos líneas. Estos guiones hay que eliminarlos durante la tokenización, y la dificultad aquí estriba en distinguir estos casos de los guiones utilizados para unir tokens.
Las palabras múltiples son casos de varias palabras que siempre van juntas y que expresan un único significado. Por ejemplo, en inglés "in spite of" es equivalente a "despite" y ambos deberían ser tratados como un único token. Otros caso es "de facto".
Existen también las expresiones numéricas, fechas, horas, moneda, porcentajes, etc que deben ser tratados como un único token.
Tokenización en lenguajes no segmentados
Ejemplos de estos lenguajes son el chino y el japonés.
El tratamiento en estos casos es totalmente dependiente del idioma y no vamos a tratarlo aquí.
En general, la solución siempre se basa en reconocer las palabras a través de un diccionario.



No hay comentarios:

Publicar un comentario