En esta ocasión vamos a ver cómo se puede resolver un problema que a primera vista parece sencillo: localizar la palabra más larga en una cadena de texto. Para conseguir este objetivo va a ser necesario separar las palabras, ignorando los signos de puntuación, y medir la longitud de estas. Para lo que vamos a utilizar expresiones regulares en JavaScript.
En primer lugar, es necesario eliminar los signos de puntuación de la cadena de texto. Lo que es necesario hacer antes de separar las palabras para evitar que se tengan en cuenta esos caracteres a la hora de medir la longitud de cada una de las palabras. Algo que se puede conseguir fácilmente mediante el uso de expresiones regulares. Aunque, en el caso de trabajar en lenguas romances, como es el caso del español, hay que tener en cuenta la posible existencia de acentos u otros símbolos que no existen en inglés en el texto, por lo que se tienen que usar una expresión regular que incluya los caracteres latinos. Así para eliminar los signos de puntuación se puede reemplazar estos por cadenas vacías con
text.replace(/[^a-zA-Z\u00C0-\u017F\s]/, "");
Ahora ya se puede separar las palabras mediante el uso del método split() con el espacio como separador de palabras. Aunque, si fuese necesario contar correctamente el número de palabras y existiese dobles o triples espacios aparecerán varias cadenas varias. Problema que se puede resolver mediante el método filter(), seleccionando las cadenas que no están vacías. Así, se podría obtener las palabras simplemente con la siguiente línea.
text.split(" ").filter(t => t.length > 0); En donde text es la cadena de texto ya sin signos de puntuación.
Posiblemente una vez realizado el procesado anterior esta tarea sea la más fácil del proceso. Mediante un método reduce() se puede obtener la longitud de la palabra más larga de la lista.
const max = words.reduce((l, w) => Math.max(l, w.length), 0);
Valor que se puede usar posteriormente para seleccionar las palabras que sean repetidas.
words.filter(t => t.length == max)
Ahora puede ser necesario eliminar palabras duplicadas, en tal caso como se ha explicado anteriormente el método más rápido es usar Set
[…new Set(words)];
Con todo lo visto se puede crear una función para obtener la palabra más larga de una cadena de tal como la que se muestra a continuación.
function getLargestWords(text) {
const words = text.replace(/[^a-zA-Z\u00C0-\u017F\s]/, "")
.split(" ").filter(i => i.length > 0);
const max = words.reduce((l, w) => Math.max(l, w.length), 0);
return [... new Set(words.filter(t => t.length == max))];
} En esta entrada hemos visto cómo se puede solucionar en JavaScript la búsqueda de la palabra más larga en una cadena de texto.
Imagen de Willi Heidelbach en Pixabay
"Tu contraseña debe tener al menos 8 caracteres, una mayúscula, un número y un símbolo…
Cuando un analista de riesgo presenta un nuevo scorecard ante el comité de dirección, la…
Si revisáis código o documentación de otros programadores, tarde o temprano os toparéis con dos…
Los dos artículos anteriores cubrieron el CLV clásico —una fórmula útil pero que trata a…
Hay un momento muy concreto en la vida de casi todo análisis: el código que…
Has construido un nuevo modelo de credit scoring. Las métricas de validación son mejores que…
This website uses cookies.