Pastie now auto-senses if line-wrap is a bad or good idea. Feedback?
## mark a section (Learn more)
## Creating the basic Critics Hash lisa_rose = {'Lady in the Water' => 2.5, 'Snakes on a Plane' => 3.5, 'Just My Luck' => 3.0, 'Superman Returns' => 3.5, 'You, Me and Dupree' => 2.5, 'The Night Listener' => 3.0} gene_seymour = {'Lady in the Water' => 3.0, 'Snakes on a Plane' => 3.5, 'Just My Luck' => 1.5, 'Superman Returns' => 5.0, 'The Night Listener' => 3.0, 'You, Me and Dupree' => 3.5} michael_phillips = {'Lady in the Water' => 2.5, 'Snakes on a Plane' => 3.0, 'Superman Returns' => 3.5, 'The Night Listener' => 4.0} claudia_puig = {'Snakes on a Plane' => 3.5, 'Just My Luck' => 3.0, 'The Night Listener' => 4.5, 'Superman Returns' => 4.0, 'You, Me and Dupree' => 2.5} mick_lasalle = {'Lady in the Water' => 3.0, 'Snakes on a Plane' => 4.0, 'Just My Luck' => 2.0, 'Superman Returns' => 3.0, 'The Night Listener' => 3.0, 'You, Me and Dupree' => 2.0} jack_matthews = {'Lady in the Water' => 3.0, 'Snakes on a Plane' => 4.0, 'The Night Listener' => 3.0, 'Superman Returns' => 5.0, 'You, Me and Dupree' => 3.5} toby = {'Snakes on a Plane' => 4.5, 'You, Me and Dupree' => 1.0, 'Superman Returns' => 4.0} critics = {'Lisa Rose' => lisa_rose, 'Gene Seymour' => gene_seymour, 'Michael Phillips' => michael_phillips, 'Claudia Puig' => claudia_puig, 'Mick LaSalle' => mick_lasalle, 'Jack Matthews' => jack_matthews, 'Toby' => toby} ## Euclidean Distance Score def sim_distance(prefs, person1, person2) si = {} prefs[person1].each do |k,v| si[k] = 1 if prefs[person2].has_key?(k) end return 0 if si.size == 0 sum = 0 si.each_key do |k| sum += ((prefs[person1][k] - prefs[person2][k]) ** 2) end 1 / (1 + Math.sqrt(sum)) end ## Pearson Correlation Score def sim_pearson(prefs, person1, person2) si = {} prefs[person1].each do |k,v| si[k] = 1 if prefs[person2].has_key?(k) end n = si.size return 0 if n == 0 sum1 = 0 sum2 = 0 sum1Sq = 0 sum2Sq = 0 pSum = 0 si.each_key do |k| p1 = prefs[person1][k] p2 = prefs[person2][k] sum1 += p1 sum2 += p2 sum1Sq += p1 ** 2 sum2Sq += p2 ** 2 pSum += p1 * p2 end num = pSum - (sum1 * sum2 / n) den = Math.sqrt( (sum1Sq - (sum1 ** 2) / n) * (sum2Sq - (sum2 ** 2) / n)) return 0 if den == 0 r = num / den end puts sim_distance(critics, 'Lisa Rose', 'Gene Seymour') puts sim_distance(critics, 'Michael Phillips', 'Jack Matthews') puts sim_pearson(critics, 'Lisa Rose', 'Gene Seymour')
This paste will be private.
From the Design Piracy series on my blog: