如何用Matlab对文本文件进行过滤

如何用Matlab对文本文件进行过滤,matlab,duplicate-removal,Matlab,Duplicate Removal,我有一个包含1000多个特征的文本的文件。文件中的某些功能相同,但不同的用户以不同的方式键入,例如: 用户1键入:谷歌 用户2键入:谷歌(所有小写字母) User3键入:谷歌(结尾处用逗号) 显然,上述所有方面都有相同的特点。 我的目标是过滤功能文件,这样输出将只有唯一的功能而没有任何重复 我需要用Matlab做这个,有人知道我怎么做吗 它与txt文件非常相似,我有三列,行号,功能描述和功能本身: . . . 909职务名称:非ascii 910职务名称:非ascii 911职务:非as

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

用户1键入:谷歌
用户2键入:谷歌(所有小写字母)
User3键入:谷歌(结尾处用逗号)

显然,上述所有方面都有相同的特点。 我的目标是过滤功能文件,这样输出将只有唯一的功能而没有任何重复

我需要用Matlab做这个,有人知道我怎么做吗

它与txt文件非常相似,我有三列,行号,功能描述和功能本身:
.
.
.
909职务名称:非ascii 910职务名称:非ascii 911职务:非ascii 911
912姓:亚伦
913姓:亚当
.
.

我已经在matlab上读过了,只是把文件拖了进去。我知道如何将其加载到矩阵中

假设两个特征具有相同的字符序列,且差异为小写/大写、空格或其他字符,则为重复字符


非常感谢

一种方法是读入每一行,只解析出后面的文本:(据我所知,这是您要删除重复内容的部分)。阅读感兴趣的文本时,可以将其转换为小写(如果愿意,也可以使用大写),然后删除结尾处的重复条目

快速介绍如何执行类似操作:

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变量将包含文件中没有重复项的整行。

因为您已经将数据导入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);

希望这有帮助

具体点。文件如何包含这些功能?你已经把那个文件读入Matlab了吗?在这种情况下,你是如何读入的?您将要素声明为重复的标准是什么:小写/大写?空间?破折号?编辑。还有别的吗?你可能想考虑使用编辑距离,比如这个例子。