我知道术语documentmatrix是一个数学矩阵,它描述了在文档集合中出现的术语的频率。在文档术语矩阵中,行对应于集合中的文档,列对应于术语。在
我正在使用sklearn的CountVectorizer从字符串(文本文件)中提取特征来简化我的任务。下面的代码根据sklearn_documentation返回一个术语文档矩阵
from sklearn.feature_extraction.text import CountVectorizer
import numpy as np
vectorizer = CountVectorizer(min_df=1)
print(vectorizer)
content = ["how to format my hard disk", "hard disk format problems"]
X = vectorizer.fit_transform(content) #X is Term-document matrix
print(X)
输出如下所示
我不知道这个矩阵是怎样的算了。请讨论代码中显示的示例。我又读了一个来自Wikipedia的例子,但无法理解。在
CountVectorizer().fit_transform()
的输出是一个稀疏矩阵。这意味着它只存储矩阵的非零元素。当您执行print(X)
操作时,只会按照您在图像中观察到的方式显示非零项。在至于如何计算,您可以看看official documentation here。在
默认配置中的
CountVectorizer
标记给定文档或原始文本(它只接受包含2个或更多字符的术语)并计算单词出现的次数。在基本步骤如下:
步骤1-从
fit()
中的所有文档收集所有不同的术语。在对于你的数据,他们是
[u'disk', u'format', u'hard', u'how', u'my', u'problems', u'to']
这可以从vectorizer.get_feature_names()
步骤2-在}中的项数,并将其输出到术语频率矩阵中。在
transform()
中,计算每个文档中出现在{在您的例子中,您将两个文档都提供给transform()(})。所以,结果是
fit_transform()
是fit()
的简写,然后是{[u'disk', u'format', u'hard', u'how', u'my', u'problems', u'to']
第一个
1 1 1 1 1 0 1
秒
0 1 1 0 0 1 0
您可以通过调用
X.toarray()
获得上述结果。在在您发布的图片(X)中,第一列表示术语freq matrix的索引,第二列表示该术语的频率。在
<0,0>
表示第一行、第一列,即第一文档中"disk" (first term in our tokens)
项的频率=1<0,2>
表示第一行,第三列,即第一文档中术语"hard" (third term in our tokens)
的频率=1<0,5>
表示第一行,第六列,即第一文档中"problems" (sixth term in our tokens)
项的频率=0。但由于它是0,所以它不会显示在您的图像中。在相关问题 更多 >
编程相关推荐