WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Spellcheck mit String

 

LucaK
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 26.10.16
Wohnort: Frankfurt (Main)
Version: 2015b
     Beitrag Verfasst am: 26.10.2016, 13:49     Titel: Spellcheck mit String
  Antworten mit Zitat      
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.

Beispiel:
Code:
>> 640x1Liste(1)

ans =

    'ÄNDERUNG'


Die ' führen dazu, dass die Funktion nicht funktioniert. Es liegt nicht am Umlaut.

Code:
spellcheck('Änderung')

ans =

     1

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 for class 'COM.Word_Application'.

Error in spellcheck (line 48)
        status(m) = invoke(Doc,'CheckSpelling',words{n},[],1,1);
 
>> spellcheck(640x1Liste, 1)
Error using spellcheck
Too many input arguments.


Die Spellcheck - Funktion:
Code:
function [status,varargout] = spellcheck(text)

%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);
        if nargout==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

status = all(status);

invoke(Doc,'Quit');
delete(Doc);


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.

Liebe Grüße,
Luca
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 26.10.2016, 14:00     Titel:
  Antworten mit Zitat      
Hallo,

eine Möglichkeit:
Code:
txt = sprintf('%s ', txt{:});


Ansonsten eine for-Schleife oder cellfun, um den Test auf jedes Wort für sich anzuwenden.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 26.10.2016, 14:20     Titel: Re: Spellcheck mit String
  Antworten mit Zitat      
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?

Du kannst die spellcheck-Funktion modifizieren:
Code:
function [status,varargout] = spellcheck(text)
...
% Separating string of words into arrays of words.
if ischar(text)
  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;
elseif iscellstr(text)
  words = text;
else
  error('1st input must be a string or cell strring.');
end

...

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
LucaK
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 26.10.16
Wohnort: Frankfurt (Main)
Version: 2015b
     Beitrag Verfasst am: 26.10.2016, 14:22     Titel:
  Antworten mit Zitat      
Mir ist zwar nicht ganz bewusst wie, aber durch

Code:
txt = sprintf('%s ', txt{:});


Werde ich die einzelnen Anführungszeichen los.

Ich dachte mir jetzt bin ich schlau und mache das für jedes Element in der Matrix einzelnd:

Code:
for k = 1:640
    F_Answer_Delayed(k) = sprintf ('%s ', F_Answer_Delayed(k){:});
end


Aber das führt nur zu

Code:
Error: ()-indexing must appear last in an index expression.


Wieso geht das nicht? Und wie müsste man das ändern?
Private Nachricht senden Benutzer-Profile anzeigen
 
LucaK
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 26.10.16
Wohnort: Frankfurt (Main)
Version: 2015b
     Beitrag Verfasst am: 26.10.2016, 14:58     Titel:
  Antworten mit Zitat      
Danke für eure Hilfe!

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.

Beispiel:
Code:
>> spellcheck('hellow')

ans =

     0

>> spellcheck('HELLOW')

ans =

     1


Ich fürchte das liegt an Word. Ich werde mich morgen weiter damit beschäftigen.
Danke für eure Mühen!

Liebe Grüße,
L
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 27.10.2016, 13:30     Titel:
  Antworten mit Zitat      
Hallo LucaK,

Zitat:
Code:
txt = sprintf('%s ', txt{:});

Werde ich die einzelnen Anführungszeichen los.

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

Code:
Error: ()-indexing must appear last in an index expression.

"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
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.