I'm trying to use TF-IDF pour trier les documents en catégories. J'ai calculé le tf_idf pour certains documents, mais maintenant quand j'essaie de calculer la similarité Cosinus entre deux de ces documents que je reçois un retraçage dit:Cosinus Similarité des vecteurs de différentes longueurs?
#len(u)==201, len(v)==246
cosine_distance(u, v)
ValueError: objects are not aligned
#this works though:
cosine_distance(u[:200], v[:200])
>> 0.52230249969265641
est-tranchage le vecteur de telle sorte que len (u) == len (v) la bonne approche? Je penserais que la similarité de cosinus fonctionnerait avec des vecteurs de différentes longueurs.
J'utilise this function:
def cosine_distance(u, v):
"""
Returns the cosine of the angle between vectors v and u. This is equal to
u.v/|u||v|.
"""
return numpy.dot(u, v)/(math.sqrt(numpy.dot(u, u)) * math.sqrt(numpy.dot(v, v)))
également - est l'ordre des valeurs tf_idf dans les vecteurs importants? Devraient-ils être triés - ou cela n'a-t-il pas d'importance pour ce calcul?
Les vecteurs que je passe à la fonction cosine_distance sont des listes Python des valeurs tf_idf. v [5] == [,0060830126968545294, 0,00048241996565891193, ,0020712248617478965, ,0110036199241575, ,0110036199241575] Vous dites que les questions d'ordre - quelle est la bonne façon de trier le contenu du vecteur (smallest-> plus grand, de l'ordre de mots dans le document?) – erikcw
Vous devez affecter un ordre global aux mots. Si la barre apparaît avant foo dans doc2 alors la valeur tf_idf de la barre devrait toujours être le premier élément. – Pace