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_df
来0.99
,降低min_df
到0.01
。然后,它似乎永远运行,因为它基本上包括所有 350 万个术语。
我怎样才能解决这个问题?
我的文本文件存储在 中speech_dict
,其中的键是文件名,其值是文本。
来自文档, 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 多个文件中出现的那些术语。在这种情况下,所有项或多或少都会重复,并且您的矢量化器将无法找到矩阵的任何项。
这是我对这个话题的想法。