如何计算术语文档矩阵?
how to calculate term-document matrix?
我知道术语-文档矩阵是一个数学矩阵,用于描述术语在文档集合中出现的频率。在文档-术语矩阵中,行对应于集合中的文档,列对应于术语。
我正在使用 sklearn 的 CountVectorizer 从字符串(文本文件)中提取特征以简化我的任务。下面的代码 returns 根据 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)
输出结果如下
I am not getting how this matrix has been calculated.please discuss the example shown in the code. I have read one more example from the 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()
中,计算出现在 fit()
中的每个文档中的术语数,将其输出到术语频率矩阵中。
在您的情况下,您将两个文档都提供给 transform()(fit_transform()
是 fit()
的 shorthand,然后是 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) 图像中,第一列代表术语频率矩阵的索引,第二列代表该术语的频率。
<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,因此不会显示在您的图像中。
我知道术语-文档矩阵是一个数学矩阵,用于描述术语在文档集合中出现的频率。在文档-术语矩阵中,行对应于集合中的文档,列对应于术语。
我正在使用 sklearn 的 CountVectorizer 从字符串(文本文件)中提取特征以简化我的任务。下面的代码 returns 根据 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)
输出结果如下
I am not getting how this matrix has been calculated.please discuss the example shown in the code. I have read one more example from the 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()
中,计算出现在fit()
中的每个文档中的术语数,将其输出到术语频率矩阵中。在您的情况下,您将两个文档都提供给 transform()(
fit_transform()
是fit()
的 shorthand,然后是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) 图像中,第一列代表术语频率矩阵的索引,第二列代表该术语的频率。
<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,因此不会显示在您的图像中。