import unicodedata #%% funzione combinazioni <> è chiamata da interpreter ## DA MODIFICARE PER DB CIFRATO def combinations(s): result = [] start = s.find("<") end = s.find(">") if start == -1 or end == -1: return [s] items = s[start + 1:end].split(",") for item in items: result.extend([s[:start] + item + rest for rest in combinations(s[end + 1:])]) return result # Funzione interprete, preprocessa ogni ricerca def interpreter (data): clean_data= data.replace("\\*", "#ACTUAL*#").replace("\\?", "#ACTUAL?#").replace("*", "\\%").replace("?", "\\_").replace(" ","").replace("'", "''").replace("’", "''").replace('#ACTUAL%#', '*').replace('#ACTUAL_#', '?') return combinations(clean_data) # %% funzione iniziale raddoppiata, è chiamata dalle funzioni di ricerca con iniziale raddoppiata def inizialeraddoppiata (data): doubleddata=[] for el in data: if el[1] != "%" and "_": doubleddata = doubleddata + ["'"+ el[1] + el[1:]] return doubleddata # %% funzione normalizza stringa (ricerca espansa), è chiamata dalle funzioni di ricerca espansa ## DA MODIFICARE PER DB CIFRATO 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]