2014-03-05 42 views
0

我有一个词典包含一些由于格式不一致而导致出现错误的单词,例如单词'directive'和'directiveâ',我想删除第二个单词无论是重复还是非英语单词。我试图使用的是字母,但这种方法仍然返回true,它是一个重音字符。有谁知道一种方法来做到这一点?从MATLAB辞典中删除非英语单词

我在TMG中创建了字典及其相应的值矩阵。

好了,所以在数据的一个例子将是相应的值的矩阵:

X(1:20,1:10)
ANS =
(17,3)2
(17,5)2
(17,7)1
(17,8)2
(17,10)2`

其中第17字存在于第三文档中两次,第七文件一次等

`字典:

bothWordsWithDocNumberDictionary(17:17,:)
ANS =
能够

我的问题是,我有像sxusrvhvô°或clusterâ这样的词,这显然是不受欢迎的。

+0

厚道歉但什么是TMG?发布你的代码的相关片段,请...... – kkuilla

+1

你是否想删除不在'[A-Za-z]'类中的任何字符? “é”怎么样(像琼斯女士史密斯那样)。请缩小你的问题陈述。它是“擦洗坏信件,然后删除重复”? – Floris

+0

嗨!感谢您的回复,是的,我只是在寻找az/AZ字符:)没有口音或ascii字符等。谢谢 –

回答

1

你可能想要做的两件事情:

首先,经过整个列表,并删除所有“不允许的”字符。例如,如果允许的唯一字符是大写和小写A-Z,你可以使用下面的表达式来剔除任何其他字符:

newstring = regexprep(oldstring, '[^A-Za-z]', '', 'all'); 

这会发现不所有字符(^)落在字符类标识。如果重音字母é允许您可以添加其他允许的字符,如

newstring = regexprep(oldstring, '[^A-Za-zéè]', '', 'all'); 

很明显,您可以通过一个for循环的字符串单元格数组,或者,如果您感觉熟悉的话,可以使用cellfun。在前一种情况下,您可以覆盖旧数组,也可以创建一个新数组。如果你创建一个新的,确保预先分配空间 - 它会使它快得多。例如:

newstrings = cell(size(oldstrings)); 
for ii = 1:numel(oldstrings) 
    newstrings{ii} = regexprep(oldstrings{ii}, '[^A-Za-z]', '', 'all'); 
end 

然后你就可以使用

uniqueStrings = unique(newstrings); 

这应该为你做它删除您单元阵列重复。免责声明:无法测试上述 - 让我知道如果你遇到任何问题