[英]How to append streaming data to a specific location in a file using node and retrieving?
我有一個機器人可以幫助網站管理員,我想添加人工智能。 這基於馬爾可夫鏈。 問題是我希望所有數據字符串都由機器人記錄下來,然后在馬爾可夫鏈中使用。 本質上,機器人是從它從用戶交談中收集的聊天數據中學習。
我目前所擁有的是:
var fs = require('fs');
var logit = fs.createWriteStream('Data.js', {'flags': 'a'});
chatEvent(function(data) {
data.message = stringFix(data.message); //just fixes punctuation
a = JSON.stringify(data.message);
logit.write(a + ',');
});
這將創建消息列表(摘要),如下所示:
"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:[]數組中。 這樣,我可以在使用機器人到達機器人時調用數據的靜態視圖,方法是:
Data = require('./Data').data;
sentences = [];
sentences = Data;
有沒有辦法做到這一點? 還可以從Data.js文件實時流式傳輸,以便在將其發送到文件時將所有新消息添加到句子數組中,這樣我的機器人就可以不斷學習。 如果沒有,我可以進行設置,以便將所有消息都保存到data.js文件中並推送到句子文件中,這樣,如果漫游器崩潰/重新連接,它可以從data.js文件中重新加載數據,然后從停下來的地方撿起來。
您可以“初始化” 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中注入初始寫入,但也會失去可讀性。 謹慎行事,這可能很危險(字符串,捕獲錯誤等)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.