File size: 2,737 Bytes
7347eec
 
 
6fb487c
 
7347eec
6fb487c
7347eec
 
 
 
 
6fdb0ae
 
6fb487c
7347eec
 
 
6fb487c
7347eec
 
 
6fb487c
7347eec
6fb487c
7347eec
 
 
6fb487c
7347eec
70c7f04
 
7347eec
70c7f04
7347eec
70c7f04
 
 
 
7347eec
 
 
6fb487c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8b82e6e
6fb487c
7347eec
6fb487c
7347eec
 
6fb487c
8b82e6e
7347eec
8b82e6e
7347eec
 
 
8b82e6e
 
7347eec
8b82e6e
7347eec
8b82e6e
 
6fb487c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
import re

class MemoryRobotNLP:
    def __init__(self, max_size):
        self.max_size = max_size
        self.memory = {}

    def add_concept(self, concepto, string):
       
        if concepto not in self.memory:
            self.memory[concepto] = []
        #evaluate priority calculation
        priority = 1 - (1/len(concepto))
        self.memory[concepto].append({"Found_text":string, "Priority_Weight":priority})

    def delete_concept(self, concepto):
        if concepto in self.memory:
            del self.memory[concepto]

    def add_string(self, concepto, string, prioridad):
        if concepto not in self.memory:
            self.memory[concepto] = []

        self.memory[concepto].append((string, prioridad))

    def delete_string(self, concepto, string):
        if concepto in self.memory:
            self.memory[concepto] = [(s, p) for s, p in self.memory[concepto] if s != string]

    def search_concept_pattern(self, patron):
            resultados = {}

            for concepto, strings in self.memory.items():
                for string, _ in strings:
                    if re.search(patron, string,re.IGNORECASE):
                        if concepto not in resultados:
                            resultados[concepto] = []
                        resultados[concepto].append(string)

            return resultados
    def get_concepts_substrings(self, espacio_disponible):
        memoria_ordenada = sorted(self.memory.items(), key=lambda x: sum(prioridad for _, prioridad in x[1]), reverse=True)
        espacio_utilizado = 0
        conceptos_acotados = []

        for concepto, strings in memoria_ordenada:
            espacio_concepto = sum(prioridad for _, prioridad in strings)
            if espacio_utilizado + espacio_concepto <= espacio_disponible:
                conceptos_acotados.append((concepto, strings))
                espacio_utilizado += espacio_concepto
            else:
                break

        return conceptos_acotados


# Ejemplo de uso


if __name__ == "__main__":

    memoria_robot = MemoryRobotNLP(max_size=100)

    memoria_robot.add_concept("animales", [("perro", 0.8), ("gato", 0.7), ("pájaro", 0.5)])
    memoria_robot.add_concept("colores", [("rojo", 0.9), ("verde", 0.6), ("azul", 0.7)])

    print("Memoria completa:")
    print(memoria_robot.memory)

    memoria_robot.add_string("animales", "pez", 0.6)
    memoria_robot.delete_string("colores", "verde")
    memoria_robot.delete_concepto("colores")

    print("\nMemoria después de modificaciones:")
    print(memoria_robot.memory)

    conceptos_acotados = memoria_robot.get_concepts_substrings(50)
    print("\nConceptos acotados a un tamaño máximo de memoria:")
    print(conceptos_acotados)