我正在计算已加载的文本文件中唯一单词的数量。但是我已经意识到,当我使用split()
和tensorflow_datasets tokenize()
时,我得到了不同的结果,但我认为它们可以实现相同的目的。这是我的代码。有人可以帮我知道两者之间的区别吗?
import tensorflow as tf
import tensorflow_datasets as tfds
tf.enable_eager_execution()
BUFFER_SIZE = 50000
TAKE_SIZE = 5000
BATCH_SIZE = 64
tokenizer = tfds.features.text.Tokenizer()
data = open("news.2011.en.shuffled","r").read()
vocab = list(set(data.split())) # gives more count
print(len(vocab))
tokenized_data = tokenizer.tokenize(data)
print(len(set(tokenized_data))) # gives less count
答案 0 :(得分:1)
split()
函数在不带参数的情况下仅根据字符串中存在的空格字符进行拆分。
tfds.features.text.Tokenizer()
的{{1}}方法具有更多的文本分割方法,而不仅仅是空白字符。您可以在GitHub code repository中看到它。目前,没有默认的tokenize()
设置,但是reserved_tokens
的属性默认设置为True。
因此,可能许多非字母数字字符被过滤掉,因此您获得的令牌数量更少。