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.
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.
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)
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.
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.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.
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 ...)
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.
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.
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