Я пытаюсь найти ближайших соседей в наборе описаний. Описания обычно содержат 1-15 слов, которые я токенизирую, используя TfIdfVectorizer scikit. Затем, с тем же векторизатором, я подгоняю базовое описание. Тем не менее, кажется, что векторизатор делит эту на отдельные символы, а не слова, потому что в результате разреженная матрица имеет форму [число букв в описании базы х количества уникальных слов в корпусе]TfIdfVectorizer делит слова на отдельные символы?
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 индексов, вместо этого я получаю 12 списков по 10 элементов каждый.