hi我想使用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。
您看到的内容
(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)
尽管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))