TfIdfVectorizer将单词分为单个字符?

时间:2016-07-22 21:25:40

标签: python scikit-learn

我试图在一组描述中找到最近的邻居。描述通常包含1-15个单词,我使用scikit的TfIdfVectorizer进行标记。然后,使用相同的矢量化器,我拟合基本描述。然而,似乎矢量化器将这一个除以单独的字符而不是单词,因为得到的稀疏矩阵具有形状[基本描述中的字母数x语料库中唯一字的数量]

descriptions = 'total assets'

products = LoadData('C:/dict.csv', dtype = {'Code': np.str, 'LocalLanguageLabel': np.str})
products = products.fillna({'LocalLanguageLabel':''})

from sklearn.feature_extraction.text import TfidfVectorizer
vectorizer = TfidfVectorizer(token_pattern=r'\b\w+\b')
#tried the below two as well
#vectorizer = TfidfVectorizer()
#vectorizer = TfidfVectorizer(token_pattern=r'\b\w+\b', analyzer = 'word')
dict_matrix = vectorizer.fit_transform(products['LocalLanguageLabel'])
input_matrix = vectorizer.transform(description)

from sklearn.neighbors import NearestNeighbors
model = NearestNeighbors(metric='euclidean', algorithm='brute')
model.fit(dict_matrix)   

distance, indices = model.kneighbors(input_matrix,n_neighbors = 10)

当我打印input_matrix时,这就是我得到的(你可以猜测索引与' totalassets'中的字符有关):

print(input_matrix)
(0, 33478)  1.0 #t
(1, 24021)  1.0 #o
(2, 33478)  1.0 #t
(3, 2298)   1.0 #a
(4, 20272)  1.0 #l
(6, 2298)   1.0 #a
(7, 30874)  1.0 #s
(8, 30874)  1.0 #s
(9, 11386)  1.0 #e
(10, 33478) 1.0 #t
(11, 30874) 1.0 #s

<12x39859 sparse matrix of type '<class 'numpy.float64'>'
with 11 stored elements in Compressed Sparse Row format>

这是预期的吗?我期待10个距离和10个指数,而不是每个10个元素的12个列表。

1 个答案:

答案 0 :(得分:0)

是的,答案很简单,因为我花了很多时间。我将description包装在一个列表中,得到了预期的10个结果:

input_matrix = vectorizer.transform([description])