为什么Tfidfvectorizer中的token_pattern参数不能与scikit一起学习?

时间:2015-02-04 18:09:46

标签: python machine-learning nlp scikit-learn tf-idf

我有这样的文字:

data = ['Hi, this is XYZ and XYZABC is $$running']

我正在使用以下tfidfvectorizer:

vectorizer = TfidfVectorizer(
            stop_words='english',
            use_idf=False, 
            norm=None,
            min_df=1,
            tokenizer = tokenize,
            ngram_range=(1, 1),
            token_pattern=u'\w{4,}')

我按照以下方式拟合数据:

tdm =vectorizer.fit_transform(data)

现在,当我打印

vectorizer.get_feature_names()

我明白了:

[u'hi', u'run', u'thi', u'xyz', u'xyzabc']

我的问题是为什么我得到'hi'和'xyz'甚至认为我提到我希望它只捕获至少包含4个字符的单词? - token_pattern = u'\ w {4,}'

2 个答案:

答案 0 :(得分:2)

我能够重新创建传递tokenizer函数的行为,超越了token_pattern模式。

这是一个排除少于4个字符的令牌的标记器:

from nltk import word_tokenize
def tokenizer(x):
    return ( w for w in word_tokenize(x) if len(w) >3)

好消息是传递你自己的标记器并不会覆盖ngram参数。

答案 1 :(得分:0)

如果您使用自己的令牌生成器,则从code开始,

令牌模式将不起作用。

def build_tokenizer(self):
    """Return a function that splits a string into a sequence of tokens"""
    if self.tokenizer is not None:
        return self.tokenizer
    token_pattern = re.compile(self.token_pattern)
    return token_pattern.findall