我正在尝试使用以下命令逐行读取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行中。请帮助我找出问题所在
答案 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")