如何计算期限文件矩阵?

log*_*og0 4 python scipy scikit-learn term-document-matrix

我知道术语 - 文档矩阵是一个数学矩阵,它描述了文档集合中出现的术语的频率.在文档术语矩阵中,行对应于集合中的文档,列对应于术语.

我正在使用sklearn的CountVectorizer从字符串(文本文件)中提取功能以简化我的任务.以下代码根据sklearn_documentation返回term-document矩阵

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)
Run Code Online (Sandbox Code Playgroud)

输出如下
产量
我没有得到如何计算这个矩阵.请讨论代码中显示的示例.我已经阅读了维基百科的另一个例子,但无法理解.

Viv*_*mar 6

a的输出CountVectorizer().fit_transform()是稀疏矩阵.这意味着它只存储矩阵的非零元素.执行此操作时print(X),只会在图像中显示非零条目.

至于如何进行计算,您可以在这里查看官方文档.

CountVectorizer默认配置,令牌化给定的文档或原始文本(这将需要仅在其2个或更多字符而言)和计数出现的词语.

基本上,步骤如下:

  • 第1步 - 从所有文档中收集所有不同的术语fit().

    对于您的数据,它们 [u'disk', u'format', u'hard', u'how', u'my', u'problems', u'to'] 是可用的vectorizer.get_feature_names()

  • 步骤2 - 在中transform(),计算每个文档fit()中术语 - 频率矩阵中输出中的术语数.

    在你的情况下,你提供两个文件到transform()(fit_transform()是一个简写fit(),然后transform()).所以,结果是

    [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().

在您发布的print(X)图像中,第一列表示term-freq矩阵的索引,第二列表示该术语的频率.

<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,所以它不会显示在图像中.