Skip to content

Instantly share code, notes, and snippets.

@charlieegan3
Created December 1, 2013 22:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save charlieegan3/7741849 to your computer and use it in GitHub Desktop.
Save charlieegan3/7741849 to your computer and use it in GitHub Desktop.
A simple script to process a list of films to find the most common cast members.
require 'badfruit'
require 'guess'
require 'sexmachine'
d = SexMachine::Detector.new
bf = BadFruit.new("YOUR_RT_API_KEY")
movies = ["Hunger Games: Catching Fire","Gravity", "..." ]
total = movies.size.to_s
puts "Starting fetch for #{total} movies...\n"
cast = []
count = 0
movies.each do |movie|
count += 1
print count
result = bf.movies.search_by_name(movie)[0]
if result.nil?
print ("\b"* count.to_s.length) + " * No matches for: " + movie + "\n"
else
result.full_cast.each do |member|
cast.push([member.name, movie])
end
end
print ("\b"* count.to_s.length)
end
puts "Calculating Results..."
results_hash = Hash.new()
cast.each do |member|
begin
results_hash[member[0]] = results_hash[member[0]].push(member[1])
rescue
results_hash[member[0]] = [member[1]]
end
end
results = []
results_hash.each do |member|
gender = Guess.gender(member[0])[:gender]
if gender == "unknown"
gender = d.get_gender(member[0], :usa).to_s #most likly to be an american context
if gender.include? "male" #can be mostly_male in some cases...
gender = "male"
elsif gender.include? "female"
gender = "female"
else
gender = "unknown"
end
end
#classification ajustments
male_names = ["Morgan Freeman", "Viggo", "Stellan", "Mads", "Woody", "Angus", "Giancarlo", "Afemo", "Jesper", "Ludger", "Mykelti"]
female_names = ["Cate", "Sigourney", "Liv"]
unknown_names = ["Jamie"]
male = /#{male_names.join("|")}/
female = /#{female_names.join("|")}/
unknown = /#{unknown_names.join("|")}/
if male === member[0]
gender = "male"
end
if female === member[0]
gender = "female"
end
if unknown === member[0]
gender = "unknown"
end
results.push([member[0], gender, member[1].size, member[1]])
end
results = results.sort_by{|member|member[2]}.reverse
puts "\nQuery Results:"
results.each do |r|
#uncomment to get *all* your results
#puts t.to_s
end
puts "Top Ten"
results[0..9].each do |r| puts " * #{r[0].to_s}, #{r[2].to_s}" end
count = 0
puts "\nTop Actors"
results.each do |r|
if r[1] == "male"
puts " * #{r[0].to_s}, #{r[2].to_s}"
count += 1
end
if count == 10
break
end
end
count = 0
puts "Top Actresses"
results.each do |r|
if r[1] == "female"
puts " * #{r[0].to_s}, #{r[2].to_s}"
count += 1
end
if count == 10
break
end
end
count = 0
puts "Top Unclassified"
results.each do |r|
if r[1] == "unknown"
puts " * #{r[0].to_s}, #{r[2].to_s}"
count += 1
end
if count == 10
break
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment