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
cosdiset 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