code: def gen_length_feats(self, e_set):
          
          text = e_set._text
          lengths = [len(e) for e in text]
          word_counts = [max(len(t),1) for t in e_set._tokens]
          comma_count = [e.count(",") for e in text]
          ap_count = [e.count("'") for e in text]
          punc_count = [e.count(".") + e.count("?") + e.count("!") for e in text]
          chars_per_word = [lengths[m] / float(word_counts[m]) for m in xrange(0, len(text))]
  
          good_pos_tags,bad_pos_positions= self._get_grammar_errors(e_set._pos,e_set._text,e_set._tokens)
          good_pos_tag_prop = [good_pos_tags[m] / float(word_counts[m]) for m in xrange(0, len(text))]
  
          length_arr = numpy.array((
          lengths, word_counts, comma_count, ap_count, punc_count, chars_per_word, good_pos_tags,
          good_pos_tag_prop)).transpose()
  
          return length_arr.copy()
docs: Generates length based features from an essay set
          Generally an internal function called by gen_feats
          Returns an array of length features
          e_set - EssaySet object