【问题标题】:How to see top n entries of term-document matrix after tfidf in scikit-learn如何在 scikit-learn 中的 tfidf 之后查看术语文档矩阵的前 n 个条目
【发布时间】:2014-10-02 18:15:09
【问题描述】:

我是 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 个条目?

【问题讨论】:

    标签: python numpy scikit-learn tf-idf top-n


    【解决方案1】:

    从 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 features 的第二个问题可以使用相同的想法来完成,但需要一些额外的步骤将特征分成不同的组:

    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']
    

    【讨论】:

    • 我如何在讲座中获得每个文档的前 k 个 ngram,而不是整体前 k 个元素
    • 是否可以获得特定文档的前 n 个特征?
    • 如何将它与 countvectorizer 一起使用?我想获得矩阵中的前 5 个单词
    • 这似乎不是按 TF-IDF 而是按字母顺序排序的。
    • 这个答案不完整。他想过滤要编码的文档,并且只包含 TF-IDF 分数的前 X 个 n-gram。
    猜你喜欢
    • 2018-08-15
    • 2018-12-12
    • 1970-01-01
    • 2015-05-19
    • 2018-04-29
    • 2014-12-05
    • 1970-01-01
    • 1970-01-01
    • 2021-12-14
    相关资源
    最近更新 更多