我是NLTK的新手,在创建用于评论的分类器时遇到了麻烦。
我不能理解当作为输入传递的数据的形状是(10000,1)时,转换后的数据的形状是1*1稀疏矩阵。我已经对原始审查数据进行了一点处理。像删除停用的单词,词干和删除标点符号。
我需要帮助找出问题所在,如果需要更多详细信息来查找问题,请让我知道。
发布于 2017-12-10 08:15:04
根据截图的格式,看起来X_train1
实际上是一个熊猫数据框。问题是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
类)接受一个文档数组。从documentation
CountVectorizer:
将文本文档的集合转换为标记计数矩阵
更具体地说,考虑fit()
的参数定义
unicode raw_documents:生成字符串、
或文件对象的迭代器。
如果只是尝试传入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>
此输出与预期输入更一致。
https://stackoverflow.com/questions/47736659
复制