【发布时间】:2020-09-12 08:43:55
【问题描述】:
我不知道我是否在 sklearn CountVectorizer 中遇到了可能的错误,或者我只是误解了某些东西。
我正在处理一个包含各种括号字符串的小型文本语料库,其中只有一些需要删除。经过一些实验后,我决定简单地列出这些括号,这是我在下面包括的一个子集:
parentheticals = [ "\(laughter\)", "\(applause\)", "\(music\)", "\(video\)" ]
因为我没有找到解决CountVectorizer 接收字符串或字符串列表的要求的方法,所以我使用了这个小的正则表达式函数:
def clean_parens(text):
new_text = text
for rgx_match in parentheticals:
new_text = re.sub(rgx_match, ' ', new_text, flags=re.IGNORECASE)
return new_text
然后我将其作为preprocessor 参数传递给CountVectorizer:
vec2 = CountVectorizer(preprocessor = clean_parens )
X2 = vec2.fit_transform(texts)
在第一次运行时,我注意到我的功能集已从 53k 增长到 58k,大约 1700 条文本。当我检查功能名称时,我发现我有大写和小写的术语:
print(vec2.get_feature_names())
---
... 'Waves' ... 'waves'
当我将lowercase=True 包含在CountVectorizer 中时,我的结果没有任何变化。这是因为preprocessor 优先吗? (这不是我理解文档的方式。)
对上面的小正则表达式函数做一个简单的改变,一切就都好了:
def clean_parens(text):
new_text = text
for rgx_match in parentheticals:
new_text = re.sub(rgx_match, ' ', new_text.lower(), flags=re.IGNORECASE)
return new_text
对此我很满意,但如果有人能解释我对CountVectorizer 的误解,那就太好了。我觉得它是一把橱柜锯,而且我习惯使用手持圆锯:它的力量在像我这样的人手中介于力量和魔法之间。
【问题讨论】:
标签: python scikit-learn countvectorizer