【问题标题】:TfIdfVectorizer divides words to single characters?TfIdfVectorizer 将单词划分为单个字符?
【发布时间】:2016-11-26 21:22:10
【问题描述】:

我正在尝试在一组描述中找到最近的邻居。描述通常包含 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 个索引,而不是我得到 12 个列表,每个列表包含 10 个元素。

【问题讨论】:

    标签: python scikit-learn


    【解决方案1】:

    是的,就我花在这上面的时间而言,答案很简单。我将description 包装在一个列表中,得到了预期的 10 个结果:

    input_matrix = vectorizer.transform([description])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-18
      • 2011-10-17
      • 1970-01-01
      • 2021-09-07
      • 2011-06-12
      相关资源
      最近更新 更多