gpt4 book ai didi

python - 如何在 scikit-learn 中的 tfidf 之后查看术语文档矩阵的前 n 个条目

转载 作者:IT老高 更新时间:2023-10-28 21:49:34 37 4
gpt4 key购买 nike

我是 scikit-learn 的新手,我使用 TfidfVectorizer 在一组文档中查找术语的 tfidf 值。我使用以下代码来获得相同的结果。

vectorizer = TfidfVectorizer(stop_words=u'english',ngram_range=(1,5),lowercase=True)
X = vectorizer.fit_transform(lectures)

现在如果我打印 X,我可以看到矩阵中的所有条目,但是如何根据 tfidf 分数找到前 n 个条目。除此之外,还有什么方法可以帮助我根据每个 ngram 的 tfidf 分数找到前 n 个条目,即 unigram、bigram、trigram 等中的前 n 个条目?

最佳答案

从 0.15 版本开始,TfidfVectorizer 学习到的特征的全局术语权重可以通过属性idf_访问,它会返回一个长度等于特征维度的数组。按此权重对特征进行排序以获得权重最高的特征:

from sklearn.feature_extraction.text import TfidfVectorizer
import numpy as np

lectures = ["this is some food", "this is some drink"]
vectorizer = TfidfVectorizer()
X = vectorizer.fit_transform(lectures)
indices = np.argsort(vectorizer.idf_)[::-1]
features = vectorizer.get_feature_names()
top_n = 2
top_features = [features[i] for i in indices[:top_n]]
print top_features

输出:

[u'food', u'drink']

通过 ngram 获取 top 特征的第二个问题可以使用相同的思想来完成,但需要一些额外的步骤将特征分成不同的组:

from sklearn.feature_extraction.text import TfidfVectorizer
from collections import defaultdict

lectures = ["this is some food", "this is some drink"]
vectorizer = TfidfVectorizer(ngram_range=(1,2))
X = vectorizer.fit_transform(lectures)
features_by_gram = defaultdict(list)
for f, w in zip(vectorizer.get_feature_names(), vectorizer.idf_):
features_by_gram[len(f.split(' '))].append((f, w))
top_n = 2
for gram, features in features_by_gram.iteritems():
top_features = sorted(features, key=lambda x: x[1], reverse=True)[:top_n]
top_features = [f[0] for f in top_features]
print '{}-gram top:'.format(gram), top_features

输出:

1-gram top: [u'drink', u'food']
2-gram top: [u'some drink', u'some food']

关于python - 如何在 scikit-learn 中的 tfidf 之后查看术语文档矩阵的前 n 个条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25217510/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com