删除词汇TF-IDF中仅出现一次的单词

7

我试图删除在我的词汇表中仅出现一次的单词,以减少词汇量。我正在使用sklearn TfidfVectorizer()然后在我的数据帧上使用fit_transform函数。

tfidf = TfidfVectorizer()  
tfs = tfidf.fit_transform(df['original_post'].values.astype('U')) 

我首先想到的是在tfidf向量化器中使用预处理字段或在机器学习之前使用预处理包。

您有什么相关实现的提示或链接吗?

2个回答

19

您正在寻找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')

3
ShmulikA的建议可能很有效,但会根据文档频率删除单词。因此,如果特定单词在仅1个文档中出现200次,则将其删除。TF-IDF向量化器无法提供您想要的内容。您需要遵循以下步骤:
  1. 将向量化器与语料库配合使用,并从向量化器中提取完整的词汇表。
  2. 将单词作为新字典中的键。
  3. 计算每个单词的出现次数:

for every document in corpus: for word in document: vocabulary[word] += 1

现在,查找值= 1的条目是否存在,从字典中删除这些条目。将键放入列表中,并将列表作为参数传递给TF-IDF向量化器。
这将需要大量循环,也许只需使用min_df,在实践中效果更好。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接