• Jump To … +
    abbreviations.js adjectives.js convertables.js dates.js demonyms.js firstnames.js honourifics.js irregular_nouns.js irregular_verbs.js misc.js multiples.js numbers.js organisations.js phrasal_verbs.js places.js uncountables.js verbs.js fns.js index.js lexicon.js negate.js passive_voice.js contractions.js fancy_lumping.js grammar_rules.js parts_of_speech.js phrasal_verbs.js tagger.js word_rules.js question.js sentence.js statement.js tense.js adjective.js to_adverb.js to_comparative.js to_noun.js to_superlative.js adverb.js to_adjective.js is_acronym.js article.js date.js date_rules.js is_date.js parse_date.js is_plural.js is_uncountable.js noun.js is_organisation.js organisation.js gender.js is_person.js parse_name.js person.js is_place.js place.js pluralize.js pronoun.js singularize.js is_value.js numbers.js to_number.js units.js value.js term.js conjugate.js from_infinitive.js predict_form.js suffix_rules.js to_actor.js to_infinitive.js negate.js verb.js sentence_parser.js text.js
  • gender.js

  • ¶
    'use strict';
    const firstnames = require('../../../data/firstnames');
    const parse_name = require('./parse_name.js');
    
    const gender = function(normal) {
      if (normal === 'he') {
        return 'Male';
      }
      if (normal === 'she') {
        return 'Female';
      }
      let o = parse_name(normal);
      let firstName = o.firstName;
      if (!firstName) {
        return null;
      }
      if (firstnames[firstName] === 'm') {
        return 'Male';
      }
      if (firstnames[firstName] === 'f') {
        return 'Female';
      }
  • ¶

    male honourifics

      if (normal.match(/\b(mr|mister|sr|jr)\b/i)) {
        return 'Male';
      }
  • ¶

    female honourifics

      if (normal.match(/^(mrs|miss|ms|misses|mme|mlle)\.? /i)) {
        return 'Female';
      }
  • ¶

    statistical guesses

      if (firstName.match(/.(i|ee|[a|e]y|a)$/i)) { //this is almost-always true
        return 'Female';
      }
      if (firstName.match(/[ou]$/i)) { //if it ends in a 'oh or uh', male
        return 'Male';
      }
      if (firstName.match(/(nn|ll|tt)/i)) { //if it has double-consonants, female
        return 'Female';
      }
      return null;
    };
    module.exports = gender;
  • ¶

    console.log(gender(‘john’, ‘john’) === ‘Male’); console.log(gender(‘jane smith’, ‘jane’) === ‘Female’);