我有一个自然语言处理任务,并且我在使用scikit-learn。在阅读教程时,我了解到如何对文本进行向量化,以及如何使用这些向量化模型来供分类算法使用。假设我有一些文本,并且我想按照以下方式对其进行向量化:
from sklearn.feature_extraction.text import CountVectorizercorpus =['''计算机科学是计算及其应用的科学和实用方法。'''#这是另一个观点'''它是对方法论程序的可行性、结构、表达和机械化的系统研究,这些程序是信息获取、表示、处理、存储、通信和访问的基础,无论这些信息是以计算机内存中的比特形式编码,还是以生物细胞中的基因和蛋白质结构形式转录。''' #另一个'''计算机科学家专注于计算理论和计算系统的设计''']vectorizer = CountVectorizer(analyzer='word')X = vectorizer.fit_transform(corpus)print X
问题是我不理解输出的含义,我看不出文本与向量化器返回的矩阵之间有任何关系:
(0, 12) 3 (0, 33) 1 (0, 20) 3 (0, 45) 7 (0, 34) 1 (0, 2) 6 (0, 28) 1 (0, 4) 1 (0, 47) 2 (0, 10) 2 (0, 22) 1 (0, 3) 1 (0, 21) 1 (0, 42) 1 (0, 40) 1 (0, 26) 5 (0, 16) 1 (0, 38) 1 (0, 15) 1 (0, 23) 1 (0, 25) 1 (0, 29) 1 (0, 44) 1 (0, 49) 1 (0, 1) 1 : : (0, 30) 1 (0, 37) 1 (0, 9) 1 (0, 0) 1 (0, 19) 2 (0, 50) 1 (0, 41) 1 (0, 14) 1 (0, 5) 1 (0, 7) 1 (0, 18) 4 (0, 24) 1 (0, 27) 1 (0, 48) 1 (0, 17) 1 (0, 31) 1 (0, 39) 1 (0, 6) 1 (0, 8) 1 (0, 35) 1 (0, 36) 1 (0, 46) 1 (0, 13) 1 (0, 11) 1 (0, 43) 1
此外,我不理解当我使用toarray()
方法时输出的变化:
print X.toarray()
输出到底是什么意思,它与语料库有什么关系?
[[1 1 6 1 1 1 1 1 1 1 2 1 3 1 1 1 1 1 4 2 3 1 1 1 1 1 5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 1 2 1 1 1]]
回答:
CountVectorizer
生成文档-词矩阵。让我们看一个简化的代码示例:
from sklearn.feature_extraction.text import CountVectorizercorpus =['''计算机硬件''','''计算机数据和软件数据''']vectorizer = CountVectorizer(analyzer='word')X = vectorizer.fit_transform(corpus)print Xprint X.toarray()
你有两个文档,即语料库的元素,以及五个词项,即单词。你可以按以下方式计算文档中的词项数:
| and computer data hardware software +-------------------------------------doc 0 | 1 1 doc 1 | 1 1 2 1
而X
以关联的方式表示上述矩阵,即从(行,列)到词项频率的映射,X.toarray()
则将X
显示为列表的列表。以下是执行结果:
(1, 0) 1 (0, 1) 1 (1, 1) 1 (1, 2) 2 (0, 3) 1 (1, 4) 1[[0 1 0 1 0] [1 1 2 0 1]]
正如@dmcc所指出的,你遗漏了逗号,这使得corpus
只有一个文档。