我有以下文本:
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,}’
回答:
我能够重现传递tokenizer函数会覆盖token_pattern
模式的行为。
这里有一个排除少于4个字符的标记的tokenizer:
from nltk import word_tokenizedef tokenizer(x): return ( w for w in word_tokenize(x) if len(w) >3)
好消息是,传递你自己的tokenizer不会覆盖ngram参数。