'Calculate the score of a NZB, used for sorting later'

def calculate(self, nzb, movie):

    preferred_words = splitString(Env.setting('preferred_words', section='searcher').lower())
    try:
        preferred_words = removeDuplicate((preferred_words + splitString(movie['category']['preferred'].lower())))
    except:
        pass
    score = nameScore(toUnicode(nzb['name']), movie['info']['year'], preferred_words)
    for movie_title in movie['info']['titles']:
        score += nameRatioScore(toUnicode(nzb['name']), toUnicode(movie_title))
        score += namePositionScore(toUnicode(nzb['name']), toUnicode(movie_title))
    score += sizeScore(nzb['size'])
    if nzb.get('seeders'):
        try:
            score += ((nzb.get('seeders') * 100) / 15)
            score += ((nzb.get('leechers') * 100) / 30)
        except:
            pass
    score += providerScore(nzb['provider'])
    score += duplicateScore(nzb['name'], getTitle(movie))
    ignored_words = splitString(Env.setting('ignored_words', section='searcher').lower())
    try:
        ignored_words = removeDuplicate((ignored_words + splitString(movie['category']['ignored'].lower())))
    except:
        pass
    score += partialIgnoredScore(nzb['name'], getTitle(movie), ignored_words)
    score += halfMultipartScore(nzb['name'])
    extra_score = nzb.get('extra_score')
    if extra_score:
        score += extra_score(nzb)
    score += sceneScore(nzb['name'])
    return score
