带有预处理器和小写字母的 sklearn CountVectorizer 中的错误?
Bug in sklearn CountVectorizer with preprocessor and lowercase?
我不知道我是否在 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'
当我在 CountVectorizer
中包含 lowercase=True
时,结果没有任何变化。这是因为 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
的误解,那就太好了。感觉是柜锯,手持圆锯用惯了,在我这种人手里威力介于威力和魔力之间。
我不知道我是否在 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'
当我在 CountVectorizer
中包含 lowercase=True
时,结果没有任何变化。这是因为 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
的误解,那就太好了。感觉是柜锯,手持圆锯用惯了,在我这种人手里威力介于威力和魔力之间。