123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198 |
- # %%
- 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"""
|