如何使用TextLineDataset将文本写入文件

时间:2019-10-10 07:35:21

标签: tensorflow

我正在尝试使用以下命令逐行读取Shakespear.txt文件中的文本 tensorflow TextLineDataset。将单词分成一行,然后将其写到另一个文件txt.txt中,每行一个单词。这是我的代码

import tensorflow as tf
tf.enable_eager_execution()
BATCH_SIZE=2
#from tensorflow.keras.model import Sequential
dataset_in_lines=tf.data.TextLineDataset("Shakespear.txt")
dataset=dataset_in_lines.map(lambda string: tf.string_split([string]).values)
with open("txt.txt","w") as f:
    for k in dataset.take(2):
        for x in k:
            f.write("\n".join(x))

当我运行它时,它会给出error: Cannot iterate over a scalar tensor 在f.write行中。请帮助我找出问题所在

2 个答案:

答案 0 :(得分:0)

如果您可以共享shakespear.txt文件,这将很有帮助,但是基于您的错误,似乎是在接收张量而不是实际值。 因此,首先需要从张量k获取值,可以使用k.numpy()

for x in k:替换为for x in k.numpy():

让我们知道它是否有效。

答案 1 :(得分:0)

我找到了一种更好的方法,将dataset=dataset_in_lines.map(lambda string:tf.string_split([string]).values)替换为tokenizer.tokenize。以下代码实现了目标(有关更多详细信息,请参见https://www.tensorflow.org/tutorials/load_data/text

import tensorflow as tf
tf.enable_eager_execution()
import tensorflow_datasets as tfds
tokenizer = tfds.features.text.Tokenizer()
dataset_in_lines=tf.data.TextLineDataset("Shakespear.txt")
vocabulary_set = set()
for x in dataset_in_lines:
    k=tokenizer.tokenize(x.numpy())
    vocabulary_set.update(k)
with open("txt.txt","w") as f:
    for x in vocabulary_set:
        f.write(x+"\n")