Desarrollo una aplicación que construye pares de palabras en texto (tokenizado) y produce el número de veces que ocurre cada par (incluso cuando pares de mismas palabras aparecen varias veces, está bien porque se igualará más adelante en el algoritmo).Scala: groupBy (identity) of List Elements
Cuando uso
elements groupBy()
Quiero grupo por el contenido de los elementos en sí, por lo que escribió lo siguiente:
def self(x: (String, String)) = x
/**
* Maps a collection of words to a map where key is a pair of words and the
* value is number of
* times this pair
* occurs in the passed array
*/
def producePairs(words: Array[String]): Map[(String,String), Double] = {
var table = List[(String, String)]()
words.foreach(w1 =>
words.foreach(w2 =>
table = table ::: List((w1, w2))))
val grouppedPairs = table.groupBy(self)
val size = int2double(grouppedPairs.size)
return grouppedPairs.mapValues(_.length/size)
}
Ahora, Soy plenamente consciente de que este auto() truco es un sucio truco. Así que pensé que un poco salió con un:
grouppedPairs = table groupBy (x => x)
De esta forma produjo lo que quería. Sin embargo, todavía siento que claramente extraño algo y debería haber una manera más fácil de hacerlo. Alguna idea en absoluto, querido todo?
Además, si me ayudas a mejorar la parte de extracción de pares, también ayudará mucho - se ve muy imperativo, C++ - ish en este momento. ¡Muchas gracias de antemano!
De hecho, quiero exactamente todos los pares - por lo general, es la bolsa de palabras tipo de modelo. Pero el enfoque deslizante es realmente genial y lo necesitaré para otro problema, ¡muchas gracias! – sgzmd