ValueError:修剪后,没有剩余项。尝试较低的 min_df 或较高的 max_df

Jee*_*ich 6 python feature-extraction tf-idf scikit-learn

from sklearn.feature_extraction.text import TfidfVectorizer
tfidf_vectorizer = TfidfVectorizer(max_df=0.95, max_features=200000,
                             min_df=.5, stop_words='english',
                             use_idf=True,sublinear_tf=True,tokenizer = tokenize_and_stem_body,ngram_range=(1,3))
tfidf_matrix_body = tfidf_vectorizer.fit_transform(totalvocab_stemmed_body)
Run Code Online (Sandbox Code Playgroud)

上面的代码给了我错误

ValueError: After pruning, no terms remain. Try a lower min_df or a higher max_df.
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮助我解决相同的问题,并且我已将所有值 80 更改为 100 但问题仍然相同吗?

pva*_*rma 6

从文档中, scikit-learn, TF-IDF vectorizer

最大df : 在 [0.0, 1.0] 或 int 范围内浮动,默认值=1.0

在构建词汇表时,忽略文档频率严格高于给定阈值的术语(特定于语料库的停用词)。如果是float,该参数代表文档的比例,整数绝对计数。如果词汇表不是 None,则忽略此参数。

min_df : 在 [0.0, 1.0] 或 int 范围内浮动,默认值=1

在构建词汇表时,忽略文档频率严格低于给定阈值的术语。该值在文献中也称为截止值。如果是float,该参数代表文档的比例,整数绝对计数。如果词汇表不是 None,则忽略此参数。

请检查变量的数据类型,totalvocab_stemmed_body。如果是列表,则列表中的每个元素都被视为一个文档。

案例 1:文档数 = 20,00,000, min_df=0.5.

如果您有大量文件(比如 200 万个),并且每个文件只有几个字,并且来自非常不同的域,那么出现至少 10,000,000(20,00,000 * 0.5 ) 文件。

情况 2:文件数 = 200, max_df=0.95

如果您有一组重复的文件(比如 200 个),您会看到这些术语出现在大多数文档中。和max_df=0.95,您是在告诉那些存在于 190 多个文件中的术语,不要考虑它们。在这种情况下,所有项或多或少会重复,您的向量化器将无法找出矩阵的任何项。

这是我对这个话题的想法。