在sklearn TfidfVectorizer中执行停用词删除过程时?

Posted

技术标签:

【中文标题】在sklearn TfidfVectorizer中执行停用词删除过程时?【英文标题】:When the stop word removal process is executed in sklearn TfidfVectorizer? 【发布时间】:2018-08-07 14:17:40 【问题描述】:

如果我将自定义停用词列表传递给TfidfVectorizer,何时会准确删除停用词?根据the documentation:

stop_wordsstring ‘english’、listNone(默认)

...

如果是一个列表,则假定该列表包含停用词,所有这些 将从生成的令牌中删除。仅适用于analyzer == 'word'

所以似乎该过程发生在标记化之后,对吗?产生疑问是因为如果标记化还涉及词干提取,我认为存在错误地跳过(不删除)停用词的风险,因为在词干提取之后,它不再被识别。

【问题讨论】:

【参考方案1】:

看来这个过程是在标记化之后发生的,对吗?

你是对的。 stop_words 将在令牌已经获得并转换为 n-gram 序列后应用,请参阅 feature_extraction/text.py。分词器在预处理后立即接收文本,不涉及停用词。

默认分词器不会转换文本,但如果您提供自己的分词器来执行词干提取或类似操作,您也应该对停用词进行词干处理。或者,您可以直接在分词器函数中进行过滤。

【讨论】:

谢谢,所以如果我想在将语料库传递给 sklearn 之前进行删除过程,在对语料库进行标记化和词干化之后,我想我只需要做一些事情 ike tokens = [w for w in如果 w 不在 stop_words 中,则标记]。您提到了 n-gram,但我认为 n-gram(如果 n > 1)是稍后生成的:1)标记化 2)停用词删除 3)n-gram,对吗?最后,我仍然有我在问题末尾提到的疑问:我想不出一个具体的例子,但是如果一个词是停用词但在词干之后不是,它不会被删除。 tokens = [w for w in tokens if w not in stop_words] 正是 scikit-learn 所做的,请参阅我提供的 GitHub 链接。之后它处理 n-gram。 再次感谢,关于我提到的问题的任何线索(未删除停用词,因为在词干之后,它们不再是停用词)?

以上是关于在sklearn TfidfVectorizer中执行停用词删除过程时?的主要内容,如果未能解决你的问题,请参考以下文章

sklearn文本特征提取——TfidfVectorizer

sklearn中CountVectorizer与TfidfVectorizer区别

使用 Sklearn 的 TfidfVectorizer 变换

如何将 TfidfVectorizer 的输出馈送到 Sklearn 中的 LinearSVC 分类器?

Python SKlearn TfidfVectorizer 参数错误

如何在熊猫数据框上使用 sklearn TFIdfVectorizer