def __init__(self,
                 string_input_words,
                 max_word_length_in_data,
                 initial_hmm=None,
                 alphabet_or_words="words"):
        if not isinstance(string_input_words, list):
            raise ValueError("should be list")
        self.feature_table = get_feature_table()
        self.max_word_length_in_data = max_word_length_in_data
        if not initial_hmm:
            feature_table = get_feature_table()
            if alphabet_or_words == "alphabet":
                alphabet = feature_table.get_alphabet()
                self.hmm = HMM.create_hmm_alphabet(alphabet)
            elif alphabet_or_words == "words":
                self.hmm = HMM.create_hmm_from_list(string_input_words)
        else:
            self.hmm = initial_hmm

        self.words = []
        self._update_words()