Python 使tfidf矢量化器以特征的形式返回文档数
我正在使用适合N个文档的Sklearn TFIDFvectorier,然后我希望根据每个文档中的tfidf分数获得单词的向量表示 一些代码可以帮助:Python 使tfidf矢量化器以特征的形式返回文档数,python,scikit-learn,tfidfvectorizer,Python,Scikit Learn,Tfidfvectorizer,我正在使用适合N个文档的Sklearn TFIDFvectorier,然后我希望根据每个文档中的tfidf分数获得单词的向量表示 一些代码可以帮助: from sklearn.feature_extraction.text import TfidfVectorizer model = TfidfVectorizer() corpus = ["first corpus with words like dog and cat", "second corpus with words like ca
from sklearn.feature_extraction.text import TfidfVectorizer
model = TfidfVectorizer()
corpus = ["first corpus with words like dog and cat", "second corpus with words like car and plane"]
model.fit(corpus)
model.transform(["cat"]).toarray().shape
>> (1, 11)
为什么我得到11个功能?我希望有两个功能,因为我安装的模型只有两个文件
因此,我不会这样做:
[0, tfidfscore]
我阅读了文档,对TF-IDF有了基本的了解,我可以得出一个结论这不是专家意见。 根据,转换返回一个稀疏矩阵,其维数为(n_个样本,n_个特征) 返回X:sparse矩阵,[n_个样本,n_个特征] Tf idf加权文档术语矩阵 现在您的n_示例为1,n_特征来自模型。。。它计算出来等于11 转换返回的是TD-IDF加权文档术语矩阵,其中每行对应文档,每列对应特征 您可以通过说“print(model.get_feature_names())”来了解您的功能。在您的情况下,它将给出以下输出
['and'、'car'、'cat'、'corpus'、'dog'、'first'、'like'、'plane'、'second'、'with'、'words']
如您所见,共有11个功能。现在cat是第三个频率必须很高的元件。如果你说“print(model.transform([“cat”]).toarray()”,你就会知道整个矩阵。如前所述,将有一行(当您在一个文档中传递时…“cat”和11列(由于上述原因)。正如您在下面第三列中看到的,频率最高为1.00
[[0.0.1.0.0.0.0.0.0.0.0.0.]]
我对您的代码做了最小的更改,希望它能帮助您
从sklearn.feature\u extraction.text导入TfidfVectorizer
模型=TfidfVectorizer()
语料库=[“第一个语料库中有像狗和猫这样的词”,“第二个语料库中有像汽车和飞机这样的词”]
模型拟合(语料库)
返回的\u Features=model.get\u Features\u names()
返回了\u TF\u IDF\u DTM=model.transform([“cat”]).toarray()
打印(返回的功能)
打印(返回的\u TF\u IDF\u DTM)
我希望这会有帮助。最好的似乎你想做这样的事情
from sklearn.feature_extraction.text import TfidfVectorizer
model = TfidfVectorizer()
corpus = ["first corpus with words like dog and cat", "second corpus with words like car and plane"]
X = model.fit_transform(corpus)
words = model.get_feature_names()
word2idx = dict(zip(words, range(len(words))))
print(X[:, word2idx['cat']].todense())
这将为您提供tf idf矩阵中单词“cat”的核心对应原始数据。您的词汇量为11。这就是为什么您会得到
11
特征的特征向量。为什么您希望有2个特征?tf-idf特征是按单词计算的,而不是按文档计算的。