Wikipedia proporciona el siguiente ejemplo al describir el hashing de características ; pero el mapeo no parece consistente con el diccionario definido
Por ejemplo, to
debe convertirse de 3
acuerdo con el diccionario, pero está codificado como en su 1
lugar.
¿Hay algún error en la descripción? ¿Cómo funciona el hashing de funciones?
Los textos:
John likes to watch movies. Mary likes too. John also likes to watch football games.
se puede convertir usando el diccionario
{"John": 1, "likes": 2, "to": 3, "watch": 4, "movies": 5, "also": 6, "football": 7, "games": 8, "Mary": 9, "too": 10}
a la matriz
[[1 2 1 1 1 0 0 0 1 1] [1 1 1 1 0 1 1 1 0 0]]
Como señaló Steffen, la matriz de ejemplo codifica el número de veces que aparece una palabra en un texto. La posición de la codificación en la matriz viene dada por la palabra (posición de la columna en la matriz) y por el texto (posición de la fila en la matriz).
Ahora, el truco de hash funciona de la misma manera, aunque no tiene que definir inicialmente el diccionario que contiene la posición de la columna para cada palabra.
De hecho, es la función hash la que le dará el rango de posibles posiciones de columna (la función hashing le dará un valor mínimo y máximo posible) y la posición exacta de la palabra que desea codificar en la matriz. Entonces, por ejemplo, imaginemos que la palabra "me gusta" está codificada por nuestra función de hash en el número 5674, luego la columna 5674 contendrá las codificaciones relativas a la palabra "me gusta".
De esta manera, no necesitará construir un diccionario antes de analizar el texto. Si va a utilizar una matriz dispersa como matriz de texto, ni siquiera tendrá que definir exactamente cuál será el tamaño de la matriz. Simplemente escaneando el texto, sobre la marcha, convertirá las palabras en posiciones de columna mediante la función hash y su matriz de texto se completará con datos (frecuencias, es decir) de acuerdo con el documento que está analizando progresivamente (posición de la fila).
fuente