docs: def pluralize(word) :
          """Pluralize an English noun."""
  
          rules = [
              ['(?i)(quiz)$' , '\\1zes'],
              ['^(?i)(ox)$' , '\\1en'],
              ['(?i)([m|l])ouse$' , '\\1ice'],
              ['(?i)(matr|vert|ind)ix|ex$' , '\\1ices'],
              ['(?i)(x|ch|ss|sh)$' , '\\1es'],
              ['(?i)([^aeiouy]|qu)ies$' , '\\1y'],
              ['(?i)([^aeiouy]|qu)y$' , '\\1ies'],
              ['(?i)(hive)$' , '\\1s'],
              ['(?i)(?:([^f])fe|([lr])f)$' , '\\1\\2ves'],
              ['(?i)sis$' , 'ses'],
              ['(?i)([ti])um$' , '\\1a'],
              ['(?i)(buffal|tomat)o$' , '\\1oes'],
              ['(?i)(bu)s$' , '\\1ses'],
              ['(?i)(alias|status)' , '\\1es'],
              ['(?i)(octop|vir)us$' , '\\1i'],
              ['(?i)(ax|test)is$' , '\\1es'],
              ['(?i)s$' , 's'],
              ['(?i)$' , 's']
          ]
  
          uncountable_words = ['equipment', 'information', 'rice', 'money', 'species', 'series', 'fish', 'sheep']
  
          irregular_words = {
              'person' : 'people',
              'man' : 'men',
              'child' : 'children',
              'sex' : 'sexes',
              'move' : 'moves'
          }
  
          lower_cased_word = word.lower();
  
          for uncountable_word in uncountable_words:
              if lower_cased_word[-1*len(uncountable_word):] == uncountable_word :
                  return word
  
          for irregular in irregular_words.keys():
              match = re.search('('+irregular+')$',word, re.IGNORECASE)
              if match:
                  return re.sub('(?i)'+irregular+'$', match.expand('\\1')[0]+irregular_words[irregular][1:], word)
  
          for rule in range(len(rules)):
              match = re.search(rules[rule][0], word, re.IGNORECASE)
              if match :
                  groups = match.groups()
                  for k in range(0,len(groups)) :
                      if groups[k] == None :
                          rules[rule][1] = rules[rule][1].replace('\\'+str(k+1), '')
  
                  return re.sub(rules[rule][0], rules[rule][1], word)
  
          return word