def learn_sentence(self, sentence):
        """
        Learn based on the input sentence.

        :param sentence: Space separated sentence to apply to Markov model
        :return: No relevant return data
        """
        # Split the sentence into words/parts
        parts = re.findall(r"\w[\w']*", sentence.lower())
        if len(parts) == 0:
            return

        # This is a speed optimized method to increment the relation count between --terminate-- and the last part
        try:
            self.raw_scores[parts[-1]]["--terminate--"] += 1
        except KeyError:
            try:
                self.raw_scores[parts[-1]]["--terminate--"] = 1
            except KeyError:
                self.raw_scores[parts[-1]] = {"--terminate--": 1}

        # Iterate through all the parts, and increment the relation counts for all adjacent parts
        last = "--terminate--"
        for x in xrange(len(parts)):
            current = parts[x]
            try:
                self.raw_scores[last][current] += 1
            except __HOLE__:
                try:
                    self.raw_scores[last][current] = 1
                except KeyError:
                    self.raw_scores[last] = {current: 1}
            last = current

        # If any of the parts of this sentence don't end up in the database, something is broken in the code
        for part in parts:
            if part not in self.raw_scores:
                raise
dataset/ETHPy150Open bwall/markovobfuscate/markovobfuscate/obfuscation.py/MarkovKeyState.learn_sentence