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

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

stop_wordsstring {‘english’}、listNone(默认)

...

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

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

【问题讨论】:

    标签: python scikit-learn nlp stop-words tfidfvectorizer


    【解决方案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。
    • 再次感谢,关于我提到的问题的任何线索(未删除停用词,因为在词干之后,它们不再是停用词)?
    猜你喜欢
    • 2019-07-29
    • 2018-09-19
    • 2021-03-09
    • 1970-01-01
    • 2019-12-13
    • 2011-11-28
    • 2021-02-02
    • 1970-01-01
    相关资源
    最近更新 更多