test_cooccorrenze.py 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. # %%
  2. import sqlite3
  3. import pandas as pd
  4. import dtale
  5. import unicodedata
  6. import sys
  7. from simple_query_test_pandas import ricercaforme, ricercalemmi, ricercaformelemmi, ricercalemmiforme, ricercacatgr, inizialeraddoppiata, interpreter, counter
  8. from test_occorrenzario_pandas import findtexts, findcontexts, findbib, get_tables_occ, highlight
  9. from test_contesti_singoli import contestosingolo
  10. #%% funzione ricerca per cooccorrenze.
  11. # Ha in input un array del tipo [forma/lemma_cercati, tipo_ricerca, ricerca_espansa, iniziale_raddoppiata].
  12. # 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).
  13. # 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)
  14. def ricerca_cooccorrenze(listaricerche, intervallo, periodo, ordinate, path):
  15. listOcc = get_tables_occ(path)
  16. listatesti = pd.DataFrame()
  17. cod = 1
  18. if listaricerche[0][1] == 0:
  19. ricerca = ricercaforme(interpreter(listaricerche[0][0]), path, listaricerche[0][2], listaricerche[0][3])
  20. listatesti = findtexts(0, ricerca, listOcc, path)
  21. elif listaricerche[0][1] == 1:
  22. ricerca = ricercalemmi(interpreter(listaricerche[0][0]), path, listaricerche[0][2], listaricerche[0][3])
  23. listatesti = findtexts(1, ricerca, listOcc, path)
  24. elif listaricerche[0][1] == 2:
  25. ricerca = ricercalemmi(interpreter(listaricerche[0][0]), path, listaricerche[0][2], listaricerche[0][3])
  26. listatesti = findtexts(2, ricerca, listOcc, path)
  27. elif listaricerche[0][1] == 3:
  28. ricerca = ricercacatgr(listaricerche[0][0], path)
  29. listatesti = findtexts(1, ricerca, listOcc, path)
  30. for ricerca, tipo, espansa, raddoppiata in listaricerche[1:]:
  31. if tipo == 0:
  32. search = ricercaforme(interpreter(ricerca), path, espansa, raddoppiata)
  33. elif tipo == 1:
  34. search = ricercalemmi(interpreter(ricerca), path, espansa, raddoppiata)
  35. elif tipo == 2:
  36. search = ricercalemmi(interpreter(ricerca), path, espansa, raddoppiata)
  37. elif tipo == 3:
  38. search = ricercacatgr(ricerca, path)
  39. textlist = findtexts(tipo, search, listOcc, path)
  40. df_new = pd.DataFrame(columns=list(listatesti.columns))
  41. cod_cols = []
  42. for index1, row1 in listatesti.iterrows():
  43. for index2, row2 in textlist.iterrows():
  44. cond1 = row1['ntx'] == row2['ntx']
  45. cond2 = row1['numperiod'] == row2['numperiod'] if periodo == 1 else True
  46. 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)
  47. if cond1 and cond2 and cond3:
  48. print(textlist)
  49. row1[f'cod{cod}'] = textlist.loc[index2, 'cod'].iloc[1]
  50. print (type(textlist.loc[index2, 'cod'].iloc[1]))
  51. cod_cols.append(f'cod{cod}')
  52. df_new = pd.concat([df_new, row1.to_frame().T])
  53. listatesti = df_new
  54. cod += 1
  55. if listatesti.empty:
  56. print("Nessuna cooccorrenza trovata")
  57. sys.exit(1)
  58. else:
  59. contexts = findcontexts(listatesti, listOcc, path)
  60. bibliocontexts = findbib(contexts, path)
  61. clean = bibliocontexts.drop_duplicates(subset="contesto")
  62. highlights = highlight (clean, path)
  63. return highlights.reset_index(drop=True)
  64. # %%
  65. path = "/Users/leonardocanova/Library/CloudStorage/OneDrive-ConsiglioNazionaledelleRicerche/TIGRO/Ricerche/db/first_db"
  66. ricerca = [["cavaliere", 1, 0, 0], ["corte", 0, 0, 0]]
  67. cooccorrenze = ricerca_cooccorrenze(ricerca, 10, 0, 0, path)
  68. #contesto = contestosingolo(cooccorrenze, 9, 0, 5, 0, get_tables_occ(path), path)
  69. dtale.show(cooccorrenze)
  70. # %% deprecated
  71. """def ricerca_cooccorrenze (listaricerche, intervallo, periodo, ordinate, path):
  72. listOcc = get_tables_occ(path)
  73. listatesti = pd.DataFrame()
  74. if listaricerche[0][1] == 0:
  75. ricerca = ricercaforme(interpreter(listaricerche[0][0]), path, listaricerche[0][2], listaricerche[0][3])
  76. listatesti = findtexts(0,ricerca,listOcc,path)
  77. elif listaricerche[0][1] == 1:
  78. ricerca = ricercalemmi(interpreter(listaricerche[0][0]), path, listaricerche[0][2], listaricerche[0][3])
  79. listatesti = findtexts(1,ricerca,listOcc,path)
  80. elif listaricerche[0][1] == 2:
  81. ricerca = ricercalemmi(interpreter(listaricerche[0][0]), path, listaricerche[0][2], listaricerche[0][3])
  82. listatesti = findtexts(2,ricerca,listOcc,path)
  83. elif listaricerche[0][1] == 3:
  84. ricerca = ricercacatgr(listaricerche[0][0], path)
  85. listatesti = findtexts(1, ricerca, listOcc, path)
  86. for ricerca, tipo, espansa, raddoppiata in listaricerche[1:]:
  87. if tipo == 0:
  88. search = ricercaforme(interpreter(ricerca), path, espansa, raddoppiata)
  89. textlist = findtexts(0, search,listOcc, path)
  90. print (textlist)
  91. df_new = pd.DataFrame(columns=list(listatesti.columns))
  92. if periodo == 0:
  93. for index1, row1 in listatesti.iterrows():
  94. for index2, row2 in textlist.iterrows():
  95. if ordinate == 0:
  96. if row1['ntx'] == row2['ntx'] and ((row1['mappa'] - row2['mappa']) != 0) and ((row1['mappa'] - row2['mappa']) in range(-intervallo,intervallo)):
  97. df_new = pd.concat([df_new, row1.to_frame().T])
  98. elif ordinate == 1:
  99. if row1['ntx'] == row2['ntx'] and ((row2['mappa'] - row1['mappa']) > 0) and ((row2['mappa'] - row1['mappa']) <= intervallo):
  100. df_new = pd.concat([df_new, row1.to_frame().T])
  101. elif periodo == 1:
  102. for index1, row1 in listatesti.iterrows():
  103. for index2, row2 in textlist.iterrows():
  104. if ordinate == 0:
  105. 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)):
  106. df_new = pd.concat([df_new, row1.to_frame().T])
  107. elif ordinate == 1:
  108. if row1['ntx'] == row2['ntx'] and row1['numperiod'] == row2['numperiod'] and ((row2['mappa'] - row1['mappa']) > 0) and ((row2['mappa'] - row1['mappa']) <= intervallo):
  109. df_new = pd.concat([df_new, row1.to_frame().T])
  110. #print(df_new)
  111. listatesti = df_new
  112. elif tipo == 1:
  113. search = ricercalemmi(interpreter(ricerca), path, espansa, raddoppiata)
  114. textlist = findtexts(1, search,listOcc, path)
  115. df_new = pd.DataFrame(columns=list(listatesti.columns))
  116. if periodo == 0:
  117. for index1, row1 in listatesti.iterrows():
  118. for index2, row2 in textlist.iterrows():
  119. if ordinate == 0:
  120. if row1['ntx'] == row2['ntx'] and ((row1['mappa'] - row2['mappa']) != 0) and ((row1['mappa'] - row2['mappa']) in range(-intervallo,intervallo)):
  121. df_new = pd.concat([df_new, row1.to_frame().T])
  122. if ordinate == 1:
  123. if row1['ntx'] == row2['ntx'] and ((row2['mappa'] - row1['mappa']) > 0) and ((row2['mappa'] - row1['mappa']) <= intervallo):
  124. df_new = pd.concat([df_new, row1.to_frame().T])
  125. elif periodo == 1:
  126. for index1, row1 in listatesti.iterrows():
  127. for index2, row2 in textlist.iterrows():
  128. if ordinate == 0:
  129. 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)):
  130. df_new = pd.concat([df_new, row1.to_frame().T])
  131. if ordinate == 1:
  132. if row1['ntx'] == row2['ntx'] and row1['numperiod'] == row2['numperiod'] and ((row2['mappa'] - row1['mappa']) > 0) and ((row2['mappa'] - row1['mappa']) <= intervallo):
  133. df_new = pd.concat([df_new, row1.to_frame().T])
  134. listatesti = df_new
  135. elif tipo == 2:
  136. search = ricercalemmi(interpreter(ricerca), path, espansa, raddoppiata)
  137. textlist = findtexts(2, search,listOcc, path)
  138. df_new = pd.DataFrame(columns=list(listatesti.columns))
  139. if periodo == 0:
  140. for index1, row1 in listatesti.iterrows():
  141. for index2, row2 in textlist.iterrows():
  142. if ordinate == 0:
  143. if row1['ntx'] == row2['ntx'] and ((row1['mappa'] - row2['mappa']) != 0) and ((row1['mappa'] - row2['mappa']) in range(-intervallo,intervallo)):
  144. df_new = pd.concat([df_new, row1.to_frame().T])
  145. if ordinate == 1:
  146. if row1['ntx'] == row2['ntx'] and ((row2['mappa'] - row1['mappa']) > 0) and ((row2['mappa'] - row1['mappa']) <= intervallo):
  147. df_new = pd.concat([df_new, row1.to_frame().T])
  148. elif periodo == 1:
  149. for index1, row1 in listatesti.iterrows():
  150. for index2, row2 in textlist.iterrows():
  151. if ordinate == 0:
  152. 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)):
  153. df_new = pd.concat([df_new, row1.to_frame().T])
  154. if ordinate == 1:
  155. if row1['ntx'] == row2['ntx'] and row1['numperiod'] == row2['numperiod'] and ((row2['mappa'] - row1['mappa']) > 0) and ((row2['mappa'] - row1['mappa']) <= intervallo):
  156. df_new = pd.concat([df_new, row1.to_frame().T])
  157. listatesti = df_new
  158. elif tipo == 3:
  159. search = ricercacatgr(ricerca, path)
  160. textlist = findtexts(1, search,listOcc, path)
  161. df_new = pd.DataFrame(columns=list(listatesti.columns))
  162. if periodo == 0:
  163. for index1, row1 in listatesti.iterrows():
  164. for index2, row2 in textlist.iterrows():
  165. if ordinate == 0:
  166. if row1['ntx'] == row2['ntx'] and ((row1['mappa'] - row2['mappa']) != 0) and ((row1['mappa'] - row2['mappa']) in range(-intervallo,intervallo)):
  167. df_new = pd.concat([df_new, row1.to_frame().T])
  168. if ordinate == 1:
  169. if row1['ntx'] == row2['ntx'] and ((row2['mappa'] - row1['mappa']) > 0) and ((row2['mappa'] - row1['mappa']) <= intervallo):
  170. df_new = pd.concat([df_new, row1.to_frame().T])
  171. elif periodo == 1:
  172. for index1, row1 in listatesti.iterrows():
  173. for index2, row2 in textlist.iterrows():
  174. if ordinate == 0:
  175. 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)):
  176. df_new = pd.concat([df_new, row1.to_frame().T])
  177. if ordinate == 1:
  178. if row1['ntx'] == row2['ntx'] and row1['numperiod'] == row2['numperiod'] and ((row2['mappa'] - row1['mappa']) > 0) and ((row2['mappa'] - row1['mappa']) <= intervallo):
  179. df_new = pd.concat([df_new, row1.to_frame().T])
  180. listatesti = df_new
  181. if listatesti.empty:
  182. print ("Nessuna cooccorrenza trovata")
  183. sys.exit(1)
  184. else:
  185. contexts = findcontexts(listatesti, listOcc, path)
  186. bibliocontexts = findbib(contexts, path)
  187. clean = bibliocontexts.drop_duplicates(subset="contesto")
  188. return clean"""