CountVectorizer转换后出现意外的稀疏矩阵

时间:2017-12-10 07:04:26

标签: python python-3.x nltk countvectorizer

我是NLTK的新手,在创建评论分类器方面遇到了麻烦。 enter image description here

当作为输入传递的数据形状(10000,1)时,我无法理解变换数据的形状如何是1 * 1稀疏矩阵 我已经处理了一些原始评论数据。喜欢删除停用词,阻止和删除标点符号。

我在遇到问题的地方需要帮助,如果需要更多详细信息,请告诉我。

1 个答案:

答案 0 :(得分:1)

看起来X_train1实际上是一个Pandas数据框,基于截图的格式。问题是Description是一列单词列表(可能长度不等)。像这样:

X = np.array([['alpha','beta'],['theta','theta','gamma'],['delta','delta']])
X_train1 = pd.DataFrame(X, columns=["Description"])

X_train1
             Description
0          [alpha, beta]
1  [theta, theta, gamma]
2         [delta, delta]

X_train1.shape # (3,1)

所以你有10,000行单词列表(形状(nrow, 1)) 但是CountVectorizer(假设您正在使用sklearn类)需要一组文档。来自documentation

  

CountVectorizer :将文本文档集合转换为令牌计数矩阵

更具体地说,考虑fit()的参数定义:

  

raw_documents :一个可生成str,unicode或文件对象的iterable。

如果您只是尝试传递X_train1,则表示您没有提供预期的输入 - 您传入的数据框包含一个包含字符串列表对象的列。你应该期望得到奇怪的输出。

假设X_train1中的每一行代表一个文档,请尝试加入每行的单词列表,然后转到CountVectorizer

X = X_train1.Description.apply(lambda row: ' '.join(row))
ctvec = CountVectorizer()
ctvec.fit_transform(X) # combine fit(X) and transform(X)

输出:

<3x5 sparse matrix of type '<class 'numpy.int64'>'
    with 5 stored elements in Compressed Sparse Row format>

此输出更符合预期输入。