synthesis-test / utils.py
theodotus's picture
Added zero_state property
227f4db
raw
history blame
3.03 kB
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)
@property
def zero_state(self):
state = deepcopy(self._zero_state)
return state
@staticmethod
def read_test_data():
with open("test.json") as f:
test_data = json.load(f)
return test_data
@staticmethod
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
@staticmethod
def dict_max(dict):
key = max(dict, key=dict.get)
max_key_index = list(dict.keys()).index(key)
return max_key_index