|
@@ -1,29 +1,11 @@
|
|
|
|
|
|
-import unicodedata
|
|
|
-from .parsing_utilities import interpreter
|
|
|
+from .parsing_utilities import interpreter, inizialeraddoppiata, list_normalize
|
|
|
|
|
|
|
|
|
|
|
|
from .data_interface.data_providers_setup import queryHandlerFactory
|
|
|
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-def inizialeraddoppiata (data):
|
|
|
- doubleddata=[]
|
|
|
- for el in data:
|
|
|
- if el[1] != "%" and "_":
|
|
|
- doubleddata = doubleddata + ["'"+ el[1] + el[1:]]
|
|
|
- return doubleddata
|
|
|
-
|
|
|
-
|
|
|
-def normalize(stringa):
|
|
|
- return unicodedata.normalize('NFKD', stringa).encode('ASCII', 'ignore').decode('utf-8')
|
|
|
-
|
|
|
-def list_normalize(lista):
|
|
|
- return [normalize(stringa) for stringa in lista]
|
|
|
-
|
|
|
+import pandas as pd
|
|
|
|
|
|
|
|
|
|
|
@@ -32,6 +14,7 @@ class basicQueries:
|
|
|
|
|
|
def __init__(self, dataConfig):
|
|
|
self.queryHandler = queryHandlerFactory(dataConfig)
|
|
|
+ self.listOcc = dataConfig['listOcc']
|
|
|
|
|
|
|
|
|
def sendBasicQuery(self, text, queryType, espansa, raddoppiata, pandas=False, dbFile=None):
|
|
@@ -48,4 +31,132 @@ class basicQueries:
|
|
|
dataNorm = entries + list_normalize(inizialeraddoppiata(entries))
|
|
|
|
|
|
return self.queryHandler.query({'data': data, 'dataNorm': dataNorm, 'queryType': queryType}, pandas, dbFile)
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ def findtexts(self, type, df, index = None):
|
|
|
+ if index is None:
|
|
|
+ df = pd.DataFrame(df)
|
|
|
+ else:
|
|
|
+ if isinstance(index, range):
|
|
|
+ index = list(index)
|
|
|
+ elif not isinstance(index, list):
|
|
|
+ index = [index]
|
|
|
+ df = pd.DataFrame(df.loc[index])
|
|
|
+ textlist = pd.DataFrame()
|
|
|
+ codList = list(df["cod"])
|
|
|
+ listOcc = self.listOcc
|
|
|
+
|
|
|
+ queryData = {'queryType': 'texts', 'querySubtype': type, 'codList': codList}
|
|
|
+
|
|
|
+ for table in listOcc:
|
|
|
+ queryData['table'] = table
|
|
|
+ if type==2:
|
|
|
+ subQueryData = {'queryType': 'pfl', 'codList': codList}
|
|
|
+ subdf = self.queryHandler.query(subQueryData, pandas=True)
|
|
|
+ queryData['formCodList'] = list(subdf["forma"])
|
|
|
+
|
|
|
+ extendequeryReponse = self.queryHandler.query(queryData, pandas=True)
|
|
|
+
|
|
|
+ textlist = pd.concat([textlist, extendequeryReponse])
|
|
|
+
|
|
|
+ return textlist
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ def findcontexts(self, textlist):
|
|
|
+ parole = 31
|
|
|
+ listOcc = self.listOcc
|
|
|
+ contexts = []
|
|
|
+ for ind, row in textlist.iterrows():
|
|
|
+ sigla = row["sigla"]
|
|
|
+ queryData = {'queryType': 'contexts', 'ntxlocal': row["ntx"], 'mappalocal': row['mappa'], 'parole': parole}
|
|
|
+ pointerlist = pd.DataFrame()
|
|
|
+ for table in listOcc:
|
|
|
+ queryData['table'] = table
|
|
|
+ queryresponse = self.queryHandler.query(queryData, pandas=True)
|
|
|
+ pointerlist = pd.concat([pointerlist, queryresponse])
|
|
|
+
|
|
|
+ fileQueryData = {'sigla': sigla, 'minChar': pointerlist["pitxt"].min(), 'maxChar': pointerlist["pitxt"].max()}
|
|
|
+ cont = self.queryHandler.textQuery(fileQueryData)
|
|
|
+ contexts.append(cont)
|
|
|
+ textlist['contesto'] = contexts
|
|
|
+ return (textlist.reset_index(drop=True))
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ def findbib(self, contexts):
|
|
|
+ infobib = pd.DataFrame()
|
|
|
+ rif_org = pd.DataFrame()
|
|
|
+ for ind, row in contexts.iterrows():
|
|
|
+ queryData = {'queryType': 'bib', 'row': row}
|
|
|
+ bib = self.queryHandler.query(queryData, pandas=True, dbFile='bibliografia/BiblioTLIO.db')
|
|
|
+ infobib = pd.concat([infobib, bib])
|
|
|
+ queryData = {'queryType': 'rif', 'row': row}
|
|
|
+ rif = self.queryHandler.query(queryData, pandas=True)
|
|
|
+ rif_org = pd.concat([rif_org, rif])
|
|
|
+ annoiniz = list(infobib['Anno iniziale'])
|
|
|
+ annofin = list(infobib['Anno finale'])
|
|
|
+ datacod = list(infobib['Data codificata'])
|
|
|
+ datadesc = list(infobib['Data descrittiva'])
|
|
|
+ titoloabb = list(infobib['Titolo Abbreviato'])
|
|
|
+ autore = list(infobib['Autore'])
|
|
|
+ titolo = list(infobib['Titolo'])
|
|
|
+ curatore = list(infobib['Curatore'])
|
|
|
+ areagen = list(infobib['Area generica'])
|
|
|
+ areaspec = list(infobib['Area specifica'])
|
|
|
+ genere = list(infobib['Genere'])
|
|
|
+ forma = list(infobib['Forma'])
|
|
|
+ tipo = list(infobib['Tipo'])
|
|
|
+ iq = list(infobib['IQ'])
|
|
|
+ rif1 = list(rif_org['Rif_organico'])
|
|
|
+ rif2 = list(rif_org['Rif_completo'])
|
|
|
+ contexts['Anno iniziale'] = annoiniz
|
|
|
+ contexts['Anno finale'] = annofin
|
|
|
+ contexts['Data codificata'] = datacod
|
|
|
+ contexts['Data descrittiva'] = datadesc
|
|
|
+ contexts['Autore'] = autore
|
|
|
+ contexts['Titolo Abbreviato'] = titoloabb
|
|
|
+ contexts['Titolo'] = titolo
|
|
|
+ contexts['Curatore'] = curatore
|
|
|
+ contexts['Area generica'] = areagen
|
|
|
+ contexts['Area specifica'] = areaspec
|
|
|
+ contexts['Genere'] = genere
|
|
|
+ contexts['Forma'] = forma
|
|
|
+ contexts['Tipo'] = tipo
|
|
|
+ contexts ['IQ'] = iq
|
|
|
+ contexts['Rif_organico'] = rif1
|
|
|
+ contexts['Rig_completo'] = rif2
|
|
|
+ contexts.pag = contexts.pag.astype(int)
|
|
|
+ chrono = contexts.sort_values(by=['Anno iniziale', 'Rif_organico', 'pag'])
|
|
|
+ cols = ['links','Titolo Abbreviato', 'Rif_organico', 'tipostanza', 'stanza', 'verso', 'pag', 'riga', 'IQ', 'lemma', 'cat_gr', 'disambiguatore', 'contesto', 'Autore', 'Titolo', 'Anno iniziale', 'Anno finale', 'Data codificata', 'Data descrittiva', 'Area generica', 'Area specifica', 'Genere', 'Forma', 'Tipo', 'Curatore', 'ntx', 'pitxt', 'elemlen', 'mappa', 'numperiod', 'numorg', 'sigla', 'vol', 'col', 'numbrano', 'Rig_completo', 'cod']
|
|
|
+ clean_df = chrono.reindex(columns=cols + list(chrono.columns.difference(cols)))
|
|
|
+ return (clean_df.reset_index(drop=True))
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ def highlight (self, bibliocontexts):
|
|
|
+ index = 0
|
|
|
+ for col in bibliocontexts.columns:
|
|
|
+ forme = []
|
|
|
+ if col.startswith('cod'):
|
|
|
+ for ind, row in bibliocontexts.iterrows():
|
|
|
+ queryData = {'queryType': 'highlight', 'row': row, 'col': col}
|
|
|
+ forma = self.queryHandler.query(queryData, pandas=True)
|
|
|
+ forme += list(forma['spec'])
|
|
|
+ if index == 0:
|
|
|
+ bibliocontexts['highlight'] = forme
|
|
|
+ else:
|
|
|
+ bibliocontexts['highlight'+str(index)] = forme
|
|
|
+ index += 1
|
|
|
+ return bibliocontexts
|
|
|
+
|
|
|
+
|
|
|
|
|
|
+ def contestimultipli (self, tipo_ricerca, ricerca, index = None):
|
|
|
+ textlist = self.findtexts(tipo_ricerca, ricerca, index)
|
|
|
+ contexts = self.findcontexts (textlist)
|
|
|
+ bibliocontexts = self.findbib (contexts)
|
|
|
+ highlights = self.highlight(bibliocontexts)
|
|
|
+ return highlights
|