gpt4 book ai didi

mongodb - 蒙哥 : count the number of word occurrences in a set of documents

转载 作者:IT老高 更新时间:2023-10-28 13:09:49 26 4
gpt4 key购买 nike

我在 Mongo 中有一组文档。说:

[
{ summary:"This is good" },
{ summary:"This is bad" },
{ summary:"Something that is neither good nor bad" }
]

我想计算每个单词的出现次数(不区分大小写),然后按降序排序。结果应该是这样的:

[
"is": 3,
"bad": 2,
"good": 2,
"this": 2,
"neither": 1,
"nor": 1,
"something": 1,
"that": 1
]

知道怎么做吗?聚合框架将是首选,因为我已经在某种程度上理解它:)

最佳答案

MapReduce可能非常适合在服务器上处理文档而无需在客户端上进行操作(因为在 DB 服务器上没有拆分字符串的功能 (open issue)。

map 函数开始。在下面的示例中(可能需要更健壮),每个文档都被传递给 map 函数(作为 this)。代码查找 summary 字段,如果存在,则将其小写,在空格上拆分,然后为找到的每个单词发出 1

var map = function() {  
var summary = this.summary;
if (summary) {
// quick lowercase to normalize per your requirements
summary = summary.toLowerCase().split(" ");
for (var i = summary.length - 1; i >= 0; i--) {
// might want to remove punctuation, etc. here
if (summary[i]) { // make sure there's something
emit(summary[i], 1); // store a 1 for each word
}
}
}
};

然后,在 reduce 函数中,它将 map 函数找到的所有结果相加,并为 emit< 的每个单词返回一个离散的总数上面写的。

var reduce = function( key, values ) {    
var count = 0;
values.forEach(function(v) {
count +=v;
});
return count;
}

最后,执行 mapReduce:

> db.so.mapReduce(map, reduce, {out: "word_count"})

您的样本数据的结果:

> db.word_count.find().sort({value:-1})
{ "_id" : "is", "value" : 3 }
{ "_id" : "bad", "value" : 2 }
{ "_id" : "good", "value" : 2 }
{ "_id" : "this", "value" : 2 }
{ "_id" : "neither", "value" : 1 }
{ "_id" : "or", "value" : 1 }
{ "_id" : "something", "value" : 1 }
{ "_id" : "that", "value" : 1 }

关于mongodb - 蒙哥 : count the number of word occurrences in a set of documents,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16174591/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com