以下是我的代码:
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(不是在开始和结束)
是否需要为此编写处理器。
需要建议。
最佳答案
是的,您需要提供自己的分析器功能,它将根据您的要求将文档转换为功能。
根据 the documentation :
在那个自定义的 callable 中,您需要首先将句子拆分为不同的部分,删除特殊字符,如逗号、大括号、符号等,将它们转换为小写,然后将它们转换为 n_grams
。
默认实现按以下顺序处理单个句子:
max_df
或低于 min_df
的词。 如果要将自定义可调用对象传递给 TfidfVectorizer 中的
analyzer
参数,则需要处理所有这些。或
您可以扩展 TfidfVectorizer 类并且只覆盖最后两个步骤。像这样的东西:
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)
关于machine-learning - sklearn TfidfVectorizer : Generate Custom NGrams by not removing stopword in them,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49746555/