NLTK 文档聚类:修剪后没有术语?

bla*_*ite 5 python dictionary nlp

我有 900 个不同的文本文件加载到我的控制台中,总共大约 350 万个单词。我正在运行此处看到的文档聚类算法,并且遇到了该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
Run Code Online (Sandbox Code Playgroud)

此代码运行直到ValueError: After pruning, no terms remain. Try a lower min_df or a higher max_df.弹出。但是,代码不会出错退出,除非我riasemax_df0.99,降低min_df0.01。然后,它似乎永远运行,因为它基本上包括所有 350 万个术语。

我怎样才能解决这个问题?

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

pva*_*rma 2

来自文档, scikit-learn,TF-IDF 矢量器

最大df:浮点范围 [0.0, 1.0] 或 int,默认=1.0

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

min_df:浮点范围 [0.0, 1.0] 或 int,默认=1

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

请检查变量的数据类型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 多个文件中出现的那些术语。在这种情况下,所有项或多或少都会重复,并且您的矢量化器将无法找到矩阵的任何项。

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