def detect_genders(results): d = gender.Detector(case_sensitive=False) genders = [] for record in results: try: for name in record['message']['author']: name = HumanName(name['given']) # Check for people with a first initial rather than a first name if name.is_an_initial(name.first): # These people may use a middle name as their given name if len(name.middle) > 1: genders.append(d.get_gender(name.middle)) else: # Seems like a first name we can process genders.append(d.get_gender(name.first)) except: # No author record - possibly citing an organisation, or invalid DOI pass return genders
print('\n\n\tFound {} references.'.format(len(refs.entries))) print('\tReferences without a DOI cannot be processed.\n\n') for ref in refs.entries: try: doi = url.quote(ref['doi']) query = 'https://api.crossref.org/works/{}'.format(doi) r = requests.get(query, headers=headers) try: for author in r.json()['message']['author']: name = author['given'] name = HumanName(name) # Check for people with a first initial rather than a first name if name.is_an_initial(name.first): # These people may use a middle name as their given name if len(name.middle) > 1: genders.append(d.get_gender(name.middle)) else: # Seems like a first name we can process genders.append(d.get_gender(name.first)) except: # No author record - possibly citing an organisation, or invalid DOI pass except: # Call to Crossref has failed in a bad way pass