我正在查看sklearn的TfidfVectorizer,特别是输入参数preprocessor
,它有以下文档:
"覆盖字符串转换阶段,同时保留标记化和n元生成步骤。"
当我没有覆盖此参数时,我试图弄清楚预处理阶段确切地做了什么(如果有的话)?
我有一个实验,我正在查看使用以下代码生成的稀疏矩阵中存储的元素数量:
vectorizer = TfidfVectorizer(stop_words=words, preprocessor=process, ngram_range=(1,1), strip_accents='unicode')
vect = vectorizer.fit_transform(twenty_train.data)
items_stored = vect.nnz
- 当我没有覆盖预处理程序时,生成的矩阵存储了1278323个元素。
- 当我用一个空方法覆盖预处理程序时,生成的矩阵存储了1441372个元素。
- 当我用一个包含
s = re.sub("[^a-zA-Z]", " ", s)
的方法覆盖预处理程序时,生成的矩阵存储了1331597个元素。 - 我无法通过任何其他处理步骤影响稀疏矩阵的大小(或在分类中使用时的准确性)。
很明显,与默认的sklearn结果、无预处理和我的尝试复制预处理步骤之间存在差异。我很难找到有关默认情况下预处理器具体执行什么操作的文档。
我还检查了TfidfVectorizer的源代码,但我也无法从这里弄清楚预处理器正在执行什么操作。
是否有人知道sklearn默认预处理器执行的代码或采取的预处理步骤呢?
build_preprocessor
方法:https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/feature_extraction/text.py#L231-259 - Mohamed Ali JAMAOUI