Je voudrais extraire des mots-clés d'une phrase à partir d'une liste de mots-clés.
J'ai réussi à extraire les mots exacts
cosdis(word2vec('allergy'), word2vec('allergic')) Out[861]: 0.8432740427115677
Est-il possible d'extraire des mots qui ont de bons similarité avec la liste de mots-clés donnée, c'est-à-dire que la similitude cosinus entre deux mots est> 0,8
Par exemple, le mot-clé dans la liste donnée est 'allergie' et maintenant la phrase s'écrit
' une réaction allergique sévère aux noix dans le repas qu'elle avait consommé. »
la distance cosinus entre« allergie »et« allergique »peut être calculée comme suit
[word for word in Sentence if word in set(list_of_keywords)]
Comment extraire aussi «allergique» de la phrase en fonction de la similitude cosinus?
3 Réponses :
[word for word in Sentence if cosdis(word2vec('allergy'), word2vec(word)) > 0.8]
['allergic']
exactement ce que je voulais dire :)
Le sentiment est mutuel :) D'ailleurs, bien que votre fonction word2vec
fasse ce qui est nécessaire, OP utilise peut-être ce mot2vec
@RickM. pas vraiment, OP a mentionné les mêmes méthodes dans les commentaires! J'ai juste deviné! : p
Merci beaucoup pour les codes et l'idée (@RickM.). Cela aide beaucoup: D
La distance des mots doit être vérifiée par rapport à tous les mots-clés et ne sera incluse que lorsque le seuil est atteint pour l'un des mots-clés. J'ai mis une condition supplémentaire dans la compréhension de liste originale avec une compréhension de liste imbriquée qui fait exactement cela.
def distance(words): return cosdis(word2vec(words[0]), word2vec(words[1])) threshold = 0.8 keywords = set(list_of_keywords) matches = [word for word in Sentence if word in keywords and any([distance(word, keyword) > threshold for keyword in keywords])]
Merci d'avoir répondu
Puisque vous savez quel mot vous comparez à l'ensemble, pourquoi ne pas mettre un contrôle de seuil sur la valeur retournée de
cosdis
et obtenir le mot si la valeur retournée est supérieur au seuil?Publiez votre méthode
cosdis ()
stackoverflow.com/a/29485365/10447069
C'est vrai! Merci