从 ElasticSearch 索引在 Python 中创建术语文档矩阵

Creating a term-document matrix in Python from ElasticSearch index

这里是 ElasticSearch 新手。我有一组文本文档,我通过 Python ElasticSearch 客户端使用 ElasticSearch 对其进行了索引。现在我想使用 Python 和 scikit-learn 对文档进行一些机器学习。我需要完成以下任务。

  1. 使用 ElasticSearch 分析器处理文本(词干提取、小写等)
  2. 从索引中检索已处理的文档(或已分析的标记)。
  3. 将处理后的文档转换为Term-Document Matrix进行分类(可能使用scikit-learn中的CountVectorizer)。或者,也许有一些方法可以直接从 ElasticSearch 检索 TDM。

我在思考解决这个问题的正确方法时遇到了麻烦,而且 ElasticSearch 似乎没有任何简单的实现。

例如,我可以只从ES中检索未分析的文档,然后在Python中处​​理文档,但我想利用ES的分析器。每次从 ES 查询一组文档时,我都可以使用 ES 的分析器,但这似乎做了两次,因为它应该已经被分析并存储在索引中。或者,我想我可以告诉 ES 检索每个文档的术语向量,并从每个文档的结果中手动提取标记和计数,然后在给定标记和计数的情况下手动编写 TDM。这似乎是目前我能想到的最直接的方式。

是否有任何更简单或更直接的途径可以将已分析文本的 TDM 从 ES 索引获取到 Python 以使用机器学习包?

我最近添加了一个 tutorial 关于我如何使用 Python 做到这一点的 tutorial

完成教程后阅读:

如果您正在做一些大规模的事情,我建议您查看 Apache Spark。稀疏矩阵可以用作 Spark's MLlib's RowMatrix RDD 的输入。我想很快就会有 Python 支持。