如何计算术语文档矩阵?

2024-09-28 01:33:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道术语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)

输出如下所示
Output
我不知道这个矩阵是怎样的算了。请讨论代码中显示的示例。我又读了一个来自Wikipedia的例子,但无法理解。在


Tags: 代码文档importformat矩阵数学sklearncontent
1条回答
网友
1楼 · 发布于 2024-09-28 01:33:56

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

相关问题 更多 >

    热门问题