'Implements Step 2 from "An algorithm for suffix stripping"
From the paper:
Step 2
(m>0) ATIONAL ->  ATE       relational     ->  relate
(m>0) TIONAL  ->  TION      conditional    ->  condition
rational       ->  rational
(m>0) ENCI    ->  ENCE      valenci        ->  valence
(m>0) ANCI    ->  ANCE      hesitanci      ->  hesitance
(m>0) IZER    ->  IZE       digitizer      ->  digitize
(m>0) ABLI    ->  ABLE      conformabli    ->  conformable
(m>0) ALLI    ->  AL        radicalli      ->  radical
(m>0) ENTLI   ->  ENT       differentli    ->  different
(m>0) ELI     ->  E         vileli        - >  vile
(m>0) OUSLI   ->  OUS       analogousli    ->  analogous
(m>0) IZATION ->  IZE       vietnamization ->  vietnamize
(m>0) ATION   ->  ATE       predication    ->  predicate
(m>0) ATOR    ->  ATE       operator       ->  operate
(m>0) ALISM   ->  AL        feudalism      ->  feudal
(m>0) IVENESS ->  IVE       decisiveness   ->  decisive
(m>0) FULNESS ->  FUL       hopefulness    ->  hopeful
(m>0) OUSNESS ->  OUS       callousness    ->  callous
(m>0) ALITI   ->  AL        formaliti      ->  formal
(m>0) IVITI   ->  IVE       sensitiviti    ->  sensitive
(m>0) BILITI  ->  BLE       sensibiliti    ->  sensible'

def _step2(self, word):

    if (self.mode == self.NLTK_EXTENSIONS):
        if (word.endswith(u'alli') and self._has_positive_measure(self._replace_suffix(word, u'alli', u''))):
            return self._step2(self._replace_suffix(word, u'alli', u'al'))
    bli_rule = (u'bli', u'ble', self._has_positive_measure)
    abli_rule = (u'abli', u'able', self._has_positive_measure)
    rules = [(u'ational', u'ate', self._has_positive_measure), (u'tional', u'tion', self._has_positive_measure), (u'enci', u'ence', self._has_positive_measure), (u'anci', u'ance', self._has_positive_measure), (u'izer', u'ize', self._has_positive_measure), (abli_rule if (self.mode == self.ORIGINAL_ALGORITHM) else bli_rule), (u'alli', u'al', self._has_positive_measure), (u'entli', u'ent', self._has_positive_measure), (u'eli', u'e', self._has_positive_measure), (u'ousli', u'ous', self._has_positive_measure), (u'ization', u'ize', self._has_positive_measure), (u'ation', u'ate', self._has_positive_measure), (u'ator', u'ate', self._has_positive_measure), (u'alism', u'al', self._has_positive_measure), (u'iveness', u'ive', self._has_positive_measure), (u'fulness', u'ful', self._has_positive_measure), (u'ousness', u'ous', self._has_positive_measure), (u'aliti', u'al', self._has_positive_measure), (u'iviti', u'ive', self._has_positive_measure), (u'biliti', u'ble', self._has_positive_measure)]
    if (self.mode == self.NLTK_EXTENSIONS):
        rules.append((u'fulli', u'ful', self._has_positive_measure))
        rules.append((u'logi', u'log', (lambda stem: self._has_positive_measure(word[:(-3)]))))
    if (self.mode == self.MARTIN_EXTENSIONS):
        rules.append((u'logi', u'log', self._has_positive_measure))
    return self._apply_rule_list(word, rules)
