Provider.py 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. import csv
  2. import typing
  3. from os import path
  4. from pycs.interfaces.LabelProvider import LabelProvider
  5. from .RowWrapper import RowWrapper
  6. class Provider(LabelProvider):
  7. def __init__(self, root_folder, configuration):
  8. self.csv_path = path.join(root_folder, configuration['filename'])
  9. self.csv_minimum_rarity = configuration['minimumRarity']
  10. self.csv_all_hierarchy_levels = configuration['includeAllHierarchyLevels']
  11. def close(self):
  12. pass
  13. def get_labels(self) -> typing.List[dict]:
  14. result = []
  15. with open(self.csv_path, mode='r', newline='', encoding='utf8') as csv_file:
  16. # skip first line which contains column names
  17. csv_file.readline()
  18. # read csv line by line
  19. reader = csv.reader(csv_file, delimiter='\t')
  20. entries = list(map(RowWrapper, reader))
  21. # filter
  22. if self.csv_minimum_rarity is not None:
  23. entries = filter(lambda row: row.rarity_is_larger_than(self.csv_minimum_rarity),
  24. entries)
  25. # create result set
  26. for entry in entries:
  27. entry = entry.__dict__
  28. parent_reference = None
  29. # add hierarchy
  30. if self.csv_all_hierarchy_levels:
  31. hierarchy_levels = ('superfamily', 'family', 'subfamily', 'tribe', 'genus')
  32. else:
  33. hierarchy_levels = ('family', 'genus')
  34. for tax in hierarchy_levels:
  35. if entry[tax] is not None:
  36. reference, name = entry[tax].lower(), entry[tax]
  37. result.append(self.create_label(reference, name, parent_reference))
  38. parent_reference = reference
  39. # add element
  40. if entry['kr_number'].isnumeric():
  41. name = f'{entry["genus"]} {entry["species"]} ({entry["kr_number"]})'
  42. reference = entry['kr_number']
  43. else:
  44. name = f'{entry["genus"]} {entry["species"]}'
  45. reference = name.lower()
  46. result.append(self.create_label(reference, name, parent_reference))
  47. return result