如何解决句子的欧几里德距离
我有一个包含 1,16,098 个句子和 30,119 个特征的 scipy 稀疏矩阵。 我想计算它们之间的欧氏距离并打印 5 个最相似的句子。
我正在使用 CountVectorizer 方法来构建词汇表并对单词进行编码。
但是我遇到了以下错误。请帮忙。刚开始用python实现NLP。
vectorizer = CountVectorizer(stop_words = 'english')
features = vectorizer.fit_transform(corpus)
print(vectorizer.vocabulary_)
features.shape
(116098,30119)
print(len(vectorizer.vocabulary_))
30119
for i in range(0,116098):
for j in features:
print(euclidean_distances(features[j],i))
IndexError Traceback (most recent call last)
<ipython-input-56-528966153c16> in <module>
1 for i in range(0,116098):
2 for j in features:
----> 3 print(euclidean_distances(features[j],i))```
~\Anaconda3\lib\site-packages\scipy\sparse\_index.py in __getitem__(self,key)
33 """
34 def __getitem__(self,key):
---> 35 row,col = self._validate_indices(key)
36 # dispatch to specialized methods.
37 if isinstance(row,INT_TYPES):
~\Anaconda3\lib\site-packages\scipy\sparse\_index.py in _validate_indices(self,key)
128 def _validate_indices(self,key):
129 M,N = self.shape
--> 130 row,col = _unpack_index(key)
131
132 if isintlike(row):
~\Anaconda3\lib\site-packages\scipy\sparse\_index.py in _unpack_index(index)
274 # not work because spmatrix.ndim is always 2.
275 raise IndexError(
--> 276 'Indexing with sparse matrices is not supported '
277 'except boolean indexing where matrix and index '
278 'are equal shapes.')
IndexError: Indexing with sparse matrices is not supported except boolean indexing where matrix and index are equal shapes.
解决方法
CountVectorizer 返回稀疏矩阵。
此实现使用 scipy.sparse.csr_matrix 生成计数的稀疏表示。
您可以将其转换为 numpy 数组以与 euclidean_distance 一起使用。
features = features.toarray()
,
你可能的意思是:
print(euclidean_distances(features[j],features[i]))
wgich 应该没有问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。