CountVectorizer token_pattern 不捕获下划线
CountVectorizer token_pattern to not catch underscore
CountVectorizer 默认标记模式将下划线定义为字母
corpus = ['The rain in spain_stays' ]
vectorizer = CountVectorizer(token_pattern=r'(?u)\b\w\w+\b')
X = vectorizer.fit_transform(corpus)
print(vectorizer.get_feature_names())
给出:
['in', 'rain', 'spain_stays', 'the']
这是有道理的,因为 AFAIK '/w' 与 [a-zA-z0-9_] 等效,我需要的是:
['in', 'rain', 'spain', 'stays', 'the']
所以我尝试用 [a-zA-Z0-9]
替换 '/w'
vectorizer = CountVectorizer(token_pattern=r'(?u)\b[a-zA-Z0-9][a-zA-Z0-9]+\b')
X = vectorizer.fit_transform(corpus)
print(vectorizer.get_feature_names())
但我明白了
['in', 'rain', 'the']
我怎样才能得到我需要的东西?
欢迎任何想法
n_
之间没有单词边界,因为 \w
也匹配下划线。
匹配2个或更多不带下划线的单词字符,且左右只允许空格边界或下划线:
(?<![^\s_])[^\W_]{2,}(?![^\s_])
模式匹配:
(?<![^\s_])
否定向后看,在左侧断言空白边界或下划线
[^\W_]{2,}
匹配一个单词字符 2 次或更多次,不包括下划线
(?![^\s_])
否定前瞻,断言空白边界或右边的下划线
看到一个regex demo。
非常广泛的匹配可以是 [^\W_]{2,}
,但请注意,这不考虑边界。它只匹配没有下划线的单词字符。
查看此 regex demo 中不同数量的匹配项。
CountVectorizer 默认标记模式将下划线定义为字母
corpus = ['The rain in spain_stays' ]
vectorizer = CountVectorizer(token_pattern=r'(?u)\b\w\w+\b')
X = vectorizer.fit_transform(corpus)
print(vectorizer.get_feature_names())
给出:
['in', 'rain', 'spain_stays', 'the']
这是有道理的,因为 AFAIK '/w' 与 [a-zA-z0-9_] 等效,我需要的是:
['in', 'rain', 'spain', 'stays', 'the']
所以我尝试用 [a-zA-Z0-9]
替换 '/w'vectorizer = CountVectorizer(token_pattern=r'(?u)\b[a-zA-Z0-9][a-zA-Z0-9]+\b')
X = vectorizer.fit_transform(corpus)
print(vectorizer.get_feature_names())
但我明白了
['in', 'rain', 'the']
我怎样才能得到我需要的东西? 欢迎任何想法
n_
之间没有单词边界,因为 \w
也匹配下划线。
匹配2个或更多不带下划线的单词字符,且左右只允许空格边界或下划线:
(?<![^\s_])[^\W_]{2,}(?![^\s_])
模式匹配:
(?<![^\s_])
否定向后看,在左侧断言空白边界或下划线[^\W_]{2,}
匹配一个单词字符 2 次或更多次,不包括下划线(?![^\s_])
否定前瞻,断言空白边界或右边的下划线
看到一个regex demo。
非常广泛的匹配可以是 [^\W_]{2,}
,但请注意,这不考虑边界。它只匹配没有下划线的单词字符。
查看此 regex demo 中不同数量的匹配项。