123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183 |
- import json
- from .utilities.parsing_utilities import interpreter, inizialeraddoppiata, list_normalize
- from .data_interface.data_providers_setup import queryHandlerFactory
- import pandas as pd
- import math
- class basicQueries:
- def __init__(self, dataConfig):
- self.queryHandler = queryHandlerFactory(dataConfig)
- self.listOcc = dataConfig.get('listOcc')
-
- def sendBasicQuery(self, text, queryType, espansa, raddoppiata, pandas=False, dbFile=None):
-
- entries = interpreter(text)
-
- data = entries
- dataNorm = []
- if raddoppiata==1:
- data = entries + inizialeraddoppiata(entries)
- if espansa==1 and raddoppiata==0:
- dataNorm = list_normalize(entries)
- elif espansa==1 and raddoppiata==1:
- 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 not isinstance(df, pd.DataFrame):
- df = pd.DataFrame(df)
-
- if index is not None:
- if isinstance(index, range):
- index = list(index)
- elif not isinstance(index, list):
- index = [index]
- df = df.loc[index]
-
- codList = [row['cod'] for _, row in df.iterrows()]
-
- listOcc = self.listOcc
-
- queryData = {'queryType': 'texts', 'querySubtype': type, 'codList': codList}
-
-
- if type == 2:
- subQueryData = {'queryType': 'pfl', 'codList': codList}
- subdf = self.queryHandler.query(subQueryData, pandas=True)
- queryData['formCodList'] = list(subdf['codForma'])
-
- queryResponses = [self.queryHandler.query(dict(queryData, table=table), pandas=True) for table in listOcc]
- textlist = pd.concat(queryResponses)
- return textlist
-
-
- def findcontexts(self, textlist):
-
- contexts = []
- formats = []
- minChar_list = []
- maxChar_list = []
-
- for _, row in textlist.iterrows():
- sigla = row["sigla"]
- if row["piniz"] is None or math.isnan(row["piniz"]):
- minChar = int(row["backup_piniz"])
- else:
- minChar = int(row["piniz"])
- if row["pfin"] is None or math.isnan(row["pfin"]):
- maxChar = int(row["backup_pfin"])
- else:
- maxChar = int(row["pfin"])
- fileQueryData = {'sigla': sigla, 'minChar': minChar, 'maxChar': maxChar}
-
- cont, form = self.queryHandler.textQuery(fileQueryData, True)
-
- minChar_list.append(minChar)
- maxChar_list.append(maxChar)
- contexts.append(cont)
- formats.append(json.dumps(form))
-
- textlist['piniz'] = minChar_list
- textlist['pifin'] = maxChar_list
- textlist['contesto'] = contexts
- textlist['formattazione contesto'] = formats
- return textlist.reset_index(drop=True)
-
- def findbib(self, contexts):
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- siglaList = list(contexts['sigla'])
- siglaSet = set(siglaList)
- queryData = {'queryType': 'bibAlt', 'siglaSet': siglaSet}
- infobib = self.queryHandler.query(queryData, pandas=True, dbFile='bibliografia/BiblioTLIO.db')
- infobib = infobib.set_index('Sigla')
- infobib2 = {sigla: infobib.loc[sigla].to_dict() for sigla in siglaSet}
- infobib = [infobib2[sigla] for sigla in siglaList]
-
- annoiniz = [el['Anno iniziale'] for el in infobib]
- annofin = [el['Anno finale'] for el in infobib]
- datacod = [el['Data codificata'] for el in infobib]
- datadesc = [el['Data descrittiva'] for el in infobib]
- titoloabb = [el['Titolo Abbreviato'] for el in infobib]
- autore = [el['Autore'] for el in infobib]
- titolo = [el['Titolo'] for el in infobib]
- curatore = [el['Curatore'] for el in infobib]
- areagen = [el['Area generica'] for el in infobib]
- areaspec = [el['Area specifica'] for el in infobib]
- genere = [el['Genere'] for el in infobib]
- forma = [el['Forma'] for el in infobib]
- tipo = [el['Tipo'] for el in infobib]
- iq = [el['IQ'] for el in infobib]
- ntxList = list(contexts['ntx'])
- numOrgList = list(contexts['numorg'])
- coordsList = [(numorg, ntxList[ind]) for ind, numorg in enumerate(numOrgList)]
- coordsSet = set(coordsList)
- queryData = {'queryType': 'rifAlt', 'coordsSet': coordsSet}
- rif_org = self.queryHandler.query(queryData, pandas=True)
- rif_org = rif_org.set_index( ['numorg', 'ntx'] )
- rif_org2 = {coord: rif_org.loc[coord] for coord in coordsSet}
- rif_org = [rif_org2[coord] for coord in coordsList]
- rif1 = [rif['Rif_organico'] for rif in rif_org]
- rif2 = [rif['Rif_completo'] for rif in rif_org]
-
- 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
- chrono = contexts.sort_values(by=['Data codificata', 'Rif_organico'])
- return (chrono.reset_index(drop=True))
-
-
|