GMSpell - Rechtschreibkontrolle für den GameMaker

    • Skript

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • GMSpell - Rechtschreibkontrolle für den GameMaker

      Nachdem dies ja neulich irgendwo ein Thema war, habe mir gedacht, dass es wohl nicht so schwer sein dürfte. Ich habe mir also die Dokumentation für *.dic Dateien reingezogen und noch ein bisschen über den Levenshtein-algo.

      Ich erstelle diesen Thread unter dem Präfix "Skript". Dabei ist es eigentlich eine DLL. Und irgendwie dann doch wieder ein Script.
      Lasst mich das erklären.

      Ich habe den Levenshtein Algorithmus in c++ geschrieben, um größtmögliche Performance zu erlauben. Levenshtein berechnet die Distanz zwischen 2 Wörtern. So haben Zb. "correctnes" und "correctness" den Faktor 0.5 weil man nur ein mal Hand anlegen muss, um das richtige Wort zu erhalten.
      Folglich gilt: 1/( Anzahl_der_Korrekturen +1);

      Ich habe ihn auf einem alten, abgestaubten Rechner getestet. Dort brauchte die 1000fache Berechnung von "Eisnbahn" und "Eisenbahn" 6.8 Millisekunden. Wobei ich nicht sagen kann, wie viel dabei für den GM drauf geht, da der immerhin auch 1000 mal einen "external call" machen muss.

      Und dann wären da ja noch die Scripte. Die machen alles andere Drum und Dran z.B. die *.dic Dateien analysieren.

      In der zip vom gleich genannten Link findet ihr einen Haufen an Dateien. Das wären:
      de_DE.dic (1MB) - eine Deutsche Sprachdatei.
      en-US.dic (0.6MB) - eine Englische Sprachdatei.
      GMLevenshtein.dll (7.5 kb) - Die DLL
      GMSpell.gmk (11 kb) - ein Beispiel.
      GMSpell.gml (4 kb) - Die Scripte.
      GMSpell.gmres ( 2 kb) - Die Scripte für GM8. Der Vorteil: Gruppen bleiben erhalten.

      Hier gehts zum Download (0.5 MB, komprimiert)


      Und noch ein bisschen zur Nutzung:
      Man kann die GMLevenshtein.dll natürlich auch ohne die Rechtschreibprüfung für seine eigenen Angelegenheiten nutzen.
      da wären folgende Funktionen:

      gmlevenshtein_init()
      gmlevenshtein_eval( string1, string2 );
      gmlevenshtein_free();

      gmspell_init( dic path );
      gmspell_check( word, distance, [Separator]);
      gmspell_free();

      Dabei gilt zu beachten, dass die gmspell_init (wenn nicht bereits geschehen) die gmlevenshtein_init Funktion aufruft und, dass gmspell_free ebenfalls gmlevenshtein_free aufruft.

      Ein Beispiel:

      GML-Quellcode

      1. gmspell_init("de_DE.dic");
      2. str = gmspell_check("Rechtschreibn", 0.3);
      3. gmspell_free();
      4. // str = Rechtschreib|Rechtschreiben|rechtschreib|rechtschreiben


      Eine detaillierte Beschreibung der Funktionen findet ihr in den selbigen Skripten.

      Ich bin außerdem dessen bewusst, dass die Rechtschreibung nicht an die von z.B. FF ran kommt. Diese analysiert auch in welchem Zusammenhang das Wort geschrieben ist.

      Das einzige was jetzt noch Fehlt ist eine Erklärung, wofür man dies nutzen kann. Ich weiß es ehrlich gesagt auch nicht :P

      MfG SDX
    • Hey

      Coole Idee! Funktioniert auch relativ gut. Nur bei manchen Wörter nicht.
      So z.B. Habe ich "Halo" eingegeben und dann kam eine Liste an sehr vielen Wörtern (zB Wall, Hall) aber kein Hallo.
      Ich gehe mal davon aus das das Wort nicht in der Liste drin ist und deswegen nicht angezeigt wurde...

      Aber sonst klappt es ganz gut!

      Ich bin keine Signatur... Ich putze hier nur!
    • Ich hab auch was mit den String Funktion gebastelt geht dann eben nicht so schnell und so gut wie deine Skripts/Dll:
      Ich hab mal versucht was zu bauen:
      henrik1235.bplaced.net/upload/data/check_word.gmk (Rechtsklick->Speichern Unter).

      Dabei prüft er wie wenig Fehler es gibt zwischen dem Eingeben String und dem String im Array word[]. So könntest du prüfen ob I==O (die Nachricht nach dem Eingeben) ist, und somit her raus finden ob das Wort richtig ist.
      ^^

      Das einzige was jetzt noch Fehlt ist eine Erklärung, wofür man dies nutzen kann. Ich weiß es ehrlich gesagt auch nicht :P
      Lets make Notepad remake mit Rechtschreibüberprüfung. :D
      wupto.net/ Nicht meine Seite!
      We love Koalas.

      GM-D-Spam-o-Meter: 32%
    • Mir war bewusst, dass ausgerechnet Hallo Probleme bereitet. Ich habe gerade zu meinem entsetzen festgestellt, dass Hallo nicht im de_DE.dic vorhanden ist. Ich habe einfach das erstbeste Wörterbuch genommen, dass ich zu fassen bekam. Wenn ihr das wirklich nutzen wollt, solltet ihr auf jeden Fall ein anderes Wörterbuch finden. Das sollte aber nicht alzu schwer sein.

      Und diese riesige Liste ergibt aus der Einfachheit meines Beispieles. Der im gmspell_check angegebene faktor zu genauigkeit ist fest (auf 0.3 gestetzt). Man sollte diesen wohl dynamisch gestalten, welches im Klartext eingentlich nur heißt: Wenige Buchstaben, ganaue Kontrolle. Viele Buchstaben, ungenaue und damit tollerantere Kontrolle.

      Es ist halt nur eine Engine mit einem kleinem Beispiel. Die genauen Einstellungen und die Einbindung in eure Projekte, sodass die Ergebnisse euren bedürfnissen entsprechen, müsst ihr machen.

      Und noch was am rande. Die rechtschreibkontrolle lässt, je nach größe des Wörterbuches, euer Programm für ein paar Millisekunden einfrieren. Um das zu umgehen, könnte man die gmthreads.dll nutzen. Ihr müsst mal drauf achten. Wenn ihr einen langen Text, mit einigen Fehlern in z.B. euer Office pasted, Dauert es meist ein Paar sekuden, bis alle ______ unter den falschen wörtern auftauchen. Meine Rechtschreibkontrolle, so finde ich, ist nicht mal sonderlich langsam, obwohl man dies eigentlich vom GM erwarten sollte :P

      MfG SDX
    • Und jetzt schaust du dir auch mal die genau an:

      (a. es ist keine *dic datei (auch wenn sich das schnell ändern lässt)
      (b. besitzt diese nur 1/7 von den Wörtern, wie die die in meinem Beispiel dabei ist
      (c. "Hallo" ist auch nicht dabei ;)

      Und wie gesagt. Es ist ein Beispiel wie die Funktionen funktionieren! Keine fertige Rechtschreibkontrolle. Dafür Fehlt z.B. die Dynamische Anpassung der Feinheit! Die ich dir überlasse. Da das von Projekt zu Projekt bestimmt anders sein wird.

      MfG SDX

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von SDX ()

    • Schau dir mal das an: wiki.services.openoffice.org/wiki/Dictionaries
      Alles, was nicht in der Kategorie "OpenOffice.org 3.x Extension" fällt, sind *.zip Dateien die eine *.dic enthalten. Achte auch auf das Kommentar "This is a dictionary in myspell format".

      Aber ich muss dich enttäuschen. Selbst die größten, die wirklich hunderttausende Wörter enthalten, enthalten nicht das Wort Hallo :P Gott weiß was mit dem Wort passiert ist...

      MfG SDX
    • Benutzer online 1

      1 Besucher