Spaces:
Sleeping
Sleeping
from copy import deepcopy | |
import json | |
class Test: | |
_zero_state = {"value":-1, "responses":[]} | |
names = ["袘袦", "袛小", "袉小", "袗袛", "袝小", "袨楔", "袗袣", "袗楔", "肖小", "袦袙", "袧袚", "袧袩"] | |
def __init__(self): | |
self.data = self.read_test_data() | |
self.descriptions = self.read_txt("images/descriptions.txt") | |
self.full_names = self.read_txt("photos/names.txt") | |
self.titles = self.read_txt("photos/titles.txt") | |
def __len__(self): | |
return len(self.data) | |
def zero_state(self): | |
state = deepcopy(self._zero_state) | |
return state | |
def read_test_data(): | |
with open("test.json") as f: | |
test_data = json.load(f) | |
return test_data | |
def read_txt(path): | |
with open(path) as f: | |
lines = f.readlines() | |
clean_lines = [line.strip() for line in lines] | |
return clean_lines | |
def get_question(self, idx): | |
question = self.data[idx]["question"] | |
return question | |
def get_answers(self, idx): | |
responces = self.data[idx]["responces"] | |
answers = [responce["answer"] for responce in responces] | |
return answers | |
def get_description(self, idx): | |
description = self.descriptions[idx] | |
return description | |
def get_image_path(self, idx): | |
image_path = f"images/{idx}.jpg" | |
return image_path | |
def get_photos_path(self, idx): | |
image_path = f"photos/{idx}.jpg" | |
return image_path | |
def convert_to_answer_ids(self, responces): | |
answer_ids = [] | |
for idx, responce in enumerate(responces): | |
answers = self.get_answers(idx) | |
index = answers.index(responce) | |
answer_ids.append(index) | |
return answer_ids | |
def total_name_count(self): | |
name_count = {name: 0 for name in self.names} | |
for question in self.data: | |
for answer in question["responces"]: | |
for name in answer["name"]: | |
name_count[name] += 1 | |
return name_count | |
def current_name_count(self, answer_ids): | |
name_count = {name: 0 for name in self.names} | |
for question, answer_idx in zip(self.data, answer_ids): | |
answer = question["responces"][answer_idx] | |
for name in answer["name"]: | |
name_count[name] += 1 | |
return name_count | |
def select_best(self, answer_ids): | |
total_name_count = self.total_name_count() | |
current_name_count = self.current_name_count(answer_ids) | |
name_percent = {} | |
for name in self.names: | |
percent = current_name_count[name] / total_name_count[name] | |
name_percent[name] = percent | |
best_name = self.dict_max(name_percent) | |
return best_name | |
def dict_max(dict): | |
key = max(dict, key=dict.get) | |
max_key_index = list(dict.keys()).index(key) | |
return max_key_index |