如何果要分析海量訊息的熱門關鍵字, 該怎麼做?


  • Lv 1

    假設要分析已存在資料庫的 Twitter 訊息(假設 1億條)中熱門中文關鍵字的前10名

    要如何下 aggregation ?


  • Lv 1

    Twitter 訊息記錄哪些資料呢?


  • Lv 1

    @Amber

    假設 document 就訊息和日期

    {

      "message":"你好這是萌闊論壇, 今天要...."

      "date": "2017/03/06 02:52:00"

    }

    如何統計 message 的"中文關鍵字"(如:萌闊)而不是message一整句, 


  • Lv 1

    應該無法直接用MongoDB下指令去統計關鍵字

    每個句子要先經過處理(像是分詞之類的處理),然後將關鍵字記錄在MongoDB

    (以下提出一種MongoDB紀錄的範例,不一定是最好的,但是是可以實現)

    可紀錄成

    {
      "message":"你好這是萌闊論壇, 今天要...."
      "date": "2017/03/06 02:52:00"
      "keyword":"萌闊,論壇,XXXX"
    }

    在mongodb shell可用MapReduce的方式查詢

    db.getCollection('Twitter').mapReduce(
        function(){ 
            var key= this.keyword.split(',')
            for (var i=0;i<key.length;i++)
               emit(key[i],1);
                },
        function(key,values) 
        {
            return Array.sum(values)
        },
        {
            out:"Twitter  keyword"        //表輸出
        }
    ).find({}).sort({'value':-1}).limit(10) 

    或者計算在前端程式寫,撈出資料後計算關鍵字出現的數量

    一般來說MongoDB端不建議有太多計算,計算最好都在前端程式做


  • 註冊用戶

    MongoDB是資料庫,並不是資料分析引擎。

    而這個問題屬於NLP (Natural Language Processing) 中的中文斷詞領域,

    本帖下載内容已隐藏,请登入以查看隐藏内容!
    有中文分詞引擎的比較。

    如果要快速統計熱詞數量,建議可以使用Hadoop mapreduce來加快統計速度。


  • 註冊用戶

    疑~~ Twitter 不是流行用 # 關鍵字嗎?先撈 # 的來統計比較快!!

    要自行斷詞得用自然語言的深度學習了


  • Lv 1

    嗯. 目前結論看來, 我還是需要先進行中文分詞, 再做後續處理


  • Lv 1

    那如果我已經有一些預設的關鍵字(如:論壇, 萌闊)要進行統計出現次數, 而不預先做中文分詞

    要怎麼做呢?


  • 註冊用戶

    @22265

    用 MapReduce 來做吧~~

    參考看看下面這個,用法和你的狀況類似,在 blog 文章裡面統計標籤出現的次數。

    /**  *統計Blog中標籤出現的次數,採用MapReduce進行實時計算  
    * @param callback --> result: _id(tag name), value(occupied count)  
    */ exports.tagStatistical = function(callback){     
    var o = {};
        o.map = function () {
    this.tags.forEach(function(z){ //z即是某個tag
    emit(z,1); //對某個tag出現一次就計數一次
    });
    }  o.reduce = function (k, values) {
    var total=0;
    for(var i=0;i<values.length;i++){
    total+= values[i];
    }
    return total;

    } Blog.mapReduce(o, function(err,results){
    if(err){
    console.log("mapReduce err:"+err);
    }
    console.log(results);
    callback(results);
    })
    }

  • Lv 1

    @kevinl

    謝謝回覆, 那段 nodejs 如果改用 shell 怎麼下呢?


  • 註冊用戶

    參考一下這個章節

    本帖下載内容已隐藏,请登入以查看隐藏内容!


  • Lv 1

    @kevinl

    有使用 mapReduce 做出關鍵字統計, 有辦法在統計結果後按數值排序嗎?

    還是說只能針對結果進行第二次查詢


登录后回复
 

与 萌阔论坛 的连接断开,我们正在尝试重连,请耐心等待