Принудительное использование токенайзера Tensorflow для включения символа "Следующая строка" - PullRequest
0 голосов
/ 28 октября 2019

Я пытаюсь использовать тензорный поток для моделирования персидской поэзии. Для этого мне нужно включить '\ n' в свои токены. Однако, когда я использую tokenizer(), он не включает следующие строки. Возможно ли для tf.keras.preprocessing.text.Tokenizer включить '\ n'?

data = open(link + "/hafez.txt").readlines()  # removing the first two lines
data = data[2:]
data = ''.join(data)
corpus = data.lower().split("\n")
for c in corpus: # including \n in the text
    c += '\n'
# update the vocab based on the list of texts ( corpus) returns a dictionary
# of Vocabulary
tokenizer.fit_on_texts(corpus)
print(tokenizer.word_index['\n'])

Теперь мы видим, что \ n не включено.

KeyError Traceback (последний последний вызов) в () ----> 1 tokenizer.word_index ['\ n'] KeyError: '\ n'

Однако мне это понадобится позже, чтобы моя нейронная сеть, надеюсь, разбила сгенерированные слова на '\n'.

1 Ответ

0 голосов
/ 29 октября 2019

Если вы удалите '\n' из аргумента filters, я думаю, вы получите то, что ищете.

Пример :

import tensorflow as tf

corpus = "it was the best of times, it was the worst of times"
corpus = [c + '\n' for c in corpus.split()]

filters_ = '!"#$%&()*+,-./:;<=>?@[\\]^_`{|}~\t'  # <= removed '\n'
my_tokenizer = tf.keras.preprocessing.text.Tokenizer(
    filters=filters_,
    char_level=True)

my_tokenizer.fit_on_text(corpus)
eol_idx = my_tokenizer.word_index['\n']

print(eol_idx)
#  1    
...