Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

114
Vistas
Contador de frecuencia de cadena o palabra personalizada de Javascript

He estado analizando muchas preguntas similares, pero ninguna de las soluciones (hasta donde pude encontrar) se aplica a mi caso de uso específico.

Explicación / Situación

He estado registrando mi entrada clave durante las últimas dos semanas. Solo por diversión, estoy experimentando con diseños de teclado personalizados, por lo que quería un gráfico o un mapa de calor para comenzar a reflejar la frecuencia de entrada de mi tecla.

Esta es una muestra de los datos del keylogger:

 [left-cmd]sdfdsfs[esc][left-ctrl]e[left-ctrl]xytial -f /var/log/ke[tab][return][up][left][left][left][left][left][del][del]ai[return][left-cmd] [left-cmd][left-cmd]6[del]3[left][left][right][del][del]10[left]a[left]a[esc][left-option] [left-option]gst[left-ctrl]e[left-ctrl]hgst[return]g[left-option] replacepasswordhere[left-option][left-cmd]r[left-cmd][right-shift]c[right-shift]ure[del]

Progresión

Mapeé todos los caracteres de los que quiero ver la frecuencia (básicamente todos los caracteres/teclas). Probé algunas cosas que terminaron no siendo realmente útiles. Además, las respuestas a las preguntas del contador de frecuencia de palabras son todas variaciones de esto:

 function wordFreq(string) { var words = string.replace(/[.]/g, '').split(/\s/); var freqMap = {}; words.forEach(function(w) { if (!freqMap[w]) { freqMap[w] = 0; } freqMap[w] += 1; }); return freqMap; }

La cuestión es que no tengo una separación clara entre mis claves, por lo que sé que un simple .split() no me llevará muy lejos.

Enfoque actual

He estado tratando de encontrar alguna forma de dividir la cadena de texto de entrada en una matriz útil. He pasado horas tratando de hacer esto y casi estoy empezando a odiar la palabra reducir 😂.

No espero una respuesta escrita, solo quiero preguntar si hay una manera de dividir esto de la manera que quiero o tal vez un enfoque completamente diferente, que podría investigar. (Haré mi propia investigación, solo necesito algunos consejos u opiniones de otros desarrolladores para comenzar) Básicamente estoy cegado por la visión de túnel tratando de dividir la cadena como la necesito.

Así es como estoy tratando de que se vea la matriz, teniendo en cuenta una sección de la muestra mencionada al principio:

 const keys = ['[left-cmd]', 's', 'd', 'f', 'd', 's', 'f', 's', '[esc]', '[left-ctrl]', 'e', '[left-ctrl]', 'x', 'y', 't', 'i', 'a', 'l',' ', '-', 'f', ' ', '/', 'v', 'a', 'r', '/', 'l', 'o', 'g', '/', 'k', 'e', '[tab]', '[del]', '[return]', '[up]']
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Estoy leyendo las cadenas que tienen 2 estados posibles: carácter normal o dentro de un carácter de corchete. Si es un char normal, lo coloco como token. Si está dentro de un corchete, lo agrego hasta encontrar un corchete de cierre. Luego coloco eso como una ficha. Hasta el final de la cadena.

 var str = "[left-cmd]sdfdsfs[esc][left-ctrl]e[left-ctrl]xytial -f /var/log/ke[tab][return][up][left][left][left][left][left][del][del]ai[return][left-cmd] [left-cmd][left-cmd]6[del]3[left][left][right][del][del]10[left]a[left]a[esc][left-option] [left-option]gst[left-ctrl]e[left-ctrl]hgst[return]g[left-option] replacepasswordhere[left-option][left-cmd]r[left-cmd][right-shift]c[right-shift]ure[del]" function tokenize(str) { var state = "normal"; var tokens = []; var bucket = null; for (var i = 0; i < str.length; i++) { var c = str[i]; if (state == "normal") { if (c == '[') { state = "brackets"; bucket = [] continue; } tokens.push(c); } if (state == "brackets") { if (c == ']') { state = "normal"; tokens.push('[' + bucket.join("") + ']'); continue; } bucket.push(c); } } return tokens; } console.log(tokenize(str))

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda