¿Qué función js puede resolver el siguiente problema?
["lemon hy te", "tracy austin", "tracy austin mk3", "ford mondeo mk3"]Arriba verá una lista de 4 oraciones en una matriz. Las oraciones constan de más de 1 palabra. Habrá de 100000 a 200000 oraciones en la matriz.
paso 1) Para cada valor en la matriz, haga lo siguiente. Divide la oración por palabra y agrega el resultado a la variable resultArr.
Entonces de esta manera: "lemon" "hy" "te"
let resultArr = []paso 2) Luego divida la misma oración en cada combinación de dos palabras sin cambiar el orden de la oración y agregue el resultado a la variable resultArr.
Entonces de esta manera: "lemon hy" "hy te"
paso 3) Luego divida la misma oración en cada combinación de tres palabras sin cambiar el orden de la oración y agregue el resultado a la variable resultArr.
Entonces de esta manera: "lemon hy te"
En el paso 4, 5, 6, 7, etc., repita este patrón. Si una oración consta de 4 palabras, en el paso 7, por ejemplo, no necesita agregar la palabra completa a la matriz nuevamente. Eso ya se hizo en el paso 4.
La variable resultArr ahora contiene lo siguiente ["lemon", "hy", "te", "lemon hy", "hy te", "lemon hy te"]
A continuación, me gustaría saber cuántas veces aparece cada combinación de palabras en resultArr. En este caso, el resultado sería el siguiente.
resultado 1:
[["lemon", 1] ["hy", 1], ["te", 1], ["lemon hy", 1] ["hy te", 1], ["lemon hy te", 1]]Si el resultado contiene la misma combinación de palabras con el número dos veces como se muestra en el ejemplo a continuación, se puede eliminar 1 vez ["hy", 1] dejando ["hy", 1] 1 vez.
resultado 2:
[["lemon", 1]] ["hy", 1]] ["hy", 1], ["te", 1], ["lemon hy", 1] ["hy te", 1], ["lemon hy te", 1]]Ahora, para lo último, la función debería llamarse getWordCombos(range, minAmountOfWords, maxAmountOfWords). Como habrás notado, los dos últimos argumentos no fueron explicados por mí.
Supongamos que ingreso 4 y 12, entonces la función a la que llamo se parece a esto. getWordCombos(rango, 4, 12) entonces solo se deben ejecutar los pasos 4 a 12 descritos anteriormente.
Esta es mi respuesta:
function getWordCombos(list, minWords, maxWords){ let resultArr = []; let temp = []; maxWords += 1; for(let words = minWords; words < maxWords; words++){ for(let l of list){ temp = l.slice().split(" "); if(temp.length + 1 < words){ continue; } while(temp.length + 1 > words){ resultArr.push([temp.slice(0, words).join(" "), 1]) for(let r = 0; r < words; r++){ temp.shift(); } } } } for(let w in resultArr){ for(let ws in resultArr){ if(w == ws){ continue; } if(resultArr[w][0] == resultArr[ws][0]){ resultArr.splice(ws, 1); resultArr[w][1]++; } } } return resultArr; }