1. В отдельный модуль
CorpusReaders.py вынесено чтение строк из
текстового корпуса. Таким образом, теперь классы в модуле
DataVectorizers.py не содержат привязки ни к местоположению корпуса, ни к его формату. Я сделал две реализации "интерфейса" BaseCorpusReader для чтения из зазипованного текстового файла ZippedCorpusReader и из простого текстового файла TxtCorpusReader. Нужный экземпляр передается в метод vectorize_dataset.
Вариант с созданием через фабрику и тем более с использованием dependency injection пока считаю избыточным, создать читатель явным вызовом нужного конструктора и передать созданный экземпляр в один метод сейчас совершенно достаточным:
# Создаем читатель для корпуса
corpus_reader = CorpusReaders.ZippedCorpusReader('../data/corpus.txt.zip')
#corpus_reader = CorpusReaders.TxtCorpusReader(r'f:\Corpus\Raw\ru\tokenized_w2v.txt')
# Загружаем датасет
dataset_generator = BaseVectorizer.get_dataset_generator(REPRESENTATIONS)
X_data,y_data = dataset_generator.vectorize_dataset(corpus_reader=corpus_reader, ngram_order=NGRAM_ORDER, nb_samples=NB_SAMPLES)
2. Почистил сигнатуры методов с @classmethod, аргумент self заменил на cls, чтобы не резало глаз.