MongoDB+K表示集群

2024-09-24 06:33:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用MongoDB作为数据存储,并希望将文档的“集群”配置存储在单独的集合中。在

所以在一个集合中,我有我的原始对象集,而在我的第二个集合中,它有

kMeansCollection: {
     1: [mongoObjectCopy1], [mongoObjectCopy2]...
     2: [mongoObjectCopy3], [mongoObjectCopy4]... 
   }

我在这里跟踪文本集群的K-means实现,http://tech.swamps.io/recipe-text-clustering-using-nltk-and-scikit-learn/,但我很难考虑如何将输出绑定回MongoDB。在

示例(取自链接):

^{pr2}$

var“tags”是运行algo所需的输入。 它必须是数组的形式,但当前标记返回一个对象数组(因此我必须从查询中提取文本值)

然而,在以5种方式神奇地聚集了我的集合之后,我如何才能将它们与来自mongo的各自的对象条目重新组合起来呢?在

我只从对象的一个属性输入特定的文本内容。在

非常感谢!在


Tags: 数据对象文档文本httpmongodb集群数组
2条回答

有效的方法是使用聚合框架,使用服务器端操作创建“_id”和“tag data”列表。这也减少了通过网络发送的数据量,以及用于在客户端解码文档的时间和内存。在

您需要^{}文档并使用^{}累加器运算符返回_id列表和{}列表。当然,^{}方法提供了对聚合管道的访问。在

cursor = collection.aggregate([{
    '$group': {
        '_id': None, 
        'ids': {'$push': '$_id'}, 
        'tags': {'$push': '$tag-data'}
    }
}])

然后使用^{}上的^{}方法检索数据,因为我们按None分组,因此光标只保存一个元素。在

^{pr2}$

之后,只需调用函数并^{}结果。在

clusters = cluster_text(data['tags'])
doc_clusters = zip(data['ids'], clusters)

您需要为文档提供一些标识符。在查询中包含_id字段可能是个好主意,这样您就有了一个唯一的文档标识符。然后可以创建ids和{}的并行列表。在

docs = collection.find({}, {'tag_data': 1, '_id': 1})
ids = [doc['_id'] for doc in docs]
tags = [doc['tag_data'] for doc in docs]

然后对标记数据调用cluster函数。在

^{pr2}$

并且zip结果返回ids。在

doc_clusters = zip(ids, clusters)

从这里开始,您已经构建了(_id, cluster)的元组,这样就可以更新mongo文档上的集群标签。在

相关问题 更多 >