用scikit计算tfidf时识别文档

时间:2015-12-03 17:36:19

标签: python scikit-learn

我想通过使用scikit来查看每个文档的每个术语的tfidf:

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.pipeline import Pipeline
import pandas as pd
import numpy as np
import os,glob

pipeline = Pipeline([('tfidf', TfidfVectorizer())])

corpus = []
os.chdir("/home/yougha/workspace/RecPrec/corpusH_test")
for file in glob.glob("*.ann"):
    f=open(file,'r').read().splitlines()
    corpus.append(str(' '.join(f)))



X = pipeline.fit_transform(corpus)
vec = pipeline.named_steps['tfidf']
features = vec.get_feature_names()

问题是我得到了这个结果集:

(0, 3014)   0.0377805822964
(0, 408)    0.0350786341362
(0, 1674)   0.0315760656866
(0, 2894)   0.0684834084489
(0, 414)    0.0702763812732
(0, 5435)   0.259268251165
(0, 4931)   0.0386510244744
(0, 5878)   0.0625452304837
(0, 4129)   0.0515443519972
(0, 867)    0.0537265899836
(0, 847)    0.0550074477291
(0, 5296)   0.046810389078

我绝对不知道该怎么做,

是否有可能有类似的东西

Name of Doc |word1 |word2 |word3
doc1        |0.4   |0.2   |0.3

我想做的是识别文档并打印本文档中出现的每个单词的tfidf。

2 个答案:

答案 0 :(得分:0)

你看到了什么

(0, 3014)   0.0377805822964
(0, 408)    0.0350786341362
(0, 1674)   0.0315760656866
(0, 2894)   0.0684834084489

那是备用矩阵。第一列标识矩阵中的点坐标,第二列标识点的值。

所以

(0, 3014)   0.0377805822964

表示

X[0, 3014] = 0.0377805822964

如何获取要素值

如果您想在表格视图中查看要素权重,可以将备用矩阵转换为NumPy ndarray

x_array = X.toarray()

但是要准备好在这种情况下看到几乎空的矩阵离子。

我认为更有用的演示文稿是每个文档的特征(已订购)

features_of_docs = pipeline.inverse_transform(X)

答案 1 :(得分:0)

虽然Lol4to已经提供了一个不错的答案,但我认为重要的是要注意X是一个稀疏矩阵,并提取"提取"它的功能,而不是将其转换为完整的数组,你应该做如下的事情:

files = glob.glob("*.ann")
X = X.to_csr()

for i, row in enumerate(X):
    print("Document %s" % files[i])
    print("------------------------")
    for i, val in zip(row.indices, row.data):
        print("   %s: %f" % (features[i], val))