[PYTHON] [Programmierer-Neuling "100 Sprachverarbeitung klopft 2020"] Löse Kapitel 2 [Erste Hälfte: 10 ~ 15]

Einführung

Während ich im Internet herumwanderte, stieß ich plötzlich auf eine Site namens "Language Processing 100 Knock 2020". Während ich die Verarbeitung natürlicher Sprache berühren wollte, war das Programmieren ein Neuling für einen Programmierer, der ein wenig Konkurrenz machte. Ich bin ein wenig interessiert, also werde ich es versuchen. Zum Zeitpunkt des Schreibens dieses Artikels ist nur die Hälfte der Gesamtzahl fertig, aber ich werde es in einem Gedenksinn schreiben. Ich werde aufhören, wenn mein Herz bricht. Bitte raten Sie, ob es keinen vorherigen Artikel gibt.

Umwelt und Haltung

Umgebung

Haltung

Ich werde versuchen, so viel wie möglich einen Kommentar zu schreiben, aber wenn Sie interessiert sind, empfehle ich Ihnen, ihn zu überprüfen.

Bisher mit Letztes Mal.

Lösen Sie "Kapitel 2: UNIX-Befehle"

Das folgende Zitat stammt von hier

popular-names.txt ist eine Datei, in der "Name", "Geschlecht", "Anzahl der Personen" und "Jahr" eines in den USA geborenen Babys in einem durch Tabulatoren getrennten Format gespeichert werden. Erstellen Sie ein Programm, das die folgende Verarbeitung ausführt, und führen Sie popular-names.txt als Eingabedatei aus. Führen Sie außerdem denselben Prozess mit einem UNIX-Befehl aus und überprüfen Sie das Ausführungsergebnis des Programms.

Es ist kein Problem, dasselbe mit UNIX-Befehlen zu tun. (Ist das in Ordnung)

10. Zählen der Anzahl der Zeilen

Zählen Sie die Anzahl der Zeilen. Verwenden Sie zur Bestätigung den Befehl wc.

10.py


with open("popular-names.txt") as f:
    print(len(f.readlines()))

Terminal


2780

with open () as ~ erfordert nicht, dass Sie close () verwenden, im Gegensatz zu open () allein. Wenn der Einzug beendet ist, wird er ohne Erlaubnis geschlossen. readlines () ist eine Funktion, die die gesamte Datei als durch Zeilenumbrüche getrennte Liste zurückgibt.

11. Ersetzen Sie die Registerkarten durch Leerzeichen

Ersetzen Sie jedes Tabulatorzeichen durch ein Leerzeichen. Verwenden Sie zur Bestätigung den Befehl sed, den Befehl tr oder den Befehl expand.

11.py


from functools import reduce

with open("popular-names.txt") as f:
    print(reduce(lambda a, b: (a+b).replace("\t", " "), f.readlines()))

Terminal


Mary F 7065 1880
Anna F 2604 1880
Emma F 2003 1880
Elizabeth F 1939 1880
・
・

Code Golf ist immer noch im Gange ... (eine Verschwendung von Mühe). Das Ergebnis ist so lang, dass es nur der Anfang ist. redu () ist eine Funktion höherer Ordnung wie map (). Sie können die Funktion an etwas Iterierbares anpassen. Dies ist eine bequeme Funktion zum Ermitteln der Summe.

12. Speichern Sie die erste Spalte in col1.txt und die zweite Spalte in col2.txt

12.py


with open("popular-names.txt") as a,\
        open("col1.txt", mode="w") as b,\
        open("col2.txt", mode="w") as c:
    for l in a.readlines():
        x, y, *z = l.split("\t")
        b.write(x+"\n")
        c.write(y+"\n")

col1.txt


Mary
Anna
Emma
Elizabeth
・
・

col2.txt


F
F
F
F
・
・

Sie können mehrere mit open () verbinden. Da es horizontal lang zu sein schien, benutzte ich \, um die Linie zu brechen. Für "x, y, * z =" ist der erste Rückgabewert in "x", der zweite in "y" und der Rest in "z". Sie müssen lediglich das, was Sie benötigen, in die Datei schreiben.

13. Führen Sie col1.txt und col2.txt zusammen

Kombinieren Sie col1.txt und col2.txt, die in> 12 erstellt wurden, um eine Textdatei zu erstellen, in der die erste und die zweite Spalte der Originaldatei tabulatorgetrennt angeordnet sind. Verwenden Sie zur Bestätigung den Befehl Einfügen.

13.py


with open("marge.txt", mode="w") as a,\
        open("col1.txt") as b,\
        open("col2.txt") as c:
    for x, y in zip(b.readlines(), c.readlines()):
        a.write(x[:-1]+" "+y)

marge.txt


Mary F
Anna F
Emma F
Elizabeth F
・
・

zip () ist eine Funktion, mit der Elemente mehrerer Listen gleichzeitig abgerufen werden können. Beide Elemente haben am Ende einen Zeilenumbruch, sodass das "x" das letzte Zeichen entfernt.

(Ich schreibe nicht mehr ...)

14. Geben Sie N Zeilen von Anfang an aus

Empfangen Sie die natürliche Zahl N beispielsweise über ein Befehlszeilenargument und zeigen Sie nur die ersten N Zeilen der Eingabe an. Verwenden Sie zur Bestätigung den Befehl head.

14.py


import sys
from functools import reduce

with open(sys.argv[2]) as f:
    S = f.readlines()
    print(reduce(lambda a, b: a+b, S[:min(len(S), int(sys.argv[1]))]),
          end="")

Nein ... redu () ist praktisch ... sys.argv enthält die in der Befehlszeile eingegebene Zeichenfolge, einschließlich" filename.py ". Hier können Sie Befehlszeilenargumente verwenden.

15. Geben Sie die letzten N Zeilen aus

Empfangen Sie die natürliche Zahl N beispielsweise über ein Befehlszeilenargument und zeigen Sie nur die letzten N Zeilen der Eingabe an. Verwenden Sie zur Bestätigung den Befehl tail.

15.py


import sys
from functools import reduce

with open(sys.argv[2]) as f:
    S = f.readlines()
    print(reduce(lambda a, b: a+b, S[max(0, len(S)-int(sys.argv[1])):]),
          end="")

Es ist eine Wiederholung der 14. Frage. Ich verwende "max ()", um ein Überschießen zu vermeiden, da ich Probleme habe, mehr Anforderungen als die Anzahl der Zeilen in der Datei zu erhalten.

abschließend

Dieses Mal hatte ich nicht viel Material (nicht interessant), aber wie war es? Der Kommentar hat wahrscheinlich zugenommen. Je mehr The beigefügt ist, desto mehr ist es zu einem Lehrbuch geworden, aber ich hoffe, dass dies eine der Antworten auf 100 Sprachverarbeitungsprobleme sein wird. Es gibt ziemlich viele Artikel darüber, also schauen Sie bitte vorbei, wenn Sie interessiert sind.

Wir sehen uns im nächsten Artikel, Kapitel 2, Teil 2. Wenn Sie Ideen zur Verkürzung des Codes haben, kommentieren Sie diese bitte.

Na dann.

Recommended Posts

[Programmierer-Neuling "100 Sprachverarbeitung klopft 2020"] Löse Kapitel 2 [Erste Hälfte: 10 ~ 15]
[Programmierer-Neuling "100 Sprachverarbeitung klopfen 2020"] Lösen Sie Kapitel 1
100 Klicks in der Verarbeitung natürlicher Sprache Kapitel 2 Grundlagen des UNIX-Befehls (erste Hälfte)
100 Sprachverarbeitung Knock Kapitel 1
100 Sprachverarbeitung Knock 2020 Kapitel 3
100 Sprachverarbeitung Knock Kapitel 1 (Python)
100 Sprachverarbeitung Knock Kapitel 2 (Python)
100 natürliche Sprachverarbeitung klopft Kapitel 4 Morphologische Analyse (erste Hälfte)
100 natürliche Sprachverarbeitung klopft Kapitel 1 Vorbereitungsbewegung (erste Hälfte)
100 natürliche Sprachverarbeitung klopft Kapitel 3 Reguläre Ausdrücke (erste Hälfte)
100 natürliche Sprachverarbeitung klopft Kapitel 5 Abhängigkeitsanalyse (erste Hälfte)
100 Sprachverarbeitung Knock 2020 Kapitel 2: UNIX-Befehle
100 Sprachverarbeitung Knock 2015 Kapitel 5 Abhängigkeitsanalyse (40-49)
100 Sprachverarbeitungsklopfen mit Python (Kapitel 1)
100 Sprachverarbeitung Knock Kapitel 1 in Python
100 Sprachverarbeitung Knock 2020 Kapitel 9: RNN, CNN
Ich habe versucht, 100 Sprachverarbeitung klopfen 2020: Kapitel 3
100 Sprachverarbeitungsklopfen mit Python (Kapitel 3)
100 Sprachverarbeitung Knock 2020 Kapitel 6: Maschinelles Lernen
100 Sprachverarbeitung Knock Kapitel 4: Morphologische Analyse
100 Sprachverarbeitung Knock 2020 Kapitel 10: Maschinelle Übersetzung (90-98)
100 Sprachverarbeitung Knock 2020 Kapitel 5: Abhängigkeitsanalyse
100 Sprachverarbeitung Knock 2020 Kapitel 7: Word Vector
100 Sprachverarbeitung Knock 2020 Kapitel 8: Neuronales Netz
Ich habe versucht, 100 Sprachverarbeitung klopfen 2020: Kapitel 1
100 Sprachverarbeitung Knock 2020 Kapitel 1: Vorbereitende Bewegung
100 Sprachverarbeitung Knock Kapitel 1 von Python
100 Sprachverarbeitung Knock 2020 Kapitel 3: Reguläre Ausdrücke
100 Language Processing Knock 2015 Kapitel 4 Morphologische Analyse (30-39)
Ich habe versucht, 100 Sprachverarbeitung zu klopfen 2020: Kapitel 2
Ich habe versucht, 100 Sprachverarbeitung zu klopfen 2020: Kapitel 4
Rehabilitation von Python- und NLP-Kenntnissen ab "100 Language Processing Knock 2015" (Kapitel 2, erste Hälfte)
Ich habe mit GiNZA v3.1 Kapitel 4 100 Sprachverarbeitungsklopfen 2020 durchgeführt
100 Sprachverarbeitungsklopfen (2020): 28
Ich habe versucht, die Version 2020 mit 100 Sprachverarbeitung zu lösen [Kapitel 2: UNIX-Befehle 10-14]
100 Sprachverarbeitungsklopfen mit Python (Kapitel 2, Teil 2)
100 Sprachverarbeitungsklopfen mit Python (Kapitel 2, Teil 1)
100 Sprachverarbeitungsklopfen (2020): 38
Ich habe versucht, die Version 2020 mit 100 Sprachverarbeitung zu lösen [Kapitel 2: UNIX-Befehle 15-19]
100 Sprachverarbeitung klopfen 00 ~ 02
100 Sprachverarbeitung klopfen 2020 [00 ~ 39 Antwort]
100 Sprachverarbeitung klopfen 2020 [00-79 Antwort]
100 Sprachverarbeitung klopfen 2020 [00 ~ 69 Antwort]
100 Amateur-Sprachverarbeitungsklopfen: 17
100 Sprachverarbeitung klopfen 2020 [00 ~ 49 Antwort]
100 Sprachverarbeitung Knock-52: Stemming
100 Sprachverarbeitungsklopfen ~ Kapitel 1
100 Amateur-Sprachverarbeitungsklopfen: 07
100 Sprachverarbeitung klopft Kapitel 2 (10 ~ 19)
100 Amateur-Sprachverarbeitungsklopfen: 09
100 Amateur-Sprachverarbeitungsklopfen: 47
100 Sprachverarbeitung Knock-53: Tokenisierung
100 Amateur-Sprachverarbeitungsklopfen: 97
100 Sprachverarbeitung klopfen 2020 [00 ~ 59 Antwort]
100 Amateur-Sprachverarbeitungsklopfen: 67
100 natürliche Sprachverarbeitung klopft Kapitel 3 Reguläre Ausdrücke (zweite Hälfte)
100 natürliche Sprachverarbeitung klopft Kapitel 6 Englische Textverarbeitung (zweite Hälfte)
100 natürliche Sprachverarbeitung klopft Kapitel 5 Abhängigkeitsanalyse (zweite Hälfte)
Rehabilitation von Python- und NLP-Kenntnissen ab "Knock 100 Language Processing 2015" (Kapitel 2, zweite Hälfte)
100 Sprachverarbeitungsklopfen mit Python 2015
100 Sprachverarbeitung Knock-51: Wortausschnitt