def find_mismatches(listings, assessments, accuracy=.01):
    """Finds any listings that are listed as having different assessments.

    :param listings: article listings as generated by parse_article
    :param assessments: dict of assessments of all listed articles
    :param accuracy: minimum ratio of assessments to qualify as a mismatch
    :return: array of mismatches
    """
    mismatches = []
    for l in listings:
        if l["title"] in assessments:
            article_assessments = assessments[l["title"]]
            processed_assessments = list(map(str.lower, filter(lambda c: c != '', article_assessments)))
            # We don't have a good solution if there are no project ratings
            if len(processed_assessments) != 0:
                assessment_ratio = processed_assessments.count(l["assessment"].lower()) / len(processed_assessments)
                if assessment_ratio < accuracy:
                    mismatches.append({
                        "title": l["title"],
                        "listed_as": l["assessment"],
                        "current": article_assessments
                    })
        else:
            mismatches.append({
                "title": l["title"],
                "listed_as": l["assessment"],
                "current": None
            })
    return mismatches