0

我是一名 Java 开发人员,并且是 Matlab 的新手。我有一个类似的文件:

Label_X sdfasf sadfl  asdf a fasdlkjf asd 
Label_Y lmdfgl ldfkgldkj dkljdkljdlkjdklj
Label_X sfdsa sdfsafasfsafasf 234|3#ert 44
Label_X sdfsfdsf____asdfsadf _ dsfsd
Label_Y !^dfskşfsşk o o  o o 4545

我想要的是:

一个向量(数组)包括标签:

Label Array:
Label_X
Label_Y
Label_X
Label_X
Label_Y

和一个列表(对于我们的示例有五个元素),列表的每个元素都有分隔字符串的元素大小。我是说

Element Number   Value(List of strings)                Element size of value list
--------------   ----------------------                --------------------------
1                sdfasf,sadfl,asdf,a,fasdlkjf,asd      6 
2                lmdfgl,ldfkgldkj,dkljdkljdlkjdklj     3
3                sfdsa,sdfsafasfsafasf,234|3#ert,44    4
4                sdfsfdsf____asdfsadf,_,dsfsd          3
5                !^dfskşfsşk,o,o,o,o,4545              6

我知道使用 Java 很简单,但我不知道如何在 Matlab 中实现它。

PS:我正在做的就是这样。我有一个文本文件,其中包含人们的推文。第一个词是行中的标签,其他词是与该标签相关的对应词。我将有一个标签列表和另一个列表列表,其中包含有关每个标签的单词。

4

2 回答 2

0

这可能不是最佳的,但它应该可以解决问题

all = textread('test.txt', '%s', 'delimiter', '\n','whitespace', '');
List = cell(size(all));
for i = 1:size(all)
    [List{i}.name remain]    = strtok(all{i}, ' ');
    [List{i}.content remain] = strtok(remain, ' ');
    j = 0;
    while(size(remain,2)>0)
        j = j+1;
        List{i}.content = [List{i}.content temp ','];
        [temp remain] = strtok(remain, ' ');
    end
    List{i}.size = j;
end
于 2012-12-10T22:45:59.657 回答
0

Matlab 中最好的构造是单元格。单元格可以包含一个任何类型的对象,并且通常可以在数组本身中找到。像这样的东西应该可以工作,并且非常理想(假设您不期望超过 10K 行);

output=cell(10000,1);     %This should be set to the maximum number of lines you ever expect to have
output_names=cell(size(output));
output_used=false(size(output));
fid=fopen('filename.txt','r');
index=0;
while ~feof(fid)
   index=index+1;
   line=fgets(fid);
   splited_names=regexp(line,'\w*','split');
   output{index}=splited_names(2:end);
   output_names{index}=splited_names(1);
   output_used(index)=true;
end
output=output(output_used);
output_names=output_names(output_used);
于 2012-12-11T02:16:40.757 回答