parsing_utilities.py 1.3 KB

1234567891011121314151617181920212223242526272829303132333435
  1. import unicodedata
  2. #%% funzione combinazioni <> è chiamata da interpreter
  3. ## DA MODIFICARE PER DB CIFRATO
  4. def combinations(s):
  5. result = []
  6. start = s.find("<")
  7. end = s.find(">")
  8. if start == -1 or end == -1:
  9. return [s]
  10. items = s[start + 1:end].split(",")
  11. for item in items:
  12. result.extend([s[:start] + item + rest for rest in combinations(s[end + 1:])])
  13. return result
  14. # Funzione interprete, preprocessa ogni ricerca
  15. def interpreter (data):
  16. clean_data= data.replace("\\*", "#ACTUAL*#").replace("\\?", "#ACTUAL?#").replace("*", "\\%").replace("?", "\\_").replace(" ","").replace("'", "''").replace("’", "''").replace('#ACTUAL%#', '*').replace('#ACTUAL_#', '?')
  17. return combinations(clean_data)
  18. # %% funzione iniziale raddoppiata, è chiamata dalle funzioni di ricerca con iniziale raddoppiata
  19. def inizialeraddoppiata (data):
  20. doubleddata=[]
  21. for el in data:
  22. if el[1] != "%" and "_":
  23. doubleddata = doubleddata + ["'"+ el[1] + el[1:]]
  24. return doubleddata
  25. # %% funzione normalizza stringa (ricerca espansa), è chiamata dalle funzioni di ricerca espansa
  26. ## DA MODIFICARE PER DB CIFRATO
  27. def normalize(stringa):
  28. return unicodedata.normalize('NFKD', stringa).encode('ASCII', 'ignore').decode('utf-8')
  29. def list_normalize(lista):
  30. return [normalize(stringa) for stringa in lista]