我将MongoDB用作数据存储,并希望将文档的“群集”配置存储在单独的集合中。
因此,在一个集合中,我将拥有原始的对象集,而在第二个集合中,它将具有
kMeansCollection: {
1: [mongoObjectCopy1], [mongoObjectCopy2]...
2: [mongoObjectCopy3], [mongoObjectCopy4]...
}
我在这里实施了用于文本聚类的K-means,http://tech.swamps.io/recipe-text-clustering-using-nltk-and-scikit-learn/,但是我很难考虑如何将输出绑定回MongoDB。
一个例子(摘自链接):
if __name__ == "__main__":
tags = collection.find({}, {'tag_data': 1, '_id': 0})
clusters = cluster_texts(tags, 5) #algo runs here with 5 clusters
pprint(dict(clusters))
var“标签”是算法运行所需的输入。它必须采用数组形式,但是当前标签返回一个对象数组(因此,我必须从查询中提取文本值)
但是,在以5种方式神奇地聚集了我的收藏集之后,如何将它们与来自mongo的相应对象条目重新统一?
我只是从对象的一个属性中提供特定的文本内容。
非常感谢!
您将需要一些文档标识符。_id
在查询中包括该字段可能是一个好主意,这样您就可以拥有唯一的文档标识符。然后,您可以创建平行的列表ids
和tag_data
。
docs = collection.find({}, {'tag_data': 1, '_id': 1})
ids = [doc['_id'] for doc in docs]
tags = [doc['tag_data'] for doc in docs]
然后在标签数据上调用集群函数。
clusters = cluster_text(tags)
并将zip
结果返回给ids
。
doc_clusters = zip(ids, clusters)
在这里,您已经建立了元组,(_id, cluster)
以便您可以更新mongo文档上的集群标签。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句