Übung 10: Rechtschreibprüfung

In dieser Übung wird gezeigt, wie man eine Rechtschreibprüfung erstellt. Lade die unten aufgeführten Dateien herunter, um dich auf die Übung vorzubereiten.

Anforderungen

Schreibe ein einzelnes Programm in Python, das die Rechtschreibung des ersten Kapitels von „Alice im Wunderland“ überprüft. Verwende zuerst eine lineare Suche und dann eine binäre Suche. Gebe die Zeilennummer zusammen mit dem Wort aus, das im Wörterbuch nicht vorhanden ist.

Befolge die folgenden Schritte sorgfältig. Wenn du nicht weißt, wie du einen Schritt ausführen sollst, frage, bevor du mit dem nächsten Schritt fortfährst.

Schritte zum Erledigen der Übung

  1. Suche oder erstelle ein Verzeichnis für dein Projekt.

  2. Lade das Wörterbuch in das Verzeichnis herunter.

  3. Lade die ersten 200 Zeilen von „Alice In Wonderland“ in dein Verzeichnis herunter.

  4. Beginne eine Python-Datei für dein Projekt.

  5. Es ist notwendig, die Wörter in der Geschichte voneinander zu trennen, damit sie einzeln überprüft werden können. Außerdem müssen zusätzliche Interpunktionszeichen und Leerzeichen entfernt werden. Leider gibt es keine gute Möglichkeit, dies mit dem zu tun, was das Buch bisher behandelt hat. Der Programmcode dafür ist kurz, aber eine vollständige Erklärung würde den Rahmen dieses Kurses sprengen. Füge die folgende Funktion in dein Programm ein. Denke daran, dass Funktionsdefinitionen direkt nach dem Importieren am Anfang Ihres Programms stehen sollten. Wir werden diese Funktion in einem späteren Schritt aufrufen.

Funktion, um Wörter in einer Zeichenfolge zu trennen und als Liste zurückzugeben
import re

# This function takes in a line of text and returns
# a list of words in the line.
def split_line(line):
    return re.findall('[A-Za-z]+(?:\'[A-Za-z]+)?',line)

Dieser Programmcode verwendet einen regulären Ausdruck, um den Text aufzuteilen. Reguläre Ausdrücke sind sehr mächtig und relativ leicht zu erlernen. Wenn du mehr über reguläre Ausdrücke erfahren möchtest, lies:

http://regexone.com/

  1. Lese die Datei dictionary.txt in ein Array ein. Gehe zurück zu Reading Into an Array, um ein Beispiel dafür zu finden. Dies hat nichts mit der Anweisung import, Bibliotheken oder Modulen zu tun. Nenne das Wörterbuch nicht word_list oder etwas Generisches, da dies verwirrend sein wird. Nenne es dictionary_list oder einen anderen spezifischen Begriff.

  2. Schließe die Datei.

  3. Gebe --- Lineare Suche --- aus

  4. Öffne die Datei AliceInWonderLand200.txt

  5. Wir werden die Geschichte nicht in eine Liste einlesen. Erstelle hier keine neue Liste, wie du es mit dem Wörterbuch getan hast.

  6. Beginne eine for-Schleife, um jede Zeile zu durchlaufen.

  7. Rufe die Funktion split_line auf, um die Textzeile von der gerade eingelesenen Story aufzuteilen. Speichere die Liste, die die Funktion zurück gibt, in einer neuen Variablen mit dem Namen word_list. Denke daran, dass das Aufrufen der Funktion allein nichts Sinnvolles bringt. Du musst das Ergebnis einer Variable (word_list) zuweisen. Wenn du jetzt vergessen hast, den Rückgabewert einer Funktion zu erfassen, lies Zurückgegeben Wert weiterverarbeiten.

  8. Beginne eine verschachtelte for-Schleife, um jedes Wort in der Wortliste zu durchlaufen. Dies sollte sich innerhalb der for-Schleife befinden, die durch jede Zeile in der Datei iteriert. (Ein Durchlauf für jede Zeile, je einen weiteren Durchlauf für jedes Wort in der Zeile.)

  9. Überprüfe mit einer linearen Suche das aktuelle Wort mit den Wörtern im Wörterbuch. In Linear Search Algorithm findest du ein Beispiel dazu. Die lineare Suche ist nur drei Zeilen lang. Wenn du das Wort mit den anderen Wörtern im Wörterbuch vergleichst, konvertiere das Wort in Großbuchstaben. Verwende in deiner while-Schleife einfach word.upper() anstelle von word als Schlüssel. Diese lineare Suche existiert innerhalb der im vorherigen Schritt erstellten for-Schleife. Wir durchlaufen jedes Wort im Wörterbuch und suchen nach dem aktuellen Wort in der Zeile, die wir gerade eingelesen haben.

  10. Wenn das Wort nicht gefunden wurde, gib es aus. Gib nichts aus, wenn du das Wort findest, das wäre nur ärgerlich.

  11. Schließe die Datei.

  12. Stelle sicher, dass das Programm erfolgreich ausgeführt wird, bevor du mit dem nächsten Schritt fortfährst.

  13. Erstelle eine neue Variable, die die Zeilennummer enthält, in der du dich befindest. Gib diese Zeilennummer zusammen mit dem Rechtschreibfehler aus dem vorherigen Schritt aus.

  14. Stelle sicher, dass das Programm erfolgreich ausgeführt wird, bevor du mit dem nächsten Schritt fortfährst.

  15. Gib --- Binary Search --- aus

  16. Die lineare Suche dauert eine Weile. Um sie vorübergehend zu deaktivieren, kann sie mit drei Anführungszeichen vor und nach diesem Codeblock auskommentiert werden. Frage, wenn du nicht sicher bist, wie du dies tun sollst.

  17. Wiederhole das gleiche Codemuster wie zuvor, verwende diesmal jedoch eine binäre Suche. Gehe für die binäre Suche zurück zu Binary Search. Ein Großteil des Programmcodes aus der linearen Suche kann kopiert werden, und es ist nur erforderlich, die Programmzeilen, die die lineare Suche darstellen, durch die binäre Suche zu ersetzen.

  18. Beachte den Geschwindigkeitsunterschied zwischen den beiden Suchvorgängen.

  19. Stelle sicher, dass die lineare Suche wieder aktiviert ist, wenn sie während der Arbeit an der binären Suche deaktiviert war.

  20. Lade das endgültige Programm hoch oder checke das endgültige Programm ein.

Beispielablauf

--- Linear Search ---
Line 3  possible misspelled word: Lewis
Line 3  possible misspelled word: Carroll
Line 46  possible misspelled word: labelled
Line 46  possible misspelled word: MARMALADE
Line 58  possible misspelled word: centre
Line 59  possible misspelled word: learnt
Line 69  possible misspelled word: Antipathies
Line 73  possible misspelled word: curtsey
Line 73  possible misspelled word: CURTSEYING
Line 79  possible misspelled word: Dinah'll
Line 80  possible misspelled word: Dinah
Line 81  possible misspelled word: Dinah
Line 89  possible misspelled word: Dinah
Line 89  possible misspelled word: Dinah
Line 149  possible misspelled word: flavour
Line 150  possible misspelled word: toffee
Line 186  possible misspelled word: croquet
--- Binary Search ---
Line 3  possible misspelled word: Lewis
Line 3  possible misspelled word: Carroll
Line 46  possible misspelled word: labelled
Line 46  possible misspelled word: MARMALADE
Line 58  possible misspelled word: centre
Line 59  possible misspelled word: learnt
Line 69  possible misspelled word: Antipathies
Line 73  possible misspelled word: curtsey
Line 73  possible misspelled word: CURTSEYING
Line 79  possible misspelled word: Dinah'll
Line 80  possible misspelled word: Dinah
Line 81  possible misspelled word: Dinah
Line 89  possible misspelled word: Dinah
Line 89  possible misspelled word: Dinah
Line 149  possible misspelled word: flavour
Line 150  possible misspelled word: toffee
Line 186  possible misspelled word: croquet