Source code for ccobra.syllogistic.task_encoder_syl

""" Syllogistic encoder functions.

"""

from ccobra import CCobraTaskEncoder

[docs]class SyllogisticTaskEncoder(CCobraTaskEncoder): """ Syllogistic encoder. Provides functions for abbreviating syllogistic tasks. """
[docs] @staticmethod def encode_task(task): """ Encodes a task to its syllogistic encoding. Parameters ---------- task : list(list(str)) List representation of the syllogism (e.g., [['All', 'A', 'B'], ['Some', 'B', 'C']]). Returns ------- str Syllogistic task encoding (e.g., 'AI1'). Raises ------ ValueError If figure of syllogism cannot be determined. """ prem_1, prem_2 = task quant1 = prem_1[0].replace('All', 'A').replace( 'Some not', 'O').replace('Some', 'I').replace('No', 'E') quant2 = prem_2[0].replace('All', 'A').replace( 'Some not', 'O').replace('Some', 'I').replace('No', 'E') figure = 1 if prem_1[1] == prem_2[1]: figure = 4 elif prem_1[2] == prem_2[1]: figure = 1 elif prem_1[2] == prem_2[2]: figure = 3 elif prem_1[1] == prem_2[2]: figure = 2 else: raise ValueError('Could not determine figure of:', task) return quant1 + quant2 + str(figure)
[docs] @staticmethod def encode_response(response, task): """ Encodes a response to its syllogistic encoding. Parameters ---------- response : list(str) Syllogistc response in list representation (e.g., ['All', 'A', 'C']) task : list(list(str)) Syllogistic task in list representation (e.g., [['All', 'A', 'B'], ['Some', 'B', 'C']]). Returns ------- str Syllogistic response encoding (e.g., 'Aac'). """ if not isinstance(response[0], list): response = [response] if response[0] == 'NVC': return 'NVC' if response[0][0] == 'NVC': return 'NVC' object_sets = [set(x[1:]) for x in task] midterm = object_sets[0].intersection(object_sets[1]) obj_a = object_sets[0] - midterm quant = response[0][0].replace('All', 'A').replace( 'Some not', 'O').replace('Some', 'I').replace('No', 'E') return quant + ('ac' if response[0][1] == list(obj_a)[0] else 'ca')