CoolFace
Apppublic

torahCodes/Torah_Codes

sourceHugging Faceapache-2.0updated 2y agoView on Hugging Face
4likes
grapher.py119 linesDownload Raw Back to lib
1import requests2import json3import networkx as nx4import matplotlib.pyplot as plt5from fuzzywuzzy import fuzz6from fuzzywuzzy import process7from lib.memory import *8 9 10class APIRequester:11    def __init__(self):12        pass13 14    def make_request(self, url):15        response = requests.get(url)16        if response.status_code == 200:17            return response.json()18        else:19            return None20 21class Grapher:22    def __init__(self, memoria_nlp, threshold=70):23        self.threshold = threshold24        self.graph = nx.Graph()25        self.memoria_nlp = memoria_nlp26 27    def parse_json(self, data, parent=None):28        if isinstance(data, dict):29            for key, value in data.items():30                if parent:31                    self.graph.add_node(parent)32                    self.graph.add_node(key)33                    self.graph.add_edge(parent, key)34 35                    for node in self.graph.nodes():36                        if node != parent and fuzz.ratio(node, key) >= self.threshold:37                            self.graph = nx.contracted_nodes(self.graph, node, key, self_loops=False)38 39                self.memoria_nlp.agregar_concepto("keys", [(key, 1.0)])40 41                if isinstance(value, (dict, list)):42                    self.parse_json(value, key)43                else:44                    self.memoria_nlp.agregar_concepto("values", [(str(value), 1.0)])45                    if parent:46                        self.graph.add_node(value)47                        self.graph.add_edge(key, value)48 49                        for node in self.graph.nodes():50                            if node != value and fuzz.ratio(node, value) >= self.threshold:51                                self.graph = nx.contracted_nodes(self.graph, node, value, self_loops=False)52        elif isinstance(data, list):53            for item in data:54                self.parse_json(item, parent)55 56    def draw_graph(self):57        pos = nx.spring_layout(self.graph, seed=42)58        nx.draw(self.graph, pos, with_labels=True, node_size=700, node_color='skyblue', font_size=10, font_weight='bold')59        plt.title("JSON Graph")60        plt.show()61 62    def guardar_en_memoria(self):63        keys = self.memoria_nlp.obtener_conceptos_acotados(100)64        with open("memoria.json", "w") as file:65            json.dump(keys, file)66            67    def buscar_nodo(self, nodo):68        return process.extractOne(nodo, self.graph.nodes())[0]69    70    def eliminar_nodo(self, nodo):71        self.graph.remove_node(nodo)72    73    def agregar_nodo(self, nodo):74        self.graph.add_node(nodo)75    76    def distancia_entre_nodos(self, nodo1, nodo2):77        return nx.shortest_path_length(self.graph, source=nodo1, target=nodo2)78    79    def ruta_entre_nodos(self, nodo1, nodo2):80        return nx.shortest_path(self.graph, source=nodo1, target=nodo2)81    82    def unir_grafos(self, otro_grafo, umbral):83        for nodo in otro_grafo.nodes():84            nodo_similar = process.extractOne(nodo, self.graph.nodes())[0]85            if fuzz.ratio(nodo, nodo_similar) >= umbral:86                self.graph = nx.contracted_nodes(self.graph, nodo_similar, nodo, self_loops=False)87            else:88                self.graph.add_node(nodo)89                for vecino in otro_grafo.neighbors(nodo):90                    self.graph.add_edge(nodo, vecino)91 92 93if __name__ == "__main__":94 95    # Ejemplo de uso96    memoria_nlp = MemoriaRobotNLP(max_size=100)97    json_parser = JSONParser(memoria_nlp)98 99    api_requester = APIRequester()100    url = "https://jsonplaceholder.typicode.com/posts"101    data = api_requester.make_request(url)102 103    if data:104        json_parser.parse_json(data)105        json_parser.draw_graph()106        107        otro_parser = JSONParser(MemoriaRobotNLP(max_size=100))108        otro_parser.parse_json({"id": 101, "title": "New Title", "userId": 11})109        110        print("Uniendo los grafos...")111        json_parser.unir_grafos(otro_parser.graph, umbral=80)112        print("Grafo unido:")113        json_parser.draw_graph()114        115        json_parser.guardar_en_memoria()116    else:117        print("Error al realizar la solicitud a la API.")118 119