[PYTHON] [Sprachverarbeitung 100 Schläge 2020] Kapitel 1: Vorbereitende Bewegung

Einführung

Version 2020 von 100 Klopfen der Sprachverarbeitung, die als Sammlung von Problemen der Verarbeitung natürlicher Sprache bekannt ist, wurde veröffentlicht. Dieser Artikel fasst die Ergebnisse der Lösung von Kapitel 1: Vorbereitende Bewegung aus den folgenden Kapiteln 1 bis 10 zusammen. ..

--Kapitel 1: Vorbereitende Bewegung

Vorbereitungen

Wir verwenden Google Colaboratory für Antworten. Weitere Informationen zum Einrichten und Verwenden von Google Colaboratory finden Sie in diesem Artikel. Das Notizbuch mit den Ausführungsergebnissen der folgenden Antworten ist unter [github] verfügbar (https://github.com/hana-mame/nlp100/blob/master/chapter01.ipynb).

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

str = 'stressed'
ans = str[::-1]

print(ans)

Ausgabe


desserts

String mit Python extrahieren

01. "Patatokukashi"

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

str = 'Patatoku Kashii'
ans = str[::2]

print(ans)

Ausgabe


Pat Auto

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

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

str1 = 'Pat Auto'
str2 = 'Taxi'
ans = ''.join([i + j for i, j in zip(str1, str2)])

print(ans)

Ausgabe


Patatoku Kashii

Verwendung von Python- und Zip-Funktionen: Mehrere Listenelemente gleichzeitig abrufen Verwendung der Python-Listeneinschlussnotation Strings mit Python verketten und kombinieren

03. Umfangsrate

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

import re

str = 'Now I need a drink, alcoholic of course, after the heavy lectures involving quantum mechanics.'
str = re.sub('[,\.]', '', str)  # ,Wann.Entfernen
splits = str.split()  #Erstellen Sie eine wortweise Liste, die durch Leerzeichen getrennt ist
ans = [len(i) for i in splits]

print(ans)

Ausgabe


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

Zeichenfolge durch Python ersetzen Zeichenfolgen in Python teilen Ermitteln Sie die Größe von Objekten verschiedener Typen mit der len-Funktion von Python

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.

str = 'Hi He Lied Because Boron Could Not Oxidize Fluorine. New Nations Might Also Sign Peace Security Clause. Arthur King Can.'
splits = str.split()
one_ch = [1, 5, 6, 7, 8, 9, 15, 16, 19]  #Nummernliste der Wörter, um ein Zeichen zu extrahieren
ans = {}
for i, word in enumerate(splits):
  if i + 1 in one_ch:
    ans[word[:1]] = i + 1  #Holen Sie sich 1 Zeichen, wenn in der Liste
  else:
    ans[word[:2]] = i + 1  #Wenn nicht, erhalten Sie 2 Zeichen
    
print(ans)

Ausgabe


{'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}

Schleifenverarbeitung durch Python für Anweisung Verwendung von Python, Aufzählung: Abrufen von Listenelementen und Indizes Wie man eine bedingte Verzweigung mit einer if-Anweisung in Python schreibt Dict () und Wave-Klammern zum Erstellen eines Wörterbuchs in Python, Wörterbucheinschlussnotation

  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.

def ngram(n, lst):
    return set(zip(*[lst[i:] for i in range(n)]))

str = 'I am an NLPer'
words_bi_gram = ngram(2, str.split())
chars_bi_gram = ngram(2, str)

print('Wort bi-gram:', words_bi_gram)
print('Zeichen bi-gram:', chars_bi_gram)

Ausgabe


Wort bi-gram: {('am', 'an'), ('I', 'am'), ('an', 'NLPer')}
Zeichen bi-gram: {('I', ' '), (' ', 'N'), ('e', 'r'), ('a', 'm'), (' ', 'a'), ('n', ' '), ('L', 'P'), ('m', ' '), ('P', 'e'), ('N', 'L'), ('a', 'n')}

Funktionen in Python definieren und aufrufen Python, Set-Operation mit Set-Typ

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.

Hier wird die in 05 erstellte Funktion ngram wiederverwendet.

str1 = 'paraparaparadise'
str2 = 'paragraph'
X = ngram(2, str1)
Y = ngram(2, str2)
union = X | Y
intersection = X & Y
difference = X - Y

print('X:', X)
print('Y:', Y)
print('Summensatz:', union)
print('Produktset:', intersection)
print('Differenz gesetzt:', difference)
print('Enthält X se:', {('s', 'e')} <= X)
print('Enthält Y se:', {('s', 'e')} <= Y)

Ausgabe


X: {('a', 'r'), ('a', 'p'), ('s', 'e'), ('p', 'a'), ('r', 'a'), ('i', 's'), ('d', 'i'), ('a', 'd')}
Y: {('p', 'h'), ('a', 'r'), ('a', 'p'), ('p', 'a'), ('g', 'r'), ('r', 'a'), ('a', 'g')}
Summensatz: {('p', 'h'), ('a', 'r'), ('a', 'p'), ('s', 'e'), ('p', 'a'), ('g', 'r'), ('r', 'a'), ('i', 's'), ('a', 'g'), ('d', 'i'), ('a', 'd')}
Produktset: {('p', 'a'), ('r', 'a'), ('a', 'r'), ('a', 'p')}
Differenz gesetzt: {('d', 'i'), ('i', 's'), ('a', 'd'), ('s', 'e')}
Enthält X se: True
Enthält Y se: False

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. Stellen Sie außerdem x = 12, y = "Temperatur", z = 22,4 ein und überprüfen Sie das Ausführungsergebnis.

def generate_sentence(x, y, z):
  print('{}Damals{}Ist{}'.format(x, y, z))

generate_sentence(12, 'Temperatur', 22.4)

Ausgabe


Um 12 Uhr ist die Temperatur 22.4

Formatkonvertierung mit Python, Format

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.

def cipher(str):
  rep = [chr(219 - ord(x)) if x.islower() else x for x in str]
  
  return ''.join(rep)

message = 'the quick brown fox jumps over the lazy dog'
message = cipher(message)
print('Verschlüsselung:', message)
message = cipher(message)
print('Entschlüsselung:', message)

Ausgabe


Verschlüsselung: gsv jfrxp yildm ulc qfnkh levi gsv ozab wlt
Entschlüsselung: the quick brown fox jumps over the lazy dog

Unicode-Codepunkte und -Zeichen mit Python konvertieren Liste der Zeichenkettenmethoden zur Bearbeitung von Groß- und Kleinbuchstaben in Python

  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.

import random

def shuffle(words):
  splits = words.split()
  if len(splits) > 4:
    splits = splits[:1] + random.sample(splits[1:-1], len(splits) - 2) + splits[-1:]

  return ' '.join(splits)

words = "I couldn't believe that I could actually understand what I was reading : the phenomenal power of the human mind."
ans = shuffle(words)

print(ans)

Ausgabe


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

Listenelemente mit Python mischen

abschließend

Sprachverarbeitung 100 Klopfen sind so konzipiert, dass Sie nicht nur die Verarbeitung natürlicher Sprache selbst lernen können, sondern auch die grundlegende Datenverarbeitung und das allgemeine maschinelle Lernen. Sogar diejenigen, die maschinelles Lernen in Online-Kursen studieren, können sehr gute Ergebnisse erzielen. Probieren Sie es also bitte aus.

Recommended Posts

[Sprachverarbeitung 100 Schläge 2020] Kapitel 1: Vorbereitende Bewegung
100 Sprachverarbeitungsklopfen: Kapitel 1 Vorbereitungsbewegung
100 Sprachverarbeitung Knock 2020 Kapitel 1: Vorbereitende Bewegung
100 natürliche Sprachverarbeitung klopft Kapitel 1 Vorbereitungsbewegung (zweite Hälfte)
100 natürliche Sprachverarbeitung klopft Kapitel 1 Vorbereitungsbewegung (erste Hälfte)
100 Sprachverarbeitung klopft Kapitel 2 (10 ~ 19)
100 Klopfen der Verarbeitung natürlicher Sprache Kapitel 1 (Vorbereitungsbewegung)
100 Sprachverarbeitungsklopfen 03 ~ 05
100 Sprachverarbeitungsklopfen (2020): 32
100 Sprachverarbeitungsklopfen (2020): 35
[Sprachverarbeitung 100 Schläge 2020] Kapitel 3: Reguläre Ausdrücke
100 Sprachverarbeitungsklopfen (2020): 47
100 Sprachverarbeitungsklopfen (2020): 39
100 Klicks in der Verarbeitung natürlicher Sprache Kapitel 4 Kommentar
[Sprachverarbeitung 100 Schläge 2020] Kapitel 6: Maschinelles Lernen
100 Sprachverarbeitungsklopfen (2020): 22
100 Sprachverarbeitungsklopfen (2020): 26
100 Sprachverarbeitungsklopfen (2020): 34
100 Sprachverarbeitungsklopfen (2020): 42
100 Sprachverarbeitungsklopfen (2020): 29
100 Sprachverarbeitungsklopfen (2020): 49
100 Sprachverarbeitungsklopfen 06 ~ 09
100 Sprachverarbeitungsklopfen (2020): 43
100 Sprachverarbeitungsklopfen (2020): 24
100 Sprachverarbeitungsklopfen (2020): 45
100 Sprachverarbeitungsklopfen (2020): 10-19
[Sprachverarbeitung 100 Schläge 2020] Kapitel 7: Wortvektor
100 Sprachverarbeitungsklopfen (2020): 30
100 Sprachverarbeitungsklopfen (2020): 00-09
100 Sprachverarbeitung klopfen 2020: Kapitel 3 (regulärer Ausdruck)
100 Sprachverarbeitungsklopfen (2020): 31
[Sprachverarbeitung 100 Schläge 2020] Kapitel 8: Neuronales Netz
100 Sprachverarbeitungsklopfen (2020): 48
[Sprachverarbeitung 100 Schläge 2020] Kapitel 2: UNIX-Befehle
100 Sprachverarbeitungsklopfen (2020): 44
100 Sprachverarbeitungsklopfen (2020): 41
100 Sprachverarbeitungsklopfen (2020): 37
[Sprachverarbeitung 100 Schläge 2020] Kapitel 9: RNN, CNN
100 Sprachverarbeitungsklopfen (2020): 25
100 Sprachverarbeitungsklopfen (2020): 23
100 Sprachverarbeitungsklopfen (2020): 33
100 Sprachverarbeitungsklopfen (2020): 20
100 Sprachverarbeitungsklopfen (2020): 27
[Sprachverarbeitung 100 Schläge 2020] Kapitel 4: Morphologische Analyse
100 Sprachverarbeitungsklopfen (2020): 46
100 Sprachverarbeitungsklopfen (2020): 21
100 Sprachverarbeitungsklopfen (2020): 36
Ich habe versucht, die 2020-Version von 100 Sprachverarbeitungsproblemen zu lösen [Kapitel 1: Vorbereitungsbewegung 00-04]
Ich habe versucht, die 2020-Version von 100 Sprachverarbeitungsproblemen zu lösen [Kapitel 1: Vorbereitungsbewegung 05-09]
100 Amateur-Sprachverarbeitungsklopfen: 41
100 Amateur-Sprachverarbeitungsklopfen: 71
100 Amateur-Sprachverarbeitungsklopfen: 56
100 Amateur-Sprachverarbeitungsklopfen: 24
100 Amateur-Sprachverarbeitungsklopfen: 50
100 Amateur-Sprachverarbeitungsklopfen: 59
100 Amateur-Sprachverarbeitungsklopfen: 70
NLP100: Kapitel 1 Vorbereitungsbewegung
100 Amateur-Sprachverarbeitungsklopfen: 62
100 Amateur-Sprachverarbeitungsklopfen: 60
100 Sprachverarbeitung Knock 2020 Kapitel 1
100 Amateur-Sprachverarbeitungsklopfen: 92