2014-03-05 43 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); 

這應該爲你做它刪除您單元陣列重複。免責聲明:無法測試上述 - 讓我知道如果你遇到任何問題