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 ansprechen 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.
Holen Sie sich eine Zeichenfolge, in der die Zeichen der Zeichenfolge "betont" umgekehrt angeordnet sind (vom Ende bis zum Anfang).
00.py
print("stressed"[::-1])
Terminal
desserts
Es ist ein Prozess, der Python-Slices verwendet. Ich sehe oft Scheiben, wenn ich ein Wettkampfprofi bin. Slices können "[start: stop: step]" angeben.
Nehmen Sie das 1., 3., 5. und 7. Zeichen der Zeichenkette "Patatokukashi" heraus und erhalten Sie die verkettete Zeichenkette.
01.py
print("Patatoku Kashii"[::2])
Terminal
Pat Auto
Das Extrahieren aller anderen Zeichen aus dem ersten Zeichen ist mit Slices einfach.
Erhalten Sie die Zeichenkette "Patatokukashi", indem Sie die Zeichen "Pattocar" + "Tax" von Anfang an abwechselnd verbinden.
02.py
print("".join([ i + j for i, j in zip("Pat Auto", "Taxi")]))
Terminal
Patatoku Kashii
Die Codelänge wird durch die Verwendung von join () verkürzt, mit der die Liste in eine Zeichenfolge, eine Listeneinschlussnotation und zip () konvertiert wird, mit denen der Inhalt mehrerer Listen abgerufen wird (warum).
Brechen Sie den Satz auf "Jetzt brauche ich einen Drink, natürlich Alkoholiker, nach den schweren Vorlesungen über Quantenmechanik."
Ver bedeutungslos verkürzt
03.py
print(*(map(lambda x: len(x),"Now I need a drink, alcoholic of course, after the heavy lectures involving quantum mechanics.".translate(str.maketrans({",":"",".":""})).split())))
Terminal
3 1 4 1 5 9 2 6 5 3 5 8 9 7 9
Ich kann immer noch in einer Zeile gehen ... (Kein Sinn für die Richtung der Anstrengung)
Die Kartenfunktion führt für jedes Listenelement eine Funktion aus und gibt ein Kartenobjekt zurück.
Diese Funktion wird jetzt durch einen Lambda-Ausdruck definiert. Der Inhalt des Ausdrucks wird so definiert, dass er die Länge der angegebenen Zeichenfolge zurückgibt.
translate ()
ersetzt die Zeichenfolge basierend auf der von str.maketrans ()
erstellten Konvertierungstabelle.
Außerdem wird split ()
durch ein Leerzeichen getrennt, um eine Liste zu erstellen.
Vielleicht eine anständige ver
03.py
s = "Now I need a drink, alcoholic of course, after the heavy lectures involving quantum mechanics."
l = s.translate(str.maketrans({",": "", ".": ""})).split()
a = []
for i in l:
a.append(len(i))
print(*a)
Was Sie tun, ist dasselbe wie das kürzere.
Das einzige, was sich geändert hat, ist, dass das, was mit der Map-Funktion gemacht wurde, zu einer for-Anweisung gemacht wird. append ()
fügt am Ende der Liste ein Element hinzu.
Der Grund für das Hinzufügen von "*" beim Drucken ist das Erweitern und Anzeigen der Liste.
Brechen Sie den Satz „Hi He Lied, weil Bor Fluor nicht oxidieren konnte. Neue Nationen könnten auch eine Friedenssicherheitsklausel unterzeichnen. Arthur King Can.“ In die Wörter 1, 5, 6, 7, 8, 9, 15, 16 auf. Das 19. Wort ist das erste Zeichen, und die anderen Wörter sind die ersten beiden Zeichen und das assoziative Array (Wörterbuchtyp oder Kartentyp) von der extrahierten Zeichenfolge bis zur Position des Wortes (welche Anzahl von Wörtern von Anfang an) Erstellen.
04.py
s="Hi He Lied Because Boron Could Not Oxidize Fluorine. New Nations Might Also Sign Peace Security Clause. Arthur King Can.".split()
l=[1,5,6,7,8,9,15,16,19]
dic={}
for i in range(len(s)):
if i in l:
dic[s[i][0]]=i+1
else:
dic[s[i][:2]]=i+1
print(dic)
Terminal
{'Hi': 1, 'H': 2, 'Li': 3, 'Be': 4, 'Bo': 5, 'C': 20, 'N': 10, 'O': 8, 'F': 9, 'Na': 11, 'Mi': 12, 'Al': 13, 'Si': 14, 'Pe': 15, 'S': 16, 'Ar': 18, 'Ki': 19}
Ich dachte darüber nach und machte es in mehrere Zeilen. Wenn "i" in "l" ist, wird das erste Zeichen erzeugt, andernfalls ist das zweite Zeichen der Schlüssel.
Erstellen Sie eine Funktion, die aus einer bestimmten Sequenz (Zeichenfolge, Liste usw.) ein n-Gramm erstellt. Verwenden Sie diese Funktion, um das Wort Bi-Gramm und den Buchstaben Bi-Gramm aus dem Satz "Ich bin ein NLPer" zu erhalten.
Informationen zu n-Gramm finden Sie unter hier.
05.py
def N_gram(s, n=1):
return [s[i:i+n] for i in range(len(s)-n+1)]
s = "I am an NLPer"
print(*(N_gram(s, 2)))
print(*(N_gram(s.split(), 2)))
Terminal
I a am m a an n N NL LP Pe er
['I', 'am'] ['am', 'an'] ['an', 'NLPer']
Die Implementierung von N_gram ist viel kompakter geworden.
Es scheint so, weil das Ausführungsergebnis ein Leerzeichen enthält ...
Die Funktion range ()
ist ein Generator, der ganze Zahlen von 0 bis weniger als die angegebene Anzahl in der angegebenen Reihenfolge zurückgibt. Sie können auch den 0-Teil angeben.
N = 1
im Funktionsdeklarationsteil ist ein Vorlagenargument. Wenn nicht angegeben, bedeutet n 1.
Suchen Sie den in "paraparaparadise" und "Absatz" enthaltenen Satz von Zeichen-Bi-Gramm als X bzw. Y und suchen Sie die Summen-, Produkt- und Differenzsätze von X bzw. Y. Finden Sie außerdem heraus, ob das Bi-Gramm in X und Y enthalten ist.
Das Parapara-Paradies scheint vorerst ein Tanzspiel zu sein.
06.py
def N_gram(s, n=1):
return {s[i:i + n] for i in range(len(s) - n + 1)}
s1 = "paraparaparadise"
s2 = "paragraph"
X = N_gram(s1, 2)
Y = N_gram(s2, 2)
s_union = X | Y
s_intersection = X & Y
s_difference = X - Y
print(*s_union)
print(*s_intersection)
print(*s_difference)
if "se" in X:
print("\"se\" is in X")
if "se" not in Y:
print("\"se\" is not in Y")
Terminal
pa ar ad ap is se di ag ph gr ra
ar pa ra ap
is ad se di
"se" is in X
"se" is not in Y
Es ist wie Schreiben, als ob Sie die Zukunft sehen können. Es ist möglich, "set.union", "set.intersection ()" und "set.difference ()" zu verwenden, aber persönlich ist es einfacher, "|", "&", "-" zu verwenden. Also habe ich das gemacht.
Implementieren Sie eine Funktion, die die Argumente x, y, z verwendet und die Zeichenfolge "y bei x ist z" zurückgibt. Stellen Sie außerdem x = 12, y = "Temperatur", z = 22,4 ein und überprüfen Sie das Ausführungsergebnis.
07.py
def temp(x=12, y="Temperatur", z=22.4):
return str(x) + "von Zeit" + str(y) + "Ist" + str(z)
print(temp())
Terminal
Die Temperatur um 12 Uhr ist 22.4
05 . Ich verwende das in n-Gramm erwähnte Template-Argument. Wenn Sie eine Zuweisungsanweisung in das zum Zeitpunkt der Funktionsdeklaration geschriebene Argument schreiben, wird die Funktion mit diesem Wert ausgeführt, auch wenn zum Zeitpunkt der Ausführung kein Argument angegeben ist.
Implementieren Sie die Funktionsverschlüsselung, die jedes Zeichen der angegebenen Zeichenfolge gemäß den folgenden Spezifikationen konvertiert. ・ Bei Kleinbuchstaben durch (219 - Zeichencode) ersetzen ・ Andere Zeichen werden unverändert ausgegeben Verwenden Sie diese Funktion, um englische Nachrichten zu verschlüsseln / entschlüsseln.
08.py
def cipher(s):
return "".join(c.islower()*chr(219-ord(c))+(not c.islower())*c for c in s)
print(cipher("The quick brown fox jumps over the lazy dog."))
print(cipher(cipher("The quick brown fox jumps over the lazy dog.")))
Terminal
Tsv jfrxp yildm ulc qfnkh levi gsv ozab wlt.
The quick brown fox jumps over the lazy dog.
Ich habe mein Bestes gegeben, um daraus eine Party zu machen. (Nein nicht) Dieses Mal nutze ich die Tatsache, dass der Bool-Typ von Python eine Unterklasse vom Typ int ist. islower () ist eine Funktion, die bestimmt, ob sie niedriger ist. 219 - Der Zeichencode ist, weil er nach zwei Mal gut zurückkehrt.
Erstellen Sie ein Programm, das die Reihenfolge der anderen Zeichen zufällig neu anordnet, wobei das erste und das letzte Zeichen jedes Wortes für die Wortfolge durch Leerzeichen getrennt bleiben. Wörter mit einer Länge von 4 oder weniger werden jedoch nicht neu angeordnet. Geben Sie einen geeigneten englischen Satz ein (zum Beispiel: "Ich konnte nicht glauben, dass ich tatsächlich verstehen konnte, was ich las: die phänomenale Kraft des menschlichen Geistes.") Und überprüfen Sie das Ausführungsergebnis.
Typogrisämie ist ein Phänomen, bei dem einige Wörter in einem Satz korrekt gelesen werden können, auch wenn die Reihenfolge außer dem ersten und dem letzten Buchstaben geändert wird (jedoch städtische Legende /) Netmeme).
09.py
import random
def typoglycemia(s):
return s if len(s) < 4 else s[0] + "".join(random.sample([i for i in s[1: -1]], len(s)-2)) + s[-1]
s = "I couldn't believe that I could actually understand what I was reading : the phenomenal power of the human mind .".split()
print(" ".join(map(lambda x: typoglycemia(x), s)))
Ich habe die Funktion auch in eine Zeile gesetzt (warum).
Wenn es weniger als 4 Zeichen enthält, bleibt es unverändert, andernfalls wird es gemischt, verkettet und zurückgegeben, mit Ausnahme des letzten Zeichens des ersten Zeichens.
Im Gegensatz zu "random.shuffle ()" ist "random.sample ()" dadurch gekennzeichnet, dass das erste Argument unveränderlich (nicht modifizierbar) sein kann. Außerdem hat random.shuffle ()
keinen Rückgabewert, aber random.sample ()
gibt eine Liste zurück.
Ich habe die Probleme in Kapitel 1 gelöst, aber wie war es? Ich denke, es gab viele seltsame Implementierungen, aber das ist verspielt. Bitte verzeihen Sie mir vorerst, da ich es richtig implementieren muss, auch wenn es mir in der zweiten Hälfte nicht gefällt. Ab dem nächsten Kapitel hoffe ich, die Anzahl der Kommentare zu erhöhen.
Bitte kommentieren Sie, wenn Sie "dies wird den Code verkürzen" oder "das ist besser" mögen.
Wir sehen uns im Artikel in Kapitel 2.
Recommended Posts