He estado tratando de analizar fragmentos de texto de 300-400 palabras y obtener todas las frases repetidas de 2/3/4 palabras y no puedo encontrar la solución.
Con una palabra en común, simplemente .divido el texto, .each_slice 1, luego .map y .tally.
Pero con más de 2 palabras, .each_slice no funciona porque no puedo dar cuenta del pedido. Por ejemplo, el texto es:
An alligator walked and an alligator walked alone.Se dividirá en:
The alligator | walked and | another alligator | walked alone¿Qué puedo codificar para reconocer que "caminó caimán" se repite?
La única solución que se me ocurre es eliminar la primera palabra cada vez, de esa manera el par cambiará constantemente y obtendrá todas las opciones, pero eso parece terriblemente estúpido.
¡Cualquier ayuda es apreciada!
El método que está buscando es Enumerable#each_cons , no Enumerable#each_slice .
No sé exactamente cómo es su solución actual (hubiera sido mejor compartir su código real en lugar de una descripción vaga de su código: "Simplemente .split el texto, .each_slice 1 , luego .map y .tally "!), pero por ejemplo podrías hacer algo como:
input = "An alligator walked and an alligator walked alone" input.split(' ').map(&:downcase).each_cons(2).tally # => { # ["an", "alligator"]=>2, # ["alligator", "walked"]=>2, # ["walked", "and"]=>1, # ["and", "an"]=>1, # ["walked", "alone"]=>1 # }