如何使用Matlab过滤文本文件

时间:2014-06-12 10:35:54

标签: matlab duplicate-removal

我有一个包含1000多个功能文本的文件。文件中的某些功能是相同的,但不同的用户以不同的方式键入它,例如:

User1输入:Google
用户2键入:谷歌(所有小写字母)
User3键入:Google,(最后逗号)

很明显,以上所有都具有相同的功能。 我的目标是过滤要素文件,以便输出只具有唯一的功能而不会有任何重复。

我需要使用Matlab来做这个,有谁知道我怎么能这样做?

它与txt文件非常相似,我有三列,行号,功能描述和功能本身:



909 job_title:non-ascii_909
910 job_title:non-ascii_910
911 job_title:non-ascii_911
912 last_name:aaron
913 last_name:adam


我已经在matlab上阅读了它,只需将文件拖到那里。我知道如何将其加载到矩阵中。

假设两个要素具有相同的字符序列,区别在于大写/小写,空格或其他字符,那么它就是重复的。

非常感谢

2 个答案:

答案 0 :(得分:0)

一种方法是读取每一行,仅解析出以下内容后的文本:(因为我理解你所写的内容,即你要删除重复项的部分)。当您阅读您感兴趣的文本时,可以将其转换为小写(如果您愿意,也可以将其转换为大写),然后删除最后的重复条目。

快速传递如何做这样的事情:

entries = {};
full_lines = {};
idx = 1;

fid=fopen('\PATH\TO\FILE.txt','r');
tline = fgets(fid);
while ischar(tline)
   full_lines(idx) = cellstr(tline);
   [tkn rem] = strtok(tline,':');
   [tkn rem] = strtok(rem,':');
   lower_case = lower(tkn);
   entries(idx) = cellstr(lower_case);

   idx = idx + 1;
   tline = fgets(fid);    
end

fclose(fid);

no_duplicates = unique(entries);
full_lines_no_duplicates = full_lines(indices);

逐行浏览您的文件,将文字存储在':'之后。在数组中全部小写,然后删除重复的值。这样您只能获得唯一值。它还存储完整的行以备不时之需,full_lines_no_duplicates变量将包含文件中的整行而不重复。

答案 1 :(得分:0)

由于您已将数据导入Matlab。我将首先循环遍历每一行,并“修复”每个功能以满足您的资格。

for i=1:length(feature_vector)
    line=feature_vector(i); //extract line from vector
    //clean 'line' data
    feature_vector(i)=line; //re-insert cleaned line to vector
end

首先,在考虑这些功能时,您似乎希望不区分大小写。要做到这一点,只需将每个功能转换为全部小写对应方式:

line=lower(line);

其中line只是您在循环中获得的字符串功能之一。

接下来,您似乎想要从功能中删除所有特殊字符,并且可以实现:

line(~ismember(line,['a':'z'])) = '';

这将删除您的要素中不是字母表字母的任何字母。

对整个数据集完成此操作后,现在应该留下一个全部小写且仅包含字母表字母的单元格数组。

您可以使用Matlab的'unique()'函数删除重复项并获取单元格数组的唯一功能列表:

[U,IDX]=unique(feature_vector);

希望这有帮助!