Countvectorizer初始化

时间:2015-02-19 09:14:38

标签: python scikit-learn

我最近初始化了一个计数器,如下所示:

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'。因此,如果我没有明确提供这种模式,它是否会自动填写,因此应该生成相同的错误?

任何帮助将不胜感激!

1 个答案:

答案 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)>