NLTK 文档聚类:修剪后没有保留任何术语?

NLTK Document clustering: no terms remain after pruning?

我的控制台中加载了 900 个不同的文本文件,总计约 350 万个单词。我 运行 看到了 here 的文档聚类算法,运行 遇到了 TfidfVectorizer 函数的问题。这是我正在查看的内容:

from sklearn.feature_extraction.text import TfidfVectorizer

#define vectorizer parameters
tfidf_vectorizer = TfidfVectorizer(max_df=0.8, max_features=200000,
                                 min_df=0.4, stop_words='english',
                                 use_idf=True, tokenizer=tokenize_and_stem, ngram_range=(1,3))

store_matrix = {}
for key,value in speech_dict.items():
    tfidf_matrix = tfidf_vectorizer.fit_transform(value) #fit the vectorizer to synopses
    store_matrix[key] = tfidf_matrix

这段代码一直运行到 ValueError: After pruning, no terms remain. Try a lower min_df or a higher max_df. 弹出。但是,代码不会因错误而退出,除非我将 max_df 提高到 0.99 并将 min_df 降低到 0.01。然后,它似乎永远运行,因为它基本上包括所有 350 万个术语。

我该如何解决这个问题?

我的文本文件存储在speech_dict中,其中的键是文件名,其值是文本。

根据文档, scikit-learn, TF-IDF vectorizer,

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

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

,则忽略此参数

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

构建词汇表时,忽略文档频率严格低于给定阈值的术语。这个值在文献中也被称为cut-off。如果是float,参数代表文档的比例,整数绝对计数。如果词汇表不是 None.

,则忽略此参数

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

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

如果您有大量文件(比如 200 万),并且每个文件只有几个词,并且来自非常不同的域,则出现最少 10 个词的可能性很小, 00,000 (20,00,000 * 0.5) 个文档。

案例 2:文档数量=200,max_df=0.95

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

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