Как видно из результата, матрица tf-idf действительно дает более высокий балл highway
, truck
, car
(и truck
):
tn = ['The car is driven on the road', 'The truck is driven on the highway']
vectorizer = TfidfVectorizer(stop_words = 'english')
response = vectorizer.fit_transform(tn)
terms = vectorizer.get_feature_names()
pd.DataFrame(response.toarray(), columns=terms)
car driven highway road truck
0 0.631667 0.449436 0.000000 0.631667 0.000000
1 0.000000 0.449436 0.631667 0.000000 0.631667
Что не так, это дальнейшая проверка, которую вы выполняете, выравнивая массив. Чтобы получить наивысшие оценки по всем строкам, вы могли бы вместо этого сделать что-то вроде:
max_scores = response.toarray().max(0).argsort()
np.array(terms)[max_scores[-4:]]
array(['car', 'highway', 'road', 'truck'], dtype='<U7')
Где самые высокие баллы - это имена функций, которые имеют оценку 0.63
в фрейме данных.