python - 使 tfidf 向量化器返回作为文档数量的特征
问题描述
我正在使用适合N个文档的 Sklearn TfidfVectorizer,并且我想根据每个文档中的 tfidf 分数获得一个单词的向量表示。
一些代码可能会有所帮助:
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 个功能?我希望有 2 个功能,因为我只为模型安装了两个文档。
所以我不会是这样的:
[0, tfidfscore]
解决方案
我阅读了文档,对 TF-IDF 有了基本的了解,我可以得出一个结论。这不是专家意见。
根据文档,变换返回一个稀疏矩阵,其维度为 (n_samples, n_features)。
返回 X:稀疏矩阵,[n_samples, n_features]
Tf-idf 加权文档术语矩阵。
现在你的 n_samples 是 1 并且 n_features 来自模型......它计算为等于 11。
transform 返回的是 TD-IDF 加权Document-term-matrix,其中每一行对应于文档,每一列是特征。
您可以通过说“print(model.get_feature_names())”来了解您的功能。在您的情况下,它将给出以下输出。
['and', 'car', 'cat', 'corpus', 'dog', 'first', 'like', 'plane', 'second', 'with', 'words']
如您所见,有 11 个功能。现在 cat 是频率必须很高的第三个元素。如果你说 "print(model.transform(["cat"]).toarray())" 你会知道整个矩阵。如前所述,将有一行(当您传入一个文档时..“猫”和 11 列(由于上述原因)。正如您在下面的第三列中看到的那样,频率最高为 1.00。
[[0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0.]]
我对您的代码进行了最小的更改,目的是希望它能帮助您。
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)
Returned_Features = model.get_feature_names()
Returned_TF_IDF_DTM = model.transform(["cat"]).toarray()
print(Returned_Features)
print(Returned_TF_IDF_DTM)
我希望它有所帮助。一切顺利
推荐阅读
- python - PIL.Image.alpha_composite - 选择起点
- node.js - 如何用笑话模拟函数.save()续集
- r - 如何让散点图为我正在绘制的每个值具有不同的颜色?
- php - API 响应错误:无法反序列化实例
- java - 图形对象返回空指针
- javascript - 选择其中一个复选框后如何使按钮处于活动状态?以及如何将值从复选框动态传输到 rezBlock_1 块?
- python - 使用 BeautifulSoup 和 python 抓取 Instagram Hashtag 页面
- android - android构建配置中的unity 2019错误
- python - 发电集算法实现
- docker - docker-compose 不会启动超过大约。文件中定义的 130 个服务容器 50 个