def experiment10(cls): alike_distances = [] for median_num in range(0, 30): metrics = lambda x, y: PictureMetrics.dameray_levenstein_distance_sum(x, y, median_num=median_num) fontFamilies = FontFamily.get_all_families() alike_distance = 0 for fontFamily in fontFamilies: print "--new font family---" signes = fontFamily.get_signes(30) for pair_of_signes in signes: distance = metrics(pair_of_signes[0], pair_of_signes[1]) alike_distance += distance alike_distances.append(alike_distance) diff_distances = [] for median_num in range(0, 30): metrics = lambda x, y: PictureMetrics.dameray_levenstein_distance_sum(x, y, median_num=median_num) fontFamilies = FontFamily.get_all_families() diff_distance = 0 for fontFamily in fontFamilies: print "--new font family---" signes = fontFamily.get_signes(15) for pair_of_signes in signes: for j, sign in enumerate(pair_of_signes): ind = random_but_not_this(j, len(signes)) distance = metrics(sign, signes[ind][j]) diff_distance += distance diff_distances.append(diff_distance) substaction = [] for alike, diff in zip(alike_distances, diff_distances): substaction.append(diff - alike) plt.plot(range(0, 30), substaction, 'ro') plt.show()
def optimize_weights(cls, weights, num_of_signes=100): print weights metrics = lambda x, y: PictureMetrics.dameray_levenstein_distance_sum(x, y, weights=weights) fontFamilies = FontFamily.get_all_families() alike_distance = 0 alike_num = 0 for fontFamily in fontFamilies: signes = fontFamily.get_signes(num_of_signes) for pair_of_signes in signes: distance = metrics(pair_of_signes[0], pair_of_signes[1]) alike_distance += distance alike_num += 1 print "alike distance=", alike_distance #print "alike num=", alike_num diff_distance = 0 diff_num = 0 for fontFamily in fontFamilies: signes = fontFamily.get_signes(num_of_signes / 2) for pair_of_signes in signes: for j, sign in enumerate(pair_of_signes): ind = random_but_not_this(j, len(signes)) distance = metrics(sign, signes[ind][j]) diff_distance += max(25 - distance, 0) diff_num += 1 print "diff distance=", diff_distance #print "diff num=", diff_num result = alike_distance + diff_distance print "total=", result return result
def experiment3(cls): metrics = lambda x, y: PictureMetrics.dameray_levenstein_distance_v(x, y) fontFamilies = FontFamily.get_all_families() alikes = [] for fontFamily in fontFamilies: signes = fontFamily.get_signes(1000) for pair_of_signes in signes: distance = metrics(pair_of_signes[0], pair_of_signes[1]) alikes.append(distance) plt.hist(alikes) plt.show()
def experiment7(cls): metrics = lambda x, y: PictureMetrics.dameray_levenstein_distance_sum(x, y) fontFamilies = FontFamily.get_all_families() differences = [] for fontFamily in fontFamilies: signes = fontFamily.get_signes(1000) for i, sign_array in enumerate(signes): for j, sign in enumerate(sign_array): ind = random_but_not_this(j, len(signes)) distance = metrics(sign, signes[ind][j]) differences.append(distance) plt.hist(differences) plt.show()
def experiment8(cls): alike_distances = [] for median_num in range(0, 30): metrics = lambda x, y: PictureMetrics.dameray_levenstein_distance_sum(x, y, median_num=median_num) fontFamilies = FontFamily.get_all_families() alike_distance = 0 for fontFamily in fontFamilies: print "--new font family---" signes = fontFamily.get_signes(50) for pair_of_signes in signes: distance = metrics(pair_of_signes[0], pair_of_signes[1]) alike_distance += distance alike_distances.append(alike_distance) plt.plot(range(0, 30), alike_distances, 'ro') plt.show()
def experiment9(cls): diff_distances = [] for median_num in range(0, 30): metrics = lambda x, y: PictureMetrics.dameray_levenstein_distance_sum(x, y, median_num=median_num) fontFamilies = FontFamily.get_all_families() diff_distance = 0 for fontFamily in fontFamilies: print "--new font family---" signes = fontFamily.get_signes(50) for pair_of_signes in signes: for j, sign in enumerate(pair_of_signes): ind = random_but_not_this(j, len(signes)) distance = metrics(sign, signes[ind][j]) diff_distance += distance diff_distances.append(diff_distance) plt.plot(range(0, 30), diff_distances, 'ro') plt.show()
def count_penalty(cls, metrics): fontFamilies = FontFamily.get_all_families() penalty = 0 alikes = [] print "----getting signes from family----" for fontFamily in fontFamilies: signes = fontFamily.get_signes(1000) family_penalty = 0 family_penalty_alike = 0 sum_alike = 0 sum_dif = 0 family_penalty_different = 0 diffs = [] alikes = [] for i, sign_set in enumerate(signes): for j, sign in enumerate(sign_set): for k, sign2 in enumerate(sign_set[j + 1:]): alike = metrics(sign, sign2) family_penalty_alike += alike sum_alike += 1 alikes.append(alike) if i < len(signes) and i != (len(signes) - i) % len(signes): diff = metrics(sign, signes[-i][j]) family_penalty_different += max(18 - diff, 0) sum_dif += 1 diffs.append(diff) dif_to_alike = sum_dif / float(sum_alike) family_penalty = family_penalty_alike * dif_to_alike + family_penalty_different print "Family penalty alike:", family_penalty_alike, "sum_alike", sum_alike print "Family penalty different:", family_penalty_different, "sum_dif", sum_dif print "Family penalty total:", family_penalty penalty += family_penalty plt.hist(alikes) plt.show() print "Total penalty: ", penalty