Python für Systemadministratoren Grundkurs

Wörter zählen

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Wörter zu zählen – mit oder ohne zusätzliches Prädikat –, gehört zu den Stärken von Python. Mit den hier gezeigten Funktionen kann Ihre App nicht nur Wörter zählen, sondern diese auch noch weiterverarbeiten.
13:43

Transkript

In dieser Lektion möchte ich Ihnen "Wörter zählen in einem String" vorstellen. Hier sehen Sie die einfachste Anwendung. "wordCount" ist eine Funktion, und die zählt die Wörter in dem String "Python in der Systemadministration". Das ist natürlich noch nicht sehr spannend. Jetzt wird es aber schon spannender. Hier lese ich zum Beispiel die Datei "/etc/services" ein und zähle alle Wörter in der Datei. Unter Windows liegt die Datei unter "C:\Windows\System32\ drivers\etc\services". Es geht noch besser. Ich kann eine ganze URL einlesen, sprich eine Internetressource, in diesem Fall "www.heise.de" und Wörter zählen. Jetzt will ich den "wordCount" genauer vorstellen. "wordCount" ist eine einfache Funktion, die als Erstes einen regulären Ausdruck erwartet, "nonAlphaNum", und jetzt gehe ich die Funktion von oben bis unten mit Ihnen durch. Sie erwartet einen String, sie splittet den String "stri" aufgrund des regulären Ausdrucks "\W+" hier oben. Der reguläre Ausdruck steht für Zeichen, die weder Buchstaben, noch Zahlen, noch Unterstriche sind. Also anders ausgedrückt, Wörter. Mit "allParts" habe ich dann eine Liste von Wörten, hier lege ich mir ein leeres Dictionary an. und jetzt iteriere ich über alle Wörter, die ich ganz konkret in dem String besitze, und wenn das "word" ungleich Null ist, damit gehe ich damit um, dass es abschliessende leere Zeichen geben kann. Die will ich natürlich ignorieren. Wenn das "word" ungleich null ist, was mache ich dann? Dann schiebe ich das "word" auf das Dictionary drauf. Falls das "word", Wort, noch nicht in dem Dictionary drin ist, wird es mit dem Wert 0 angelegt, und danach wird der Wert auf 1 gesetzt. Es kommt also genau einmal drin vor. Das ist das, was ich haben will. Falls das Wort schon in dem Dictionary existiert, dann inkrementiere ich einfach um 1. Ja, und als Ergebnis gebe ich das Dictionary zurück. Jetzt kann ich diesen Algorithmus an zwei Stellen erweitern, einerseits kann ich einen anspruchsvolleren regulären Ausdruck angeben, zum Beispiel einen regulären Ausdruck, der Zahlen identifiziert. Oder, was ich jetzt mache gleich, ist, ich kann die Schlüssel, das sind die Wörter hier, weiterverarbeiten. Zum Beispiel interessieren mich alle Wörter "case insensitive", oder interessieren mich nur die ersten Buchstaben aller Wörter. Und das mache ich jetzt. Hier habe ich die Funktion "word", diesmal "count" genannt, um eine Lambda-Funktion parametrisiert. Das ist "f", das ist eine Lambda-Funktion, in der Default-Einstellung stellt die Lambda-Funktion die Identität dar, Sie sehen, x wird auf x abgebildet, da passiert gar nichts. Und ich wende die Lambda-Funktion genau hier an. Für jedes Wort wende ich die Lambda-Funktion an. Im default-Fall passiert nichts, aber ich kann interessante Sachen machen, wie zum Beispiel alle Wörter klein schreiben. Dann interessieren mich alle Wörter, unabhängig davon, ob sie klein oder groß geschrieben sind. Und das zeige ich Ihnen. Hier "count", mit einem normalen String, ist identisch dazu, dass ich "count" aufrufe und die Lambda-Funktion ist in diesem Fall die Identität und ist identisch zu der "wordCount"-Funktion, die ich ihnen am Anfang vorgestellt habe. Aber ich kann interessantere Sachen machen. Jetzt kann ich hier eine Lambda-Funktion reingeben, die das Wort "w", jeden Schlüssel "w" auf seine Großbuchstaben darstellt, und damit zähle ich alle Wörter "case insensitive", also unabhängig von Klein- und Großschreibung. Was kann ich weiter machen? Ich kann mich zum Beispiel mich nur dafür interessieren, wie lang die Wörter sind. Jetzt sind meine Schlüssel die Länge der Wörter. Oder ich interessiere mich nur für den ersten Buchstaben eines Wortes, jetzt besteht mein Schlüssel nur aus dem ersten Buchstaben eines Wortes. Das war jetzt relativ viel Theorie, das will ich ihnen jetzt gleich noch mal in der Anwendung zeigen. Und los geht es mit der Anwendung von "wordCount". Als Erstes rufe ich natürlich den Python-Interpreter auf, dann inkludiere ich "wordCount", damit habe ich es hier in meiner "repl" zur Verfügung. Ja, und unter einfachsten Ausführungen kann ich das mal auf einen String anwenden, "Python in der Systemadministration" - Modulo Rechtschreibfehler. Sie sehen, "Python" einmal, "der" einmal, "Systemadministration" einmal und "in" einmal. Gut. Das geht besser. In meinem "home", unter "/home/rainer/grimm.txt" habe ich Grimm's Märchen als Python Gutenberg Projekt heruntergeladen und das ist ein Textfile, und diese Datei will ich jetzt zusammen mit Ihnen analysieren. So, was steckt da drin? Grimm's Märchen, klar. Wieviel verschiedene Wörter gibt es? Sie sehen, das sind die verschiedenen Wörter. Die Frage ist natürlich jetzt, wieviele sind es? Da brauche ich nur die Länge dieser Liste abzuzählen, 5813. Was interessiert mich jetzt noch? Mich interessiert die Summe über alle "values", und das ist genau die Summe über alle Häufigkeiten. Ich schreibe das ein bisschen schöner. Und Sie sehen, 105.324 Wörter gibt es. Verschieden sind tatsächlich nur 5813. Gut, das kann ich Ihnen jetzt noch ein bisschen schöner ausgeben. "for i in gri.items():", eine kleine Schleife drüber, "print i", und Sie sehen, zum Beispiel das Wort "awake" kommt sieben Mal vor, "goodness" kommt zweimal vor, das ist doch schon mal recht interessant. Ich behaupte immer, sobald Sie eine Datenstruktur in der Dictionary haben, haben Sie gewonnen. Warum? Weil Sie ein sehr mächtiges Interface haben und das will ich Ihnen jetzt zeigen. Ich werde jetzt noch weiter die Datei auswerten. Was interessiert mich noch? Klar, das ist ein Dictionary, also kann ich explizit nach einem Wert fragen, wie zum Beispiel "awake". Und ich kriege die Antwort raus, sieben Mal kommst du vor. Okay, das wussten wir davor schon. Wenn ich mir aber jetzt "gri.items" anschaue, sehen Sie, jetzt habe ich das Dictionary repräsentiert als Liste von Paaren. "awake" ist der "key", und "7" ist der "value", oder die Häufigkeit. Und was will ich jetzt machen? Jetzt stelle ich die Relation auf den Kopf. Statt jetzt eine Abbildung von Wort auf Häufigkeit, will ich eine Abbildung haben von Häufigkeit auf Wort. Und damit kann ich zum Beispiel solche Fragen beantworten, welches Wort kommt am häufigsten vor? Das interessiert mich eigentlich. Wie mache ich das? Ich mache eine sogenannte "List comprehension". Ich gehe über alle "gri.items" drüber, also über jedes dieser Paare hier. "awake" wird an "key" gebunden, "7" wird an "value" gebunden, und ich stelle die Relation genau auf den Kopf. Also "value" geht dann nach vorne und "key" geht nach hinten. Und wenn ich Ihnen das jetzt zeige, - gehen wir hier ein bisschen höher - wenn ich Ihnen das jetzt zeige, sehen Sie genau das, was ich gesagt habe. Jetzt steht die Häufigkeit an erster Stelle und der Key an zweiter Stelle. Was muss ich jetzt noch machen? Nur sortieren. Jetzt sortiere ich es. Jetzt wird die Liste von Paaren sortiert, und wenn Sie sich die anschauen, sehen Sie genau das, was ich haben will. Zum Beispiel "the" kommt 6520 mal vor, "and" 5302, "to" 2721 und so weiter. Es geht aber noch besser. Sie können das letzte Element einer Liste durch "-1" abfragen. Gut, das wußten sie schon. Oder sie können zum Beispiel die letzten 10 Elemente einer Liste durch diese Syntax abfragen, "[-10:]", bis zum Ende. Damit kriegen sie die 10 größten Einträge heraus. Und es geht los mit "in", mit 1158 Einträgen, geht natürlich wieder bis zu "the". Das war "wordCount", aber es wird noch besser. Jetzt importiere ich "urllib", und jetzt will ich Internetressourcen analysieren. Als Erstes lade ich mir eine Internetressource herunter und das mache ich genau hier. Das dauert ein kleines bisschen, naja, war relativ schnell. Durch "urllib.urlopen" öffne ich diese Internetressource hier, "www.heise.de", und lese sie als Gesamt-String ein, jage sie durch meinen "wordCount" durch und hintenraus purzelt die Häufigkeit jedes Wortes. Die Wörter sind jetzt natürlich nicht so schön, das ist eben HTML. Sie sehen, das sind die Wörter. Zum Beispiel "bewertet", "Zeitschriften", "Geld", "Informationstechnik", okay. Wie schauen die Items aus? Also die Schlüssel-Wert Paare. Sie sehen - was ist denn schön - "spielt" kommt zum Beispiel dreimal vor. Wie oft kommt das Wort "heise" vor? 211 Mal. Jetzt stelle ich die Relation wieder auf den Kopf. Mich interessiert natürlich wieder, welches Wort kommt am häufigsten vor? Hier habe ich einen kleinen Fehler. Ich müsste natürlich nicht "mediaLin", sondern "heise" schreiben. Und jetzt sehen Sie, jetzt habe ich die Relation auf den Kopf gestellt. Das heißt, zum Beispiel 15 Mal kommt "4c" vor, 11 Mal kommt "4z" vor. Ja, das ist mir noch zu unordentlich, also tue ich es wieder sortieren, weil, jetzt sehen sie was. Sie sehen die Zahl "1", - ich muss noch sauberer argumentieren - der String "1" kommt 1920 Mal vor, die "0" 1313 Mal und so weiter. Ja, jetzt kann ich wieder herausbekommen, welches Wort kommt am häufigsten vor? Das wußten wir schon, die zehn häufigsten Wörter, oder auch die zwanzig häufigsten Mal, da sehen sie, ah ja, "heise" kommt 211 Mal vor. Jetzt will ich noch die Funktion "count" anwenden. "count" kann ich über eine Lambda-Funktion parametrisieren. Was heißt das? Die Lambda-Funtion wendet per default die Entität an, aber ich kann es mit einer mächtigeren Lambda-Funktion parametrisieren, sodass ich zum Beispiel einen Text darauf analysiere, wie oft kommen Wörter "case insensitive" vor, oder ich interessiere mich für den ersten Buchstaben jedes Wortes. Das zeige ich Ihnen jetzt. Also in der einfachsten Ausführung funktioniert "count" so wie "wordCount", "python Python pyt", okay. Zählt jedes Wort, genau einmal. Das ist das Gleiche, nein, das ist nicht das Gleiche, jetzt muss ich ein bisschen sauberer schreiben. Jetzt interessiere ich mich für alle Wörter, aber "case insensitive". Also gebe ich eine spezielle Lambda-Funktion mit, die mir alle Wörter "case insensitive" gibt. Und jetzt sehen Sie, wenn ich die ausführe, dass "case insensitive" betrachtet das Wort "python" dreimal drin vorkommt. Wenn ich das Gleiche jetzt mit Grimm's Märchen mache - in diesem Fall muss ich aber den Pfad ein bisschen anpassen, "/home/rainer/grimm.txt". Sehen sie, jetzt habe ich den Text ausgewählt, aber "case insensitive". In diesem Fall habe ich alle Wörter groß dargestellt. Das ganz Gleiche kann ich auch machen, indem ich als Lambda-Funktion die Länge anwende. Wie ist das zu interpretieren? Das heißt, Wörter der Länge "1" kommen 3688 Mal vor, ein Wort mit der Länge "16" kommt einmal vor. Was ist am häufigsten? Tatsächlich Länge "2", nee, Länge "3", okay. Jetzt kann ich mich aber auch nur für den ersten Buchstaben jedes Wortes interessieren. "lambda", ich bilde jedes Wort auf seinen ersten Buchstaben ab, "w: w[0]", und Sie sehen, die "1" kommt 57 Mal vor, - noch sauberer ausgedrückt - Wörter, die mit der Zahl 1 beginnen, kommen 57 Mal vor. Wörter, die mit "V" beginnen, 379 Mal, "Z" 1 Mal, "O" 4567 Mal. In dieser Lektion habe ich Ihnen vorgestellt, wie Sie mit Python sehr komfortabel Strings analysieren können. Sie können erstens die Strings in alle Wörter separieren, und zweitens auch dann noch besondere Lambda-Funktionen auf Ihre Wörter anwenden, sodass Sie Ihren String nach Ihren Kriterien analysieren können.

Python für Systemadministratoren Grundkurs

Lernen Sie die zahlreichen Funktionen der Kernsprache und die wichtisgten Bibliotheken für den Administrationsalltag kennen.

1 Std. 53 min (22 Videos)
Derzeit sind keine Feedbacks vorhanden...
Software:
Exklusiv für Abo-Kunden
Erscheinungsdatum:10.03.2017

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!