2016-07-22 27 views
0

私は一連の説明の中で最も近い隣人を見つけようとしています。説明には、通常、scikitのTfIdfVectorizerを使用してトークン化している1-15語が含まれています。次に、同じベクタライザを使用して、ベースの説明に合っています。しかし、得られた疎な行列は[コーパスにおけるユニークワードのベース記述x個の文字の数が】形状であるので、ベクトル化は、むしろ言葉よりも、別の文字にこれを分割すると思わTfIdfVectorizerは単語を1文字に分割しますか?

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のリストが得られます。

答えて

0

私が過ごした時間は、答えはかなり簡単でした。私はリストにdescriptionをラップし、期待される10の結果を得ました:

input_matrix = vectorizer.transform([description]) 
関連する問題