Extraire les mots les plus importants de L'index Elasticsearch, en utilisant le client Node JS

Inspiré par le texte suivant git et vidéo j'essaie de créer une recherche conceptuelle pour mon domaine, en utilisant word2vec comme synonymes filtre pour mes requêtes.

donnant la structure de document suivante:

{
        "_index": "conversations",
        "_type": "conversation",
        "_id": "103130",
        "_score": 0.97602403,
        "_source": {
          "context": "Welcome to our service, how can I help? do you offer a free trial",
          "answer": "Yes we do. Here is a link for our trial account."
        }
      }

je voudrais répéter l'ensemble de l'index et extraire les mots avec "plus significatif" (tf-idf ?).

Une fois que j'aurai la liste des 100 premiers mots, je vais créer un filtre de synonymes en utilisant word2vec.

ma question est: comment cela peut-il être fait en utilisant es Node client JS?

22
demandé sur David Lemon 2016-11-14 17:10:01

2 réponses

tf-Idf de documents est généralement utilisé pour trouver la similarité des documents (en utilisant la similarité cosinus, la distance euclidienne etc)

TF ou terme fréquence indique la fréquence d'un mot dans le document. Plus grande est la fréquence du mot, plus grande est l'importance du mot.

Idf ou inverse la fréquence de document indique le nombre de documents(de la collection d'entrée) qui contient le mot. Plus rare le mot, plus grande est l'importance du mot.

si nous utilisons juste TF pour construire le vecteur de document, nous sommes enclins à spam parce que les mots communs (par exemple: pronoms, conjonctions, etc) gagnent plus d'importance. Par conséquent, la combinaison de td-idf donne un meilleur sens et indique la signification réelle du mot. Ou en d'autres termes, pour classer les mots d'un document en fonction de la signification, il n'est pas conseillé de calculer juste le tf de chaque mot, au lieu d'utiliser TF-idf sur l'ensemble de la collection d'entrées et le rang basé sur la valeur TF-idf qui montre la signification réelle de mot.

jetez un oeil à sample Python solution pour calculer la valeur TF-idf pour la liste de tweets json et trouver les tweets similaires.

Github Sample

1
répondu GoT 2017-01-04 10:07:32

Elastic Search fournit une agrégation de données très spécifique qui vous permet d'extraire des "mots-clés significatifs" pour un sous-ensemble de votre Index [1]

pour élaborer ce qui est significatif, vous avez besoin d'un premier plan (le sous-ensemble de documents que vous voulez analyser) et d'un arrière-plan (le corpus entier) .

comme vous pouvez vous en rendre compte, pour identifier un terme comme significatif, vous devez comparer comment apparaît dans votre corpus par rapport à quelque chose d'autre ( par exemple un corpus Générique). Vous pouvez trouvez des archives qui contiennent une sorte de partition générale IDF pour des termes (Reuter corpus, Brown corpus, wikipedia ect ect). Ensuite, vous pouvez : Ensemble de documents de premier plan - > votre corpus Arrière-plan d'ensemble de documents -> générique corpus

[1] https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-significantterms-aggregation.html

1
répondu Alessandro Benedetti 2017-07-25 09:25:19