Как преобразовать keras tokenizer.texts_to_matrix (матрица с горячим кодированием) слов обратно в текст - PullRequest
0 голосов
/ 06 мая 2020

Я сослался на этот пост, в котором обсуждается, как вернуть текст из функции text_to_sequences токенизатора в keras, используя стратегию reverse_map.

Интересно, есть ли функция для возврата текста для функции text_to_matrix.

Пример:

from tensorflow.keras.preprocessing.text import Tokenizer

docs = ['Well done!',
    'Good work',
    'Great effort',
    'nice work',
    'Excellent!']

# create the tokenizer
t = Tokenizer()

# fit the tokenizer on the documents
t.fit_on_texts(docs)
print(t)
encoded_docs = t.texts_to_matrix(docs, mode='count')
print(encoded_docs)
print(t.word_index.items())

Output: 
<keras_preprocessing.text.Tokenizer object at 0x7f746b6594e0>
[[0. 0. 1. 1. 0. 0. 0. 0. 0.]
[0. 1. 0. 0. 1. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 1. 1. 0. 0.]
[0. 1. 0. 0. 0. 0. 0. 1. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 1.]]
dict_items([('work', 1), ('well', 2), ('done', 3), ('good', 4), ('great', 5), ('effort', 6), 
('nice', 7), ('excellent', 8)])

Как вернуть документы из горячей матрицы?

Ответы [ 2 ]

1 голос
/ 06 мая 2020

Если вам нужны только слова, вы можете легко сделать это следующим образом.

import numpy as np
import pandas as pd
r, c = np.where(encoded_docs>=1)
res = pd.DataFrame({'row':r, 'col':c})
res["col"] = res["col"].map(t.index_word)
res = res.groupby('row').agg({'col':lambda x: x.str.cat(sep=' ')})

Но если вам нужен порядок, вы не можете. В ту минуту, когда вы go переходите к представлению из набора слов, вы теряете порядок слов в документе.

0 голосов
/ 06 мая 2020
• 1000 *

Эта функция может обрабатывать строки со всеми нулями.

...