id列を文字列に戻す[keras][Tokenize]

7月 26, 2020

# Importing library
from keras.preprocessing.text import Tokenizer

# My texts
texts = ['These are two crazy sentences', 'that I want to convert back and forth']

# Creating a tokenizer
tokenizer = Tokenizer(lower=True)

# Building word indices
tokenizer.fit_on_texts(texts)

# Tokenizing sentences
# テキストをid列に変換
sentences = tokenizer.texts_to_sequences(texts)

print(sentences)
# 以下は出力。テキストが整数のid列に変換されていることがわかる
>> [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10, 11, 12, 13]]

# Creating a reverse dictionary
# .word_indexで得られる辞書は{フレーズ:id}となっているので、reversedされている
reverse_word_map = dict(map(reversed, tokenizer.word_index.items()))

print(reverse_word_map)
# 以下は出力。{id:フレーズ}の辞書が出力されていることがわかる
>> {1: 'these', 2: 'are', 3: 'two', 4: 'crazy', 5: 'sentences', 6: 'that', 7: 'i', 8: 'want', 9: 'to', 10: 'convert', 11: 'back', 12: 'and', 13: 'forth'}

# Function takes a tokenized sentence and returns the words
# id列を文字列に変換するための関数を定義
def sequence_to_text(list_of_indices):
    # Looking up words in dictionary
    words = [reverse_word_map.get(letter) for letter in list_of_indices]
    return(words)

# Creating texts 
my_texts = list(map(sequence_to_text, sentences))

print(my_texts)
# 以下は出力。id列から文字列に変換することに成功。
>> [['these', 'are', 'two', 'crazy', 'sentences'], ['that', 'i', 'want', 'to', 'convert', 'back', 'and', 'forth']]

Reference
https://stackoverflow.com/questions/41971587/how-to-convert-predicted-sequence-back-to-text-in-keras

Uncategorizedkeras,tokenize

Posted by vastee