Python Scikit学习-从特征数组语料库计算TF-IDF,而不是从原始文档语料库计算TF-IDF

Python Scikit学习-从特征数组语料库计算TF-IDF,而不是从原始文档语料库计算TF-IDF,python,machine-learning,scikit-learn,tf-idf,Python,Machine Learning,Scikit Learn,Tf Idf,Scikit Learn的TFIDFvectorier将原始文档集合转换为TF-IDF功能矩阵。我希望将功能名称矩阵转换为TF-IDF功能,而不是原始文档 您提供的语料库fit_transform()应该是一个原始文档数组,但是我希望能够为它(或类似的函数)提供每个文档的一个特征数组。例如: corpus = [ ['orange', 'red', 'blue'], ['orange', 'yellow', 'red'], ['orange', 'green', 'pur

Scikit Learn的TFIDFvectorier将原始文档集合转换为TF-IDF功能矩阵。我希望将功能名称矩阵转换为TF-IDF功能,而不是原始文档

您提供的语料库
fit_transform()
应该是一个原始文档数组,但是我希望能够为它(或类似的函数)提供每个文档的一个特征数组。例如:

corpus = [
    ['orange', 'red', 'blue'],
    ['orange', 'yellow', 'red'],
    ['orange', 'green', 'purple (if you believe in purple)'],
    ['orange', 'reddish orange', 'black and blue']
]
。。。与一维字符串数组相反

我知道我可以定义自己的词汇表供TfidfVectorizer使用,因此我可以轻松地在语料库中记录独特的特征及其在特征向量中的索引。但该函数仍然需要原始文档,而且由于我的功能具有不同的长度,并且偶尔会重叠(例如,“橙色”和“红橙色”),因此我不能仅将我的功能关联成单个字符串并使用ngrams


是否有其他Scikit学习功能可供我使用,但我找不到?有没有一种方法可以使用我没有看到的TFIDFvectorier?或者我必须自制自己的TF-IDF函数才能做到这一点吗?

您可以编写自定义函数来覆盖内置的预处理器和标记器

从文档中:

预处理器-一个可调用函数,将整个文档作为输入(作为单个字符串),并返回文档的可能转换版本,仍然作为整个字符串。这可用于删除HTML标记、将整个文档小写等

标记器-一个可调用函数,从预处理器获取输出并将其拆分为标记,然后返回这些标记的列表

在这种情况下,不需要执行预处理(因为没有原始文档)。标记化也是不必要的,因为我们已经有了特性数组。因此,我们可以做到以下几点:

tfidf = TfidfVectorizer(preprocessor=lambda x: x, tokenizer=lambda x: x)
tfidf_matrix = tfidf.fit_transform(corpus)
通过使用
lambda x:x
传递整个语料库,我们跳过了预处理器和标记器步骤。一旦内置分析器接收到特征数组,它就会构建词汇表本身,并像往常一样在“标记化”语料库上执行TF-IDF