2
votes

Python: vérifiez si la phrase contient un mot de la liste (avec correspondance floue)

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?


4 commentaires

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


3 Réponses :


0
votes
[word for word in Sentence if cosdis(word2vec('allergy'), word2vec(word)) > 0.8]

0 commentaires

3
votes
['allergic']

4 commentaires

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



1
votes

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])]


1 commentaires

Merci d'avoir répondu