【问题标题】:Remove single occurrences of words in vocabulary TF-IDF删除词汇表 TF-IDF 中单次出现的单词
【发布时间】:2018-01-30 06:19:24
【问题描述】:
我正在尝试删除在我的词汇表中出现过一次的单词以减少我的词汇量。我在我的数据框上使用 sklearn TfidfVectorizer() 和 fit_transform 函数。
tfidf = TfidfVectorizer()
tfs = tfidf.fit_transform(df['original_post'].values.astype('U'))
我的第一个想法是 tfidf 矢量化器中的预处理器字段或在机器学习之前使用预处理包。
有进一步实施的提示或链接吗?
【问题讨论】:
标签:
python
scikit-learn
tf-idf
【解决方案1】:
您正在寻找 min_df 参数(最低频率),来自 scikit-learn 的文档TfidfVectorizer:
min_df : 在 [0.0, 1.0] 或 int 范围内浮动,默认 = 1
在构建词汇表时,忽略文档频率严格低于给定阈值的术语。这个值也是
文献中称为截断。如果是浮点数,参数代表一个
文档的比例,整数绝对计数。这个参数是
如果词汇表不是 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')
【解决方案2】:
ShmulikA 的答案很可能会很好,但会根据文档频率删除单词。因此,如果特定单词仅在 1 个文档中出现 200 次,它将被删除。 TF-IDF 矢量化器并不能完全提供您想要的。您必须:
- 使矢量化器适合您的语料库。从向量器中提取完整的词汇表
- 将单词作为新字典中的键。
- 统计每个单词的出现次数:
for every document in corpus: for word in document: vocabulary[word] += 1
现在,找出是否有值 = 1,从字典中删除这些条目。将键放入列表并将列表作为参数传递给 TF-IDF 矢量化器。
它将需要大量循环,也许只使用 min_df,这在实践中效果很好。