[PYTHON] Ich habe versucht, 100 Sprachverarbeitung klopfen 2020: Kapitel 1

Einführung

Ich habe versucht Sprachverarbeitung 100 Knock 2020. Links zu anderen Kapiteln finden Sie unter hier und den Quellcode unter hier.

Kapitel 1 Vorbereitende Bewegung

Nr.00 Umgekehrte Reihenfolge der Zeichenketten

Holen Sie sich eine Zeichenfolge, in der die Zeichen der Zeichenfolge "betont" umgekehrt angeordnet sind (vom Ende bis zum Anfang).

Antwort

000.py


str = 'stressed'
print(str[::-1])

# -> desserts
Kommentare

Ausgabe in umgekehrter Reihenfolge mit Slices. Es ist interessant, solche Operationen einfach schreiben zu können.

Nr.01 "Patatokukashi"

Nehmen Sie das 1., 3., 5. und 7. Zeichen der Zeichenkette "Patatokukashi" heraus und erhalten Sie die verkettete Zeichenkette.

Antwort

001.py


str = "Patatoku Kashii"
print(str[0:8:2])

# ->Pat Auto
Kommentare

Da die ungerade Zahl herausgenommen wird, wird "Schritt" auf "2" gesetzt.

Nr.02 "Pat car" + "Tax" = "Patatokukasie"

Erhalten Sie die Zeichenkette "Patatokukashi", indem Sie die Zeichen "Pattocar" + "Tax" von Anfang an abwechselnd verbinden.

Antwort

002.py


str1 = "Pat Auto"
str2 = "Taxi"
print(''.join([s1 + s2 for s1, s2 in zip(str1, str2)]))

# ->Patatoku Kashii
Kommentare

Zuerst dachte ich darüber nach, mit index zu schleifen, Es scheint, dass Sie mit der Funktion "zip" mehrere Funktionen gleichzeitig ausführen können.

Nr.03 Umfangsrate

Brechen Sie den Satz auf "Jetzt brauche ich einen Drink, natürlich alkoholisch, nach den schweren Vorlesungen über Quantenmechanik."

Antwort

003.py


sentense = "Now I need a drink, alcoholic of course, after the heavy lectures involving quantum mechanics."
print([len(item) for item in sentense.replace(',', "").replace('.', "").split(' ')])

# -> [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7, 9]
Kommentare

Ich habe versucht, die Listeneinschlussnotation zu verwenden. Dies kann praktisch sein, da Sie beim Erstellen einer neuen Liste in wenigen Zeilen schreiben können.

Nr.04 Elementsymbol

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.

Antwort

004.py


str = "Hi He Lied Because Boron Could Not Oxidize Fluorine. New Nations Might Also Sign Peace Security Clause. Arthur King Can."
str = str.split()
num = [1, 5, 6, 7, 8, 9, 15, 16, 19]
dict = {}

for i_str in range(0, len(str)):
    if i_str + 1 == 12:
        dict[str[11][:3:2]] = 12  # 'Mg'Ausgabe von
    elif i_str + 1 in num:
        dict[str[i_str][:1]] = i_str + 1
    else:
        dict[str[i_str][:2]] = i_str + 1
print(dict)

# -> {'H': 1, 'He': 2, 'Li': 3, 'Be': 4, 'B': 5, 'C': 6, 'N': 7, 'O': 8, 'F': 9, 'Ne': 10, 'Na': 11, 'Mg': 12, 'Al': 13, 'Si': 14, 'P': 15, 'S': 16, 'Cl': 17, 'Ar': 18, 'K': 19, 'Ca': 20}
Kommentare

Ich denke, der Code ist etwas lang ... Wenn Sie die Regeln befolgen, wird der "Mg" -Teil als "Mi" ausgegeben und Sie werden besorgt sein, sodass er mit der "if" -Anweisung verarbeitet wird.

No.05 n-gram

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.

Antwort

005.py


def n_gram(list, n):
    return ["".join(list[list_i: list_i + n]) for list_i in range(len(list) - n + 1)]

sentence = "I am an NLPer"
print(f"Wort bi-gran:  {n_gram(sentence.split(), 2)}")
print(f"Zeichen bi-gram:  {n_gram(sentence, 2)}")

# ->Wort bi-gran:  ['Iam', 'aman', 'anNLPer']
#Zeichen bi-gram:  ['I ', ' a', 'am', 'm ', ' a', 'an', 'n ', ' N', 'NL', 'LP', 'Pe', 'er']
Kommentare

Verwenden Sie join, um die Elemente der Liste zu verbinden. Das Wort Bi-Gramm und das Zeichen Bi-Gramm verarbeiten sich ähnlich, daher habe ich versucht, sie funktionsfähig zu machen, aber ich habe das Gefühl, dass ich sie gut schreiben konnte.

Nr.06 eingestellt

Suchen Sie den in "paraparaparadise" und "Absatz" enthaltenen Satz von Zeichen-Bi-Gramm als X bzw. Y und suchen Sie den Summensatz, den Produktsatz und den Differenzsatz von X bzw. Y. Finden Sie außerdem heraus, ob das Bi-Gramm in X und Y enthalten ist.

Antwort

006.py


str1 = "paraparaparadise"
str2 = "paragraph"

def n_gram(list, n):
    return {"".join(list[list_i: list_i + n]) for list_i in range(len(list) - n + 1)}

X = n_gram(str1, 2)
Y = n_gram(str2, 2)
print(f"Summensatz:{X | Y}")
print(f"Produktset:{X & Y}")
print(f"Differenzsatz:{X - Y}")

se = {"se"}
print(f"Ist se in X enthalten? ::{se <= X}")
print(f"Ist se in Y enthalten? ::{se <= Y}")

# ->Summensatz:{'ph', 'di', 'ar', 'gr', 'ad', 'is', 'se', 'ap', 'pa', 'ra', 'ag'}
#Produktset:{'ra', 'ap', 'ar', 'pa'}
#Differenzsatz:{'is', 'di', 'se', 'ad'}
#Ist se in X enthalten? : Wahr
#Ist se in Y enthalten? : Falsch
Kommentare

Es scheint, dass die Summenmenge, der Sake-Brauer und die Differenzmenge auch mit "union ()", "intersection ()" und "different ()" durchgeführt werden können.

Nr.07 Satzerzeugung nach Vorlage

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.

Antwort

007.py


def templete(x, y, z):
    return f"{x}von Zeit{y}Ist{z}"

print(templete(12, "Temperatur", 22.4))

# ->Die Temperatur um 12 Uhr ist 22.4
Kommentare

nichts Besonderes.

Code Nr. 08

Implementieren Sie die Funktionsverschlüsselung, die jedes Zeichen der angegebenen Zeichenfolge gemäß den folgenden Spezifikationen konvertiert. ・ Wenn es sich um ein niedrigeres Alphabet handelt, ersetzen Sie es durch das Zeichen (219 - Zeichencode). ・ Andere Zeichen werden unverändert ausgegeben Verwenden Sie diese Funktion, um englische Nachrichten zu verschlüsseln / entschlüsseln.

Antwort

008.py


def cipher(sentence):
    return "".join([chr(219 - ord(ch)) if ch.islower() else ch for ch in sentence])

sen = "FireWork"
print(cipher(sen))
print(cipher(cipher(sen)))

# -> FrivWlip
#    FireWork

Kommentare

Es scheint [Atbash-Code] zu sein (https://en.wikipedia.org/wiki/Atbash). Es wird durch zweimaliges Übergeben der Verschlüsselungsfunktion wiederhergestellt.

No.09 Typoglycemia

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.

Antwort

009.py


import random

sentence = "I couldn’t believe that I could actually understand what I was reading : the phenomenal power of the human mind."
new_sent = ""
for item in sentence.split():
    if len(item) > 4:
        new_item = []
        new_item.extend(item[0])
        new_item.extend(random.sample(item[1:-1], len(item) - 2))
        new_item.extend(item[-1])
        item = new_item
    new_sent += "".join(item) + " "

print(new_sent)

# -> I could’nt blveeie that I cuold atlculay utnresnadd what I was renadig : the pamohneenl pewor of the human mdin. 
Kommentare

Zusätzlich zu random.sample gibt es random.shuffle als Funktion, um die Elemente der Liste zufällig anzuordnen. Die Shuffle-Funktion sortiert die ursprüngliche Liste, daher denke ich, dass der Code etwas kürzer sein kann.

Referenz

[Upura / nlp100v2020 100 Sprachverarbeitung Knock 2020] wird mit Python gelöst](https://github.com/upura/nlp100v2020) Zusammenfassung der Amateur-Sprachverarbeitung mit 100 Klopfen

Recommended Posts

Ich habe versucht, 100 Sprachverarbeitung klopfen 2020: Kapitel 3
Ich habe versucht, 100 Sprachverarbeitung klopfen 2020: Kapitel 1
Ich habe versucht, 100 Sprachverarbeitung zu klopfen 2020: Kapitel 2
Ich habe versucht, 100 Sprachverarbeitung zu klopfen 2020: Kapitel 4
Ich habe versucht, 100 Sprachverarbeitung klopfen 2020
100 Sprachverarbeitung Knock 2020 Kapitel 1
100 Sprachverarbeitung Knock Kapitel 1
100 Sprachverarbeitung Knock 2020 Kapitel 3
100 Sprachverarbeitung Knock 2020 Kapitel 2
100 Sprachverarbeitung Knock Kapitel 1 (Python)
100 Sprachverarbeitung Knock Kapitel 2 (Python)
Ich habe versucht, die Version 2020 mit 100 Sprachverarbeitung zu lösen [Kapitel 2: UNIX-Befehle 10-14]
Ich habe versucht, die Version 2020 mit 100 Sprachverarbeitung zu lösen [Kapitel 2: UNIX-Befehle 15-19]
100 Sprachverarbeitungsklopfen mit Python (Kapitel 1)
100 Sprachverarbeitung Knock Kapitel 1 in Python
100 Sprachverarbeitung Knock 2020 Kapitel 4: Morphologische Analyse
100 Sprachverarbeitung Knock 2020 Kapitel 9: RNN, CNN
100 Sprachverarbeitungsklopfen (2020): 28
100 Sprachverarbeitungsklopfen: Kapitel 1 Vorbereitungsbewegung
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 8: Neuronales Netz
Python-Anfänger versucht 100 Sprachverarbeitung klopfen 2015 (05 ~ 09)
100 Sprachverarbeitungsklopfen (2020): 38
100 Sprachverarbeitung klopfen 00 ~ 02
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)
Python-Anfänger versucht 100 Sprachverarbeitung klopfen 2015 (00 ~ 04)
Ich habe mit GiNZA v3.1 Kapitel 4 100 Sprachverarbeitungsklopfen 2020 durchgeführt
100 Sprachverarbeitungsklopfen mit Python (Kapitel 2, Teil 2)
[Programmierer-Neuling "100 Sprachverarbeitung klopfen 2020"] Lösen Sie Kapitel 1
Ich habe versucht, natürliche Sprache mit Transformatoren zu verarbeiten.
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 Sprachverarbeitungsklopfen ~ Kapitel 1
100 Amateur-Sprachverarbeitungsklopfen: 07
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 Sprachverarbeitung Knock UNIX-Befehle in Kapitel 2
100 Sprachverarbeitung Klopfen Sie auf reguläre Ausdrücke, die Sie in Kapitel 3 gelernt haben
Ich habe versucht, die Version 2020 mit 100 Sprachverarbeitung zu lösen [Kapitel 3: Reguläre Ausdrücke 25-29]
100 Sprachverarbeitungsklopfen mit Python 2015
100 Sprachverarbeitung Knock-58: Extraktion von Taple
100 Sprachverarbeitung Knock-57: Abhängigkeitsanalyse
100 Sprachverarbeitung Knock-50: Satzumbruch
[Ich habe es versucht] Nand2 Tetris Kapitel 6
100 Sprachverarbeitung Knock-25: Vorlagenextraktion
Sprachverarbeitung 100 Knock-87: Wortähnlichkeit
100 Sprachverarbeitung Knock-56: Co-Referenz-Analyse
Lösen von 100 Sprachverarbeitungsklopfen 2020 (01. "Patatokukashi")
100 Amateur-Sprachverarbeitungsklopfen: Zusammenfassung