Hola estimados amigos de underc0de vengo humildemente a preguntarles si conocen cómo realiza mi siguiente requerimiento:
Necesito encontrar un Patrón que se repite muchas veces en un archivo de texto sin conocer como es ese Patrón mi logica me
dice, como sé que ese Patrón es mayor a 6 cifras sería colocar el pointer en el principio del archivo,coger 6 cifras y crear un
Regex,leer con un buffer el archivo y con un matcher encontrar el pattern creado osea el Patrón.
El siguiente paso sería colocar el pointer en el segundo byte y realizar exactamente la misma operación a medida que se vayan
encontrando Patrones ingresarlos en algún tipo de datos tanto el Patrón encontrado como las veces que se repite.
No sé si es correcto mi algoritmo ohh seguramente habrán mejores formas de reaiizarlo evitando el consumo de recursos tanto
a nivel pc como en tiempo.
Si tienen conocimiento sobre lo que quiero realizar y pueden aportar algo de luz es bienvenidad $_gracias => por leer.
Hola,
Como no indicas el lenguaje en que quieres desarrollar el algoritmo, te voy a mostrar un articulo que encontré y que muestra las formas más rápidas de comprobar si una cadena está contenida dentro de otra cadena y ademas hace la comparativa en tiempo de ejecución de los diferentes métodos.
- C# .Net: Fastest Way to count the number of times a character occurs in a string (http://cc.davelozinski.com/c-sharp/fastest-way-count-number-times-character-occurs-string)
- C# .Net: Fastest Way to check if a string occurs within a string (http://cc.davelozinski.com/c-sharp/fastest-way-to-check-if-a-string-occurs-within-a-string)
- Y más....THE CURIOUS CONSULTANT (http://cc.davelozinski.com/c-sharp)
Saludos.
Muchas gracias como siempre Fudmario eres el espíritu positivo de las cosas y del buenhacer.
El lenguaje de programación va a ser en Java y el tema es un archivo por ejemplo de 10MG
El requerimiento es encontrar la palabra que más se repite en ese archivo sin conocerla, lo que
si sabemos es que su longitud es superior a 7 caracteres.
Imaginemos que el archivo empieza asi:
ABCDEFGHIJKMNLLLÑOPQRSTUVWXYZ.........................................................................
Lo que yo había pensado hacer es coger los 7 primeros caracteres ABCDEFG en un pattern
a continuación leer el archivo fila a fila y con un mattcher encontrar posibles candidatos si
va encontrando en su camino de lectura entonces un contador va registrando esas entradas
por ejemplo ABCDEFG= 1000 coincidencias.
A continuación una vez termina de leer todo el file comenzaría desplazando el pointer con
RandomAccesFile hacía el segundo caracter, o habiendo creado una Itineración con un bucle
for y colocarme el la siquiente posición:
BCDEFGH este sería el nuevo Pattern y realizaría nuevamente la lectura del archivo encon-
trando o no.! las coincidencias en su lectura.
Y así sucesivamente hasta finalizar la totalidad del archivo es como finalmente he decidido
hacerlo lo que desconozco es si es viable o no..! en tiempos de ejecución y consumo de re-
cursos.
¿Quizás hayan formas más rápidas y mejores de realizarlo?
Abrazos amigo mío
Buenas hu3co, no me quedo claro si lo que quieres es programarlo o algo para hacerlo.
Supongo que lo que tendra es un texto cifrado del que no sabes la longitud de la clave por eso te dejo esta web http://www.palabrasque.com/contador-de-palabras/ en tipo de analisis si marcas todos los analisis te dara estadisticas de aparicion de caracteres, asi como patrones que se repiten que es lo que tu preguntabas, con grafico y el %.
Te dejo un par de fotos de como muestra los resultados
(https://i.gyazo.com/ceea5d285b242f83b9392e6b92257134.png)
(https://i.gyazo.com/c84bccf60fcef2f34f82b4fdb45c8db5.png)
Un saludo
Excelente aporte va para mi baúl de url's mi estimado amigo inde........es.Aunque procederé a codearlo en Java se
puede considerar solucionado el thread y muchísimas gracias por haber compartido vuestra ayuda y tiempo.
Damos el tema por solucionado, pero como ya saben, si se genera alguna duda sobre el mismo tema pueden tranquilamente seguir comentando.
Pikaaa~