import gender_guesser.detector as gender import csv # script for gender classification based on name # adapted from: https://pypi.org/project/gender-detector/ d = gender.Detector() def detect_genders(authors_file, classified_gender_file): gender_counts = {"male": 0, "female": 0, "mostly_male": 0, "mostly_female": 0, "andy": 0, "unknown": 0} with open(authors_file, "r", encoding="utf-8") as in_file,\ open(classified_gender_file, "w", newline="", encoding="utf-8") as out_file: reader = csv.reader(in_file) reader.__next__() writer = csv.writer(out_file) writer.writerow(["id", "label", "faculty", "gender"]) for row in reader: full_name = row[1] first_name = full_name[:full_name.find(" ")] detected_gender = d.get_gender(first_name) gender_counts[detected_gender] += 1 gender = detected_gender if detected_gender == "mostly_male": gender = "male" elif detected_gender == "mostly_female": gender = "female" elif detected_gender == "andy": gender = "unknown" writer.writerow([row[0], row[1], row[2], gender]) print(gender_counts) # example usage # can be used with the file containing all the authors, or just authors from a # single faculty # detect_genders("data/1433_nodes.csv", "data/1433_nodes_with_gender.csv")