def to_term_document_matrix(path_to_bag_of_genomes, max_df=0.99, min_df=1, use_idf=False):
        """
        Creates a term-document matrix which is a mathematical matrix that describes the frequency of terms
        that occur in a collection of documents (in our case a collection of genomes).

        :param path_to_bag_of_genomes: Path to the documents (genomes)
        :param max_df: To prune the terms that are existing in the given portion of documents (if set to 1 then it does not prune)
        :return: returns the term-document dataframe
        """
        token_dict = {}

        def BoG_tokenizer(_text):
            return _text.split('\n')

        print("creating the term-document matrix...")
        for file in tqdm(Parser._get_files('.bag_of_genome', path_to_bag_of_genomes)):
            f = open(file, 'r')
            text = f.read()
            token_dict[file] = text

        tfidf = TfidfVectorizer(tokenizer=BoG_tokenizer, use_idf=use_idf, smooth_idf=False,
                                max_df=max_df, min_df=min_df)  # max df is less than 1.0 to ignore the tokens existing in all of the documents

        tfs = tfidf.fit_transform(token_dict.values())
        data = tfs.toarray()
        columns = tfidf.get_feature_names()
        df = pd.DataFrame(data, columns=columns)
        term_document_df = df.T
        return term_document_df
Creates a term-document matrix which is a mathematical matrix that describes the frequency of terms
        that occur in a collection of documents (in our case a collection of genomes).

        :param path_to_bag_of_genomes: Path to the documents (genomes)
        :param max_df: To prune the terms that are existing in the given portion of documents (if set to 1 then it does not prune)
        :return: returns the term-document dataframe