2014-04-22 4 views
1

내 목표는 일련의 규칙에 따라 모든 단어에 대한 소리 나는 녹음을 생성하는 것입니다.matlab에서 regexp로 단어 분할하기. 'split'에 대한 startIndex?

먼저 단어를 음절로 분리하고 싶습니다. 예를 들어, 나는 다음과 같이 좋아 구분하기 다음 단어에 '채널'을 찾아하는 알고리즘을 원하는 :

Input: 'aachbutcher' 
Output: 'a' 'a' 'ch' 'b' 'u' 't' 'ch' 'e' 'r' 

내가 지금까지 온 :

check=regexp('aachbutcher','ch'); 

if (isempty(check{1,1})==0)   % Returns 0, when 'ch' was found. 

    [match split startIndex endIndex] = regexp('aachbutcher','ch','match','split') 

    %Now I split the 'aa', 'but' and 'er' into single characters: 
    for i = 1:length(split) 
     SingleLetters{i} = regexp(split{1,i},'.','match'); 
    end 

end 

내 문제는 어떻게합니까 원하는 출력과 같이 포맷되도록 셀을 함께 넣으시겠습니까? 나는 match 부분 ('ch')에 대해서만 시작 인덱스를 가지고 있지만 split 부분 ('aa', 'but', 'er')에 대해서는 시작 인덱스가 없다.

아이디어가 있으십니까?

+0

'startIndex'의 차이를 가져 와서 길이를 얻으시겠습니까? – Floris

답변

0

색인 또는 길이로 작업 할 필요가 없습니다. 간단한 논리 : 경기에서 프로세스의 첫 번째 요소, 먼저 분할에서 다음 두 번째 경기 등에서 .... 그래서

[match,split,startIndex,endIndex] = regexp('aachbutcher','ch','match','split'); 

%Now I split the 'aa', 'but' and 'er' into single characters: 
SingleLetters=regexp(split{1,1},'.','match'); 

for i = 2:length(split) 
    SingleLetters=[SingleLetters,match{i-1},regexp(split{1,i},'.','match')]; 
end 
+0

완벽하게 작동했습니다. 감사합니다. 세 번째 줄의 오타 ('i')를 수정할 수 있습니까? 단어가 'ch'로 시작하면 그 방법이 효과가 없을 것이라고 생각했지만, 운좋게도 {1,1}은 빈칸으로 나뉘어 있습니다. – jonen

0

, 당신이 '채널'의 길이를 알고, 그것을 2. 당신이 그것을 발견 한 곳 당신은 알고 있어요 regex에서 인덱스가 startIndex에 저장되므로. 나는 이라고 가정하고 (내가 틀렸다면 수정 해주십시오.) 위의 출력에서와 같이 단어의 다른 모든 문자를 단일 문자 셀로 분리하려고합니다. 내가 지금 MATLAB이없는

check=regexp('aachbutcher','ch'); 

if (isempty(check{1,1})==0)   % Returns 0, when 'ch' was found. 

    [match split startIndex endIndex] = regexp('aachbutcher','ch','match','split') 

    %Now I split the 'aa', 'but' and 'er' into single characters: 
    for i = 1:length(split) 
     SingleLetters{i} = regexp(split{1,i},'.','match'); 
    end 

end 

j = 0; 
for i = 1 : length('aachbutcher') 
    if (i ~= startIndex(1)) && (i ~= startIndex(2)) 
     j = j +1; 
     output{end+1} = SingleLetters{j}; 
    else 
     i = i + 1;  
     output{end+1} = 'ch'; 
    end 
end 

를, 그래서 그것을 테스트 할 수 없습니다 : 그래서, 당신은 다음과 같이 조건문을 사용하여 출력을 구성하기 위해 시작 인덱스 데이터를 사용할 수 있습니다. 나는 그것이 당신을 위해 일하기를 바란다! 그렇지 않다면 알려주세요.