自然语言处理中的分词结果,数字图像处理中的分割识别结果,它们通常有着不一样个数的单元,当我们需要逐个处理这些单元数据的时候如果全部导入MATLAB会占用大量内存,甚至卡死。
这里推荐使用MongoDB数据库来储存数据,前面的文章中介绍过MySQL数据库,适合于结构统一、形式一致的数据,不适合这里描述的情况。
MongoDB的安装是非常方便的,不用Google就可以找到详细安装步骤。安装完成后新建数据库、新建集合,就可以导入各种数据源,包括但不限于csv、json、xls...
数据成功导入之后就可以进入MATLAB环境中操作了,先安装MongoDB交互工具箱,可以点击Add-Ons搜索Database Toolbox interface for MongoDB后点击安装,也可以在这里下载:https://pan.baidu.com/s/1YZc6sEmZeU8FG59ypq7s8w 提取码:jb2n
安装好工具箱之后就可以操作MongoDb里面的数据了,这里举一个小栗子
server = "127.0.0.1";
port = 27017;
dbname = "mongo";
% 连接MongoDb
conn = mongo(server,port,dbname);
% 检查是否连接成功
isopen(conn)
collection = "qu";
sortquery = '{"_id":1.0}';
index = 0;
map = containers.Map;
word = "";
% 循环读取、逐个处理
while 1
doc = find(conn,collection,'Sort',sortquery,'Skip',index,'Limit',1);
index = index + 1;
if isempty(doc)
break;
end
% 可以是更复杂的操作
for i=1:length(doc.tag)
word = [word;doc.tag(i).word];
if isKey(map,doc.tag(i).tag)
map(doc.tag(i).tag)=map(doc.tag(i).tag)+1;
else
map(doc.tag(i).tag)=1;
end
end
% pretend一些操作
mongoquery = ['{"v":"' doc.v '"}'];
documents = find(conn,collection,'Query',mongoquery)
% 更新刚刚处理过的doc
findquery = ['{"v":"' doc.v '"}'];
updatequery = '{$set:{"treated":2}}';
% 更新受影响的doc个数
n = update(conn,collection,findquery,updatequery)
end
% 关闭连接
close(conn);
% 对出来结果进行展示
tags = keys(map);
plot(cell2mat(values(map)))
xticks(1:length(tags))
xticklabels(tags')
wordcloud(word)