我有一个包含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上阅读了它,只需将文件拖到那里。我知道如何将其加载到矩阵中。
假设两个要素具有相同的字符序列,区别在于大写/小写,空格或其他字符,那么它就是重复的。
非常感谢
答案 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);
希望这有帮助!