在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_words:
string
‘english’、list
或None
(默认)...
如果是一个列表,则假定该列表包含停用词,所有这些 将从生成的令牌中删除。仅适用于
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 分类器?