Текст обычно кодируют двумя способами:
1) bag-of-words (или chars, или еще чего) - кодируем вектором длины N (размер словаря), для каждого примера i-й элемент вектора равен кол-ву этих слов\символов в тексте. Плюс различные вариации вроде TF-IDF (когда используем не просто количество, а более сложную метрику), n-grams (когда используем не отдельные слова, а последовательности из 2, 3 и более), skipgrams (когда используем не отдельные слова, а сочетания слов, отстоящие друг от друга на каком-то расстоянии - чтобы выкидывать предлоги, артикли и прочее) и так далее. Закодированный таким образом текст можно прогнать через наивный байесовский классификатор, SVM (обычно показывает лучший результат на порядках 10000-100000 примеров), MLP
2) кодируем вектором длины N (максимально допустимая длина текста), где каждый элемент - это индекс слова\символа. Если текст короче N, то дополняем нулями. С таким вариантом кодирования работают сверточные, рекурентные и рекурсивные сети.