sklearn TfidfVectorizer:通过不删除其中的停用词来生成自定义 NGram
sklearn TfidfVectorizer : Generate Custom NGrams by not removing stopword in them
以下是我的代码:
sklearn_tfidf = TfidfVectorizer(ngram_range= (3,3),stop_words=stopwordslist, norm='l2',min_df=0, use_idf=True, smooth_idf=False, sublinear_tf=True)
sklearn_representation = sklearn_tfidf.fit_transform(documents)
它通过删除所有停用词来生成三元组。
我想要它允许那些中间有停用词的 TRIGRAM(不是在开始和结束)
是否需要为此编写处理器。
需要建议。
是的,您需要提供自己的分析器函数,该函数会将文档转换为符合您要求的特征。
analyzer : string, {‘word’, ‘char’, ‘char_wb’} or callable
....
....
If a callable is passed it is used to extract the sequence of
features out of the raw, unprocessed input.
在自定义调用中,您需要首先将句子分成不同的部分,删除逗号、大括号、符号等特殊字符,将它们转换为小写,然后将它们转换为 n_grams
。
默认实现按以下顺序处理单个句子:
- 解码:句子根据给定的编码(默认'utf-8')
- 预处理:将句子转为小写
- 标记化:从句子中获取单个单词标记(默认正则表达式选择 2 个或更多字母数字字符的标记)
- 停用词删除:从上述步骤中删除出现在停用词中的单个词标记
- N_gram创建:去除停用词后,剩余的token再按要求排列n_grams
- 删除太罕见或太常见的特征:删除频率大于
max_df
或低于 min_df
的单词。
如果您想将自定义可调用对象传递给 TfidfVectorizer 中的 analyzer
参数,则需要处理所有这些。
或
您可以扩展 TfidfVectorizer class 并且只覆盖最后 2 个步骤。像这样:
from sklearn.feature_extraction.text import TfidfVectorizer
class NewTfidfVectorizer(TfidfVectorizer):
def _word_ngrams(self, tokens, stop_words=None):
# First get tokens without stop words
tokens = super(TfidfVectorizer, self)._word_ngrams(tokens, None)
if stop_words is not None:
new_tokens=[]
for token in tokens:
split_words = token.split(' ')
# Only check the first and last word for stop words
if split_words[0] not in stop_words and split_words[-1] not in stop_words:
new_tokens.append(token)
return new_tokens
return tokens
然后,像这样使用它:
vectorizer = NewTfidfVectorizer(stop_words='english', ngram_range=(3,3))
vectorizer.fit(data)
以下是我的代码:
sklearn_tfidf = TfidfVectorizer(ngram_range= (3,3),stop_words=stopwordslist, norm='l2',min_df=0, use_idf=True, smooth_idf=False, sublinear_tf=True)
sklearn_representation = sklearn_tfidf.fit_transform(documents)
它通过删除所有停用词来生成三元组。
我想要它允许那些中间有停用词的 TRIGRAM(不是在开始和结束)
是否需要为此编写处理器。 需要建议。
是的,您需要提供自己的分析器函数,该函数会将文档转换为符合您要求的特征。
analyzer : string, {‘word’, ‘char’, ‘char_wb’} or callable
.... .... If a callable is passed it is used to extract the sequence of features out of the raw, unprocessed input.
在自定义调用中,您需要首先将句子分成不同的部分,删除逗号、大括号、符号等特殊字符,将它们转换为小写,然后将它们转换为 n_grams
。
默认实现按以下顺序处理单个句子:
- 解码:句子根据给定的编码(默认'utf-8')
- 预处理:将句子转为小写
- 标记化:从句子中获取单个单词标记(默认正则表达式选择 2 个或更多字母数字字符的标记)
- 停用词删除:从上述步骤中删除出现在停用词中的单个词标记
- N_gram创建:去除停用词后,剩余的token再按要求排列n_grams
- 删除太罕见或太常见的特征:删除频率大于
max_df
或低于min_df
的单词。
如果您想将自定义可调用对象传递给 TfidfVectorizer 中的 analyzer
参数,则需要处理所有这些。
或
您可以扩展 TfidfVectorizer class 并且只覆盖最后 2 个步骤。像这样:
from sklearn.feature_extraction.text import TfidfVectorizer
class NewTfidfVectorizer(TfidfVectorizer):
def _word_ngrams(self, tokens, stop_words=None):
# First get tokens without stop words
tokens = super(TfidfVectorizer, self)._word_ngrams(tokens, None)
if stop_words is not None:
new_tokens=[]
for token in tokens:
split_words = token.split(' ')
# Only check the first and last word for stop words
if split_words[0] not in stop_words and split_words[-1] not in stop_words:
new_tokens.append(token)
return new_tokens
return tokens
然后,像这样使用它:
vectorizer = NewTfidfVectorizer(stop_words='english', ngram_range=(3,3))
vectorizer.fit(data)