Python 带预处理器和小写字母的sklearn CountVectorizer中的Bug?

Python 带预处理器和小写字母的sklearn CountVectorizer中的Bug?,python,scikit-learn,countvectorizer,Python,Scikit Learn,Countvectorizer,我不知道我是否在sklearncountvectorier中遇到了可能的错误,或者我只是误解了什么 我正在处理一小部分包含各种插入字符串的文本,其中只有一些需要删除。经过一些实验后,我决定简单地列出这些附加语,我将在下面列出这些附加语的子集: 插入语=[“\(笑声)”、“\(掌声)”、“\(音乐\)、“\(视频\)”] 因为我没有找到解决方法来解决CountVectorizer要求它接收字符串或字符串列表的问题,所以我使用了这个小的正则表达式函数: def clean_parens(文本):

我不知道我是否在sklearn
countvectorier
中遇到了可能的错误,或者我只是误解了什么

我正在处理一小部分包含各种插入字符串的文本,其中只有一些需要删除。经过一些实验后,我决定简单地列出这些附加语,我将在下面列出这些附加语的子集:

插入语=[“\(笑声)”、“\(掌声)”、“\(音乐\)、“\(视频\)”]
因为我没有找到解决方法来解决CountVectorizer要求它接收字符串或字符串列表的问题,所以我使用了这个小的正则表达式函数:

def clean_parens(文本):
新文本=文本
对于插入语中的rgx_匹配:
新文本=re.sub(rgx匹配“”,新文本,标志=re.IGNORECASE)
返回新文本
然后我将其作为
预处理器
参数传递给
CountVectorizer

vec2=countvectorier(预处理器=clean\u parens)
X2=vec2.拟合变换(文本)
第一次运行时,我注意到我的功能集从53k增加到58k,有1700条文本。当我检查功能名称时,我发现我有大写和小写术语:

print(vec2.get_feature_names())
---
... '波浪“…”波浪
当我将
lowercase=True
包含在
CountVectorizer
中时,我的结果没有变化。这是因为
预处理器
优先吗?(我不是这样理解文档的。)

对上面的小正则表达式函数进行简单更改,即可使一切正常:

def clean_parens(文本):
新文本=文本
对于插入语中的rgx_匹配:
new_text=re.sub(rgx_match',new_text.lower(),flags=re.IGNORECASE)
返回新文本
我对此很满意,但如果有人能解释一下我对
计数向量器的误解,那就太好了。我觉得这是一把橱柜锯,我习惯于使用手持式圆锯:在像我这样的人手中,它的力量介于力量和魔法之间。

太棒了

我不认为这是一个真正的bug,但它缺乏文档。当
预处理器
可调用的
小写=True时,可能会出现错误/警告消息

仅供参考,在默认的预处理器函数中使用下套管。因此,当您用一个可调用函数覆盖预处理器时,就不会出现较低的大小写

我已经提出了这个问题

谢谢你的回答(以及问题的指针)。我现在感觉不那么疯狂,甚至不那么像个傻瓜。