使用Node JS客户端从Elasticsearch索引中提取最重要的单词

Shl*_*rtz 23 javascript node.js elasticsearch word2vec

受以下git视频的启发,我正在尝试为我的域创建概念搜索,使用word2vec我的查询作为同义词过滤器.

给出以下文档结构:

{
        "_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."
        }
      }
Run Code Online (Sandbox Code Playgroud)

我想迭代整个索引并提取"更高有效"(tf-idf?)的单词.
一旦我将拥有前100个单词列表,我将使用创建一个同义词过滤器word2vec.

我的问题是:如何使用ES Node JS客户端完成这项工作?

GoT*_*GoT 1

文档的 Tf-Idf 通常用于查找文档的相似度(使用余弦相似度、欧氏距离等)

Tf 或术语频率表示文档中单词的频率。单词的出现频率越高,则该单词的重要性越高。

IDF 或逆文档频率表示包含该单词的文档(输入集合)的数量。单词越罕见,单词的重要性越高。

如果我们只使用 TF 构建文档向量,我们很容易收到垃圾邮件,因为常见单词(例如:代词、连词等)变得更加重要。因此,td-idf 的组合给出了更好的含义并表明了该词的真正含义。或者换句话说,要根据重要性对文档中的单词进行排名,不建议仅计算每个单词的 tf,而是在整个输入集合上使用 tf-idf,并根据显示单词的 tf-idf 值进行排名关键词的真正意义。

查看示例 python 解决方案,用于计算 json 推文列表的 tf-idf 值并查找相似的推文。

GitHub 示例