我试图删除在我的词汇表中仅出现一次的单词,以减少词汇量。我正在使用sklearn TfidfVectorizer()然后在我的数据帧上使用fit_transform函数。
tfidf = TfidfVectorizer()
tfs = tfidf.fit_transform(df['original_post'].values.astype('U'))
我首先想到的是在tfidf向量化器中使用预处理字段或在机器学习之前使用预处理包。
您有什么相关实现的提示或链接吗?
我试图删除在我的词汇表中仅出现一次的单词,以减少词汇量。我正在使用sklearn TfidfVectorizer()然后在我的数据帧上使用fit_transform函数。
tfidf = TfidfVectorizer()
tfs = tfidf.fit_transform(df['original_post'].values.astype('U'))
我首先想到的是在tfidf向量化器中使用预处理字段或在机器学习之前使用预处理包。
您有什么相关实现的提示或链接吗?
您正在寻找min_df
参数(最小频率),来自于scikit-learn的TfidfVectorizer
文档:
min_df: 取值范围为[0.0, 1.0]或整数,默认值为1
在构建词汇表时,忽略文档频率严格低于给定阈值的术语。在文献中,这个值也被称为截断(cut-off)。如果是浮点数,则表示文档的比例;如果是整数,则表示绝对数量。如果词汇表不是None,则忽略此参数。
# remove words occuring less than 5 times
tfidf = TfidfVectorizer(min_df=5)
你也可以删除常用词:
# remove words occuring in more than half the documents
tfidf = TfidfVectorizer(max_df=0.5)
你也可以像这样删除停用词:
tfidf = TfidfVectorizer(stop_words='english')
for every document in corpus: for word in document: vocabulary[word] += 1
现在,查找值= 1的条目是否存在,从字典中删除这些条目。将键放入列表中,并将列表作为参数传递给TF-IDF向量化器。
这将需要大量循环,也许只需使用min_df,在实践中效果更好。