我開發了一個應用程序,它可以在(標記化)文本中構建單詞對並生成每個對的發生次數(即使相同單詞對多次出現也可以,因爲它稍後會在算法中被平衡掉)。Scala:列表元素的列表(標識)
當我使用
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++ - 現在就是。提前謝謝了!
事實上,正是我想要的所有對 - 通常,它的話那種模式的袋子。但滑動的方法非常酷,我將需要它來解決另一個問題,非常感謝! – sgzmd 2010-11-21 15:15:30