如何在Python的CountVectorizer中限制词元长度为3-7字符?
解决CountVectorizer过滤指定长度词元的问题
嘿,我来帮你搞定这个问题!你的代码没生效主要踩了两个小坑:正则表达式的写法不对,而且同时用了tokenizer和token_pattern导致后者被忽略了,咱们一步步来修正。
问题分析
- 正则格式错误:你写的
/^[a-zA-Z]{3,7}$/带了斜杠分隔符,这是JS等语言的写法,Python正则不需要这个。而且CountVectorizer的token_pattern需要结合单词边界\b和(?u)标志(支持Unicode单词字符)才能正确匹配完整单词。 - 参数冲突:当你指定了
tokenizer参数时,token_pattern会被直接忽略,所以你的正则规则根本没机会生效。
解决方案
方案1:不用自定义tokenizer,直接用token_pattern
如果你的分词逻辑和默认一致,只需要过滤长度,直接调整token_pattern就行:
from sklearn.feature_extraction.text import CountVectorizer import nltk from nltk.corpus import stopwords # 先下载停用词(如果没下过) nltk.download('stopwords') stopwords = stopwords.words('english') # 正确的正则:(?u)支持Unicode,\b是单词边界,匹配3-7个字母的单词 regex1 = r'(?u)\b[a-zA-Z]{3,7}\b' # 如果需要匹配包含数字的单词,改成r'(?u)\b\w{3,7}\b' vectorizer = CountVectorizer( analyzer='word', stop_words=stopwords, token_pattern=regex1, min_df=2, max_df=0.9, max_features=2000 ) # 拟合你的文本数据 vectorizer1 = vectorizer.fit_transform(token_dict.values()) # 验证结果:打印生成的词表 print(vectorizer.get_feature_names_out())
方案2:用自定义tokenizer精准控制过滤
如果需要更灵活的分词逻辑(比如自定义分词规则),就在tokenizer函数里直接过滤长度:
from sklearn.feature_extraction.text import CountVectorizer import nltk from nltk.corpus import stopwords from nltk.tokenize import word_tokenize # 下载必要的资源 nltk.download('stopwords') nltk.download('punkt') stopwords_set = set(stopwords.words('english')) def custom_tokenize(text): # 第一步:分词 tokens = word_tokenize(text) # 第二步:过滤条件 filtered_tokens = [ token.lower() for token in tokens if token.isalpha() # 只保留纯字母的词 and 3 <= len(token) <= 7 # 长度在3-7之间 and token.lower() not in stopwords_set # 排除停用词 ] return filtered_tokens vectorizer = CountVectorizer( analyzer='word', tokenizer=custom_tokenize, # 注意:用了tokenizer就不需要token_pattern了 min_df=2, max_df=0.9, max_features=2000 ) vectorizer1 = vectorizer.fit_transform(token_dict.values()) print(vectorizer.get_feature_names_out())
为什么之前的代码不生效?
再总结下踩的坑:
- 正则里的
/是多余的,Python正则直接写表达式就行; tokenizer和token_pattern不能同时生效,指定了自定义tokenizer后,token_pattern会被忽略;- 没加
(?u)标志的话,可能无法正确处理大小写或Unicode字符。
内容的提问来源于stack exchange,提问作者Indi
相关产品推荐
相关产品推荐

