Ich habe versucht Sprachverarbeitung 100 Knock 2020. Links zu anderen Kapiteln finden Sie unter hier und den Quellcode unter hier.
Holen Sie sich eine Zeichenfolge, in der die Zeichen der Zeichenfolge "betont" umgekehrt angeordnet sind (vom Ende bis zum Anfang).
000.py
str = 'stressed'
print(str[::-1])
# -> desserts
Ausgabe in umgekehrter Reihenfolge mit Slices. Es ist interessant, solche Operationen einfach schreiben zu können.
Nehmen Sie das 1., 3., 5. und 7. Zeichen der Zeichenkette "Patatokukashi" heraus und erhalten Sie die verkettete Zeichenkette.
001.py
str = "Patatoku Kashii"
print(str[0:8:2])
# ->Pat Auto
Da die ungerade Zahl herausgenommen wird, wird "Schritt" auf "2" gesetzt.
Erhalten Sie die Zeichenkette "Patatokukashi", indem Sie die Zeichen "Pattocar" + "Tax" von Anfang an abwechselnd verbinden.
002.py
str1 = "Pat Auto"
str2 = "Taxi"
print(''.join([s1 + s2 for s1, s2 in zip(str1, str2)]))
# ->Patatoku Kashii
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.
Brechen Sie den Satz auf "Jetzt brauche ich einen Drink, natürlich alkoholisch, nach den schweren Vorlesungen über Quantenmechanik."
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]
Ich habe versucht, die Listeneinschlussnotation zu verwenden. Dies kann praktisch sein, da Sie beim Erstellen einer neuen Liste in wenigen Zeilen schreiben können.
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.
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}
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.
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']
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.
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.
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
Es scheint, dass die Summenmenge, der Sake-Brauer und die Differenzmenge auch mit "union ()", "intersection ()" und "different ()" durchgeführt werden können.
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.
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
nichts Besonderes.
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.
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
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.
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.
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.
[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