为什么 Tfidfvectorizer 中的 token_pattern 参数不能与 scikit learn 一起使用?
Why isn't the token_pattern parameter in Tfidfvectorizer working with scikit learn?
我有这段文字:
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,}'
我能够重新创建传递分词器函数覆盖 token_pattern
模式的行为。
这是一个排除少于 4 个字符的标记的分词器:
from nltk import word_tokenize
def tokenizer(x):
return ( w for w in word_tokenize(x) if len(w) >3)
好消息是传递您自己的分词器不会覆盖 ngram 参数。
如果您使用自己的分词器,则分词模式将不起作用,来自 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
我有这段文字:
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,}'
我能够重新创建传递分词器函数覆盖 token_pattern
模式的行为。
这是一个排除少于 4 个字符的标记的分词器:
from nltk import word_tokenize
def tokenizer(x):
return ( w for w in word_tokenize(x) if len(w) >3)
好消息是传递您自己的分词器不会覆盖 ngram 参数。
如果您使用自己的分词器,则分词模式将不起作用,来自 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