def blocking(self, ds: Dataset, threshold_all):
        matches = self(ds, threshold_all)
        result = DisjointSet(ds)
        result.update(matches)

        ds_blocks = [
            Dataset.from_rows(ds, cluster) for cluster in result.clusters()
        ]
        return ds_blocks