Browse Source

ricerca cooccorrenze per categoria grammaticale

Leonardo Canova 1 year ago
parent
commit
c9f77b7419

+ 61 - 14
flask_be/engine/test/simple_query_test_pandas.py

@@ -10,6 +10,7 @@ import re
 import pandas as pd
 import pandas as pd
 import dtale
 import dtale
 import unicodedata
 import unicodedata
+import sys
 
 
 
 
 #%% funzione combinazioni <> è chiamata da interpreter
 #%% funzione combinazioni <> è chiamata da interpreter
@@ -47,9 +48,10 @@ def list_normalize(lista):
 
 
 # %% funzione counter, può essere chiamata sui risultati delle ricerche per visualizzare le forme/lemmi e il numero di occorrenze individuate
 # %% funzione counter, può essere chiamata sui risultati delle ricerche per visualizzare le forme/lemmi e il numero di occorrenze individuate
 def counter (results):
 def counter (results):
-    trovati= len(results.index)
+    if not results.empty:
-    occorrenze= results['occ'].sum()
+        trovati= len(results.index)
-    return ("Trovati=" + str(trovati) + " Occorrenze=" + str(occorrenze))   
+        occorrenze= results['occ'].sum()
+        return ("Trovati=" + str(trovati) + " Occorrenze=" + str(occorrenze))   
 
 
 
 
 #%% Funzione ricerca per forme
 #%% Funzione ricerca per forme
@@ -65,7 +67,11 @@ def ricercaforme (entries, path, espansa, raddoppiata):
 
 
         con = sqlite3.connect(f"file:{path}/db/test1.db?mode=ro", uri=True)
         con = sqlite3.connect(f"file:{path}/db/test1.db?mode=ro", uri=True)
         answer_table = pd.read_sql(theSimpleQuery, con)
         answer_table = pd.read_sql(theSimpleQuery, con)
-        return answer_table
+        if answer_table.empty:
+            print ("Nessun risultato")
+            sys.exit(1)
+        else:
+            return answer_table
 
 
     else:
     else:
 
 
@@ -81,7 +87,11 @@ def ricercaforme (entries, path, espansa, raddoppiata):
 
 
         con = sqlite3.connect(f"file:{path}/db/test1.db?mode=ro", uri=True)
         con = sqlite3.connect(f"file:{path}/db/test1.db?mode=ro", uri=True)
         answer_table = pd.read_sql(theSimpleQuery, con)
         answer_table = pd.read_sql(theSimpleQuery, con)
-        return answer_table
+        if answer_table.empty:
+            print ("Nessun risultato")
+            sys.exit(1)
+        else:
+            return answer_table
     #deprecated
     #deprecated
     """if espansa == 0:
     """if espansa == 0:
 
 
@@ -125,7 +135,11 @@ def ricercalemmi (entries, path, espansa, raddoppiata):
 
 
         con = sqlite3.connect(f"file:{path}/db/test1.db?mode=ro", uri=True)
         con = sqlite3.connect(f"file:{path}/db/test1.db?mode=ro", uri=True)
         answer_table = pd.read_sql(theSimpleQuery, con)
         answer_table = pd.read_sql(theSimpleQuery, con)
-        return answer_table
+        if answer_table.empty:
+            print ("Nessun risultato")
+            sys.exit(1)
+        else:
+            return answer_table
 
 
     else:
     else:
         data = " OR spec LIKE ".join(entries)
         data = " OR spec LIKE ".join(entries)
@@ -140,7 +154,11 @@ def ricercalemmi (entries, path, espansa, raddoppiata):
 
 
         con = sqlite3.connect(f"file:{path}/db/test1.db?mode=ro", uri=True)
         con = sqlite3.connect(f"file:{path}/db/test1.db?mode=ro", uri=True)
         answer_table = pd.read_sql(theSimpleQuery, con)
         answer_table = pd.read_sql(theSimpleQuery, con)
-        return answer_table
+        if answer_table.empty:
+            print ("Nessun risultato")
+            sys.exit(1)
+        else:
+            return answer_table
     #deprecated
     #deprecated
     """if espansa == 0:
     """if espansa == 0:
 
 
@@ -182,7 +200,11 @@ def ricercaformelemmi (entries, path, espansa, raddoppiata):
             theSimpleQuery = f"SELECT form.spec AS forma, lem.spec AS lemma, lem.cat AS cat_gr, lem.omo AS disambiguatore, pfl.nocc AS occ, form.cod FROM pfl INNER JOIN form ON form.cod = pfl.forma INNER JOIN lem ON lem.cod = pfl.lemma WHERE form.spec LIKE {data} ORDER BY form.idfor"
             theSimpleQuery = f"SELECT form.spec AS forma, lem.spec AS lemma, lem.cat AS cat_gr, lem.omo AS disambiguatore, pfl.nocc AS occ, form.cod FROM pfl INNER JOIN form ON form.cod = pfl.forma INNER JOIN lem ON lem.cod = pfl.lemma WHERE form.spec LIKE {data} ORDER BY form.idfor"
         con = sqlite3.connect(f"file:{path}/db/test1.db?mode=ro", uri=True)
         con = sqlite3.connect(f"file:{path}/db/test1.db?mode=ro", uri=True)
         answer_table = pd.read_sql(theSimpleQuery, con)
         answer_table = pd.read_sql(theSimpleQuery, con)
-        return answer_table
+        if answer_table.empty:
+            print ("Nessun risultato")
+            sys.exit(1)
+        else:
+            return answer_table
     else:
     else:
         data = " OR form.spec LIKE ".join(entries)
         data = " OR form.spec LIKE ".join(entries)
         data_norm = " OR form.norm LIKE ".join(list_normalize(entries))
         data_norm = " OR form.norm LIKE ".join(list_normalize(entries))
@@ -194,7 +216,11 @@ def ricercaformelemmi (entries, path, espansa, raddoppiata):
             theSimpleQuery = f"SELECT DISTINCT form.spec AS forma, lem.spec AS lemma, lem.cat AS cat_gr, lem.omo AS disambiguatore, pfl.nocc AS occ, form.cod FROM pfl INNER JOIN form ON form.cod = pfl.forma INNER JOIN lem ON lem.cod = pfl.lemma WHERE (form.spec LIKE {data}) OR (form.norm LIKE {data_norm}) ORDER BY form.idfor"
             theSimpleQuery = f"SELECT DISTINCT form.spec AS forma, lem.spec AS lemma, lem.cat AS cat_gr, lem.omo AS disambiguatore, pfl.nocc AS occ, form.cod FROM pfl INNER JOIN form ON form.cod = pfl.forma INNER JOIN lem ON lem.cod = pfl.lemma WHERE (form.spec LIKE {data}) OR (form.norm LIKE {data_norm}) ORDER BY form.idfor"
         con = sqlite3.connect(f"file:{path}/db/test1.db?mode=ro", uri=True)
         con = sqlite3.connect(f"file:{path}/db/test1.db?mode=ro", uri=True)
         answer_table = pd.read_sql(theSimpleQuery, con)
         answer_table = pd.read_sql(theSimpleQuery, con)
-        return answer_table
+        if answer_table.empty:
+            print ("Nessun risultato")
+            sys.exit(1)
+        else:
+            return answer_table
     #deprecated
     #deprecated
     """if espansa == 0:
     """if espansa == 0:
 
 
@@ -237,7 +263,11 @@ def ricercalemmiforme (entries, path, espansa, raddoppiata):
             theSimpleQuery = f"SELECT lem.spec AS lemma, lem.cat AS cat_gr, form.spec AS forma, lem.omo AS disambiguatore, pfl.nocc AS occ, lem.cod FROM pfl INNER JOIN form ON form.cod = pfl.forma INNER JOIN lem ON lem.cod != 0 AND lem.cod = pfl.lemma WHERE lem.spec LIKE {data} ORDER BY lem.idlem"
             theSimpleQuery = f"SELECT lem.spec AS lemma, lem.cat AS cat_gr, form.spec AS forma, lem.omo AS disambiguatore, pfl.nocc AS occ, lem.cod FROM pfl INNER JOIN form ON form.cod = pfl.forma INNER JOIN lem ON lem.cod != 0 AND lem.cod = pfl.lemma WHERE lem.spec LIKE {data} ORDER BY lem.idlem"
         con = sqlite3.connect(f"file:{path}/db/test1.db?mode=ro", uri=True)
         con = sqlite3.connect(f"file:{path}/db/test1.db?mode=ro", uri=True)
         answer_table = pd.read_sql(theSimpleQuery, con)
         answer_table = pd.read_sql(theSimpleQuery, con)
-        return answer_table
+        if answer_table.empty:
+            print ("Nessun risultato")
+            sys.exit(1)
+        else:
+            return answer_table
     else:
     else:
         data = " OR lem.spec LIKE ".join(entries)
         data = " OR lem.spec LIKE ".join(entries)
         data_norm = " OR lem.norm LIKE ".join(list_normalize(entries))
         data_norm = " OR lem.norm LIKE ".join(list_normalize(entries))
@@ -249,7 +279,11 @@ def ricercalemmiforme (entries, path, espansa, raddoppiata):
             theSimpleQuery = f"SELECT DISTINCT lem.spec AS lemma, lem.cat AS cat_gr, form.spec AS forma, lem.omo AS disambiguatore, pfl.nocc AS occ, lem.cod FROM pfl INNER JOIN form ON form.cod = pfl.forma INNER JOIN lem ON lem.cod = pfl.lemma WHERE (lem.spec LIKE {data}) OR (lem.norm LIKE {data_norm}) ORDER BY lem.idlem"
             theSimpleQuery = f"SELECT DISTINCT lem.spec AS lemma, lem.cat AS cat_gr, form.spec AS forma, lem.omo AS disambiguatore, pfl.nocc AS occ, lem.cod FROM pfl INNER JOIN form ON form.cod = pfl.forma INNER JOIN lem ON lem.cod = pfl.lemma WHERE (lem.spec LIKE {data}) OR (lem.norm LIKE {data_norm}) ORDER BY lem.idlem"
         con = sqlite3.connect(f"file:{path}/db/test1.db?mode=ro", uri=True)
         con = sqlite3.connect(f"file:{path}/db/test1.db?mode=ro", uri=True)
         answer_table = pd.read_sql(theSimpleQuery, con)
         answer_table = pd.read_sql(theSimpleQuery, con)
-        return answer_table
+        if answer_table.empty:
+            print ("Nessun risultato")
+            sys.exit(1)
+        else:
+            return answer_table
     #deprecated
     #deprecated
     """if espansa == 0:
     """if espansa == 0:
 
 
@@ -281,10 +315,23 @@ def ricercalemmiforme (entries, path, espansa, raddoppiata):
         answer_table = pd.read_sql(theSimpleQuery, con)
         answer_table = pd.read_sql(theSimpleQuery, con)
         return answer_table"""
         return answer_table"""
 
 
+# %% Ricerca per categorie grammaticali
+def ricercacatgr (entry, path):
+        theSimpleQuery = f"SELECT spec AS lemma, cat AS cat_gr, omo AS disambiguatore, nocc AS occ, cod FROM lem WHERE cat = '{entry}' ORDER BY idlem"
+        con = sqlite3.connect(f"file:{path}/db/test1.db?mode=ro", uri=True)
+        answer_table = pd.read_sql(theSimpleQuery, con)
+        if answer_table.empty:
+            print ("Nessun risultato")
+            sys.exit(1)
+        else:
+            return answer_table
+
 #%% 
 #%% 
-entry = "proferire*"
+path = "/Users/leonardocanova/Library/CloudStorage/OneDrive-ConsiglioNazionaledelleRicerche/TIGRO/Ricerche/flask_be"
-print ("Ricerca di: " + entry)
+entry = "agg."
-df=ricercalemmiforme(interpreter(entry), "/Users/leonardocanova/Library/CloudStorage/OneDrive-ConsiglioNazionaledelleRicerche/TIGRO/Ricerche/flask_be", 0, 0)
+df=ricercacatgr(entry, path)
+#df=ricercaforme(interpreter(entry), path, 0, 0)
 print (counter(df))
 print (counter(df))
 dtale.show(df)
 dtale.show(df)
 # %%
 # %%
+ 

+ 2 - 15
flask_be/engine/test/test_contesti_singoli.py

@@ -3,15 +3,8 @@ import sqlite3
 import pandas as pd
 import pandas as pd
 import dtale
 import dtale
 import unicodedata
 import unicodedata
-from simple_query_test_pandas import ricercaforme
+from simple_query_test_pandas import ricercaforme, ricercalemmi, ricercaformelemmi, ricercalemmiforme, interpreter
-from simple_query_test_pandas import ricercalemmi
+from test_occorrenzario_pandas import findtexts, findcontexts, findbib
-from simple_query_test_pandas import ricercaformelemmi
-from simple_query_test_pandas import ricercalemmiforme
-from simple_query_test_pandas import inizialeraddoppiata
-from simple_query_test_pandas import interpreter
-from test_occorrenzario_pandas import findtexts
-from test_occorrenzario_pandas import findcontexts
-from test_occorrenzario_pandas import findbib
 
 
 #funzione di ricerca dei contesti singoli, con personalizzazione dell'ampiezza per parole o periodi, ha in input findcontexts e deve essere passata a findbib.
 #funzione di ricerca dei contesti singoli, con personalizzazione dell'ampiezza per parole o periodi, ha in input findcontexts e deve essere passata a findbib.
 def singlecontexts(textlist, index, parole, periodi, brani, listOcc, path):
 def singlecontexts(textlist, index, parole, periodi, brani, listOcc, path):
@@ -77,23 +70,19 @@ def findlinks (context, path):
     pitxtlocal = context.loc[0, "pitxt"]
     pitxtlocal = context.loc[0, "pitxt"]
     pinizlocal = context.loc[0, "piniz"]
     pinizlocal = context.loc[0, "piniz"]
     pfinlocal = context.loc[0, "pfin"]
     pfinlocal = context.loc[0, "pfin"]
-    print (pitxtlocal, pinizlocal, pfinlocal)
     if linkslocal == 0:
     if linkslocal == 0:
         return context
         return context
     if linkslocal == 1:
     if linkslocal == 1:
         query = f"SELECT ta.ntx, ta.id, ta.piniz, ta.pfin, tb.mappain, tb.mappafin FROM linkbase AS tb INNER JOIN linknoteass AS ta ON tb.ntx = ta.ntx AND tb.id = ta.id WHERE (((tb.tipo= 1) AND (tb.ntx = {ntxlocal})) AND ((tb.piniz BETWEEN {pinizlocal} AND {pfinlocal}) OR ({pitxtlocal} BETWEEN tb.piniz AND tb.pfin)))"
         query = f"SELECT ta.ntx, ta.id, ta.piniz, ta.pfin, tb.mappain, tb.mappafin FROM linkbase AS tb INNER JOIN linknoteass AS ta ON tb.ntx = ta.ntx AND tb.id = ta.id WHERE (((tb.tipo= 1) AND (tb.ntx = {ntxlocal})) AND ((tb.piniz BETWEEN {pinizlocal} AND {pfinlocal}) OR ({pitxtlocal} BETWEEN tb.piniz AND tb.pfin)))"
         queryresponse = pd.read_sql(query, con)
         queryresponse = pd.read_sql(query, con)
-        print(queryresponse)
         with open(f"{path}/db/itxt/{siglalocal}", 'r', encoding="utf-32-le") as file1:
         with open(f"{path}/db/itxt/{siglalocal}", 'r', encoding="utf-32-le") as file1:
                 file1.seek(4*queryresponse["piniz"].min())
                 file1.seek(4*queryresponse["piniz"].min())
                 cont = file1.read(queryresponse["pfin"].max()-queryresponse["piniz"].min()-1)
                 cont = file1.read(queryresponse["pfin"].max()-queryresponse["piniz"].min()-1)
         context['nota'] = cont
         context['nota'] = cont
-        print(queryresponse)
         return context
         return context
     if linkslocal == 2:
     if linkslocal == 2:
         query = f"SELECT ta.ntx, ta.id, ta.piniz, ta.pfin, tb.mappain, tb.mappafin FROM linkbase AS tb INNER JOIN linknoteass AS ta ON tb.ntx = ta.ntx AND tb.id = ta.id WHERE (((tb.tipo= 2) AND (tb.ntx = {ntxlocal})) AND ((tb.piniz BETWEEN {pinizlocal} AND {pfinlocal}) OR ({pitxtlocal} BETWEEN tb.piniz AND tb.pfin)))"
         query = f"SELECT ta.ntx, ta.id, ta.piniz, ta.pfin, tb.mappain, tb.mappafin FROM linkbase AS tb INNER JOIN linknoteass AS ta ON tb.ntx = ta.ntx AND tb.id = ta.id WHERE (((tb.tipo= 2) AND (tb.ntx = {ntxlocal})) AND ((tb.piniz BETWEEN {pinizlocal} AND {pfinlocal}) OR ({pitxtlocal} BETWEEN tb.piniz AND tb.pfin)))"
         queryresponse = pd.read_sql(query, con)
         queryresponse = pd.read_sql(query, con)
-        print(queryresponse)
         with open(f"{path}/db/itxt/{siglalocal}", 'r', encoding="utf-32-le") as file1:
         with open(f"{path}/db/itxt/{siglalocal}", 'r', encoding="utf-32-le") as file1:
                 file1.seek(4*queryresponse["piniz"].min())
                 file1.seek(4*queryresponse["piniz"].min())
                 cont = file1.read(queryresponse["pfin"].max()-queryresponse["piniz"].min()-1)
                 cont = file1.read(queryresponse["pfin"].max()-queryresponse["piniz"].min()-1)
@@ -101,14 +90,12 @@ def findlinks (context, path):
     if linkslocal == 3:
     if linkslocal == 3:
         query = f"SELECT ta.ntx, ta.id, ta.piniz, ta.pfin, tb.piniz AS iniz, tb.pfin AS fin, tb.mappain, tb.mappafin FROM linkbase AS tb INNER JOIN linknoteass AS ta ON tb.ntx = ta.ntx AND tb.id = ta.id WHERE (((tb.tipo= 1) AND (tb.ntx = {ntxlocal})) AND ((tb.piniz BETWEEN {pinizlocal} AND {pfinlocal}) OR ({pitxtlocal} BETWEEN tb.piniz AND tb.pfin)))"
         query = f"SELECT ta.ntx, ta.id, ta.piniz, ta.pfin, tb.piniz AS iniz, tb.pfin AS fin, tb.mappain, tb.mappafin FROM linkbase AS tb INNER JOIN linknoteass AS ta ON tb.ntx = ta.ntx AND tb.id = ta.id WHERE (((tb.tipo= 1) AND (tb.ntx = {ntxlocal})) AND ((tb.piniz BETWEEN {pinizlocal} AND {pfinlocal}) OR ({pitxtlocal} BETWEEN tb.piniz AND tb.pfin)))"
         queryresponse = pd.read_sql(query, con)
         queryresponse = pd.read_sql(query, con)
-        print(queryresponse)
         with open(f"{path}/db/itxt/{siglalocal}", 'r', encoding="utf-32-le") as file1:
         with open(f"{path}/db/itxt/{siglalocal}", 'r', encoding="utf-32-le") as file1:
                 file1.seek(4*queryresponse["piniz"].min())
                 file1.seek(4*queryresponse["piniz"].min())
                 cont = file1.read(queryresponse["pfin"].max()-queryresponse["piniz"].min()-1)
                 cont = file1.read(queryresponse["pfin"].max()-queryresponse["piniz"].min()-1)
         context['nota'] = cont
         context['nota'] = cont
         query2 = f"SELECT ta.ntx, ta.id, ta.piniz, ta.pfin, tb.piniz AS iniz, tb.pfin AS fin, tb.mappain, tb.mappafin FROM linkbase AS tb INNER JOIN linknoteass AS ta ON tb.ntx = ta.ntx AND tb.id = ta.id WHERE (((tb.tipo= 2) AND (tb.ntx = {ntxlocal})) AND ((tb.piniz BETWEEN {pinizlocal} AND {pfinlocal}) OR ({pitxtlocal} BETWEEN tb.piniz AND tb.pfin)))"
         query2 = f"SELECT ta.ntx, ta.id, ta.piniz, ta.pfin, tb.piniz AS iniz, tb.pfin AS fin, tb.mappain, tb.mappafin FROM linkbase AS tb INNER JOIN linknoteass AS ta ON tb.ntx = ta.ntx AND tb.id = ta.id WHERE (((tb.tipo= 2) AND (tb.ntx = {ntxlocal})) AND ((tb.piniz BETWEEN {pinizlocal} AND {pfinlocal}) OR ({pitxtlocal} BETWEEN tb.piniz AND tb.pfin)))"
         queryresponse2 = pd.read_sql(query2, con)
         queryresponse2 = pd.read_sql(query2, con)
-        print (queryresponse2)
         with open(f"{path}/db/itxt/{siglalocal}", 'r', encoding="utf-32-le") as file2:
         with open(f"{path}/db/itxt/{siglalocal}", 'r', encoding="utf-32-le") as file2:
                 file2.seek(4*queryresponse2["piniz"].min())
                 file2.seek(4*queryresponse2["piniz"].min())
                 cont2 = file2.read(queryresponse2["pfin"].max()-queryresponse2["piniz"].min()-1)
                 cont2 = file2.read(queryresponse2["pfin"].max()-queryresponse2["piniz"].min()-1)

+ 40 - 18
flask_be/engine/test/test_cooccorrenze.py

@@ -3,20 +3,13 @@ import sqlite3
 import pandas as pd
 import pandas as pd
 import dtale
 import dtale
 import unicodedata
 import unicodedata
-from simple_query_test_pandas import ricercaforme
+import sys
-from simple_query_test_pandas import ricercalemmi
+from simple_query_test_pandas import ricercaforme, ricercalemmi, ricercaformelemmi, ricercalemmiforme, ricercacatgr, inizialeraddoppiata, interpreter, counter
-from simple_query_test_pandas import ricercaformelemmi
+from test_occorrenzario_pandas import findtexts, findcontexts, findbib
-from simple_query_test_pandas import ricercalemmiforme
-from simple_query_test_pandas import inizialeraddoppiata
-from simple_query_test_pandas import interpreter
-from test_occorrenzario_pandas import findtexts
-from test_occorrenzario_pandas import findcontexts
-from test_occorrenzario_pandas import findbib
-
 
 
 #%% funzione ricerca per cooccorrenze. 
 #%% funzione ricerca per cooccorrenze. 
 # Ha in input un array del tipo [forma/lemma_cercati, tipo_ricerca, ricerca_espansa, iniziale_raddoppiata].
 # 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").
+# 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)
 # 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):
 def ricerca_cooccorrenze (listaricerche, intervallo, periodo, ordinate, path):
     listOcc = ["occ00001", "occ00002", "occ00003"]
     listOcc = ["occ00001", "occ00002", "occ00003"]
@@ -30,6 +23,9 @@ def ricerca_cooccorrenze (listaricerche, intervallo, periodo, ordinate, path):
     elif listaricerche[0][1] == "2":
     elif listaricerche[0][1] == "2":
         ricerca = ricercalemmi(interpreter(listaricerche[0][0]), path, listaricerche[0][2], listaricerche[0][3])
         ricerca = ricercalemmi(interpreter(listaricerche[0][0]), path, listaricerche[0][2], listaricerche[0][3])
         listatesti = findtexts(2,ricerca,listOcc,path)
         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:]:
     for ricerca, tipo, espansa, raddoppiata in listaricerche[1:]:
         if tipo == "0":
         if tipo == "0":
             search = ricercaforme(interpreter(ricerca), path, espansa, raddoppiata)
             search = ricercaforme(interpreter(ricerca), path, espansa, raddoppiata)
@@ -100,15 +96,41 @@ def ricerca_cooccorrenze (listaricerche, intervallo, periodo, ordinate, path):
                             if row1['ntx'] == row2['ntx'] and row1['numperiod'] == row2['numperiod'] and ((row2['mappa'] - row1['mappa']) > 0) and ((row2['mappa'] - row1['mappa']) <= intervallo):
                             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])
                                 df_new = pd.concat([df_new, row1.to_frame().T])
             listatesti = df_new
             listatesti = df_new
-    contexts = findcontexts(listatesti, 30, 0, listOcc, path)
+        elif tipo == "3":
-    bibliocontexts = findbib(contexts, path)
+            search = ricercacatgr(ricerca, path)
-    clean = bibliocontexts.drop_duplicates(subset="contesto")         
+            textlist = findtexts(1, search,listOcc, path)
-    return clean
+            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, 30, 0, listOcc, path)
+        bibliocontexts = findbib(contexts, path)
+        clean = bibliocontexts.drop_duplicates(subset="contesto")         
+        return clean
 
 
 # %%
 # %%
-ricerca = [["dovere", "1", 0, 0], ["avere", "1", 0, 0]]
+ricerca = [["agg.", "3"], ["avere", "1", 0, 0]]
-cooccorrenze = ricerca_cooccorrenze(ricerca, 1, 1, 1, "/Users/leonardocanova/Library/CloudStorage/OneDrive-ConsiglioNazionaledelleRicerche/TIGRO/Ricerche/flask_be/")
+cooccorrenze = ricerca_cooccorrenze(ricerca, 10, 1, 1, "/Users/leonardocanova/Library/CloudStorage/OneDrive-ConsiglioNazionaledelleRicerche/TIGRO/Ricerche/flask_be/")
 dtale.show(cooccorrenze)
 dtale.show(cooccorrenze)
 
 
 # %%
 # %%

+ 10 - 13
flask_be/engine/test/test_occorrenzario_pandas.py

@@ -3,15 +3,10 @@ import sqlite3
 import pandas as pd
 import pandas as pd
 import dtale
 import dtale
 import unicodedata
 import unicodedata
-from simple_query_test_pandas import ricercaforme
+from simple_query_test_pandas import ricercaforme, ricercalemmi, ricercaformelemmi, ricercalemmiforme, ricercacatgr, interpreter
-from simple_query_test_pandas import ricercalemmi
-from simple_query_test_pandas import ricercaformelemmi
-from simple_query_test_pandas import ricercalemmiforme
-from simple_query_test_pandas import inizialeraddoppiata
-from simple_query_test_pandas import interpreter
 
 
 #%% ha in input le funzioni di ricerca, cerca nell'occorrenziario i puntatori ai contesti e altri elementi ad essi associati. 
 #%% ha in input le funzioni di ricerca, cerca nell'occorrenziario i puntatori ai contesti e altri elementi ad essi associati. 
-#l'attributo type definisce il tipo di ricerca in input (0 per forme, 1 per lemmi, 2 per lemmi con opzione "mostra occorrenze non lemmatizzate")
+#l'attributo type definisce il tipo di ricerca in input (0 per forme, 1 per lemmi o categoria grammaticale, 2 per lemmi con opzione "mostra occorrenze non lemmatizzate")
 def findtexts(type, df, listOcc, path):
 def findtexts(type, df, listOcc, path):
     textlist = pd.DataFrame()
     textlist = pd.DataFrame()
     codlist = list(df["cod"])
     codlist = list(df["cod"])
@@ -93,14 +88,16 @@ def findbib(contexts, path):
 
 
 
 
 # %%
 # %%
-parola = "divelle"
+path = "/Users/leonardocanova/Library/CloudStorage/OneDrive-ConsiglioNazionaledelleRicerche/TIGRO/Ricerche/flask_be"
-type= 0
+entry = "prep."
+type= 1
 numeroparole = 30
 numeroparole = 30
 listOcc = ["occ00001", "occ00002", "occ00003"]
 listOcc = ["occ00001", "occ00002", "occ00003"]
-search=ricercaforme(interpreter(parola), "/Users/leonardocanova/Library/CloudStorage/OneDrive-ConsiglioNazionaledelleRicerche/TIGRO/Ricerche/flask_be", 0, 0)
+#search=ricercaforme(interpreter(entry), path, 0, 0)
-textlist=findtexts(type, search, listOcc, "/Users/leonardocanova/Library/CloudStorage/OneDrive-ConsiglioNazionaledelleRicerche/TIGRO/Ricerche/flask_be")
+search= ricercacatgr(entry, path)
-contexts = findcontexts(textlist, numeroparole, 0, listOcc, "/Users/leonardocanova/Library/CloudStorage/OneDrive-ConsiglioNazionaledelleRicerche/TIGRO/Ricerche/flask_be")
+textlist=findtexts(type, search, listOcc, path)
-bibliocontexts = findbib(contexts,"/Users/leonardocanova/Library/CloudStorage/OneDrive-ConsiglioNazionaledelleRicerche/TIGRO/Ricerche/flask_be")
+contexts = findcontexts(textlist, numeroparole, 0, listOcc, path)
+bibliocontexts = findbib(contexts,path)
 dtale.show(bibliocontexts)
 dtale.show(bibliocontexts)
 # %%
 # %%