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

def find_lemma(self, verb):

    v = verb.lower()
    if v.endswith(('are', 'ere', 'ire', 'rsi')):
        return v
    for (a, b) in verb_majority_vote:
        if v.endswith(a):
            return (v[:(- len(a))] + b)
    v = v.replace('cha', 'ca')
    v = v.replace('che', 'ce')
    v = v.replace('gha', 'ga')
    v = v.replace('ghe', 'ge')
    v = v.replace('ghi', 'gi')
    v = v.replace('gge', 'ggie')
    for x in (u'ir\xf2', 'irai', u'ir\xe0', 'iremo', 'irete', 'iranno', 'irei', 'iresti', 'irebbe', 'iremmo', 'ireste', 'irebbero', 'ascano', 'issi', 'isse', 'issimo', 'iste', 'issero', 'ivo', 'ivi', 'iva', 'ivamo', 'ivate', 'ivano', 'isti', 'immo', 'iste', 'irono', 'ito', 'isco', 'isci', 'isce', 'ite', 'iscono', 'indo'):
        if v.endswith(x):
            return (v[:(- len(x))] + 'ire')
    for x in (u'er\xf2', 'erai', u'er\xe0', 'eremo', 'erete', 'eranno', 'erei', 'eresti', 'erebbe', 'eremmo', 'ereste', 'erebbero', 'iamo', 'iate', 'ino', 'assi', 'asse', 'assimo', 'aste', 'assero', 'avo', 'avi', 'ava', 'avamo', 'avate', 'avano', 'ai', 'asti', u'\xf2', 'ammo', 'aste', 'arono', 'ato', 'iamo', 'ate', 'ano', 'ando'):
        if v.endswith(x):
            return (v[:(- len(x))] + 'are')
    for x in ('essi', 'esse', 'essimo', 'este', 'essero', 'evo', 'evi', 'eva', 'evamo', 'evate', 'evano', 'ei', 'esti', u'\xe8', 'emmo', 'este', 'erono', 'eto', 'ete', 'ono', 'endo'):
        if v.endswith(x):
            return (v[:(- len(x))] + 'ere')
    if v.endswith(u'\xe0'):
        return (v[:(-1)] + 'e')
    if v.endswith(u'\xec'):
        return (v[:(-1)] + 'ire')
    if v.endswith(u'e'):
        return (v[:(-1)] + 'ere')
    if v.endswith(('a', 'i', 'o')):
        return (v[:(-1)] + 'are')
    return v
