1

我是 NLTK 的新手,无法为评论创建分类器。 在此处输入图像描述

当作为输入传递的数据的形状为 (10000,1) 时,我无法理解转换后的数据的形状如何是 1*1 稀疏矩阵。我对原始评论数据进行了一些处理。就像删除停用词、词干和删除标点符号一样。

我需要关于哪里出错的帮助,如果需要更多详细信息来查找问题,请告诉我。

4

1 回答 1

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 行单词列表(带有 shape (nrow, 1))。
但是CountVectorizer(假设您正在使用sklearn该类)需要一组文档。从文档中:

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

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

raw_documents:一个产生 str、unicode 或文件对象的迭代。

如果您只是尝试并传入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>

该输出更符合预期输入。

于 2017-12-10T08:15:03.697 回答