def compare(self, document): if not self.categories_membership: self.calculate_membership_to_categories() if not document.categories_membership: document.calculate_membership_to_categories() changed_membership = copy(self.categories_membership) categories_by_membership = sorted( self.categories_membership.iteritems(), key=itemgetter(1), reverse=True ) maximal = categories_by_membership[0][1] for key in changed_membership: changed_membership[key] /= maximal importance = min(len(filter(lambda x: x > .5, changed_membership.values())), 4) important_categories = categories_by_membership[:importance] important_categories_dict = dict(important_categories) return TextComparisonResult(jaccard( important_categories_dict, document.categories_membership, min, max, ), important_categories_dict)
def compare(image1, image2): return jaccard( get_properties(image1), get_properties(image2), min, max )
def calculate_membership_to_categories(self): """ :param categories: list of Categories :type categories: list sim(d, cj) """ if not self.terms_membership: self.calculate_terms_membership() for category in self.categories: self.categories_membership[category] = jaccard( self.terms_membership, self.terms_relevance[category.identifier], algebraic_product, algebraic_sum, )