Verfasst am: 26.10.2016, 13:49
Titel: Spellcheck mit String
Hallo liebe GoMatlab-Community,
ich habe folgenden Spellcheck für Matlab gefunden und würde diese Funktion gerne benutzen um eine 640x1 Wortliste zu analysieren. Dabei kommt jedoch immer eine Fehlermeldung. Nach längerem Probieren habe ich nun herausgefunden, dass es daran liegt, dass meine Liste ein CellString ist.
Funktioniert wunderbar, aber für die Liste geht es nicht
Code:
>> spellcheck(640x1Liste) Error using COM.Word_Application/invoke
No method 'CheckSpelling' with matching signature found forclass 'COM.Word_Application'.
Error in spellcheck (line48)
status(m) = invoke(Doc,'CheckSpelling',words{n},[],1,1);
>> spellcheck(640x1Liste, 1) Error using spellcheck
Too many input arguments.
%SPELLCHECK checks the spelling of word(s) and returns suggestions if misspelled.
%
% [status,suggestions] = spellcheck(text); % status = spellcheck(text);
%
% text: a word or string of words separated by space(s). % status: returns '1' if words exist in dictionary or '0' otherwise. % suggestions: an array of suggested corrections of the misspelled word % or otherwise returns a message 'Correct Spelling'.
%
% Examples: % [status,suggestions] = spellcheck('Hellow'); % [status,suggestions] = spellcheck('My Name is Fahad!'); % status = spellcheck('Emirates');
%
% Copyright 2004 Fahad Al Mahmood % Version: 1.0 $ $Date: 30-Jun-2004 % Version: 1.5 $ $Date: 01-Jul-2004 (Multiple words check & status, % thanks Michael Kleder!) % Version: 1.6 $ $Date: 11-Jul-2004 (Fixed the 'no suggestions' result, % thanks Sander Stepanov!)
% Separating string of words into arrays of words.
k=1;
temp='';
for n=1:length(text);
if ~isspace(text(n))
temp = [temp text(n)];
else if ~isspace(text(n-1))
words{k} = temp;
end
temp='';
k=k+1;
end end
words{k} = temp;
% Opening MS Word and Starting the Spelling Check
Doc = actxserver('Word.Application');
m=1;
for n=1:length(words) if ~isempty(words{n})
status(m) = invoke(Doc,'CheckSpelling',words{n},[],1,1);
ifnargout==2 invoke(Doc.Documents,'Add');
X = invoke(Doc,'GetSpellingSuggestions',words{n});
count = get(X,'Count');
suggestions{m,1} = words{n};
if count~=0 for k=2:count+1
suggestion = invoke(X,'Item',k-1);
suggestions{m,k} = get(suggestion,'Name');
end elseif count==0 & status(m)==1
suggestions{m,2} = 'Correct Spelling';
elseif count==0 & status(m)==0
suggestions{m,2} = 'No Suggestions!';
end varargout = {suggestions};
end
m=m+1;
end end
Für jegliche Hilfe wäre ich sehr dankbar, da ich schon seit langer Zeit nicht mit diesem Problem weiterkomme. Auch ein Freund, der Matlab beherrscht konnte nicht helfen. Ich hoffe hier im Forum gibt es jemanden, der helfen kann.
Verfasst am: 26.10.2016, 14:20
Titel: Re: Spellcheck mit String
Hallo LucaK,
Im Code steht zwar ein CopyRight-Vermerk, aber ansonsten keine Lizenz-Informationen. Bist Du sicher, dass der Autor damit einverstanden ist, dass Du den Code hier postest?
Spellcheck funktioniert jetzt auch mit strings. Ich habe gerade einen Fehler eingebaut um zu sehen, ob der erkennt würde. Leider ist es so, dass alles in Caps geschriebene als richtig (=1) eingestuft wird und die Wortlisten in Caps geschrieben sind.
Nein, wirst Du nicht. Die Anführungszeichen stammen nur daher, dass Du vorher einen Cell-String hattest und wenn Matlab den im CommandWindow anzeigt, fügt es die Quotes hinzu, damit man 3 von '3' unterscheiden kann. In den Daten sind die Queotes aber nicht mit drin!
Die gezeigte Zeile fügt alle Strings des Cell-Strings zu einem Space-separtierten String zusammen. Das erste, was SPELLCHECK dann macht, ist diesen String wieder zu trennen und in einen Cell-String zu schreiben. Das ist alse Zeitverschwendung. Mit den von mir geposteten Änderungen nimmt SPELLCHECK Struings und Cell-String entgegen und vermeidet unnötige Umformungen.
Zitat:
Code:
for k = 1:640
F_Answer_Delayed(k) = sprintf('%s ', F_Answer_Delayed(k){:});
end
"F_Answer_Delayed(k){:}" ist nicht korrekt. Vermutlich meinst Du "F_Answer_Delayed{k}". In der Dokumentation werden Cells und deren Indizierung ausführlich erklärt. Vielleicht wäre es sinnvoll, da noch mal nach zu lesen.
Gruß, Jan
Einstellungen und Berechtigungen
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.