Systeminternes Wörterbuch

  • Systeminternes Wörterbuch

    Moin moin!

    Ich möchte in meinem Programm eine Wort-Eingabe daraufhin überprüfen ob dieses Wort überhaupt existiert. Zum Beispiel gibt der User "Appfel" ein, und mein Programm guckt nach ob dieses Wort in der deutschen Sprache existiert.
    Da es ja ein systeminternes Wörterbuch gibt (für die Rechtschreibüberprüfung), wollte ich mal fragen, ob man an dieses ran kommt und für meinen Zweck unter obj-c/cocoa benutzen kann.

    Happy coding!
  • RE: Systeminternes Wörterbuch

    Kann man mit NSSpellChecker so machen:

    Quellcode

    1. NSRange wordRange = [[NSSpellChecker sharedSpellChecker]checkSpellingOfString: stringToCheck startingAt:0];


    Wobei der zurückgegebene Bereich mit dem Anfang ersten falschen Wort beginnt.
    I would be embarrassed if they did not spy on me.
  • Danke für eure Tipps!

    Ich habe immer nur ein Wort, daher raff ich das mit dem Range gerade nicht.

    Quellcode

    1. NSSpellChecker* spellChecker;
    2. [spellChecker setLanguage:@"German"];
    3. if ([spellChecker checkSpellingOfString:eingabe startingAt:0] == 0)
    4. return true;

    Da meckert er, wahrscheinlich weil ich etwas vom Typ NSRange zurückgeliefert bekomme und das nicht mit einer 0 vergleichen kann? :-/
  • Original von Jaxx0r
    Danke für eure Tipps!

    Ich habe immer nur ein Wort, daher raff ich das mit dem Range gerade nicht.

    Da solltest Du noch mal etwas nachschlagen. Sobald man mit 'strings' zu tun hat, geht es los.

    Quellcode

    1. NSRange wordRange;
    2. NSSpellChecker* spellChecker = [NSSpellChecker sharedSpellChecker];
    3. [spellChecker setLanguage:@"German"];
    4. wordRange = [spellChecker checkSpellingOfString:eingabe startingAt:0];
    5. return(NSEqualRanges(wordRange, NSMakeRange(NSNotFound, 0));


    Es gibt einen Stapel von Funktion im FoundationKit, die sollte man kennen. Ich habe zwei mal eingebaut.
    I would be embarrassed if they did not spy on me.
  • 'range.location' ist NSNotFound, weil, das kann man nicht finden, die Länge ist 0, weil da ist auch sonst nichts. Also

    Quellcode

    1. return ([spellChecker checkSpellingOfString:eingabe startingAt:0].location == NSNotFound);
    oder

    Quellcode

    1. return ([spellChecker checkSpellingOfString:eingabe startingAt:0].length == 0);

    würde reichen.
    I would be embarrassed if they did not spy on me.
  • Also ich habs jetzt mal so eingebunden:

    Quellcode

    1. NSSpellChecker* spellChecker = [NSSpellChecker sharedSpellChecker];
    2. [spellChecker setLanguage:@"German"];
    3. return ([spellChecker checkSpellingOfString:eingabe startingAt:0].location == NSNotFound);

    Allerdings gibt er mir immer true zurück, egal was ich schreibe.
    Wird der String aus eingabe irgendwie verändert? Ich kann danach nicht mehr richtig mit dem arbeiten.
  • Die Klasse ist ein Biest, naturgemäß.

    Vielleicht solltest Du auch Leerzeichen eliminieren.
    Beispiel "Datum"
    Falsch wäre" "Da um", anstelle 't' ein Leerzeichen.
    NSSpellchecker erkennt das als richtig an, kein falsches Wort darin. "Daum" wäre allerdings falsch, außer für Kölner Fußballfreunde.

    Edit
    Original von Jaxx0r
    Er akzeptiert jedes Wort, das mit Großbuchstaben geschrieben wurde. Also ist z.B. HDGTWR ein akzeptiertes Wort.

    Da fällt mir noch ein, Worte in Großbuchstaben werden ignoriert, weil das in einem -normalen- Text Abkürzungen sind.
    I would be embarrassed if they did not spy on me.