2014-01-09 41 views
0

我有一個bot幫助網站上的版主,我想添加人工智能。這是基於馬爾科夫鏈。問題是我希望所有的數據字符串都被bot記錄下來,然後用在Markov鏈中。基本上,機器人正在從它從用戶交談中收集的聊天數據中學習。如何使用節點將流式數據附加到文件中的特定位置並檢索?

我目前所面對的是:

​​

這將創建消息(段),像這樣的列表:

"Shall I play Ellie Goulding - Hanging On (Sound Remedy Remix)", 
"Or Mango - Sayonara", 
"mmn mangos", 
"What should I choose", 
"only because you're thinking food", 
"how can you expect a woman to be happy if a man persists in treating her like a perfectly normal human being", 

什麼,我想它做的是要做到這一點:

module.exports = { 
    data: [ 
     "Shall I play Ellie Goulding - Hanging On (Sound Remedy Remix)", 
     "Or Mango - Sayonara", 
     "mmn mangos", 
     "What should I choose", 
     "only because you're thinking food", 
     "how can you expect a woman to be happy if a man persists in treating her like a perfectly normal human being", 
    ] 
} 

這樣所有的消息都保存在data:[]數組中。這樣我可以調用數據的靜態視圖到時候做來使用AI機器人:

Data = require('./Data').data; 
sentences = []; 
sentences = Data; 

是有辦法做到這一點?也可以通過Data.js文件進行直播,以便在發送到文件時將所有新消息添加到句子數組中,這樣我的機器人就不斷學習。如果沒有,我可以設置它,以便所有的消息都保存到data.js文件並推送到句子文件,這樣,如果殭屍程序崩潰/重新連接,它可以重新加載data.js文件中的數據和從它離開的地方回來。

回答

0

你可以「初始化」js文件,然後插入你的數據 一個實現可能是這樣的。

var fs = require("fs"); 
var fcontent = 'module.exports = {data: []}'; 

fs.writeFile('Data.js', fcontent, function (err) { 
    var offset= 25; 
    var logit = fs.createWriteStream('Data.js', {flags: 'r+',start:offset}); 

    function beforeRead(cbk){ 
     logit.write("]};"); 
     cbk(); 
    } 

    function message(msg){ 
     logit.write((offset==25) ? ('"'+msg+'"') : (',"'+msg+'"')); 
     offset+=msg.length; 
    } 
    //chatEvent 
    message("I'm a bot"); 
    message("I can't hurt you"); 
    beforeRead(function(){ 
     //here we have a correct syntax js file 
    }); 
}); 

即使您可以在if中注入初始寫入,但卻會失去可讀性。謹慎行事,這可能是危險的(scape strings,catch errors,...)

相關問題