1. Segmentación/tokenización de las palabras.
2. Normalización del formato de las plabras
3. Segmentación de las oraciones en el texto.
Algunos conceptos:
Lema (Lemma): palabras que comparten un tronco común, que hacen referencia al mismo concepto básico
Ejemplo: gato, gatos, gata son palabras con el mismo lema.
Forma de la palabra (Wordform): la forma completa de la palabra.
Ejemplo: gato, gatos, gata son palabras con distinta forma (different wordform)
Tipo (Type): Un elemento del vocabulario.
(por ahora pensemos en el vocabulario como un conjunto de palabras)
Token: una instancia de un tipo en un texto dado.
Ejemplo, en la oración: "Templada y riente (como lo son las del otoño en la muy graciosa ciudad de Buenos Aires) resplandecía la mañana de aquel veintiocho de abril"
hay 25 palabras, pero en verdad si contamos a "Buenos-Aires" como una sola palabra (ya que es un nombre propio) hay: 24 => 24 tokens
Pero tipos hay: 21 ya que las palabras: "de" y "la" se repiten.
si pasáramos a sus lemas las palabras de la oración entonces los tipos serían: 18 ya que "de" y "del" tienen el mismo lema y "la", "lo" y "las" también comparten un mismo lema.
N = número de tokens
V = vocabulario (conjunto de tipos )
|V| = tamaño del vocabulario
Ejemplos de Vocabularios:
Tokens = N | Types = |V| | |
---|---|---|
conversaciones telefónicas atendidas por una central | 2.4 millones | 20 mil |
Shakespeare (obras completas) | 884.000 | 31.000 |
Algoritmo Simple de Tokenización
La forma más sencilla de Tokenización es identificar las palabras separando los caracteres alfabéticos de los demás, en particular del carácter espacio: " ". A continuación voy a mostrar una forma de muy sencilla de Tokenizar un texto en Linux utilizando el comando: "tr", sin embargo esta forma solo vale en ingles ya que "tr" no soporta codificaciones de caracteres que usen más de 1 byte como por ejemplo Unicode.
tr 'A-Za-z' '\n' < archivo_de_texto.txt | sort | uniq -c
esto mostrará una lista de palabras únicas, es decir de tipos, ordenadas alfabeticamente junto con la cantidad de veces que se repiten. Por ejemplo para el archivo: alice_in_wonderland.txt (el texto original en ingles de Alicia en el País de las Maravillas)
mostrará algo como:
615 a
17 A
1 abide
1 able
94 about
3 above
......Para unificar lo que está en mayúsculas y minúsculas usamos la siguiente secuencia:
tr 'A-Z' 'a-z' < alice_in_wonderland.txt | tr -sc 'A-Za-z' '\n' | sort | uniq -c
y para ordenar por cantidad de apariciones:
tr 'A-Z' 'a-z' < alice_in_wonderland.txt | tr -sc 'A-Za-z' '\n' | sort | uniq -c | sort -n -r
esto mostrará algo como
1644 the
872 and
729 to
632 a
.....
Problemas comunes de Tokenización
Buenos Aires => 1 token ó 2 ?
estado del arte => 1 token ó 3 ?
RR.HH. => 1 token ó 2
En ingles y en francés donde son comunes los apostrofes aparecen otros inconvenientes:
What´re, I'm, isn't => what are, I am, is not
L'ensemble =>Le ensemble
En alemán aparecen otro tipo de errores con las palabras compuestas (que pueden escribirse todas juntas):
Lebensversicherungsgesellschaftangestellter => "El seguro de vida empleado de la compañía"
En Chino y Japones no hay separación entre las palabras, además en Japones pueden aparecer distintos alfabetos entremezclados: Katana, Hiragana, kanji y Romanji
¿Por qué la tokenizacion se debe aplicar antes de clasificar textos?
ResponderEliminar