2016-04-17 11 views
2

ich folgende Fehlermeldung auf den Anruf erhalten cosine_similarityscikit Typ Fehler lernen nur Integer-Arrays mit einem Element kann auf einen Index umgewandelt werden

numerator = sum(a*b for a,b in zip(x,y)) 
TypeError: only integer arrays with one element can be converted to an index 

Ich versuche, ein Stichwort-Schlüsselwort Kookkurrenzmatrix von zu erhalten die von CountVectorizer zurückgegebene Dokument-Schlüsselwort-Matrix.

Ich glaube, es gibt etwas, das mag nicht über den Datentyp, den ich es überlasse, aber ich bin mir nicht sicher, was genau das Problem ist. Hier ist n vom Typ scipy.sparse.csc.csc_matrix und y ist vom Typ scipy.sparse.csr.csr_matrix

documents = (
    "The sky is blue", 
    "The sun is bright", 
    "The sun in the sky is bright", 
    "We can see the shining sun, the bright sun" 
) 

countvectorizer = CountVectorizer() 
y = countvectorizer.fit_transform(documents) 
n = y.T.dot(y) 
x = n.tocsr() 
x = x.toarray() 
numpy.fill_diagonal(x, 0) 

result = cosine_similarity(x, "None") 
+0

Erste Schätzung wäre die spärliche Darstellung, die Probleme verursacht, haben Sie versucht, die Matrizen in die nicht-spärliche Darstellung zu konvertieren? – ncfirth

+0

@ncfirth Mit nicht-sparse meinen Sie zu numpy Array? – newdev14

+0

Yeah [weitere Charaktere] – ncfirth

Antwort

1

Mit dem sklearncosine_similarity dieses Codesegment läuft und gibt eine vernünftige Antwort suchen.

from sklearn.feature_extraction.text import CountVectorizer 
from sklearn.metrics.pairwise import distance_metrics 

documents = (
    "The sky is blue", 
    "The sun is bright", 
    "The sun in the sky is bright", 
    "We can see the shining sun, the bright sun" 
) 

countvectorizer = CountVectorizer() 
y = countvectorizer.fit_transform(documents) 
n = y.T.dot(y) 
x = n.tocsr() 
x = x.toarray() 
np.fill_diagonal(x, 0) 
cosine_similarity = distance_metrics()['cosine'] 
result = cosine_similarity(x, x)