У меня есть текстовый набор данных, который представляет собой список списков списков строк. Мне нужно Tokenize
эти данные, чтобы вписать их в модель классификации. Я очень хорошо знаю, как использовать keras.preprocessing.text.Tokenizer
, и часто делаю это с помощью приведенного ниже кода:
data =
[[['not'],
['ahead'],
['um let me think'],
['thats not very encouraging if they had a cast of thousands on the other end']],
[['okay civil liberties tell me your position'],
['probably would go ahead']],
[['oh'],
['it up so i dont know where you really go'],
['well most of my problem with this latest task'],
['its some i kind of dont want to put in the time to do it'],
['right so im saying ive got a lot of other things to do']]]
tokenizer = Tokenizer()
tokenizer.fit_on_texts(data)
sequences = tokenizer.texts_to_sequences(data)
Когда я запускаю этот код для своих данных, я получаю следующую ошибку:
2 frames
<ipython-input-44-1da804f42cc8> in main()
12 # tokenize and vectorize text data to prepare for embedding
13 tokenizer = Tokenizer()
---> 14 tokenizer.fit_on_texts(new_corpus)
15 sequences = tokenizer.texts_to_sequences(new_corpus)
16 word_index = tokenizer.word_index
/usr/local/lib/python3.6/dist-packages/keras_preprocessing/text.py in fit_on_texts(self, texts)
213 if self.lower:
214 if isinstance(text, list):
--> 215 text = [text_elem.lower() for text_elem in text]
216 else:
217 text = text.lower()
/usr/local/lib/python3.6/dist-packages/keras_preprocessing/text.py in <listcomp>(.0)
213 if self.lower:
214 if isinstance(text, list):
--> 215 text = [text_elem.lower() for text_elem in text]
216 else:
217 text = text.lower()
AttributeError: 'list' object has no attribute 'lower'
Это имеет смысл для меня, потому что функция Tokenizer
ожидает строку, но получает список. Обычно я бы выравнивал структуру списка, чтобы передать его через функцию Tokenizer
.
Однако я не могу этого сделать, потому что структура моего вложенного списка важна для моего моделирования .
Как тогда я могу Tokenize
мои данные при сохранении структуры списка? Я хочу рассматривать все это как мой корпус и получать уникальные целочисленные токены слов во всех списках.
Это должно выглядеть примерно так (токенизация выполняется здесь, так что извините, если есть опечатка):
data =
[[[0],
['1'],
['2, 3, 4, 5'],
['6, 0, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19']],
[['20, 21, 22, 23, 3, 24, 25'],
['26, 27, 28, 29']],
[['30'],
['31, 32, 33, 34, 35, 36, 37, 38, 39, 40'],
['41, 42, 43, 44, 45, 46, 47, 48, 49'],
['50, 51, 34, 52, 14, 35, 53, 54, 55, 56, 17, 57, 58, 59, 31'],
['60, 61, 62, 63, 64, 65, 12, 66, 14, 67, 68, 59, 31']]]