# %% import sqlite3 import pandas as pd import dtale import unicodedata import sys from simple_query_test_pandas import ricercaforme, ricercalemmi, ricercaformelemmi, ricercalemmiforme, ricercacatgr, inizialeraddoppiata, interpreter, counter from test_occorrenzario_pandas import findtexts, findcontexts, findbib, get_tables_occ, highlight from test_contesti_singoli import contestosingolo #%% funzione ricerca per cooccorrenze. # Ha in input un array del tipo [forma/lemma_cercati, tipo_ricerca, ricerca_espansa, iniziale_raddoppiata]. # l'attributo tipo_ricerca definisce il tipo di ricerca in input (0 per forme, 1 per lemmi, 2 per lemmi con opzione "mostra occorrenze non lemmatizzate", 3 per categoria grammaticale). # Permette di definire l'intervallo di ricerca (in numero di parole), la possibilità di cercare soltanto all'interno dello stesso periodo (0/1) e/o di cercare le occorrenze in modo ordinato (0/1) def ricerca_cooccorrenze(listaricerche, intervallo, periodo, ordinate, path): listOcc = get_tables_occ(path) listatesti = pd.DataFrame() cod = 1 if listaricerche[0][1] == 0: ricerca = ricercaforme(interpreter(listaricerche[0][0]), path, listaricerche[0][2], listaricerche[0][3]) listatesti = findtexts(0, ricerca, listOcc, path) elif listaricerche[0][1] == 1: ricerca = ricercalemmi(interpreter(listaricerche[0][0]), path, listaricerche[0][2], listaricerche[0][3]) listatesti = findtexts(1, ricerca, listOcc, path) elif listaricerche[0][1] == 2: ricerca = ricercalemmi(interpreter(listaricerche[0][0]), path, listaricerche[0][2], listaricerche[0][3]) listatesti = findtexts(2, ricerca, listOcc, path) elif listaricerche[0][1] == 3: ricerca = ricercacatgr(listaricerche[0][0], path) listatesti = findtexts(1, ricerca, listOcc, path) for ricerca, tipo, espansa, raddoppiata in listaricerche[1:]: if tipo == 0: search = ricercaforme(interpreter(ricerca), path, espansa, raddoppiata) elif tipo == 1: search = ricercalemmi(interpreter(ricerca), path, espansa, raddoppiata) elif tipo == 2: search = ricercalemmi(interpreter(ricerca), path, espansa, raddoppiata) elif tipo == 3: search = ricercacatgr(ricerca, path) textlist = findtexts(tipo, search, listOcc, path) df_new = pd.DataFrame(columns=list(listatesti.columns)) cod_cols = [] for index1, row1 in listatesti.iterrows(): for index2, row2 in textlist.iterrows(): cond1 = row1['ntx'] == row2['ntx'] cond2 = row1['numperiod'] == row2['numperiod'] if periodo == 1 else True cond3 = ((row1['mappa'] - row2['mappa']) != 0) and ((row1['mappa'] - row2['mappa']) in range(-intervallo, intervallo)) if ordinate == 0 else ((row2['mappa'] - row1['mappa']) > 0) and ((row2['mappa'] - row1['mappa']) <= intervallo) if cond1 and cond2 and cond3: print(textlist) row1[f'cod{cod}'] = textlist.loc[index2, 'cod'].iloc[1] print (type(textlist.loc[index2, 'cod'].iloc[1])) cod_cols.append(f'cod{cod}') df_new = pd.concat([df_new, row1.to_frame().T]) listatesti = df_new cod += 1 if listatesti.empty: print("Nessuna cooccorrenza trovata") sys.exit(1) else: contexts = findcontexts(listatesti, listOcc, path) bibliocontexts = findbib(contexts, path) clean = bibliocontexts.drop_duplicates(subset="contesto") highlights = highlight (clean, path) return highlights.reset_index(drop=True) # %% path = "/Users/leonardocanova/Library/CloudStorage/OneDrive-ConsiglioNazionaledelleRicerche/TIGRO/Ricerche/db/first_db" ricerca = [["cavaliere", 1, 0, 0], ["corte", 0, 0, 0]] cooccorrenze = ricerca_cooccorrenze(ricerca, 10, 0, 0, path) #contesto = contestosingolo(cooccorrenze, 9, 0, 5, 0, get_tables_occ(path), path) dtale.show(cooccorrenze) # %% deprecated """def ricerca_cooccorrenze (listaricerche, intervallo, periodo, ordinate, path): listOcc = get_tables_occ(path) listatesti = pd.DataFrame() if listaricerche[0][1] == 0: ricerca = ricercaforme(interpreter(listaricerche[0][0]), path, listaricerche[0][2], listaricerche[0][3]) listatesti = findtexts(0,ricerca,listOcc,path) elif listaricerche[0][1] == 1: ricerca = ricercalemmi(interpreter(listaricerche[0][0]), path, listaricerche[0][2], listaricerche[0][3]) listatesti = findtexts(1,ricerca,listOcc,path) elif listaricerche[0][1] == 2: ricerca = ricercalemmi(interpreter(listaricerche[0][0]), path, listaricerche[0][2], listaricerche[0][3]) listatesti = findtexts(2,ricerca,listOcc,path) elif listaricerche[0][1] == 3: ricerca = ricercacatgr(listaricerche[0][0], path) listatesti = findtexts(1, ricerca, listOcc, path) for ricerca, tipo, espansa, raddoppiata in listaricerche[1:]: if tipo == 0: search = ricercaforme(interpreter(ricerca), path, espansa, raddoppiata) textlist = findtexts(0, search,listOcc, path) print (textlist) df_new = pd.DataFrame(columns=list(listatesti.columns)) if periodo == 0: for index1, row1 in listatesti.iterrows(): for index2, row2 in textlist.iterrows(): if ordinate == 0: if row1['ntx'] == row2['ntx'] and ((row1['mappa'] - row2['mappa']) != 0) and ((row1['mappa'] - row2['mappa']) in range(-intervallo,intervallo)): df_new = pd.concat([df_new, row1.to_frame().T]) elif ordinate == 1: if row1['ntx'] == row2['ntx'] and ((row2['mappa'] - row1['mappa']) > 0) and ((row2['mappa'] - row1['mappa']) <= intervallo): df_new = pd.concat([df_new, row1.to_frame().T]) elif periodo == 1: for index1, row1 in listatesti.iterrows(): for index2, row2 in textlist.iterrows(): if ordinate == 0: if row1['ntx'] == row2['ntx'] and row1['numperiod'] == row2['numperiod'] and ((row1['mappa'] - row2['mappa']) != 0) and ((row1['mappa'] - row2['mappa']) in range(-intervallo,intervallo)): df_new = pd.concat([df_new, row1.to_frame().T]) elif ordinate == 1: if row1['ntx'] == row2['ntx'] and row1['numperiod'] == row2['numperiod'] and ((row2['mappa'] - row1['mappa']) > 0) and ((row2['mappa'] - row1['mappa']) <= intervallo): df_new = pd.concat([df_new, row1.to_frame().T]) #print(df_new) listatesti = df_new elif tipo == 1: search = ricercalemmi(interpreter(ricerca), path, espansa, raddoppiata) textlist = findtexts(1, search,listOcc, path) df_new = pd.DataFrame(columns=list(listatesti.columns)) if periodo == 0: for index1, row1 in listatesti.iterrows(): for index2, row2 in textlist.iterrows(): if ordinate == 0: if row1['ntx'] == row2['ntx'] and ((row1['mappa'] - row2['mappa']) != 0) and ((row1['mappa'] - row2['mappa']) in range(-intervallo,intervallo)): df_new = pd.concat([df_new, row1.to_frame().T]) if ordinate == 1: if row1['ntx'] == row2['ntx'] and ((row2['mappa'] - row1['mappa']) > 0) and ((row2['mappa'] - row1['mappa']) <= intervallo): df_new = pd.concat([df_new, row1.to_frame().T]) elif periodo == 1: for index1, row1 in listatesti.iterrows(): for index2, row2 in textlist.iterrows(): if ordinate == 0: if row1['ntx'] == row2['ntx'] and row1['numperiod'] == row2['numperiod'] and ((row1['mappa'] - row2['mappa']) != 0) and ((row1['mappa'] - row2['mappa']) in range(-intervallo,intervallo)): df_new = pd.concat([df_new, row1.to_frame().T]) if ordinate == 1: if row1['ntx'] == row2['ntx'] and row1['numperiod'] == row2['numperiod'] and ((row2['mappa'] - row1['mappa']) > 0) and ((row2['mappa'] - row1['mappa']) <= intervallo): df_new = pd.concat([df_new, row1.to_frame().T]) listatesti = df_new elif tipo == 2: search = ricercalemmi(interpreter(ricerca), path, espansa, raddoppiata) textlist = findtexts(2, search,listOcc, path) df_new = pd.DataFrame(columns=list(listatesti.columns)) if periodo == 0: for index1, row1 in listatesti.iterrows(): for index2, row2 in textlist.iterrows(): if ordinate == 0: if row1['ntx'] == row2['ntx'] and ((row1['mappa'] - row2['mappa']) != 0) and ((row1['mappa'] - row2['mappa']) in range(-intervallo,intervallo)): df_new = pd.concat([df_new, row1.to_frame().T]) if ordinate == 1: if row1['ntx'] == row2['ntx'] and ((row2['mappa'] - row1['mappa']) > 0) and ((row2['mappa'] - row1['mappa']) <= intervallo): df_new = pd.concat([df_new, row1.to_frame().T]) elif periodo == 1: for index1, row1 in listatesti.iterrows(): for index2, row2 in textlist.iterrows(): if ordinate == 0: if row1['ntx'] == row2['ntx'] and row1['numperiod'] == row2['numperiod'] and ((row1['mappa'] - row2['mappa']) != 0) and ((row1['mappa'] - row2['mappa']) in range(-intervallo,intervallo)): df_new = pd.concat([df_new, row1.to_frame().T]) if ordinate == 1: if row1['ntx'] == row2['ntx'] and row1['numperiod'] == row2['numperiod'] and ((row2['mappa'] - row1['mappa']) > 0) and ((row2['mappa'] - row1['mappa']) <= intervallo): df_new = pd.concat([df_new, row1.to_frame().T]) listatesti = df_new elif tipo == 3: search = ricercacatgr(ricerca, path) textlist = findtexts(1, search,listOcc, path) df_new = pd.DataFrame(columns=list(listatesti.columns)) if periodo == 0: for index1, row1 in listatesti.iterrows(): for index2, row2 in textlist.iterrows(): if ordinate == 0: if row1['ntx'] == row2['ntx'] and ((row1['mappa'] - row2['mappa']) != 0) and ((row1['mappa'] - row2['mappa']) in range(-intervallo,intervallo)): df_new = pd.concat([df_new, row1.to_frame().T]) if ordinate == 1: if row1['ntx'] == row2['ntx'] and ((row2['mappa'] - row1['mappa']) > 0) and ((row2['mappa'] - row1['mappa']) <= intervallo): df_new = pd.concat([df_new, row1.to_frame().T]) elif periodo == 1: for index1, row1 in listatesti.iterrows(): for index2, row2 in textlist.iterrows(): if ordinate == 0: if row1['ntx'] == row2['ntx'] and row1['numperiod'] == row2['numperiod'] and ((row1['mappa'] - row2['mappa']) != 0) and ((row1['mappa'] - row2['mappa']) in range(-intervallo,intervallo)): df_new = pd.concat([df_new, row1.to_frame().T]) if ordinate == 1: if row1['ntx'] == row2['ntx'] and row1['numperiod'] == row2['numperiod'] and ((row2['mappa'] - row1['mappa']) > 0) and ((row2['mappa'] - row1['mappa']) <= intervallo): df_new = pd.concat([df_new, row1.to_frame().T]) listatesti = df_new if listatesti.empty: print ("Nessuna cooccorrenza trovata") sys.exit(1) else: contexts = findcontexts(listatesti, listOcc, path) bibliocontexts = findbib(contexts, path) clean = bibliocontexts.drop_duplicates(subset="contesto") return clean"""