Sprachverarbeitung 100 Knock 2020 Version wurde veröffentlicht, daher werde ich es bei dieser Gelegenheit lösen. Da es sich um einen Abschlag meines Jupyter-Notebooks handelt, ist die Erklärung weniger. Ich habe auch auf Qiita gepostet, was ich auf meinem Blog und GitHub zusammenstellen möchte, in der Hoffnung, dass es so hilfreich wie möglich sein würde. Ich kann den Lehrern nicht helfen, die so wunderbare Unterrichtsmaterialien zur Verfügung stellen können.
Kapitel 5 und darüber hinaus werden hinzugefügt, sobald sie abgeschlossen sind.
(Korrigiert am 15.04.2020) Überarbeitet von @ hi-asano, dem Autor von "Version 100 Sprachverarbeitung Knock 2020 veröffentlicht! Was hat sich geändert?" Hat. Ich werde die Einschlussnotation 04 hinzufügen, wenn ich Zeit habe.
Holen Sie sich eine Zeichenfolge, in der die Zeichen der Zeichenfolge "betont" umgekehrt angeordnet sind (vom Ende bis zum Anfang).
def reverse_strings(s):
return s[::-1]
print(reverse_strings("stressed"))
desserts
Nehmen Sie das 1., 3., 5. und 7. Zeichen der Zeichenkette "Patatokukashi" heraus und erhalten Sie die verkettete Zeichenkette.
def extract_strings(s):
return s[::2]
print(extract_strings("Patatoku Kashii"))
Pat Auto
Erhalten Sie die Zeichenkette "Patatokukashi", indem Sie die Zeichen "Pattocar" + "Tax" von Anfang an abwechselnd verbinden.
#Kann nur mit Zeichenfolgen gleicher Länge verwendet werden
def connect_strings(sone, stwo):
result = "".join(s1+s2 for s1,s2 in zip(sone, stwo))
return result
print(connect_strings("Pat Auto", "Taxi"))
Patatoku Kashii
Brechen Sie den Satz „Jetzt brauche ich nach den schweren Vorlesungen über Quantenmechanik einen Alkoholiker auf.“ In Wörter auf und erstellen Sie eine Liste mit der Anzahl der (alphabetischen) Zeichen in jedem Wort in der Reihenfolge ihres Auftretens.
Das Ausgabeergebnis ist das Umfangsverhältnis.
Ich war nicht in der Lage, es ordentlich zu schreiben, aber ich wollte es so kurz wie möglich machen, indem ich Kommas und Punkte mit regulären Ausdrücken entfernte.
Die Zeichenanzahl wird mit map
verarbeitet, ohne die for-Anweisung zu drehen.
import re
def circumference(s):
splited = re.split('\s', re.sub(r'[,.]', '', s))
words_len = list(map(len, splited))
return words_len
sentence = "Now I need a drink, alcoholic of course, after the heavy lectures involving quantum mechanics."
print(circumference(sentence))
[3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7, 9]
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
Sie sollten in der Lage sein, mit Zip- und Inklusionsnotation schöner zu schreiben. Ich würde es begrüßen, wenn Sie mir sagen könnten, ob es einen guten Weg gibt. .. ..
def element_symbol(s, number):
out_dict = {}
splited = re.split('\s', s)
for i, w in enumerate(splited, start=1):
if i in number:
out_dict[w[:1]] = i
else :
out_dict[w[:2]] = i
return out_dict
sentence = "Hi He Lied Because Boron Could Not Oxidize Fluorine. New Nations Might Also Sign Peace Security Clause. Arthur King Can."
only_first_number = [1, 5, 6, 7, 8, 9, 15, 16, 19]
print(element_symbol(sentence, only_first_number))
{'H': 1, 'He': 2, 'Li': 3, 'Be': 4, 'B': 5, 'C': 6, 'N': 7, 'O': 8, 'F': 9, 'Ne': 10, 'Na': 11, 'Mi': 12, 'Al': 13, 'Si': 14, 'P': 15, 'S': 16, 'Cl': 17, 'Ar': 18, 'K': 19, 'Ca': 20}
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.
Laut Wiki ist N-Gramm wie folgt
Eine Methode zum Zerlegen des Suchziels nach Zeichen anstelle von Wörtern und zum Ermitteln der Häufigkeit des Auftretens einschließlich der folgenden N-1-Zeichen. Wenn der Wert von N 1 ist, heißt er "Unigramm", wenn er 2 ist, heißt er "Bi-Gramm", und wenn er 3 ist, heißt er "Trigramm".
~~ Dieses Mal habe ich beschlossen, das Wort n-Gramm und das Zeichen n-Gramm als separate Funktionen zu implementieren. ~~ Es kann für allgemeine Zwecke verwendet werden, indem die angegebenen Zeichenfolgen durch "split" getrennt und als Liste übergeben werden.
def generate_ngram(sentence, N):
return [sentence[i:i+N] for i in range(len(sentence) - N + 1)]
input_text = "I am an NLPer"
print("Wort bi-gram : " + str(generate_ngram(input_text.split(' '), 2)))
print("Zeichen bi-gram : " + str(generate_ngram(input_text, 2)))
Wörter Bi-Gramm: [['Ich', 'Bin'], ['Bin', 'Ein'], ['Ein', 'NLPer']] Zeichen-Bi-Gramm: ['Ich', 'a', 'bin', 'm', 'a', 'an', 'n', 'N', 'NL', 'LP', 'Pe', 'äh']
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.
X_text = "paraparaparadise"
Y_text = "paragraph"
X = set(generate_ngram(X_text, 2))
Y = set(generate_ngram(Y_text, 2))
print("Summensatz: " + str(X.union(Y)))
print("Produktset: " + str(X.intersection(Y)))
print("Differenz gesetzt: " + str(X.difference(Y)))
print("Ist se in X enthalten: " + str('se' in X))
print("Ist se in Y enthalten: " + str('se' in Y))
Summensatz: {'pa', 'di', 'ph', 'gr', 'is', 'ag', 'ra', 'ad', 'se', 'ap', 'ar'} Produktmenge: {'ap', 'pa', 'ra', 'ar'} Differenz gesetzt: {'se', 'is', 'di', 'ad'} Ist se in X enthalten: True Ist se in Y enthalten: False
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.
Beachten Sie, dass "f-string" nicht vor Python 3.6 verwendet werden kann. Umgekehrt wird "f-string" in früheren Artikeln nicht verwendet. Grundlegende Informationen finden Sie hier.
def generate_temp(x, y, z):
return f"{x}von Zeit{y}Ist{z}"
print(generate_temp(12, "Temperatur", 22.4))
Die Temperatur um 12:00 Uhr beträgt 22,4
Implementieren Sie die Funktionsverschlüsselung, die jedes Zeichen der angegebenen Zeichenfolge mit den folgenden Spezifikationen konvertiert. ・ Wenn es in Kleinbuchstaben geschrieben ist, 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.
Es scheint, dass die eingebaute Funktion ord ()
den Unicode-Codepunkt des Zeichens erhalten kann, also habe ich versucht, ihn zu verwenden.
Es ist schnell durch einen regulären Ausdruck zu ersetzen, da Sie nur den Ausdruck konvertieren müssen, der dem Kleinbuchstaben entspricht.
def chipher(s):
result = ""
for character in s:
result += re.sub(r'[a-z]', chr(219 - ord(character)), character)
return result
sentence = "Hi, Thank you for reading my article!!"
print(chipher(sentence))
print(chipher(chipher(sentence)))
Hr, Tszmp blf uli ivzwrmt nb zigrxov!!
Hi, Thank you for reading my article!!
@ suzu6 verwendete die Lambda-Formel, um sie besser zu lösen. Vielmehr war es nicht sehr gut, eine for
-Schleife auszuführen, um sie durch einen regulären Ausdruck zu ersetzen.
Im folgenden Beispiel wird m Match Object und group (https://note.nkmk.me/python-re-match-object-span-group/) verwendet, um die übereinstimmende Zeichenfolge abzurufen. )
Muss verwendet werden. Holen Sie sich die gesamte Zeichenfolge mit "Gruppe (0)" übereinstimmen.
def cipher(src):
return re.sub(r'[a-z]', lambda m: chr(219 - ord(m.group(0))), src)
text = "Hi He Lied Because Boron Could Not Oxidize Fluorine. New Nations Might Also Sign Peace Security Clause. Arthur King Can."
#Verschlüsselung
print(cipher(text))
Hr Hv Lrvw Bvxzfhv Blilm Clfow Nlg Ocrwrav Foflirmv. Nvd Nzgrlmh Mrtsg Aohl Srtm Pvzxv Svxfirgb Cozfhv. Aigsfi Krmt Czm.
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.
Ich denke, es wäre besser gewesen, die Listeneinschlussnotation nicht zu verwenden, aber da sie genau die richtige Länge für die Praxis hatte, habe ich die Listeneinschlussnotation verwendet. Ein Satz, der irgendwie gelesen werden kann, wird ausgegeben.
import random
def mixing_word(sentence):
splited = sentence.split(" ")
randomed_list = [ s[0] + ''.join(random.sample(s[1:-1], len(s)-2)) + s[-1] if len(s) >= 4 else s for s in splited]
return " ".join(randomed_list)
input_text = "I couldn’t believe that I could actually understand what I was reading : the phenomenal power of the human mind."
mixing_word(input_text)
'I cndolu’t beveile taht I colud aulltacy unndtserad what I was raednig : the penhaneoml pwoer of the hmuan mdin.'
Ich bin eine biobasierte Person, die das Programmieren selbst gelernt hat, kein Wettkampfprofi. Ich würde mich freuen, wenn Sie mir etwas Falsches sagen könnten.
Recommended Posts