'Returns the base form of the given inflected verb, using a rule-based approach.'

def find_lemma(self, verb):

    v = verb.lower()
    er_ir = (lambda b: ((((len(b) > 2) and (b[(-2)] == 'i')) and (b + 'ir')) or (b + 'er')))
    if v.endswith(('ar', 'er', 'ir')):
        return v
    for (a, b) in verb_irregular_inflections:
        if v.endswith(a):
            return (v[:(- len(a))] + b)
    v = v.replace(u'zco', 'ce')
    v = v.replace(u'zca', 'ce')
    v = v.replace(u'zc\xe1', 'ce')
    if ('ldr' in v):
        return (v[:(v.index('ldr') + 1)] + 'er')
    if ('ndr' in v):
        return (v[:(v.index('ndr') + 1)] + 'er')
    for x in (u'ando', u'ado', u'ad', u'ar\xe9', u'ar\xe1s', u'ar\xe1', u'aremos', u'ar\xe9is', u'ar\xe1n', u'ar\xeda', u'ar\xedas', u'ar\xedamos', u'ar\xedais', u'ar\xedan', u'aba', u'abas', u'\xe1bamos', u'abais', u'aban', u'\xe9', u'aste', u'\xf3', u'asteis', u'aron', u'ara', u'aras', u'\xe1ramos', u'arais', u'aran'):
        if v.endswith(x):
            return (v[:(- len(x))] + 'ar')
    for x in (u'iendo', u'ido', u'ed', u'er\xe9', u'er\xe1s', u'er\xe1', u'eremos', u'er\xe9is', u'er\xe1n', u'er\xeda', u'er\xedas', u'er\xedamos', u'er\xedais', u'er\xedan', u'\xeda', u'\xedas', u'\xedamos', u'\xedais', u'\xedan', u'\xed', 'iste', u'i\xf3', 'imos', 'isteis', 'ieron', u'era', u'eras', u'\xe9ramos', u'erais', u'eran'):
        if v.endswith(x):
            return er_ir(v[:(- len(x))])
    for x in (u'ir\xe9', u'ir\xe1s', u'ir\xe1', u'iremos', u'ir\xe9is', u'ir\xe1n', u'ir\xeda', u'ir\xedas', u'ir\xedamos', u'ir\xedais', u'ir\xedan'):
        if v.endswith(x):
            return (v[:(- len(x))] + 'ir')
    if v.endswith('o'):
        return (v[:(-1)] + 'ar')
    if v.endswith(('as', 'a', 'an')):
        return (v.rstrip('sn')[:(-1)] + 'ar')
    if v.endswith(('es', 'e', 'en')):
        return er_ir(v.rstrip('sn')[:(-1)])
    for (i, x) in enumerate((('amos', u'\xe1is'), ('emos', u'\xe9is'), ('imos', u'\xeds'))):
        for x in x:
            if v.endswith(x):
                return (v[:(- len(x))] + ('ar', 'er', 'ir')[i])
    return v
