Skip to content

Instantly share code, notes, and snippets.

@malev
Created May 5, 2014 16:36
    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 malev/f2e5a2d37f0fea5d4a74 to your computer and use it in GitHub Desktop.
    Save malev/f2e5a2d37f0fea5d4a74 to your computer and use it in GitHub Desktop.
    Gender detection testing app
    require'csv'
    require'net/http'
    require'json'
    require'beauvoir'
    require'sexmachine'
    names_with_gender=[]
    CSV.foreach('input.csv')do |row|
    names_with_gender << row
    end
    classGenderize
    attr_reader:names_with_gender,:names
    definitialize(names=[])
    @names=names
    @names_with_gender=[]
    ifFile.exists?('cache.json')
    call_cache
    else
    call
    end
    end
    defguess(name)
    names_with_gender[@names.index(name)][1]
    end
    defcall
    parse(Net::HTTP.get(uri))
    end
    defcall_cache
    parse(File.open('cache.json').readlines().first)
    end
    defparse(res)
    JSON.parse(res).eachdo |genderize|
    names << genderize['name']
    names_with_gender << [genderize['name'],clean_gender(genderize['gender'])]
    end
    end
    defclean_gender(gender)
    ifgender
    gender
    else
    "unknown"
    end
    end
    defuri
    pre_query_string=[]
    names.each_with_indexdo |name,index|
    pre_query_string << "name[#{index}]=#{name}"
    end
    URI("http://api.genderize.io?" + pre_query_string.join("&"))
    end
    end
    classSexMachinizer
    definitialize
    @detector=SexMachine::Detector.new(unknown_value: 'unknown')
    end
    defguess(name)
    clean(@detector.get_gender(name).to_s)
    end
    defclean(gender)
    if/\_/ =~ gender
    gender.split('_')[1]
    else
    gender
    end
    end
    end
    beauvoir=Beauvoir::Categorizer.new
    sex_machinizer=SexMachinizer.new
    genderize=Genderize.new
    CSV.open('output.csv','w')do |csv|
    names_with_gender.sort_by{ |name_with_gender| name_with_gender[0]}.eachdo |row|
    row << beauvoir.guess(row[0])
    row << sex_machinizer.guess(row[0])
    row << genderize.guess(row[0])
    csv << row
    end
    end
    Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment
    close