Nuestro primer objetivo es crear dos estructuras de datos:
- diccionario con las palabras que queremos caracterizar, cada una asociada a sus contextos de ocurrencia y la cantidad de veces que ocurrió en cada contexto, y
- diccionario con los contextos posibles, la unión de todos los contextos con los que ocurrieron todas las palabras que queremos caracterizar
- preprocesamiento: pasar el texto por un tokenizador, analizador morfosintáctico, analizador sintáctico o bien por una heurística propia que divida el texto en oraciones y dentro de las oraciones, palabras.
- para cada oración del texto, la recorremos palabra a palabra y vamos obteniendo los contextos de cada palabra y acumulando el número de ocurrencias con cada contexto.
Los contextos pueden ser muy diferentes: desde las palabras con las que co-ocurren hasta las triplas de dependencias.
- palabras con las que co-ocurren, sin orden a desarrollar
- palabras con las que co-ocurren, con orden a desarrollar
- categorías morfosintácticas con las que co-ocurren, con orden a desarrollar
- triplas de dependencias a desarrollar
- categorías semánticas a desarrollar
- todas las anteriores a desarrollar
- diferentes subconjuntos de las anteriores a desarrollar
Una vez que tenemos estas dos estructuras de datos, podemos aplicar algunas técnicas de reducción de dimensionalidad:
- eliminar contextos que ocurren menos de n veces (recomendación inicial: n=10, para hacer las primeras pruebas, n=100 o bien n=1000)
- eliminar contextos con muy poca variación en sus valores para las diferentes palabras
- eliminar palabras con muy pocas ocurrencias (recomendación inicial n=5, para las primeras pruebas, n=10)
A partir de esto podemos armar la lista de vectores, que es una matriz con tantas filas como palabras queremos caracterizar y tantas columnas (dimensiones) como contextos mantenemos. El valor que tiene una palabra i para una dimensión j puede ser su número de ocurrencias con esa dimensión, su pmi con esa dimensión, su tf*idf con esa dimensión, etc.
Sobre esta matriz podemos realizar técnicas de reducción de dimensionalidad como LSA, embeddings, o podemos usarla directamente para clustering.