TfidfVectorizer 的词汇表和 get_features() 之间的区别?

Difference between vocabulary and get_features() of TfidfVectorizer?

我有

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity

# Train the vectorizer
text="this is a simple example"
singleTFIDF = TfidfVectorizer(ngram_range=(1,2)).fit([text])
singleTFIDF.vocabulary_ # show the word-matrix position pairs

# Analyse the training string - text
single=singleTFIDF.transform([text])
single.toarray()  

我想将每个值与相应的特征相关联。 现在单身的结构是什么?您如何将单个值的位置映射到特征?

如何解释词汇索引和 get_features()?他们有关系吗?根据文档,两者都具有带索引的功能。这是令人困惑?

属性vocabulary_输出一个字典,其中所有的ngram都是字典键,各自的值是每个ngram(特征)在tfidf矩阵中的列位置。 get_feature_names() 方法输出一个列表,其中 ngrams 根据每个特征的列位置出现。因此,您可以使用其中任何一个来确定哪个 tfidf 列对应于哪个功能。在下面的示例中,tfidf 矩阵很容易转换为 pandas 数据框,使用 get_feature_names() 的输出来命名列。另请注意,所有值都被赋予了相同的权重,并且所有权重的平方和等于一。

singleTFIDF.vocabulary_
Out[41]: 
{'this': 5,
 'is': 1,
 'simple': 3,
 'example': 0,
 'this is': 6,
 'is simple': 2,
 'simple example': 4}

singleTFIDF.get_feature_names_out()
Out[42]: ['example', 'is', 'is simple', 'simple', 'simple example', 'this', 'this is']

import pandas as pd
df = pd.DataFrame(single.toarray(), columns=singleTFIDF.get_feature_names())

df
Out[48]: 
    example        is  is simple    simple  simple example      this   this is
0  0.377964  0.377964   0.377964  0.377964        0.377964  0.377964  0.377964