如何解决删除 Tensorflow 中的停用词扩展
我必须预处理 NLP 数据,所以我必须从 Tensorflow 数据集中删除停用词(来自 nltk 库)。我尝试了很多这样的事情:
docs = tf.data.Dataset.from_tensor_slices([['Never tell me the odds.'],["It's a trap!"]])
tokenizer = text.WhitespaceTokenizer()
tokenized_docs = docs.map(lambda x: tokenizer.tokenize(x))
data = tokenized_docs.filter(lambda x: x. not in stop_words)
或者这个:
tokens = docs.map(lambda x: tokenizer.tokenize(x))
data = tokens.filter(lambda x: tf.strings.strip(x).ref() not in stopwords)
但是没有用。第一个代码显示如下错误:RaggedTensor is unhashable.
解决方法
据我所知,Tensorflow 使用标准化回调的 standardization function 支持基本的字符串规范化(小写 + 标点符号剥离)。似乎不支持更高级的选项,例如无需自己动手即可删除停用词。
在 TensorFlow 之外预先进行标准化,然后将结果传递给它可能更容易。
import re
import nltk
from nltk.corpus import stopwords
nltk.download('stopwords')
def parse_text(text):
print(f'Input: {text}')
text = re.sub("[^a-zA-Z]",' ',text)
print(f'Remove punctuation and numbers: {text}')
text = text.lower().split()
print(f'Lowercase and split: {text}')
swords = set(stopwords.words("english"))
text = [w for w in text if w not in swords]
print(f'Remove stop words: {text}')
text = " ".join(text)
print(f'Final: {text}')
return text
list1 = [["NEver tell me the odds."],["It's a trap!"]]
for sublist in list1:
for i in range(len(sublist)):
sublist[i] = parse_text(sublist[i])
print(list1)
# [['never tell odds'],['trap']]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。