Я разрабатываю приложение, которое создает пары слов в (токенизированном) тексте и выдает количество раз, когда каждая пара встречается (даже если пары одних и тех же слов встречаются несколько раз, это нормально, так как это будет выровнено позже в алгоритме ).
Когда я использую
elements groupBy()
Я хочу сгруппировать содержимое самого элемента, поэтому я написал следующее:
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)
}
Теперь я полностью осознаю, что этот трюк с собой () - грязный хак. Поэтому я подумал, что немного вышло с:
grouppedPairs = table groupBy (x => x)
Таким образом, это произвело то, что я хочу. Тем не менее, я все еще чувствую, что явно что-то упускаю, и должен быть более легкий способ сделать это. Любые идеи вообще, дорогие все?
Кроме того, если бы вы помогли мне улучшить часть извлечения пар, это также очень помогло бы - это выглядит крайне необходимым, C ++ - прямо сейчас. Большое спасибо заранее!