我最近初始化了一个计数器,如下所示:
vectorizer = CountVectorizer( input=u'content',
encoding=u'utf-8',
charset=None,
decode_error=u'strict',
charset_error=None,
strip_accents=None,
lowercase=True,
preprocessor=None,
tokenizer=None,
stop_words=None,
ngram_range=(1, 1),
analyzer=u'word',
max_df=1.0,
min_df=0,
token_pattern=u'(?u)\b\w\w+\b',
max_features=None,
vocabulary=None,
binary=False,
dtype=np.int64)
之后,我打了电话:
documents = ['1fbe01fe', '1fbe01ff']
x = vectorizer.fit_transform(documents)
生成错误:
ValueError: empty vocabulary; perhaps the documents only contain stop words
但是,当我从初始化中删除“token_pattern = u'(?u)\ b \ w \ w + \ b'”这一行时,相同的行不会产生错误。这让我很困惑,因为据我所知,countvectorizer中参数的默认初始化确实提供了相同的'token_pattern'。因此,如果我没有明确提供这种模式,它是否会自动填写,因此应该生成相同的错误?
任何帮助将不胜感激!
答案 0 :(得分:2)
token_pattern
的文档正则表达式未被转义。如果您使用默认值初始化count vectorizer
,然后拨打get_params
,则可以看到token pattern
的默认值实际为u'(?u)\\b\\w\\w+\\b'
这就是它使用默认参数的原因。要检查此操作,请运行以下代码:
vectorizer = CountVectorizer()
vectorizer.get_params
返回:
<bound method CountVectorizer.get_params of CountVectorizer(analyzer=u'word', binary=False, charset=None,
charset_error=None, decode_error=u'strict',
dtype=<type 'numpy.int64'>, encoding=u'utf-8', input=u'content',
lowercase=True, max_df=1.0, max_features=None, min_df=1,
ngram_range=(1, 1), preprocessor=None, stop_words=None,
strip_accents=None, token_pattern=u'(?u)\\b\\w\\w+\\b',
tokenizer=None, vocabulary=None)>