Nachdem ich 2015 100 Sprachverarbeitungsklopfen gemacht hatte, bekam ich viele grundlegende Python-Fähigkeiten, Kapitel 1

Einführung

Nachdem ich Python studiert hatte, versuchte ich Language Processing 100 Knock 2015. Versuchen Sie es zuerst, ohne etwas zu betrachten, und versuchen Sie es dann erneut mit einem besseren (intelligenten) Schreibstil, der sich auf den Schreibstil der anderen Person von 100 Schlägen bezieht.

Bessere Schreibreferenzen sind am Ende aufgeführt.

Kapitel 1: Vorbereitende Bewegung

00. Umgekehrte Reihenfolge der Zeichenfolgen

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

Code


input_str = 'stressed'
result = input_str[::-1]
print(result)

Ausgabeergebnis


desserts

Besserer Code

Wenn Sie einen negativen Wert für den Slice-Schritt festlegen, wird dieser am Ende angezeigt. Es ist unwahrscheinlich, dass sich daran viel mehr ändert.

01. "Patatokukashi"

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

Code


input_str = 'Patatoku Kashii'
result = ''
for index, s in enumerate(input_str):
   if index % 2 == 0:
       result += s
print(result)

Ausgabeergebnis


Pat Auto

Besserer Code

Dies ist auch bei Slices in Ordnung.

Code


input_str = 'Patatoku Kashii'
result = input_str[::2]
print(result)

02. "Patcar" + "Tax" = "Patatokukasie"

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

Code


p = 'Pat Auto'
t = 'Taxi'
result = ''
for i in range(len(p)):
   result += p[i]
   result += t[i]
print(result)

Ausgabeergebnis


Patatoku Kashii

Besserer Code

Machen Sie eine Liste von "[" Patter "," Toku "," Kashi "," ー ー "] und" join () ".

Code


p = 'Pat Auto'
t = 'Taxi'
result = ''.join([char1 + char2 for char1, char2 in zip(p, t)])
print(result)

03. Umfangsrate

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

Code


input_str = 'Now I need a drink, alcoholic of course, after the heavy lectures involving quantum mechanics.'
result = []
input_str = input_str.replace(',', '').replace('.', '').split(' ')
for s in input_str:
   result.append(len(s))
print(result)

Ausgabeergebnis


[3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7, 9]

Besserer Code

Das Argument "split ()" muss nicht angegeben werden, da es standardmäßig "" ist.

Code


input_str = 'Now I need a drink, alcoholic of course, after the heavy lectures involving quantum mechanics.'
result = []
input_str = input_str.replace(',', '').replace('.', '').split()
for s in input_str:
   result.append(len(s))
print(result)

04. Elementsymbol

Teilen Sie den Satz "Hi He Lied, weil Bor Fluor nicht oxidieren konnte. Neue Nationen könnten auch die Friedenssicherheitsklausel unterzeichnen. Arthur King Can." In die Wörter 1, 5, 6, 7, 8, 9, 15, 16, 19 auf Das erste Wort ist das erste Zeichen, und die anderen Wörter sind die ersten beiden Zeichen. Erstelle es.

Code


input_str = 'Hi He Lied Because Boron Could Not Oxidize Fluorine. New Nations Might Also Sign Peace Security Clause. Arthur King Can.'
single_ary = [1, 5, 6, 7, 8, 9, 15, 16, 19]
result = {}
input_str = input_str.replace('.', '').split(' ')
for index, s in enumerate(input_str):
    if index + 1 in single_ary:
        result[s[0]] = index
    else:
        result[s[0] + s[1]] = index
print(result)

Ausgabeergebnis


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

Besserer Code

If-Anweisung wird zu einem ternären Operator. Es scheint, dass der Name in der Liste nicht gut ist, also habe ich ihn korrigiert.

Code


input_str = 'Hi He Lied Because Boron Could Not Oxidize Fluorine. New Nations Might Also Sign Peace Security Clause. Arthur King Can.'
single_list = [1, 5, 6, 7, 8, 9, 15, 16, 19]
result = {}
input_str = input_str.split()
for index, s in enumerate(input_str):
    l = 1 if index + 1 in single_list else 2
    result[s[:l]] = index
print(result)
  1. 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.

Code


input_str = 'I am an NLPer'

def create_word_n_gram(input_str, num):
    str_list = input_str.split(' ')
    results = []
    for i in range(len(str_list) - num + 1):
        ngram = ''
        for j in range(num):
            ngram += str_list[j + i]
        results.append(ngram)
    return results

def create_char_n_gram(input_str, num):
    str_no_space = input_str.replace(' ', '')
    results = []
    for i in range(len(str_no_space) - num + 1):
        ngram = ''
        for j in range(num):
            ngram += str_no_space[j + i]
        results.append(ngram)
    return results

print(create_word_n_gram(input_str, 2))
print(create_char_n_gram(input_str, 2))

Ausgabeergebnis


['Iam', 'aman', 'anNLPer']
['Ia', 'am', 'ma', 'an', 'nN', 'NL', 'LP', 'Pe', 'er']

Besserer Code

Das Zeichen n-Gramm enthält auch Leerzeichen. Ich habe immer falsch verstanden. .. .. Das Wort n-Gramm wurde korrigiert, da das Ausgabeformat nicht korrekt ist.

Code


input_str = 'I am an NLPer'

def create_word_n_gram(input_str, num):
    str_list = input_str.split(' ')
    results = []
    for i in range(len(str_list) - num + 1):
        results.append(str_list[i:i + num])
    return results

def create_char_n_gram(input_str, num):
    results = []
    for i in range(len(input_str) - num + 1):
        results.append(input_str[i:i + num])
    return results

print(create_word_n_gram(input_str, 2))
print(create_char_n_gram(input_str, 2))

Ausgabeergebnis


[['I', 'am'], ['am', 'an'], ['an', 'NLPer']]
['I ', ' a', 'am', 'm ', ' a', 'an', 'n ', ' N', 'NL', 'LP', 'Pe', 'er']

06. Treffen

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.

Code


input_str_x = 'paraparaparadise'
input_str_y = 'paragraph'
word = 'se'

def create_char_n_gram(input_str, num):
    str_no_space = input_str.replace(' ', '')
    results = []
    for i in range(len(str_no_space) - num + 1):
        ngram = ''
        for j in range(num):
            ngram += str_no_space[j + i]
        results.append(ngram)
    return results

def calculate_union(list_x, list_y):
    list_union = list(set(list_x + list_y))
    return list_union

def calculate_intersection(list_x, list_y):
    list_sum = list_x + list_y
    list_intersection = [elem for elem in set(list_sum) if list_sum.count(elem) > 1]
    return list_intersection

def calculate_difference(list_x, list_y):
    list_intersection = calculate_intersection(list_x, list_y)
    list_sum = list_x + list_intersection
    list_difference = [elem for elem in set(list_sum) if list_sum.count(elem) == 1]
    return list_difference

def check_including_word(word_list, word):
    if word in word_list:
        return True
    else:
        return False

x = create_char_n_gram(input_str_x, 2)
y = create_char_n_gram(input_str_y, 2)

print(calculate_union(x, y))
print(calculate_intersection(x, y))
print(calculate_difference(x, y))
print(check_including_word(x, word))
print(check_including_word(y, word))

Ausgabeergebnis


['ar', 'ag', 'gr', 'is', 'ph', 'se', 'pa', 'di', 'ap', 'ad', 'ra']
['ar', 'pa', 'ap', 'ra']
['is', 'se', 'di', 'ad']
True
False

Besserer Code

Wenn Sie es auf set setzen, können Sie Set-Operationen ausführen. Ich brauchte keine Funktion ... Die Prüffunktion ist auch ziemlich redundant. Sie sollten dies beim Schreiben bemerken.

Code


input_str_x = 'paraparaparadise'
input_str_y = 'paragraph'
word = 'se'

def create_char_n_gram(input_str, num):
    results = []
    for i in range(len(input_str) - num + 1):
        results.append(input_str[i:i + num])
    return results

x = set(create_char_n_gram(input_str_x, 2))
y = set(create_char_n_gram(input_str_y, 2))

print(x | y)
print(x - y)
print(x & y)
print(word in x)
print(word in y)

07. Anweisungsgenerierung nach Vorlage

Implementieren Sie eine Funktion, die die Argumente x, y, z verwendet und die Zeichenfolge "y bei x ist z" zurückgibt. Setzen Sie außerdem x = 12, y = "Temperatur", z = 22,4 und überprüfen Sie das Ausführungsergebnis.

Code


x = 12
y = 'Temperatur'
z = 22.4

def create_str(x, y, z):
    return str(x) + 'von Zeit' + y + 'Ist' + str(z)
    
print(create_str(x, y, z))

Ausgabeergebnis


Die Temperatur um 12 Uhr ist 22.4

Besserer Code

Ich denke, es gibt verschiedene Möglichkeiten, Zeichenketten hinzuzufügen, aber es scheint, dass es keine größeren Änderungen geben wird.

08. Kryptographie

Implementieren Sie die Funktionsverschlüsselung, die jedes Zeichen der angegebenen Zeichenfolge gemäß den folgenden Spezifikationen konvertiert.

Durch Kleinbuchstaben ersetzen (219 - Zeichencode) Geben Sie andere Zeichen so aus, wie sie sind Verwenden Sie diese Funktion, um englische Nachrichten zu verschlüsseln / entschlüsseln.

Code


input_str = 'Now I need a drink, alcoholic of course, after the heavy lectures involving quantum mechanics.'

def cipher(input_str):
    result = list(map(lambda e: chr(219 - ord(e)) if e.islower() else e, input_str))
    return ''.join(result)

print(cipher(input_str))
print(cipher(cipher(input_str)))

Ausgabeergebnis


Nld I mvvw z wirmp, zoxlslorx lu xlfihv, zugvi gsv svzeb ovxgfivh rmeloermt jfzmgfn nvxszmrxh.
Now I need a drink, alcoholic of course, after the heavy lectures involving quantum mechanics.

Besserer Code

Es ist unwahrscheinlich, dass sich daran viel mehr ändert. Richtig "entschlüsseln" statt "entschlüsseln". Ich dachte, aber jetzt scheint es, dass "Entschlüsselung" auch häufig verwendet wird ...

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

Code


import random
input_str = "I couldn't believe that I could actually understand what I was reading : the phenomenal power of the human mind ."

def create_typoglycemia(input_str):
    input_str_list = input_str.split(' ')
    result = []
    for word in input_str_list:
        length = len(word)
        if length > 4:
            first_char = word[0]
            last_char = word[length - 1]
            random_str = ''.join(random.sample(list(word[1:length - 1]), length - 2))
            result.append(word[0] + random_str + word[length - 1])
        else:
            result.append(word)
    return ' '.join(result)

print(create_typoglycemia(input_str))

Ausgabeergebnis


I cunldo't biveele that I culod aclatluy urdseanntd what I was rdineag : the pehaneomnl pewor of the huamn mind .

Besserer Code

Löschen Sie Variablen, die nur einmal verwendet werden, obwohl sie definiert sind, und Variablen, die überhaupt nicht verwendet werden, obwohl sie definiert sind.

Code


import random
input_str = "I couldn't believe that I could actually understand what I was reading : the phenomenal power of the human mind ."

def create_typoglycemia(input_str):
    result = []
    for word in input_str.split(' '):
        length = len(word)
        if length > 4:
            random_str = ''.join(random.sample(word[1:length - 1], length - 2))
            result.append(word[0] + random_str + word[length - 1])
        else:
            result.append(word)
    return ' '.join(result)

print(create_typoglycemia(input_str))

abschließend

Ich werde den Artikel von 100 Language Processing Knock 2015 (Python), der auf Qiita veröffentlicht wurde, als Referenz zusammenfassen.

Recommended Posts

Nachdem ich 2015 100 Sprachverarbeitungsklopfen gemacht hatte, bekam ich viele grundlegende Python-Fähigkeiten, Kapitel 1
Rehabilitation von Python- und NLP-Kenntnissen ab "100 Language Processing Knock 2015" (Kapitel 1)
100 Sprachverarbeitung Knock Kapitel 2 (Python)
Rehabilitation von Python- und NLP-Kenntnissen ab "Knock 100 Language Processing 2015" (Kapitel 2, zweite Hälfte)
Rehabilitation von Python- und NLP-Kenntnissen ab "100 Language Processing Knock 2015" (Kapitel 2, erste Hälfte)
100 Sprachverarbeitungsklopfen mit Python (Kapitel 1)
100 Sprachverarbeitung Knock Kapitel 1 in Python
Ich habe versucht, 100 Sprachverarbeitung klopfen 2020: Kapitel 3
100 Sprachverarbeitungsklopfen mit Python (Kapitel 3)
Ich habe versucht, 100 Sprachverarbeitung klopfen 2020: Kapitel 1
100 Sprachverarbeitung Knock Kapitel 1 von Python
Ich habe versucht, 100 Sprachverarbeitung zu klopfen 2020: Kapitel 2
Ich habe versucht, 100 Sprachverarbeitung zu klopfen 2020: Kapitel 4
100 Sprachverarbeitungsklopfen mit Python (Kapitel 2, Teil 2)
100 Sprachverarbeitungsklopfen mit Python (Kapitel 2, Teil 1)
100 Sprachverarbeitung Knock 2020 Kapitel 1
100 Sprachverarbeitung Knock Kapitel 1
100 Sprachverarbeitung Knock 2020 Kapitel 2
[Kapitel 5] Einführung in Python mit 100 Klopfen Sprachverarbeitung
[Kapitel 2] Einführung in Python mit 100 Klopfen Sprachverarbeitung
[Kapitel 4] Einführung in Python mit 100 Klopfen Sprachverarbeitung
100 Sprachverarbeitungsklopfen mit Python 2015
Ich habe versucht, 100 Sprachverarbeitung klopfen 2020
Ich möchte viele Prozesse von Python aus starten
100 Sprachverarbeitung Knock 2020 Kapitel 2: UNIX-Befehle
100 Sprachverarbeitung Knock 2015 Kapitel 5 Abhängigkeitsanalyse (40-49)
100 Sprachverarbeitung Knock 2020 Kapitel 4: Morphologische Analyse
100 Sprachverarbeitung Knock 2020 Kapitel 9: RNN, CNN
Ich habe versucht, die Version 2020 mit 100 Sprachverarbeitung zu lösen [Kapitel 2: UNIX-Befehle 10-14]
Ich habe viele Dateien für die RDP-Verbindung mit Python erstellt
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 5: Abhängigkeitsanalyse
100 Sprachverarbeitung Knock 2020 Kapitel 7: Word Vector
100 Sprachverarbeitung Knock-59: Analyse der S-Formel
Python-Anfänger versucht 100 Sprachverarbeitung klopfen 2015 (05 ~ 09)
Ich werde eine detaillierte Erklärung zum Tod schreiben, während ich 100 Python für die Verarbeitung natürlicher Sprache 2020 mit Python löse
Ich habe versucht, die Version 2020 mit 100 Sprachverarbeitung zu lösen [Kapitel 2: UNIX-Befehle 15-19]
100 Sprachverarbeitung Knock 2020 Kapitel 1: Vorbereitende Bewegung
100 Sprachverarbeitung Knock 2020 Kapitel 3: Reguläre Ausdrücke
100 Language Processing Knock 2015 Kapitel 4 Morphologische Analyse (30-39)
Ich habe viel recherchiert, wie Python ausgeführt wird
Python-Anfänger versucht 100 Sprachverarbeitung klopfen 2015 (00 ~ 04)
Ich habe versucht, die Version 2020 mit 100 Sprachverarbeitung zu lösen [Kapitel 3: Reguläre Ausdrücke 25-29]
Ich habe eine Art einfaches Bildverarbeitungswerkzeug in der Sprache Go erstellt.
Eine Erinnerung an das, was ich beim Starten von Atcoder mit Python feststeckte
Python: Ich möchte die Verarbeitungszeit einer Funktion genau messen
Ich habe mit GiNZA v3.1 Kapitel 4 100 Sprachverarbeitungsklopfen 2020 durchgeführt
100 Sprachverarbeitung Knock-91: Vorbereitung von Analogiedaten
Sprachverarbeitung 100 Knocks-44: Visualisierung abhängiger Bäume
100 Sprachverarbeitung Knock-26: Entfernen von hervorgehobenem Markup
Verbinde viel Python oder und und
Ich habe eine funktionale Sprache mit Python ausprobiert
[Programmierer-Neuling "100 Sprachverarbeitung klopfen 2020"] Lösen Sie Kapitel 1
Die Geschichte der Verarbeitung A von Blackjack (Python)
Nachdem ich Python3 studiert hatte, machte ich einen Slackbot
100 Sprachverarbeitung Knock-34 (mit Pandas): "B von A"
Ich habe versucht, die 2020-Version von 100 Sprachverarbeitungsproblemen zu lösen [Kapitel 3: Reguläre Ausdrücke 20 bis 24]
Ich habe versucht, die 2020-Version von 100 Sprachverarbeitungsproblemen zu lösen [Kapitel 1: Vorbereitungsbewegung 00-04]