Topic/extract

WIP: @markhibberd 
I think `input` should probably be a `ShadowOutputDataset` already.