Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用scikit计算tfidf时识别文档_Python_Scikit Learn - Fatal编程技术网

Python 使用scikit计算tfidf时识别文档

Python 使用scikit计算tfidf时识别文档,python,scikit-learn,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 = []

您好,我想使用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。

您看到了什么 这就是备用矩阵。第一列标识矩阵中的点坐标,第二列标识点的值

所以

意味着

X[0, 3014] = 0.0377805822964
如何获取特征值 如果要在表格视图中查看特征权重,可以将备用矩阵转换为
NumPy
ndarray

x_array = X.toarray()
但要准备好在这种情况下看到几乎为空的矩阵离子

我认为更有用的演示是每个文档的功能(已订购)


虽然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))

我建议不要将单词特征的稀疏矩阵转换为数组。很容易得到不必要的巨大矩阵。@KT.,如果我们讨论的是处理,我同意。但是数组在打印时会更加冗长
x_array = X.toarray()
features_of_docs = pipeline.inverse_transform(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))