Source code for instancelib.instances.extractors
from abc import ABC
from typing import Any, Generic, Mapping, TypeVar
_T = TypeVar("_T")
[docs]class DataExtractor(ABC, Generic[_T]):
def __call__(self, row: Mapping[str, Any]) -> _T:
raise NotImplementedError
[docs]class IdentityExtractor(DataExtractor[Mapping[str, Any]]):
def __call__(self, row: Mapping[str, Any]) -> Mapping[str, Any]:
return row
[docs]class ColumnExtractor(DataExtractor[_T], Generic[_T]):
def __init__(self, column: str):
self.column = column
def __call__(self, row: Mapping[str, Any]) -> _T:
return row[self.column]
[docs]class ConcatenationExtractor(DataExtractor[str]):
def __init__(self, *columns: str, seperator: str = " "):
self.columns = list(columns)
self.seperator = seperator
def __call__(self, row: Mapping[str, Any]) -> str:
return self.seperator.join((row[col] for col in self.columns))
[docs]class SubsetExtractor(IdentityExtractor):
def __init__(self, *columns: str):
self.columns = tuple(columns)
def __call__(self, row: Mapping[str, Any]) -> Mapping[str, Any]:
return {col: row[col] for col in self.columns}