2017-10-07 4 views
1

J'ai obtenu ce code mais il y a un petit problème - j'obtiens une erreur avec Index qui dépasse les dimensions de la matrice. Cette erreur arrive quand le fichier texte est grand. quelqu'un peut-il m'aider s'il vous plaît?Syllables Words Index dépasse les dimensions de la matrice. Matlab

Index exceeds matrix dimensions. 
Error in getPolySyllWords>getSyllable (line 38) 
InnerCode = InnerCode{1}; 
Error in getPolySyllWords>@(x)getSyllable(x) 
Error in getPolySyllWords (line 8) 
TextSyl = cellfun(@(x) getSyllable(x), TextCell); 

Je reçois ci-dessus erreur

function Syl = getSyllable(Word) 
    if nargin == 0 
     Word = input('What word do you want? ', 's'); 
    end 
    if isempty(Word) 
    Syl = 0; 
    return 
    end 
Word = strrep(Word, ' ', ''); 

try 
    Txt = webread(sprintf('http://www.dictionary.com/browse/%s?s=t', Word)); 
catch 
    warning('Could not determine syllable for "%s". Returning 0.', Word); 
    Syl = 0; 
return 
end 

if isempty(InnerCode) 
InnerCode = InnerCode{1}; 
CodeSrch2 = '>(?<Phonetics>[^\<]+)'; 
Phonetics = regexp(InnerCode, CodeSrch2, 'tokens'); 
Phonetics = [Phonetics{1}{:}]; 
else 
% handle this case 
Syl=1; 
    return; 
end 
+0

S'il vous plaît partager hello.txt –

+0

pourriez-vous s'il vous plaît souligner la ligne 38 pour une lecture plus facile? – Marcus

+0

ligne 38 est InnerCode = InnerCode {1}; –

Répondre

0

Le problème est que votre appel

SiteTxt = webread(sprintf('http://www.dictionary.com/browse/%s?s=t', Word)); 

pour le mot "Dr" retourne une SiteText où la balise

<span class="pron spellpron">[someResult] </span> 

vous êtes scannin g Le SiteText pour reste vide. Ceci dans la ligne suivante

InnerCode = regexp(SiteTxt, CodeSrch1, 'tokens'); 

produit un tableau vide qui provoque l'erreur "Indice dépasse la dimension de la matrice".

Vous pouvez tester vous-même, en entrant dans les deux mots différents « médecin » et directement « dr » sur la page d'accueil:

enter image description here

S'il vous plaît étendre votre code par quelque chose comme l'extrait de code suivant pour gérer ces cas:

if ~isempty(InnerCode) 
    InnerCode = InnerCode{1}; 
    CodeSrch2 = '>(?<Phonetics>[^\<]+)'; 
    Phonetics = regexp(InnerCode, CodeSrch2, 'tokens'); 
    Phonetics = [Phonetics{1}{:}]; 
else 
    % handle this case 
    Syl=0; 
    return; 
end 
+0

Salut Marcus, j'ai essayé d'ajouter le code ci-dessus mais il me donne toujours la même erreur. –

+0

Salut Marcus, j'ai essayé d'ajouter le code ci-dessus mais il me donne toujours la même erreur. J'ai également changé le code avec UTF-8 lors de l'ouverture du fichier .. des suggestions? –

+0

Si vous obtenez la même erreur, cela semble illogique car l'erreur est survenue dans cette ligne que vous avez mentionnée et qui fait maintenant partie de l'instruction if else. Bien sûr, vous devez gérer l'affaire vous-même, comme le dit le commentaire. J'ai ajouté une suggestion comment vous pourriez résoudre votre problème. – Marcus