我像这样使用TfidfVectorizer:
from sklearn.feature_extraction.text import TfidfVectorizer
stop_words = stopwords.words("english")
vectorizer = TfidfVectorizer(stop_words=stop_words, min_df=200)
xs['train'] = vectorizer.fit_transform(docs['train'])
xs['test'] = vectorizer.transform(docs['test']).toarray()
但在检查vectorizer.vocabulary_
时,我注意到它学到了纯数字特征:
[(u'00', 0), (u'000', 1), (u'0000', 2), (u'00000', 3), (u'000000', 4)
我不想要这个。我该如何预防?
答案 0 :(得分:3)
您可以在启动矢量图时定义token_pattern
。默认值为u'(?u)\b\w\w+\b'
((?u)
部分只是打开re.UNICODE
标志)。可以摆弄它,直到你得到你需要的东西。
类似的东西:
vectorizer = TfidfVectorizer(stop_words=stop_words,
min_df=200,
token_pattern=u'(?u)\b\w*[a-zA-Z]\w*\b')
另一种选择(如果你的样本中出现数字的事实)是在矢量化之前屏蔽所有数字。
re.sub('\b[0-9][0-9.,-]*\b', 'NUMBER-SPECIAL-TOKEN', sample)
这样,数字会在你的矢量化程序词汇表中找到相同的位置,你也不会完全忽略它们。