["Kapitel 1: Vorbereitende Bewegung"](http: //www.cl.ecei.) Von Language Processing 100 Knock 2015 Es ist eine Aufzeichnung von tohoku.ac.jp/nlp100/#ch1). Dies ist eine Überprüfung dessen, was ich vor über einem Jahr getan habe. Wenn ich mir den Code zu diesem Zeitpunkt noch einmal anschaue, gibt es viele Korrekturen, und es scheint, dass es mein eigenes Wachstum ist. Ich habe das Gefühl, dass die Menge an Code auf etwa die Hälfte des damaligen Programms reduziert wurde. Und jetzt, da ich etwas Python-Erfahrung habe, ist es ein ** gutes Tutorial, um Python und Sprachverarbeitung ** zu lernen. Im Vergleich zur zweiten Hälfte ist ein Schlag leichter, was genau der Name "Vorbereitungsbewegung" verdient.
Art | Ausführung | Inhalt |
---|---|---|
OS | Ubuntu18.04.01 LTS | Es läuft virtuell |
pyenv | 1.2.15 | Ich benutze pyenv, weil ich manchmal mehrere Python-Umgebungen benutze |
Python | 3.6.9 | python3 auf pyenv.6.Ich benutze 9 3.7 oder 3.Es gibt keinen tiefen Grund, keine 8er-Serie zu verwenden Pakete werden mit venv verwaltet |
Überprüfen Sie einige fortgeschrittene Themen in Programmiersprachen, während Sie an Themen arbeiten, die sich mit Text und Zeichenfolgen befassen.
String, Unicode, Listentyp, Wörterbuchtyp, Sammeltyp, Iterator, Slice, Zufallszahl
Holen Sie sich eine Zeichenfolge, in der die Zeichen der Zeichenfolge "betont" umgekehrt angeordnet sind (vom Ende bis zum Anfang).
Geben Sie Slices mit "[start: stop: step]" an und setzen Sie sie auf negative Zahlen, um die Reihenfolge umzukehren.
python:000.Umgekehrte Reihenfolge der Zeichenfolgen.ipynb
print('stressed'[::-1])
Ergebnis der Terminalausgabe
desserts
Nehmen Sie das 1., 3., 5. und 7. Zeichen der Zeichenkette "Patatokukashi" heraus und erhalten Sie die verkettete Zeichenkette.
Geben Sie das Slice mit "[start: stop: step]" an und geben Sie das 8. Zeichen von Anfang an in 2 Zeichenschritten aus.
python:001."Patatoku Cassie".ipynb
print('Patatoku Kashii'[0:7:2])
Ergebnis der Terminalausgabe
Pat Auto
Erhalten Sie die Zeichenkette "Patatokukashi", indem Sie die Zeichen "Pattocar" + "Tax" von Anfang an abwechselnd verbinden.
Verwenden Sie die Funktion "zip", um die beiden Wörter "Streifenwagen" und "Taxi" zu wiederholen und sie in Einschlussnotation als "['pata', 'toku', 'kashi', 'ー']" aufzulisten. Ausgabe durch Verbinden der Liste mit der Join-Funktion. Ich verstehe die Zip-Funktion in meinem Kopf, aber es ist eine Art Befehl, den ich in der Sprache noch nicht erlebt habe. Daher ist es schwierig, auf die Idee zu kommen, sie zu verwenden.
python:002."Pat car" + "Tax" = "Patatokukashi".ipynb
result = [char1+char2 for char1, char2 in zip('Pat Auto', 'Taxi')]
print(''.join(result))
Ergebnis der Terminalausgabe
Patatoku Kashii
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.
Verwenden Sie die Funktion "Teilen", um den Raum zu teilen. Es ist ein sehr nützlicher Typ in der englischen Sprachverarbeitung. Die Funktion "Streifen" entfernt die Kommas und Punkte am Ende von Wörtern.
python:003.Pi.ipynb
sentence = 'Now I need a drink, alcoholic of course, after the heavy lectures involving quantum mechanics.'
for word in sentence.split():
print(len(word.strip(',.')), word.strip(',.'))
Die Anzahl der Zeichen ist das Umfangsverhältnis, nicht wahr?
Ergebnis der Terminalausgabe
3 Now
1 I
4 need
1 a
5 drink
9 alcoholic
2 of
6 course
5 after
3 the
5 heavy
8 lectures
9 involving
7 quantum
9 mechanics
Brechen 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 auf. Das 19. Wort ist das erste Zeichen, und die anderen Wörter sind die ersten beiden Zeichen. Erstellen.
Ich verwende den enthaltenen Wörterbuchtyp (es fiel mir schwer, nicht zu wissen, wie ich ihn mit der if-Anweisung kombinieren soll). Das Wörterbuch ist so sortiert, dass die Ausgabe in der Reihenfolge der Elementsymbole erfolgt. Schließlich habe ich "pprint" für die Ausgabe verwendet, weil ich jedes Element brechen wollte.
python:004.Elementsymbol.ipynb
from pprint import pprint
sentence = 'Hi He Lied Because Boron Could Not Oxidize Fluorine. New Nations Might Also Sign Peace Security Clause. Arthur King Can.'
word_list = sentence.split()
result = ({word[0] if i in {1, 5, 6, 7, 8, 9, 15, 16, 19} else word[:2]: i for i, word in enumerate(word_list, 1)})
pprint(sorted(result.items(), key=lambda x:x[1]))
Ergebnis der Terminalausgabe
[('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)]
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.
Geht es darum, "range" in "for" als neues technisches Element zu verwenden?
python:005.n-gram.ipynb
def generate_ngram(sentence):
#Liste durch Teilen mit Leerzeichen
words = sentence.split()
#Rohlingsentfernung
chars = sentence.replace(' ','')
#Wort bi-Gramm Generation
bigram_word = [words[i-1] + ' ' + words[i] for i in range(len(words)) if i > 0]
#Zeichen bi-Gramm Generation
bigram_char = [chars[i-1] + chars[i] for i in range(len(chars)) if i > 0]
return bigram_word, bigram_char
print(generate_ngram('I am an NLPer'))
Ergebnis der Terminalausgabe
(['I am', 'am an', 'an NLPer'], ['Ia', 'am', 'ma', 'an', 'nN', 'NL', 'LP', 'Pe', 'er'])
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.
In Python gibt es etwas, das als "Menge" bezeichnet wird, und es scheint, dass Sie die Summenmenge, die Produktmenge und die Differenzmenge leicht finden können.
python:006.einstellen.ipynb
def generate_ngram(sentense):
#Rohlingsentfernung
chars = sentense.replace(' ','')
#Zeichen bi-Gramm Generation
bigram_char = [chars[i-1] + chars[i] for i in range(len(chars)) if i > 0]
return bigram_char
bigram_x = set(generate_ngram('paraparaparadise'))
bigram_y = set(generate_ngram('paragraph'))
#Summensatz
print(bigram_x.union(bigram_y))
#Produktset
print(bigram_x.intersection(bigram_y))
#Differenz gesetzt
print(bigram_x.difference(bigram_y))
search_word = {'se'}
print(search_word.intersection(bigram_x))
print(search_word.intersection(bigram_y))
Ergebnis der Terminalausgabe
{'ag', 'ap', 'se', 'ra', 'is', 'pa', 'ad', 'ph', 'di', 'ar', 'gr'}
{'pa', 'ar', 'ap', 'ra'}
{'ad', 'se', 'di', 'is'}
{'se'}
set()
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.
Zeichen wurden mit +
kombiniert. {} Zum Zeitpunkt von '' {} kann {} 'sein. Format (x, y, z) `.
python:007.Anweisungserstellung nach Vorlage.ipynb
def create_sentence(x,y,z):
return str(x) + 'von Zeit' + str(y) + 'Ist' + str(z)
print(create_sentence(12, 'Temperatur', 22.4))
Ergebnis der Terminalausgabe
Die Temperatur um 12 Uhr ist 22.4
Implementieren Sie die Funktionsverschlüsselung, die jedes Zeichen der angegebenen Zeichenfolge mit den folgenden Spezifikationen konvertiert.
- Durch Kleinbuchstaben (219 - Zeichencode) ersetzen
- Andere Zeichen werden so ausgegeben, wie sie sind
Verwenden Sie diese Funktion, um englische Nachrichten zu verschlüsseln / entschlüsseln.
"219 - Zeichencode" scheint so etwas zu bedeuten.
Der Zeichencode von a ist 97, und wenn in dieser Verschlüsselung 219 - 97 = 122 eingestellt ist, wird der Zeichencode zu 122, was z ist.
Der Zeichencode von z ist 122, und wenn in dieser Verschlüsselung 219 - 122 = 97 eingestellt ist, ist der Zeichencode 97 a.
Mit anderen Worten, es ist eine Verschlüsselung, die die unteren römischen Buchstaben a bis z in der umgekehrten Reihenfolge von z bis a ersetzt.
Verwenden Sie die integrierte Funktion chr
, um den Zeichencode zu steuern.
Ich habe mich gefragt, ob ich die Einschlussnotation verwenden soll, aber ich habe sie gestoppt, weil es schwierig zu sein scheint, als letztes Mitglied zu werden.
python:008.Geheimtext.ipynb
def cipher(sentence):
result = ''
for char in sentence:
if char.islower():
result += chr(219-ord(char))
else:
result += char
return result
print(cipher('I Am An Idiot'))
Ergebnis der Terminalausgabe
I An Am Iwrlg
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.
Es ist ein Phänomen, dass einige Wörter in einem Satz korrekt gelesen werden können, auch wenn die Reihenfolge außer dem ersten und dem letzten Buchstaben geändert wird.
Ich verstehe, du kannst es irgendwie lesen. Die Zeichen werden mit der Shuffle-Funktion des Random-Pakets neu angeordnet.
python:009.Typoglycemia.ipynb
from random import shuffle
def typoglycemia(word):
mid_chars = list(word[1:-1])
shuffle(mid_chars)
return word[0] + ''.join(mid_chars) + word[-1]
sentence = "I couldn't believe that I could actually understand what I was reading : the phenomenal power of the human mind ."
' '.join([word if len(word) <= 4 else typoglycemia(word) for word in sentence.split(' ')])
Ergebnis der Terminalausgabe
"I cul'dnot beilvee that I culod altualcy udnnrseatd what I was riadeng : the paemhnenol peowr of the hmuan mind ."
Recommended Posts