# Notebook Jupyter per la produzione semi-automatica dei test # definire le ricerche da effettuare e il nome del file dove visualizzare i risultati # %% # Test code using Jupyter -- produce a JSON of queries and results # %% from simple_query_test_pandas import ricercaforme from simple_query_test_pandas import ricercalemmi from simple_query_test_pandas import ricercaformelemmi from simple_query_test_pandas import interpreter import json import os # Definisco la funzione per convertire il DataFrame in formato JSON def df_to_json_records(df): return df.to_dict(orient='records') # Definisco la funzione per scrivere i risultati in un file JSON def write_to_json_results(data, filename): with open(filename, 'w') as f: json.dump(data, f, indent=4) # aggiungi indentazione di 4 spazi # Definisco la funzione per scrivere le ricerche in un file JSON def write_to_json_searches(data, filename): with open(filename, 'w') as f: json.dump(data, f, indent=4) # aggiungi indentazione di 4 spazi # Definisco la funzione per leggere i risultati da un file JSON def read_from_json(filename): if not os.path.isfile(filename): return [] with open(filename, 'r') as f: content = f.read() if content: return json.loads(content) else: return [] # Creo una lista vuota per i risultati all_results = [] # Creo una lista vuota per le ricerche all_searches = [] # Definisco gli esempi di ricerca da fare path_db_0 = "../db/first_db" search_entries = [ {"tipo_ricerca": "forme e lemmi", "parola_cercata": "pro*", "path_db": path_db_0, "ricerca_espansa": 1, "iniziali_raddoppiate": 0}, {"tipo_ricerca": "forme", "parola_cercata": "prov*", "path_db": path_db_0, "ricerca_espansa": 1, "iniziali_raddoppiate": 0}, {"tipo_ricerca": "lemmi", "parola_cercata": "prova", "path_db": path_db_0, "ricerca_espansa": 1, "iniziali_raddoppiate": 0} ] # Definisco il nome del file per i risultati filename_results = 'results.json' # Definisco il nome del file per le ricerche filename_searches = 'searches.json' # Eseguo le ricerche for entry_info in search_entries: print ("Ricerca di: " + entry_info["parola_cercata"]) # Definisco il tipo di ricerca, la parola cercata e le altre informazioni richieste tipo_ricerca = entry_info["tipo_ricerca"] parola_cercata = entry_info["parola_cercata"] path_db = entry_info["path_db"] ricerca_espansa = entry_info["ricerca_espansa"] iniziali_raddoppiate = entry_info["iniziali_raddoppiate"] search_info = {"tipo_ricerca": tipo_ricerca, "parola_cercata": parola_cercata, "ricerca_espansa": ricerca_espansa, "iniziali_raddoppiate": iniziali_raddoppiate} # Eseguo la ricerca if tipo_ricerca == "forme e lemmi": df = ricercaformelemmi(interpreter(parola_cercata), path_db, ricerca_espansa, iniziali_raddoppiate) elif tipo_ricerca == "forme": df = ricercaforme(interpreter(parola_cercata), path_db, ricerca_espansa, iniziali_raddoppiate) else: df = ricercalemmi(interpreter(parola_cercata), path_db, ricerca_espansa, iniziali_raddoppiate) results = df_to_json_records(df) # Salvo i risultati nella lista di tutti i risultati for r in results: r.update(search_info) all_results.extend(results) all_searches.append(search_info) # Leggo i risultati precedenti dal file JSON path = "test_data/" previous_results = read_from_json(os.path.join(path, filename_results)) # Aggiungo i nuovi risultati alla lista dei risultati precedenti previous_results.extend(all_results) # Scrivo tutti i risultati della ricerca nel file JSON if all(isinstance(item, dict) for item in previous_results): write_to_json_results(previous_results, os.path.join(path, filename_results)) print("Risultati della ricerca salvati nel file JSON "+ filename_results) else: print("La lista non è una lista di dizionari e non può essere convertita in JSON") # Scrivo tutte le ricerche eseguite nel file JSON if all(isinstance(item, dict) for item in all_searches): write_to_json_searches(all_searches, os.path.join(path, filename_searches)) print("Ricerche salvate nel file JSON " + filename_searches) else: print("La lista non è una lista di dizionari e non può essere convertita in JSON") # %%