|
@@ -3,12 +3,14 @@ import typing
|
|
|
from os import path
|
|
|
|
|
|
from pycs.interfaces.LabelProvider import LabelProvider
|
|
|
+from .RowWrapper import RowWrapper
|
|
|
|
|
|
|
|
|
class Provider(LabelProvider):
|
|
|
def __init__(self, root_folder, configuration):
|
|
|
self.csv_path = path.join(root_folder, configuration['filename'])
|
|
|
self.csv_minimum_rarity = configuration['minimumRarity']
|
|
|
+ self.csv_all_hierarchy_levels = configuration['includeAllHierarchyLevels']
|
|
|
|
|
|
def close(self):
|
|
|
pass
|
|
@@ -22,32 +24,25 @@ class Provider(LabelProvider):
|
|
|
|
|
|
# read csv line by line
|
|
|
reader = csv.reader(csv_file, delimiter='\t')
|
|
|
- entries = list(map(lambda row: {
|
|
|
- 'localOccurence': self.__replace_empty_with_none(row[0]),
|
|
|
- 'rarity': self.__replace_empty_with_none(row[1]),
|
|
|
- 'superfamily': self.__replace_empty_with_none(row[2]),
|
|
|
- 'family': self.__replace_empty_with_none(row[3]),
|
|
|
- 'subfamily': self.__replace_empty_with_none(row[4]),
|
|
|
- 'tribe': self.__replace_empty_with_none(row[5]),
|
|
|
- 'krNumber': self.__replace_empty_with_none(row[9]),
|
|
|
- 'genus': self.__replace_empty_with_none(row[10]),
|
|
|
- 'species': self.__replace_empty_with_none(row[11])
|
|
|
- }, reader))
|
|
|
+ entries = list(map(RowWrapper, reader))
|
|
|
|
|
|
# filter
|
|
|
if self.csv_minimum_rarity is not None:
|
|
|
- def flt_fn(e):
|
|
|
- r = e['rarity']
|
|
|
- return r is not None and r.isnumeric() and self.csv_minimum_rarity < int(r)
|
|
|
-
|
|
|
- entries = list(filter(flt_fn, entries))
|
|
|
+ entries = filter(lambda row: row.rarity_is_larger_than(self.csv_minimum_rarity),
|
|
|
+ entries)
|
|
|
|
|
|
# create result set
|
|
|
for entry in entries:
|
|
|
+ entry = entry.__dict__
|
|
|
parent_reference = None
|
|
|
|
|
|
# add hierarchy
|
|
|
- for tax in ('superfamily', 'family', 'subfamily', 'tribe'):
|
|
|
+ if self.csv_all_hierarchy_levels:
|
|
|
+ hierarchy_levels = ('superfamily', 'family', 'subfamily', 'tribe', 'genus')
|
|
|
+ else:
|
|
|
+ hierarchy_levels = ('family', 'genus')
|
|
|
+
|
|
|
+ for tax in hierarchy_levels:
|
|
|
if entry[tax] is not None:
|
|
|
reference, name = entry[tax].lower(), entry[tax]
|
|
|
result.append(self.create_label(reference, name, parent_reference))
|
|
@@ -55,9 +50,9 @@ class Provider(LabelProvider):
|
|
|
parent_reference = reference
|
|
|
|
|
|
# add element
|
|
|
- if entry['krNumber'].isnumeric():
|
|
|
- name = f'{entry["genus"]} {entry["species"]} ({entry["krNumber"]})'
|
|
|
- reference = entry['krNumber']
|
|
|
+ if entry['kr_number'].isnumeric():
|
|
|
+ name = f'{entry["genus"]} {entry["species"]} ({entry["kr_number"]})'
|
|
|
+ reference = entry['kr_number']
|
|
|
else:
|
|
|
name = f'{entry["genus"]} {entry["species"]}'
|
|
|
reference = name.lower()
|
|
@@ -65,7 +60,3 @@ class Provider(LabelProvider):
|
|
|
result.append(self.create_label(reference, name, parent_reference))
|
|
|
|
|
|
return result
|
|
|
-
|
|
|
- @staticmethod
|
|
|
- def __replace_empty_with_none(val: str):
|
|
|
- return val if val.strip() else None
|