2014-03-05 5 views
0

일관되지 않은 형식 (예 : 단어 '지시어'및 '지시어')로 인해 실수가있는 단어가 포함 된 사전이 있는데 두 번째 단어를 제거하고 싶습니다. 중복 및 비 영어 단어. 내가 문자를 사용하려고했지만이 방법은 여전히 ​​사실을 반환합니다 그것은 악센트 부호가있는 문자입니다. 누구든지이 일을 할 수있는 방법을 알고 있습니까?사전에서 영어가 아닌 단어를 MATLAB에서 제거

TMG에 사전과 해당 값 행렬을 만들었습니다. 그래

때문에 데이터의 예는 대응하는 값의 행렬에 대한 것이다 :

X (1 : 20,1 : 10)
ANS
= (17,3) 2
(17.5) 2
(17,7) 1
(17,8) 2
(17,10) 2 '

,691,363 17 워드 두번 번째 문서에 존재하는210

, 일곱 번 문서 등

'사전 :

bothWordsWithDocNumberDictionary (17시 17분 :)
ANS = 수

제 문제는 sxusrvhvô ° 또는 clusterâ와 같은 단어가 있다는 것입니다. 이는 분명히 바람직하지 않습니다. ,

먼저 전체 목록을 가서 모든 "허용되지 않은"문자를 제거 :

+0

두꺼운 데 사과하지만 TMG는 무엇입니까? 코드의 관련 스 니펫을 게시하십시오. – kkuilla

+1

'[A-Za-z]'클래스에없는 캐릭터를 삭제 하시겠습니까? 어때요? é (부인 존스 네 스미스처럼). 문제 설명문의 범위를 좁혀주십시오. 그것은 "나쁜 편지를 문질러 낸 다음 중복 물을 제거합니까?" – Floris

+0

안녕하세요! 답장을 보내 주셔서 감사합니다, 예, 나는 단지 az/AZ 문자를 찾고 있습니다 :) 악센트 또는 아스키 문자 등이 없습니다. –

답변

1

당신은 아마이 일을하고 싶다.

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

이 (^)가에 속하지 않는 모든 문자를 찾을 수 있습니다 : 허용되는 문자 만 대문자와 소문자 A-Z 인 경우 예를 들어, 다른 문자를 제거하기 위해 다음 식을 사용할 수 있습니다 문자 클래스가 식별되었습니다. 악센트 부호가있는 문자 é이 허용되는 경우

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); 

를 사용하여 셀 어레이에서 중복을 제거 할 수 있습니다.면책 조항 : 위의 사항을 테스트 할 수 없음 - 문제가 생겼을 때 알려주십시오.

관련 문제